欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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秒。