#Network #interview
计算机网络-MSL的设计
1. 什么是 MSL
MSL的全称:Max Segment Lifetime,也就是TCP报文的最大生存时间- 这个指标并没有反映在
TCP头部,而是按照IP数据包的头部当中的TTL(time to live)进行计算。 TTL规定了IP数据包允许经过的路由器的跳数,经过一条路由就减少一次。

- 一般来说,
MSL在Linux当中的默认设置是60s,这个时间用来保证超时的报文能够被丢弃。
2. Time-Wait 状态和 MSL
- 在四次挥手完毕之后,主动断开方会进入
time-wait状态,也就是等一段时间,确保迷路的报文全部死掉,以免干扰未来的新连接 - 当然,它还有另外一个用途,就是如果主动方的最后一次握手
ACK丢失,那么被动方会重传FIN报文,这个时候主动断开方还在time-wait状态里面,可以正确处理。(简单说,就是多坚持一会儿,防止最后一次挥手出什么差错)

- 这个等待的时间就是
2*MSL,为什么是2倍呢? - 1 个
MSL确保四次挥手中主动关闭方最后的ACK报文最终能达到对端 - 1 个
MSL确保对端没有收到 ACK 重传的FIN报文可以到达2MS= 去向ACK消息最大存活时间(MSL) + 来向 FIN 消息的最大存活时间(MSL)