聊聊tcp四次挥手中的TIME_WAIT状态存在的理由

本文探讨了TCP四次挥手过程中TIME_WAIT状态的原因,包括确保最终ACK的到达和防止新旧连接四元组混淆。TIME_WAIT状态的存在是为了等待一个RTT时间,以确保B能收到ACK,同时等待2MSL以消除旧连接的影响,避免新连接的数据包混乱。
摘要由CSDN通过智能技术生成

        记得在2012年的时候, 我开始找实习, 某公司笔试题目中提到了TIME_WAIT这些东西, 我简直是一脸懵逼, 第一次见, 这东西讨论来讨论去, 有用么? 呵呵哒。

        下面叙述中, 用A表示tcp连接的主动关闭端, 用B表示被动关闭端。

        我们知道, 在tcp四次挥手中, B发FIN包(第三次挥手)后, A马上回应最后的ACK,  此时, A的socket让然不能立即进入CLOSED的状态, 为什么呢? 其实这就是在问TIME_WAIT状态存在的理由。

        理由之一:

        A不能保证最后的ACK能达到B, 所以, 还应该观望一段时间, 护送一段时间。 如果最后的ACK丢失, 那么B显然收不到,  B于是发起了重传FIN的操作, 此时如果A处于CLOSED的状态, 就没办法给对端发ACK了(实际是发RST), 呜呼哀哉。 所以A应该等一段时间, 这段时间就是所谓的TIME_WAIT, 比如, 等待一个RTT的时间(实际上, 考虑到如下的理由之二就知道, RTT可能不够, 用2MSL更靠谱)。

       所以, TIME_WAIT存在的理由之一是尽可能护送最后的ACK达到对端。


        理由之二:

        假设tcp连接是: A(1.2.3.4:8888)------B(6.7.8.9:9999), 这就是一个tcp四元组。 当tcp连接关闭后, 四元组释放。 后面的新连接可能会重用到这个四元组&#

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值