开发者社区> 问答> 正文

为什么需要 TIME_WAIT ?

为什么需要 TIME_WAIT ?

展开
收起
令人无语的八阿哥 2021-10-12 17:23:06 546 0
1 条回答
写回答
取消 提交回答
  • 主要有两个原因:

    1)为了确保两端能完全关闭连接。

    假设A服务器是主动关闭连接方,B服务器是被动方。如果没有TIME_WAIT状态,A 服务器发出最后一个 ACK 就进入关闭状态,如果这个 ACK 对端没有收到,对端就不能完成关闭。对端没有收到 ACK,会重发 FIN,此时连接关闭,这个 FIN 也得不到 ACK,而有 TIME_WAIT,则会重发这个 ACK,确保对端能正常关闭连接。

    2)为了确保后续的连接不会收到“脏数据”。

    刚才提到主动端进入 TIME_WAIT 后,等待 2MSL 后 CLOSE,这里的 MSL是指(maximum segment lifetime,我们内核一般是 30s,2MSL 就是 1 分钟),网络上数据包最大的生命周期。这是为了使网络上由于重传出现的 old duplicate segment 都消失后,才能创建参数(四元组,源 IP/PORT,目标 IP/PORT)相同的连接,如果等待时间不够长,又创建好了一样的连接,再收到old duplicate segment,数据就错乱了。

    2021-10-12 17:41:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Near real-time networkanomaly 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载