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

Issue

欢迎在 Issue 中交流与讨论: Issue 381

Author

回答者: zzetao

我们先来看看什么是 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 连接一直占用着端口,需要关闭后才能建立新的连接,高并发下压力比较大

扫码关注公众号全栈成长之路,并发送

即可在关注期间无限制浏览本站全部文章内容

你也可以在文章关于回复公众号扫码解锁全站的技术实现中获得解锁代码,永久解锁本站全部文章