algorithm - TCP 慢启动与丢包时的拥塞避免

标签 algorithm networking tcp protocols

我最近正在阅读 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/

相关文章:

c - 在 tcp 服务器中,每隔一秒调用一次 select()。如何区分两个或多个到达 "1 second"的数据包?

c# - .NET Compact 框架中的异步 TCP 服务器

linux - Linux 中的系统范围 TCP 参数可终止用户应用程序之间断开的连接

python - 从文件中的数据组成的列表中删除字符

algorithm - 二进制插入排序算法重复输出

c - 求和乘法模

java - 定义轮廓是否闭合

python - 如何通过互联网在两台计算机之间建立 UDP 连接

networking - 公共(public)IP范围可以用作私有(private)IP吗?

c++ - 从 sockaddr * 转换为 sockaddr_in * 增加了所需的对齐方式