FIN_WAIT TIME_WAIT and CLOSE_WAIT
程序员文章站
2024-01-31 16:10:10
...
使用netstat监测http连接状态的时候,可以看到几种WAIT:FIN_WAIT、TIME_WAIT和CLOSE_WAIT.它们的含义需要结合tcp的连接中断说明:
Server Client
--------FIN------>
<-------ACK-------
<-------FIN-------
--------ACK------>
如果是服务器端主动关闭连接(Active Close):
1.服务器端首先向客户端发送FIN包,然后服务器进入FIN_WAIT_1状态
2.客户机向服务器确认FIN包收到,向服务器端发送FIN/ACK,客户端进入Close_Wait状态。
3.服务器收到来自客户端的ACK之后,进入FIN_WAIT_2状态
4.现在客户端进入被动关闭(“passive close”)状态,客户端操作系统等待上边的应用程序关闭连接。一旦连接关闭,客户端会发送FIN包到服务器。
5.当服务器收到FIN之后,服务器会向客户端发送ACK确认,然后进入TIME_WAIT状态。
由于在连接关系之后,还不能确定所有连接关闭前的包都被服务器接收到了,所以有了TIME_WAIT状态,这个状态将保持2*MSL的时间,这里的MSL指的是一个TCP包在网络中的存在的最长时间。一般是2*MSL=240秒。
Server Client
--------FIN------>
<-------ACK-------
<-------FIN-------
--------ACK------>
如果是服务器端主动关闭连接(Active Close):
1.服务器端首先向客户端发送FIN包,然后服务器进入FIN_WAIT_1状态
2.客户机向服务器确认FIN包收到,向服务器端发送FIN/ACK,客户端进入Close_Wait状态。
3.服务器收到来自客户端的ACK之后,进入FIN_WAIT_2状态
4.现在客户端进入被动关闭(“passive close”)状态,客户端操作系统等待上边的应用程序关闭连接。一旦连接关闭,客户端会发送FIN包到服务器。
5.当服务器收到FIN之后,服务器会向客户端发送ACK确认,然后进入TIME_WAIT状态。
由于在连接关系之后,还不能确定所有连接关闭前的包都被服务器接收到了,所以有了TIME_WAIT状态,这个状态将保持2*MSL的时间,这里的MSL指的是一个TCP包在网络中的存在的最长时间。一般是2*MSL=240秒。
推荐阅读
-
netstat大量time_wait连接
-
FIN_WAIT TIME_WAIT and CLOSE_WAIT
-
【转】很多TIME_WAIT连接导致Cannot assign requested address的解决办法
-
【转】TCP/IP状态图的TIME_WAIT作用
-
linux服务器出现大量TIME_WAIT的解决方法
-
Linux中大量TIME_WAIT的解决办法
-
tcp TIME_WAIT
-
net TCP/IP / TIME_WAIT / tcpip / iperf / cain
-
再谈应用环境下的TIME_WAIT和CLOSE_WAIT
-
探讨如何减少Linux服务器TIME_WAIT过多的问题