netstat -[rn]
netstat -[antulpc] <==与网路介面有关的参数参数:
与路由 (route) 有关的参数说明:
-r :列出路由表(route table),功能如同 route 这个指令;
-n :不使用主机名称与服务名称,使用 IP 与 port number ,如同 route -n
与网路介面有关的参数:
-a :列出所有的连线状态,包括 tcp/udp/unix socket 等;
-t :仅列出 TCP 封包的连线;
-u :仅列出 UDP 封包的连线;
-l :仅列出有在 Listen (监听) 的服务之网路状态;
-p :列出 PID 与 Program 的档名;
-c :可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网路状态的显示;
-v :显示正在进行的工作。
下面这个语句是一个非常好的查看TCP连接状态的语句:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
返回结果示例:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。
1)、LISTEN:首先服务端需要打开一个socket进行监 听,状态为LISTEN.
2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.
3)、SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV
4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。
5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态.
6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.
7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2 .
8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束 符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK .
9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。
10)、CLOSING: 比较少见.
11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束.
12)、UNKNOWN: 未知的Socket状态。
SYN : (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。ACK : (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
FIN : (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。
PS:在windows下有个小工具挺好的,TCPView is a Windows program that will show you detailed listings of all TCP and UDP endpoints on your system, including the local and remote addresses and state of TCP connections.见 http://technet.microsoft.com/en-us/sysinternals/bb897437 ;当然如果要详细分析数据包,可选用sniffer、Wireshark等更强大的工具