TIMEWAIT状态也称为 2MSL等待状态
每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime)。
它是任何报文段被丢弃前在网络内的最长时间。

我们知道这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段。

RFC 793 [Postel 1981c] 指出MSL为2分钟。然而,实现中的常用值是30秒,1分钟,或2分钟。

在实际应用中,对IP数据报TTL的限制是基于跳数,而不是定时器。

对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIMEWAIT状态停留的时间为2倍的MSL。

这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。
这种2MSL等待的另一个结果是 这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用。
这个连接只能在2MSL结束后才能再被使用。

遗憾的是,大多数TCP实现(如伯克利版)强加了更为严格的限制。
在2MSL等待期间,插口中使用的本地端口在默认情况下不能再被使用。

某些实现和API提供了一种避开这个限制的方法。

使用插口API时,可说明其中的SOREUSEADDR选项,它将让调用者对处于2MSL等待的本地端口进行赋值。
但我们将看到TCP原则上仍将避免使用仍处于2MSL连接中的端口。

在连接处于2MSL等待时,任何迟到的报文段将被丢弃。
因为处于2MSL等待的、由该插口对(socket pair)定义的连接在这段时间内不能被再用,因此当要建立一个有效的连接时,来
自该连接的一个较早替身(incarnation)的迟到报文段作为新连接的一部分不可能不被曲解

(一个连接由一个插口对来定义。一个连接的新的实例(instance)称为该连接的替身)。

参考:《TCP IP详解卷一》18.6.1

《UNIX网络编程(卷1):套接字联网API(第3版)》2.7

为什么TCP的TIME_WAIT状态要保持2MSL?

为什么TCP的TIME_WAIT状态要保持2MSL?相关推荐

  1. 为什么tcp的TIME_WAIT状态要维持2MSL

    本文主要分析为什么TIME_WAIT状态的持续时间是2MSL而不是1MSL,3MSL或其它的时长,而不会详细描述为什么需要TIME_WAIT状态. 阅读本文需要的预备知识: 了解TCP协议的状态变迁: ...

  2. TCP的TIME_WAIT状态为什么要等待2MSL的时长

    TCP四次挥手的第四次挥手后为什么要经过TIME_WAIT状态? TIME_WAIT状态为什么是2MSL的时长?为什么不是等待其他时长? TCP第四次挥手后为什么要经过TIME_WAIT状态? 第四次 ...

  3. TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  4. 网络编程释疑之:TCP的TIME_WAIT状态在服务器开发中的影响?

    在进行TCP高并发服务器开发时,有些规则仿佛是约定俗成的,很多朋友会依据这些规则去做,比如高并发TCP服务器中进行主动关闭的一方最好是客户端.服务器端程序最好启用SO_REUSEADDR选项,但是很多 ...

  5. 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态

    转载地址:https://blog.csdn.net/jiange_zh/article/details/50637549 上一节我们已经开发了一个简单的echo服务器,在这里我们先不急着继续下去,先 ...

  6. TCP的TIME_WAIT状态

    主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时 ...

  7. TCP/IP / TIME_WAIT 状态的作用 / MSL、TTL、RTT

    目录 作用 解释 拓展 作用 可靠地实现TCPIP全双工的终止,即:允许老的重复的TCP数据包在网络中终止,保证老的数据包不会干扰到新的连接. 解释 针对"可靠的实现TCPIP全双工的终止& ...

  8. 计算机网络之TCP中TIME_WAIT状态意义详解

    文章目录 为什么需要TIME_WAIT 一.何为TIME_WAIT? 二.为什么需要TIME_WAIT 原因一:防止被动关闭方的延迟数据被人窃取 原因二:防止被动关闭方没有收到最后的ACK 为什么需要 ...

  9. 【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

    答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个 ACK丢失.所以TIME_WAIT状态就是用来重发可能丢失的ACK报文.

最新文章

  1. module_init和init_module的区别
  2. 内核中的几种内存分配器
  3. SQLServer数据库的表管理
  4. layer.js 使用
  5. 腐蚀膨胀等形态学处理c代码
  6. Python之深入解析一行代码计算每个省面积的神器Geopandas
  7. 熊猫直播P2P分享率优化(下):ASN组网
  8. near far pointer
  9. Comparator和Comparable (转)
  10. java ip解析_java域名解析
  11. 【设计模式】解释器模式
  12. Win11软件兼容性怎么样?
  13. 百度热力图和高德热力图对比
  14. ZynAddSubFX
  15. vue事件修饰符prevent、self、native
  16. 计算机键盘按键错乱,笔记本键盘按键错乱怎么办 解决笔记本电脑个别按键功能错乱...
  17. python的def语句_关于语法:python def函数:如何指定函数的结尾?
  18. TabLayout 之改变 Indicator 的宽度
  19. HPLC鬼峰、基线漂移、拖尾、分叉峰、保留时间漂移、柱压过高等系列问题解析
  20. 100ml干胶能带上地铁吗_定型喷雾可以带上地铁吗

热门文章

  1. spark mysql 驱动_spark读取mysql数据库的驱动问题
  2. php jwt使用案例,PHP使用JWT创建Token的实例详解
  3. python输入输出流详解_输入输出流的概念
  4. 使用Python,OpenCV进行图像哈希
  5. 数字图像处理:图像就是函数的解读
  6. GitHub开源:一键生成前后端代码神器
  7. OpenCV(项目)车牌识别1 -- 车牌提取(形态学)
  8. 初中计算机指导教师意见,初中信息技术教学计划(推荐3篇)
  9. PCL深度图像(1)
  10. 波普艺术比较适合团队活动宣传海报设计风格,除了波普还有其他哪些艺术流派值得我们学习呢?