拥塞控制¶
拥塞控制算法是 TCP/QUIC 协议的一个基础部分,多年来经过一个个版本的迭代(如 Tahoe、Reno、Vegas 等),拥塞控制算法得到了持续的提升。由于篇幅有限,本文就目前比较流行的两种拥塞控制算法(CUBIC,BBR),也是 MSQUIC 目前支持的拥塞控制算法进行介绍。
太多太快的分组(包含着 TCP 段以及 UDP 数据报等) 需要网络传输,超过网络 (具体来可能是部分节点、链路) 的处理能力,网络中的某个(某些)路由器队列溢出,开始丢弃分组。 从源端的角度来看:
- 分组丢失,源端超时了
- 在源端,收到某 TCP 段的多个冗余ACK
- 延迟增加
- 拥塞情况加速变坏
- 不加控制网络将无法使用
CUBIC 拥塞控制思路¶
CUBIC 是一种拥塞控制协议。TCP CUBIC 版本目前已经作为默认的拥塞控制算法被应用在 linux/unix 系统中,微软在 Win10/Windows Server 2019 系统也对 CUBIC 做了支持。CUBIC 的提出得益于当今通信链路往往具有越来越高的带宽水平这一事实。在由高带宽链路组成的网络中,缓慢增加传输速率的拥塞控制算法可能最终会浪费链路的容量。CUBIC 改变了现有 TCP 标准中的线性拥塞窗口增长函数为三次函数,以提高 TCP 在快速和长距离网络上的可扩展性。它还通过使窗口增长独立