这几天写了一份项目书,正好对之前看过的拥塞控制算法进行了一次整理,主要是从算法机制分析优缺点。
我把现有的拥塞控制技术分成了五大类:传统的基于丢包或基于延迟方法,这两个类别是通用的分类,那些比较远古的算法基本上就可以这么二分;基于链路容量预测,基于延迟目标和基于学习或探测的这三类,主要包含了近几年的一些算法,其中延迟目标方法和传统的基于延迟的方法有些类似,但是也有本身的特点,我就单列了。每个类别举了几个典型的算法:
- 传统的基于丢包的方法:主要以TCP Reno [1]和TCP Cubic [2]为代表。它们将丢包视为拥塞信号,遇到丢包时将发送窗口减半来规避拥塞。但是在没有丢包时会不断填充缓冲区,使缓冲区长期保持过满状态,造成了过大的排队延迟,同时,在链路丢包的网络环境中,带宽利用率也很差。
- 传统的基于延迟的方法:包括了TCP Vegas [3],Fast TCP [4]和TCP Nice [5]等,它们使用了延迟作为拥塞信号,包括单向延迟、排队延迟和往返延迟等,虽然在测量过程中会有噪声干扰,但延迟可以粗略的表示网络中数据包的数量。这种机制可以保证它们在限制延迟上有不错的性能表现,但是在与基于丢包的数据流共享瓶颈带宽时,会因为缺乏竞争力而导致带宽分配的不公平 [6]。此外,如果网络中已经存在数据流或者已经拥塞,新加入的数据流会检测到比真