TIME_WAIT状态及存在原因
Posted 静悟生慧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TIME_WAIT状态及存在原因相关的知识,希望对你有一定的参考价值。
1. 客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT;
2. 主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期);
2. 主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期);
这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。
MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。
3. 动关闭的一方在发送最后一个ack 后就会进入TIME_WAIT 状态 停留2MSL(max segment lifetime)时间这个是TCP/IP必不可少的,也就是“解决”不了的。
4. TIME_WAIT状态存在的理由:
1)防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2)可靠的关闭TCP连接
在进行关闭连接四路握手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN,因此客户端必须维护状态信息允 许它重发最终的ACK。
如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。
因而,要实现TCP全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节的丢失情况,主动关闭 的客户端必须维持状态信息进入TIME_WAIT状态。
以上是关于TIME_WAIT状态及存在原因的主要内容,如果未能解决你的问题,请参考以下文章
详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因
详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因