为什么TCP连接的客户方在Time-Wait状态下必须等待2MSL的时间?答:第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。第二,防止 “已失效的连接请
在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。 TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。
为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢? 1、为了保证 A 发送的最后一个 ACK 报文段能够到达 B。 A 发送的 ACK 报文段有可能丢失,因而使处在 LAST-ACK 状态的 B 收不到对方已发送的 FIN + ACK 报文段的确认。这时 B 会超时重传这个 FIN+ACK 报文段,而 A 就能在 2MSL 时间内(超时 + 1MSL 传...
综上所述,TIME_WAIT至少需要持续2MSL时长,这2个MSL中的第一个MSL是为了等自己发出去的最后一个ACK从网络中消失,而第二MSL是为了等在对端收到ACK之前的一刹那可能重传的FIN报文从网络中消失。另外,虽然说维持TIME_WAIT状态一段时间有2个目的,但这段时间具体应该多长主要是为了达成上述第二个目的而设计的。 内容...
可以看到对端发来FIN报文后客户进入time_wait状态,等待2MSL,MSL是报文存在的最大时间,客户在发出最后一个ACK之后开始计时,这个ACK传输的最大时间是1MSL,如果这个ACK丢失了,服务端会发起重传,而重传FIN的报文最大到达时间是1MSL,所以考虑到重传,这里需要等待2MSL的时间...
TCP 的 11 个状态,每一个状态都缺一不可,自然 TIME_WAIT 状态被赋予的意义也是相当重要,咱们直接...
既然 TIME_WAIT状态的持续时间是MSL的2倍,这就足以让某个方向上的分组最多存活msl秒即被丢弃,另一个方向上的应答最多存活msl秒也被丢弃。 通过实施这个规则,我们就能保证每成功建立一个TCP连接时。来自该链接先前化身的重复分组都已经在网络中消逝了。
而是延迟一定时间。一般ACK延迟发送的时间为200ms,但这个200ms并非收到数据后需要延迟的时间。系统有一...
结论:TIME_WAIT 是必然会出现的状态,是正常现象,且会定时回收 TIME_WAIT 状态持续2MSL时间,MSL就是maximum segment lifetime(最大报文段的生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失(被丢弃)。RFC 793中规定MSL为2分钟,实际应用中,可能为30S,1分钟,2分钟。
实际网络中其实是没必要等那么久的,本身Linux的TIMEWAIT默认时间其实就只有两分钟,这个一般是一个MSL,...