[计算机网络] 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状态时,可以重用端口。
浙公网安备 33010602011771号