TCP四次挥手中为什么 TIME_WAIT 等待的时间是 2MSL?

TCP 连接断开

1、TCP 四次挥手过程是怎样的?如下图

              

2、为什么 TIME_WAIT 等待的时间是 2MSL?

MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为 TCP 报文基于是 IP 协议的,而 IP 头中有一个 TTL 字段,是 IP 数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减 1,当此值为 0 则数据报将被丢弃,同时发送 ICMP 报文通知源主机。

MSL 与 TTL 的区别: MSL 的单位是时间,而 TTL 是经过路由跳数。所以 MSL 应该要大于等于 TTL 消耗为 0 的时间,以确保报文已被自然消亡。

TTL 的值一般是 64,Linux 将 MSL 设置为 30 秒,意味着 Linux 认为数据报文经过 64 个路由器的时间不会超过 30 秒,如果超过了,就认为报文已经消失在网络中了

TIME_WAIT 等待 2 倍的 MSL,比较合理的解释是: 网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间

比如,如果被动关闭方没有收到断开连接的最后的 ACK 报文,就会触发超时重发 FIN 报文,另一方接收到 FIN 后,会重发 ACK 给被动关闭方, 一来一去正好 2 个 MSL。

可以看到 2MSL时长 这其实是相当于至少允许报文丢失一次。比如,若 ACK 在一个 MSL 内丢失,这样被动方重发的 FIN 会在第 2 个 MSL 内到达,TIME_WAIT 状态的连接可以应对。

为什么不是 4 或者 8 MSL 的时长呢?你可以想象一个丢包率达到百分之一的糟糕网络,连续两次丢包的概率只有万分之一,这个概率实在是太小了,忽略它比解决它更具性价比。

2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的。如果在 TIME-WAIT 时间内,因为客户端的 ACK 没有传输到服务端,客户端又接收到了服务端重发的 FIN 报文,那么 2MSL 时间将重新计时

在 Linux 系统里 2MSL 默认是 60 秒,那么一个 MSL 也就是 30 秒。Linux 系统停留在 TIME_WAIT 的时间为固定的 60 秒

相关推荐

  1. 为什么tcp需要挥手

    2024-05-09 14:50:03       36 阅读
  2. 【网络】为什么TCP需要挥手

    2024-05-09 14:50:03       34 阅读
  3. TCP为什么握手,而挥手

    2024-05-09 14:50:03       26 阅读
  4. tcp 挥手

    2024-05-09 14:50:03       61 阅读
  5. TCP挥手

    2024-05-09 14:50:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-09 14:50:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-09 14:50:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-09 14:50:03       87 阅读
  4. Python语言-面向对象

    2024-05-09 14:50:03       96 阅读

热门阅读

  1. mysql IF语句,模糊检索

    2024-05-09 14:50:03       29 阅读
  2. c++--引用干货

    2024-05-09 14:50:03       32 阅读
  3. opencv 轮廓区域检测

    2024-05-09 14:50:03       38 阅读
  4. C++堆结构与堆排序深度解析

    2024-05-09 14:50:03       32 阅读
  5. js 关于数组排序的方法

    2024-05-09 14:50:03       32 阅读
  6. C++ 可变参数模板

    2024-05-09 14:50:03       38 阅读
  7. 网闸与防火墙的区别

    2024-05-09 14:50:03       36 阅读
  8. 本地加载hugging face模型:Bert

    2024-05-09 14:50:03       37 阅读
  9. 【Excel VBA】在 Excel VBA 中使用 For 循环全面指南

    2024-05-09 14:50:03       31 阅读
  10. 神经网络和深度学习之间有什么区别

    2024-05-09 14:50:03       29 阅读
  11. React 第二十七章 Hook useMemo

    2024-05-09 14:50:03       38 阅读