V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX  ›  程序员

为什么 time_wait 状态要等两个 MSL,我咋觉得一个 MSL 就够了呢?

  •  
  •   amiwrong123 · 2021-12-01 23:20:12 +08:00 · 1468 次点击
    这是一个创建于 1079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先四次挥手时,主动关闭方才会有 time_wait 状态。然后之所以要存在 time_wait 状态,(其中一个原因)就是因为有一些旧分组在网络中逗留,但我们需要 这个 tcp 连接的下一个实例 不会收到这些旧分组,让它们在网络被自然丢弃掉。

    但是我觉得,好像只需要一个 MSL 不就行了吗,毕竟自己是主动关闭方,那网络中不就只存在 对方的一些旧分组在网络中徘徊,那只等待一个 MSL 不就行了吗

    另外,2MSL > RTT ,这对吗

    5 条回复    2021-12-02 09:29:42 +08:00
    LinJunzhu
        1
    LinJunzhu  
       2021-12-01 23:38:05 +08:00
    如果 主动关闭方 在 TIME_WAIT 状态,响应的 ACK ,被动方未收到; 那么被动方会重发一次 FIN 包;

    所以实际上需要等待 被动方 -> 主动方. 主动方->被动方 即两次包
    mawerss1
        2
    mawerss1  
       2021-12-01 23:45:39 +08:00
    主要就是防止发送响应的 ack 如果丢失了,被动方重试发 fin
    等待 2 个 msl 就是 一个 ack + fin 两个包的时间
    weyou
        3
    weyou  
       2021-12-02 09:10:20 +08:00 via Android
    为了防止自己的 ACK 对方没有收到,一个 MSL 后被动端才会重发 FIN ,FIN 到达主动端最多 1 一个 MSL ,所以是 2×MSL 的时间)
    amiwrong123
        4
    amiwrong123  
    OP
       2021-12-02 09:28:17 +08:00 via Android
    @weyou
    @mawerss1
    @LinJunzhu
    那主动关闭方 收到了对方的 重传的 ack 后,timewait 状态重新开始计时嘛
    amiwrong123
        5
    amiwrong123  
    OP
       2021-12-02 09:29:42 +08:00 via Android
    说错了,是重传的 FIN
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:44 · PVG 19:44 · LAX 03:44 · JFK 06:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.