Netstat 状态分类 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

netstat -an 命令查看!再 stat 下面有一些英文,简单说一下这些英文具体都代表什么:

LISTEN (Listening for a connection.) 侦听来自远方的 TCP 端口的连接请求

SYN-SENT (Active; sent SYN. Waiting for a matching connection request after having sent a connection request.) 再发送连接请求后等待匹配的连接请求

SYN-RECEIVED (Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.) 再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED (Connection established.) 代表一个打开的连接

FIN-WAIT-1 (Closed; sent FIN.) 等待远程 TCP 连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2 (Closed; FIN is acknowledged; awaiting FIN.) 从远程 TCP 等待连接中断请求

CLOSE-WAIT (Received FIN; waiting to receive CLOSE.) 等待从本地用户发来的连接中断请求

CLOSING (Closed; exchanged FIN; waiting for FIN.) 等待远程 TCP 对连接中断的确认

LAST-ACK (Received FIN and CLOSE; waiting for FIN ACK.) 等待原来的发向远程 TCP 的连接中断请求的确认

TIME-WAIT (In 2 MSL (twice the maximum segment length) quiet wait after close. ) 等待足够的时间以确保远程 TCP 接收到连接中断请求的确认

CLOSED (Connection is closed.) 没有任何连接状态

TCP 连接建立

首先要说明的是要明确 TCP 连接建立的过程需要 3 次握手,下面举例说明各种状态存在的时刻:

1. 首先在服务器 A 上开启 FTP 服务,开始侦听来自远端 TCP 端口的连接请求,这个时候查看服务器 A 状态为: LISTENING

2. 在客户端 B 上向 A 发送 FTP 连接请求,这个时候数据包同步位置 1 ,这是 TCP 三次握手的第一步。在发送后没收到确认时,在客户端 B 上其状态为: SYN-SENT 。此时客户端 B 启动连接定时器。如果在 75 秒内没有收到应答,则放弃连接建立。

3. 在服务器 A 上收到从 B 上发送的 SYN 同步包后,确认,然后再向 B 发送 SYN 的同步包,此数据包同时将 TCP 标记中的同步位和确认位置 1 ,它既对第一步中的客户端同步数据包进行确认,表示愿意与客户端同步,同时再对客户端主机进行同步请求,这是 TCP 连接的第一步。这个时候在服务器 A 上,状态为: SYN-RECEIVED 。此时服务器 A 启动连接定时器。如果在 75 秒内没有收到应答,则放弃连接建立。

4. 在客户端 B 上接收到从 A 上发过来的确认同步包后进行确认,此数据包中将 TCP 标记中的确认位置 1 ,表示这是一个确认数据包,此时在客户端 B 状态转换为: ESTABLISHED

5. 服务器 A 接收到从 B 发过来的确认包后,状态转换为: ESTABLISHED

此时 TCP 连接正式建立。
TCP
连接关闭

6. 应用程序在在连接不需要的时候,通过客户端 B 向服务器 A 发送的终止信息的 FIN 包后,客户端 B 处于 FIN-WAIT-1 状态。

7. 从服务器 A 接收到客户端 B 发送的终止数据包,它告诉客户端 B 已成功接收客户端的上数据包,此时等待应用程序来关闭连接,此时服务器 A 进入 CLOSE_WAIT 状态。

8. 客户端 B 接收到带有确认位的数据包后,对此进行确认,同意关闭 TCP 连接此时客户端 B 转移到 FIN-WAIT-2 状态。当连接从 FIN-WAIT-1 状态转移到 FIN-WAIT-2 状态时,将一个 FIN-WAIT-2 定时器设置为 10 分钟。

9. 服务器 A 在应用程序同意终止连接后,向客户端 B 发送终止 FIN 包,此时服务器状态转为 LAST-ACT

10. 客户端 B 在接收到从服务器 A 发送的终止包后,同意终止连接,然后再向服务器端发送确认信息,此时客户端 B 转向 TIME-WAIT 状态。当连接进入 TIME-WAIT 状态时,该定时器被激活。

11. 服务端 A 在收到客户端 B 的确认后,关闭连接,服务器 A 状态转向 CLOSED

12. 客户端 B TIME-WAIT 定时器超时时,与该连接相关的内核数据块被删除,连接终止,转向 CLOSED 状态。

此时 TCP 连接正式关闭。
备注

1. 一个由客户端发起的关闭 TCP 连接的示意图: <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

2. 连接终止请求对与建立连接的双方是可以同时发出的,在发出终止请求后,双方都进入 FIN-WAIT-1 状态,随着定时器的超时,双方都进入 CLOSING 状态,在这个定时器再次超时后,均转入 TIME-WAIT 状态,在 TIME-WAIT 的定时器超时后,双方均放弃这次连接,连接转为 CLOSE 状态。如图示:

 

 
服务器 socket 状态转换