极客时间返利平台,你可以在上边通过山月的链接购买课程,并添加我的微信 (shanyue94) 领取返现。

# TCP 四次挥手时为什么需要 2MSL

Issue

欢迎在 Gtihub Issue 中回答此问题: Issue 381 (opens new window)

Author

回答者: zzetao (opens new window)

我们先来看看什么是 2MSL ? MSL: Maximum Segment Lifetime, 最长报文段寿命 意思是,需要等候 2 * MSL 时间,才会进入关闭状态


然后再来看哪个阶段需要 2MSL ?

image 从上图来看,是在 [发送方] 发送完 ACK 后,进入 TIME_WAIT 阶段,这个阶段需要等候 2*MSL,才将 TCP 关闭


为什么要等候 2*MSL ?

  1. 用足够长的等候时间,来确保 [接收方] 能收到 ACK 包

    • 如果 [接收方] 在一定时间没收到 (ACK),会重发 (FIN, ACK),[发送方] 收到后,会重发 (ACK),再重置 2*MSL 定时器 .
  2. 防止当前连接延迟到达的数据段,被新的 TCP 连接收到

    • 新的 TCP 连接:相同端口,相同地址

TIME_WAIT 等候时间长短问题

  1. 等候时间过短

    • 可能会收到上一个 TCP 连接延迟到达的数据段 .
  2. 等候时间过长

    • TCP 连接一直占用着端口,需要关闭后才能建立新的连接,高并发下压力比较大

可以参考知乎这个问题:

目的是为了优雅地关闭 TCP 连接。

为什么 TCP4 次挥手时等待为 2MSL? (opens new window)

#26

Last Updated: 11/27/2021, 6:11:48 PM