netstat命令的介绍
Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。比如你可以确认你系统的某个服务有没有起来,或者查看某个端口有没有打开。
命令的用法
- 列出所有的连接
netstat -a
- Proto 指用了什么协议
- Recv-Q 指这个连接接收了多少数据包
- Send-Q 指这个连接发送了多少数据包
- Local Address 指你本地的地址
- Foreign Address 指你的远程主机的地址
- State 指连接的状态
- 列出TCP协议的连接
netstat -t - 列出UDP协议的连接
netstat -u - 禁止反向域名解析,加快查询速度(默认情况下,netstat会通过反向域名解析技术查找每个IP地址对应的主机名,这会降低效率)
netstat -n - 只列出监听中的连接
netstat -l - 获取进程名、进程号以及用户
netstat -ep- 如果-n -e一起使用,User列的属性是用户的id 而不是用户名
- 打印统计数据
netstat -s
命令的状态详解
- CLOSED
初始(无连接)状态。 - LISTEN
侦听状态,等待远程机器的连接请求 - SYN_SEND
在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。 - SYN_RECV
在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。 - ESTABLISHED
完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信 - FIN_WAIT_1
在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。 - FIN_WAIT_2
在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。 - TIME_WAIT
在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。 - CLOSING
在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。 - CLOSE_WAIT
在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。 - LAST_ACK
在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
- 主动连接端可能的状态有:
- CLOSED
- SYN_SEND
- ESTABLISHED。
- 主动关闭端可能的状态有:
- FIN_WAIT_1
- FIN_WAIT_2
- TIME_WAIT。
- 被动连接端可能的状态有:
- LISTEN
- SYN_RECV
- ESTABLISHED。
- 被动关闭端可能的状态有:
- CLOSE_WAIT
- LAST_ACK
- CLOSED。
TCP三次握手的过程如下:
- 主动连接端发送一个SYN包给被动连接端;
- 被动连接端收到SYN包后,发送一个带ACK和SYN标志的包给主动连接端;
- 主动连接端发送一个带ACK标志的包给被动连接端,握手动作完成。
TCP四次挥手的过程如下:
- 主动关闭端发送一个FIN包给被动关闭端;
- 被动关闭端收到FIN包后,发送一个ACK包给主动关闭端;
- 被动关闭端发送了ACK包后,再发送一个FIN包给主动关闭端;
- 主动关闭端收到FIN包后,发送一个ACK包,当被动关闭端收到ACK包后,四次挥手动作完成,连接断开。