我最近正在阅读 1988 年关于 Congestion Avoidance and Control 的论文,并且它努力区分慢启动和拥塞避免。
但是,有一点我不明白,即丢包后采用哪种算法。
- 基于论文和 Wikipedia's慢启动的描述,它希望 TCP 在丢失事件发生后以大小为
1
的拥塞窗口启动。 - 基于拥塞避免的 AIMD算法中,丢包后拥塞窗口应减半。
当发生丢包时,哪种算法优先? cwnd
是否会设置为 1
或当前大小的一半?
最佳答案
显然答案在同一篇论文的附录 B 中,我之前跳过了它。
组合算法实际上维护两个状态变量,一个cwnd
和一个ssthresh
。
当由于丢包而超时时,变量ssthresh
设置为当前窗口大小的一半,cwnd
设置为1,并且然后使用慢启动来达到该阈值(为每个收到的 ACK 向窗口添加 1)。
一旦达到阈值,cwnd
就会使用接收到的加法增加(每个完整的 ACK 窗口增加一次)来增加。
关于algorithm - TCP 慢启动与丢包时的拥塞避免,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317114/