为什么TIME_WAIT的时间是2MSL? 先来看看上文中TIME_WAIT状态存在的两个理由。

首先看理由1,为了可靠地实现全双工连接的终止,假设图2-5中客户端发送的最后一个ACK丢失,服务端将重传FIN,为了能够收到这个超时重传的FIN,客户端需要TIME_WAIT状态;那TIME_WAIT状态就必须是2MSL了吗?其实这个要看服务端FIN的超时重传时间RTO,如果RTO小于MSL,那TIME_WAIT状态MSL就够了,如果RTO大于2MSL那么TIME_WAIT状态2MSL也是不够的,所以只有RTO在MSL和2MSL之间的时候,TIME_WAIT状态存在的理由1才是TIME_WAIT的时间是2MSL的原因。其实一般情况下,RTO都是远远小于MSL的,但考虑到最糟糕的情况,RTO是为2MSL,所以TIME_WAIT状态为2MSL可以保证最糟糕情况也可以收到超时重传的FIN。

TIME_WAIT的时间是2MSL另外一个重要原因理由2,为了保证本连接持续的时间所产生的所有分组都从网络中消失,也就是保证新建立一个TCP连接时,来自该连接老的重复分组都已经在网络中消失了。这里可能有的人会有个疑问:客户端回复最后一个ACK之后,感觉一个MSL就可以所有分组消失了啊,为什么还要2MSL所有分组才消失呢?我的理解是:

假设客户端发送ACK刚刚过了一个MSL时间,而服务端在收到这个ACK之前一瞬间刚好启动超时重传FIN,所以要等这个FIN也消失,就是2MSL了。文中所指的另一个方向的应答应该就是这个超时重传的FIN。

参考来源:《UNIX 网络编程 卷1》第3版)

为什么TIME_WAIT状态是2MSL?(2个原因)相关推荐

  1. linux服务器上tcp有大量time_wait状态的解决方法和原因解释

    在检查服务器时,发现有很多连接超时情况出现,用netstat命令查看,tcp的time_wait状态较多,需要进行优化. 1. 看一下现在time_wait的数量 netstat -an | grep ...

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

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

  3. TIME_WAIT状态产生的原因、过多的危害

    一.TCP连接断开的四次挥手: 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭. 其原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接.收到一个 FIN只意味着这一方向 ...

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

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

  5. TIME_WAIT状态及存在原因

    1. 客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT:   2. 主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度, ...

  6. Linux-TCP/IP TIME_WAIT状态原理

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

  7. TCP/IP TIME_WAIT状态原理

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

  8. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)

    # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WAIT1 13 FIN_WA ...

  9. TCP/IP详解--TIME_WAIT状态详解

    Socket中的TIME_WAIT状态 在高并发短连接的server端,当server处理完client的请求后立刻closesocket此时会出现time_wait状态然后如果client再并发20 ...

  10. 网络基础问题整理:为什么TCP四次挥手最后需要TIME_WAIT状态?

    一:首先奉上 TCP三次握手的过程 TCP三次握手的过程 TCP连接释放的过程: TCP连接释放的过程 二: 1.为什么两次就建立连接还要三次握手呢?这主要是为了防止已失效的连接请求报文又突然传递服务 ...

最新文章

  1. uboot移植参考资料
  2. 基于MATLAB的TDOA算法的仿真
  3. 网易云信助力中国航空工业集团,打造数字化云办公平台
  4. Hibernate二级缓存配置
  5. 自动化测试 之 “好用例、坏用例”
  6. python 新建文件 hdfs_python基础操作以及hdfs操作
  7. easyPR源码解析之chars_identify.h
  8. java 网页通讯_Vue+Java 通过websocket实现服务器与客户端双向通信操作
  9. pandas 导入excel_三行Python代码,合并多个Excel文件
  10. Scrapy爬虫框架详解
  11. php定义一个矩形类rectangle,Python3面向对象—点和矩形类
  12. Crate 数据库安装与使用
  13. 高端装备的AC主轴头结构
  14. excel减法函数_数据工作中常用到的EXCEL技巧之文本分析类
  15. 厦门大学437社会工作实务考研参考书目
  16. python初学一(字符串str的处理方式)
  17. 个人小作品之迷你音乐播放器(移动端)
  18. 第六届蓝桥杯决赛真题:穿越雷区
  19. 活动预告:BetaEX线上春季发布会 | TokenInsight
  20. CAN通讯方式--秉火STM32学习笔记

热门文章

  1. VS-code输入感叹号没有提示
  2. 微信小程序学习心得----订咖啡
  3. windows无法上网:代理服务器出现问题或地址有误
  4. Matlab绘制运动想象ERD/ERS分析法图像
  5. Redis主从复制原理
  6. Hulu九月热招 | 全职社招
  7. VMware虚拟机在Windows10下不兼容解决办法
  8. Win32 API 列表5 (格式有点乱)
  9. 服务启动类型:自动、自动(延时启动)、手动、禁用
  10. 小程序谷歌统计 Google Analytics