【面试联盟】让您出道即巅峰, tcp为什么需要TIME_WAIT

tutengdihuang · 2022-03-10 10:48:16 · 854 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2022-03-10 10:48:16 的文章,其中的信息可能已经有所发展或是发生改变。

如何加入我们

联系方式 vx: tutengdihuang

或者加群

tcpip为什么需要TIME_WAIT

  • 客户端等待两个最大数据段生命周期(Maximum segment lifetime,MSL)的时间后也会进入 CLOSED 状态
    • TIME_WAIT一定是发生在主动关闭的一方,主动关闭一方需要等待2*MSL时间才会最终关闭
      • 原因:
          1. 防止被动关闭方的延迟数据被人窃取。
            • 如果sever之前发送的数据sequece10001在网络中,还没有被接收
            • client1 time_wait后迅速关闭
            • client2 正好用了client1的端口,这样client2就接收了这个sequece10001,就给client2带来了麻烦
          1. 防止被动关闭方没有收到最后的ACK
            • 如果client1 time_wait 不够长,
            • 在serverlast—ack 状态还没收到client最终确认ack之前,client2 以相同端口接入网络
            • 开始和sever正常syn,sync ack, ack
            • server 也认为是合法的可以和client正常通信,则client1的链接没有关闭
  • 为什么是2msl
    • 等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包
    • 主动关闭端接到重发的FIN包后可以再发一个ACK应答包

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

854 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传