
TCP第4次挥手为何要等待2MSL才关闭?
假如第四次挥手失败了,因为丢失而未到达服务器会怎样呢?这样,服务器会一直收不到客户端的回应,也就无法得知客户端是否收到了即将要断开连接的请求。客户端此刻还蒙在鼓里,还在等待服务器继续发送消息。服务器不能判断客户端是否收到,本身就是一个BUG,于是才有的等待2MSL的情况。为了保证客户端最后一次挥手的报文能够到达服务器,若第4次挥手的报文段丢失了,服务器就会超时重传第3次挥手的报文段,所以客户端此时不是直接进入CLOSED,而是保持TIME_WAIT(等待2MSL就是TIME_WAIT)。当客户端再次受到服务器因为超时重传而发送的第3次挥手的请求时,客户端就会重新给服务器发送第4次挥手的报文(保证服务器能够受到客户端的回应报文)。最后,客户端、服务器才真正断开连接。说白了,等待2MSL就是为了确保服务器能够受到客户端最后的回应。 如果客户端直接CLOSED,然后又再次向服务器发起一个新连接,谁也不能保证新发起的连接和刚关闭的连接的端口号是不同的,有可能新、老连接的端口号就是一样的。假设新、老连接端口号一致,若老连接的一些数据仍滞留在网络中,这些滞留数据在新连接建立后才到达服务器,鉴于前后端口号一致,TCP协议就默认这些数据属于新连接,于是数据就这样乱成一锅粥了。所以TCP连接还要在TIME_WAIT状态下等待2MSL,确保所有老连接的数据都在网络中消失!
发布日期:2021-05-06 23:32:19
浏览次数:11
分类:技术文章
本文共 695 字,大约阅读时间需要 2 分钟。
MSL是Maximum Segment Lifetime的缩写,译为报文最大生存时间,也就是任何报文在网络上存活的最大时间,一旦超过该时间,报文就会被丢弃。2MSL也就是指的2倍MSL的时间。
回归主题,首先回顾一下。

发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月30日 06时37分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Ubuntu切换到root用户无法找到环境变量PATH的问题
2019-03-03
PyCharm安装与配置
2019-03-03
关于Java的List的笔记
2019-03-03
Docker - 部署 Redis 6.0.8
2019-03-03
Android - Broadcasts overview(不完整)
2019-03-03
OrCAD Capture CIS 16.6 - 为元器件添加属性
2019-03-03
排序算法总结——c++实现
2019-03-03
c++ 逗号运算符
2019-03-03
vector的几种初始化及赋值方式
2019-03-03
STL基础梳理 2019.1.19(仿函数,谓词,内建函数对象,适配器,算法)
2019-03-03
IDEA效率快捷键收集
2019-03-03
并发情况下三种线程/并发安全
2019-03-03
希尔排序
2019-03-03
C#,asp.net,ashx处理session
2019-03-03
501 5.1.7 Invalid address
2019-03-03