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

一直不明白为何 reno 拥塞控制算法,在快速恢复阶段要把拥塞窗口减为原来的一半 + 3 , 主要不理解为何是 一半呢

  •  
  •   jdz · 2020-06-13 12:31:46 +08:00 · 2540 次点击
    这是一个创建于 1616 天前的主题,其中的信息可能已经有所发展或是发生改变。
    6 条回复    2020-06-14 14:23:08 +08:00
    watzds
        1
    watzds  
       2020-06-13 13:02:05 +08:00 via Android
    有些就是拍脑袋定的,不一定合理,肯定不是所有情况合理
    我看那本 Wireshark 网络分析的书里这么写的
    scukmh
        2
    scukmh  
       2020-06-13 13:02:53 +08:00
    有两种实现,其中有一种是一半加三,另一种是标准的一半。如果我没记错的话。感觉这只是一个理论与实现的区别。
    gzfrankie
        3
    gzfrankie  
       2020-06-13 13:55:18 +08:00 via iPhone   ❤️ 3
    不是拍脑袋定的

    因为 reno 的 fast recovery 阶段触发条件是收到 3 duplicate ACKs,这就说明了 Congestion windows 至少可以成功传输 3 个 segment,所以新的 Congestion windows 就设为原 Congestion windows/2 + 3 。

    举例,传输过程 13 号 segment 传输成功,14 号 segment 传丢了,这时候传 15 、16 、17 号 segment 后,分别收到了 3 个 13 号 segment 的 ACKs,这说明 15 、16 、17 号其实是传输成功的。说明 Congestion Windows 至少可以传 3 个 segment,所以新的 congestion windows 最小值可以设为 3 。
    jdz
        4
    jdz  
    OP
       2020-06-13 15:44:00 +08:00
    @gzfrankie +3 我可以理解, 但是为什么要减半呢
    cxhhh
        5
    cxhhh  
       2020-06-13 16:07:29 +08:00   ❤️ 2
    为什么乘性减因子为 1/2 ?
    因为如果连接是稳定运行的,并且出现了丢包,这可能是因为一个新的连接启动并占用了你的一些带宽。你应该将窗口减少一半,因为你可用的带宽已经减少了一半。而且,如果有两个以上的连接共享带宽,则将窗口减半是保守的——在高流量密集时保持保守可能是明智的。
    建议阅读一下 van jacobson 的论文“congestion avoidance and control”
    wsy2220
        6
    wsy2220  
       2020-06-14 14:23:08 +08:00
    为了收敛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:47 · PVG 04:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.