为什么TIME_WAIT状态还需要等2MSL才能返回CLOSED状态
2017-12-26 17:42
639 查看
(1)可靠的实现TCP全双工链接的终止。
这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。
(2)允许老的重复的分节在网络中消逝。
假 设在12.106.32.254的1500端口和206.168.1.112.219的21端口之间有一个TCP连接。我们关闭这个链接,过一段时间后在 相同的IP地址和端口建立另一个连接。后一个链接成为前一个的化身。因为它们的IP地址和端口号都相同。TCP必须防止来自某一个连接的老的重复分组在连 接已经终止后再现,从而被误解成属于同一链接的某一个某一个新的化身。为做到这一点,TCP将不给处于TIME_WAIT状态的链接发起新的化身。既然 TIME_WAIT状态的持续时间是MSL的2倍,这就足以让某个方向上的分组最多存活msl秒即被丢弃,另一个方向上的应答最多存活msl秒也被丢弃。
通过实施这个规则,我们就能保证每成功建立一个TCP连接时。来自该链接先前化身的重复分组都已经在网络中消逝了。
这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。
(2)允许老的重复的分节在网络中消逝。
假 设在12.106.32.254的1500端口和206.168.1.112.219的21端口之间有一个TCP连接。我们关闭这个链接,过一段时间后在 相同的IP地址和端口建立另一个连接。后一个链接成为前一个的化身。因为它们的IP地址和端口号都相同。TCP必须防止来自某一个连接的老的重复分组在连 接已经终止后再现,从而被误解成属于同一链接的某一个某一个新的化身。为做到这一点,TCP将不给处于TIME_WAIT状态的链接发起新的化身。既然 TIME_WAIT状态的持续时间是MSL的2倍,这就足以让某个方向上的分组最多存活msl秒即被丢弃,另一个方向上的应答最多存活msl秒也被丢弃。
通过实施这个规则,我们就能保证每成功建立一个TCP连接时。来自该链接先前化身的重复分组都已经在网络中消逝了。
相关文章推荐
- TCP释放连接时为什么time_wait状态必须等待2MSL时间(阅读笔记)?
- 25. 为什么客户端在TIME-WAIT状态必须等待2MSL的时间?
- 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义
- 为什么TCP的TIME_WAIT状态要保持2MSL?
- TCP TIME_WAIT状态(2MSL)
- TIME_WAIT状态(2MSL)的作用
- 服务器端主动关闭连接, 产生的TIME_WAIT状态为什么会占用服务端大量端口?
- A为什么等待2MSL,从TIME_WAIT到CLOSE?
- 为什么要有TIME_WAIT这个状态
- TIME_WAIT状态(2MSL)的作用
- Time-wait状态(2MSL)一些理解
- TCP 连接关闭的 TIME_WAIT (2MSL) 状态,及 TCP 连接状态图
- 【转】TCP TIME_WAIT状态(2MSL)
- 深入浅出TCP协议的2MSL TIME_WAIT状态
- 为什么WaitForMultipleObjects返回后,对应的handle仍处于激发状态?
- 主动关闭TCP连接的一方为什么要有TIME_WAIT状态
- TCP-------为什么会有TIME_WAIT状态 ?
- TCP断开连接时的2MSL的time_wait状态
- 深入浅出TCP协议的2MSL TIME_WAIT状态
- TCP连接状态详解及TIME_WAIT过多的解决方法