[计算机网络] tcp断开连接(四次挥手)

1.四次挥手过程

以客户端主动关闭连接为例

1)client应用程序关闭连接,发送FIN【连接状态变成FIN_WAIT_1】

2)server接收到FIN后,发送ACK,进行关闭连接的其他处理【连接状态变成CLOSE_WAIT】

3)client接受到ACK后,不发送其他消息【连接状态变成FIN_WAIT_2】

4)server在完成其他处理后发送FIN【连接状态变成LAST_ACK】

5)client接收到FIN后,发送ACK,进入等待计时【连接状态变成TIME_WAIT】

6)server接受到ACK后,可即刻关闭连接

7)client经过等待后关闭连接

2.为何client需要TIME_WAIT状态

client最后发送的ACK报文可能丢失,如果超时server会重传一个FIN报文,此时client从TIME_WAIT回到TIME_WAIT并重新发送ACK。

为了等待直到旧的数据包在网络中过期消失。

通常TIME_WAIT持续时间为2MSL(报文最大生存时间),MSL一般为30s、60s或120s。

3.大量TIME_WAIT问题怎么解决

对于服务器来说,每次主动关闭TCP连接,都需要将一个连接维护TIME_WAIT状态较长时间。因此可以对套接字设置SO_REUSEADDR选项来告知系统内核,当端口被占用单连接处于TIME_WAIT状态时,可以重用端口。

 

posted @ 2022-02-16 20:32  Cheung-10  阅读(24)  评论(0)    收藏  举报