TCP拥塞控制概述
产生拥塞的原因
太多太快的分组(包含着TCP段以及UDP数据报等)需要网络传输,超过了网络(具体来说可能是部分节点、链路)的处理能力,网络中某些路由器队列溢出,开始丢弃分组。
拥塞的表现,从源端的角度来看
- 分组(包含着TCP段等)丢失,源端超时了。
- 在源端,收到某TCP段的多个冗余ACK。
- 延迟增加
如果不加控制,网络将无法使用。
拥塞控制的目标
在网络不拥塞的情况下,尽可能地快速发送(提高吞吐量)。
- 矛盾: 不拥塞+吞吐大
- 不拥塞是前提;吞吐大是目的。
在不拥塞的情况下尽可能大的提高吞吐量。
TCP拥塞控制算法
接下来将分别基于检测拥塞的方法不同,讲述基于丢包的算法以及基于网络测量的算法两大类常见的TCP拥塞控制算法。
背景
随着智能手机和移动互联网的飞速发展,人们通过网络传递的信息流量变得越来越巨大,当信息流量超过网络中部分传输线路的承载能力的时候,就会产生网络拥塞问题。一旦出现拥塞现象,路由器或者交换机将不得不丢弃无法及时传递的数据包,以免设备的队列缓冲区溢出,因此有可能造成业务中断或服务质量下降,影响用户体验。
目前,网络上已经获得广泛部署的TCP大多采用 “慢启动”,“拥塞避免”,“快速重传”以及“快速恢复” 这四种基本算法来实现拥塞控制,然而存在网络适应性差,效率低和公平性差等问题。因此后续的学者对此作出了有针对性的改进,提出了Tahoe、Reno、new Reno、BIC TCP、Vegas、Illinois、westwood等算法。
我们可以通过设计实验,利用NS3实验平台来对比这几种算法。
基本丢包的算法
基本丢包算法采用丢包作为拥塞判断的信号。
Tahoe算法
-
Tahoe算法只有两个状态: 慢启动+拥塞控制。
-
如何判断进入拥塞状态: 传输超时或者收到3个冗余ACK。
-
进入拥塞状态之后,Tahoe将会把此时拥塞窗口的一半作为警戒阈值,然后将拥塞窗口的值变成1个MSS,进入慢启动状态。
Tahoe速度控制
- 慢启动状态: 每RTT,拥塞窗口大小加倍
超时或者3冗余ACK: 快速进行重传,设置cw=1MSS,设置此时拥塞窗口大小的一半为警戒阈值;重新进入慢启动状态。再一次达到警戒阈值,进入拥塞避免状态。 - 拥塞避免状态: 每RTT,拥塞窗口大小加1MSS
超时或者3冗余ACK: 快速进行重传,设置cw=1MSS,进入慢启动状态,设置此时拥塞窗口大小的一半为警戒阈值;
什么是拥塞窗口?
拥塞窗口的大小决定了发送方可以发送的未确认数据量。
在网络正常运行时,拥塞窗口会逐渐增大,从而允许发送方发送更多的数据。
但当网络出现拥塞时,拥塞窗口会减小,以减少数据的发送量,从而缓解网络拥塞状况。
通过动态调整拥塞窗口的大小,TCP协议可以在网络拥塞和流量控制之间进行平衡,以提供可靠的数据传输。
Reno算法
- Reno算法有三种状态: 慢启动+拥塞避免+快速恢复
慢启动状态:每RTT,CW加倍
- 超时: cw=1MSS,cw的一半设置为警戒阈值,然后进入慢启动状态
- 3冗余ACK: 快速重传,然后CW减半,阈值等于此时的CW,进入快速恢复阶段。
- 达到警戒阈值: 进入CA状态。
拥塞避免状态:每RTT,CW+1MSS
- 超时: cw=1MSS,cw的一半设置为警戒阈值,然后进入慢启动状态
- 3冗余ACK: 快速重传,然后CW减半,阈值等于此时的CW,进入快速恢复阶段。
快速恢复状态
- 冗余ACK: cw=cw+1MSS
- 新ACK: 进入CA状态,cw=ssthresth+3
- 超时: 同以上超时处理
Reno和Tahoe的对比
New Reno算法
Reno算法的问题
收到一个新的ACK就过早的退出了快速恢复状态,比较适用于单个段被丢弃的情况。
但是如果网络经常拥塞,或者在一个发送窗口内存在多个数据包丢失的情况下,传输性能会大幅降低。
New Reno算法的改进
- 新增恢复应答判断功能(RACK):在同时存在多个丢包 时,仅当所有报文都被应答后才退出快速恢复状态, 因此能够区分出一次拥塞丢失多个包和多次拥塞两种 不同的状况,解决了Reno算法过早退出快速恢复状态的问题,提高了网络性能。
New Reno适合场景
- 多个段被丢弃的情况,避免丢失段后续的丢失段超时,进入SS状态来恢复。
- 有效吞吐得以提升。
BIC TCP算法
Reno以及New Reno算法的问题
当发生单个丢包的时候,传统算法需要经过多次往返时间RTT才能恢复到最大拥塞窗口,降低了信道带宽利用率。
BIC TCP改进的方法
将拥塞窗口控制转化成实际值搜索问题,采用二分查找法,通过取所允许窗口范围中点的方式来调整拥塞窗口,以加快最大拥塞窗口的恢复速度,提高资源利用率。
BIC TCP方法的缺点
需要经历一个RTT时间才能进行一次二分查找,对于不同RTT时间的业务流,因为查找的频率不同,会造成窗口恢复速度的差异,导致RTT小的数据流更易获得较高的带宽,缺乏公平性。
基于网络测量的算法
基于丢包来判断网络拥塞的算法在如今的无线网络应用中具有一定的局限性,于是有了基于网络测量的算法,通过测量一系列网络性能参数来判断拥塞,具体对比如下所示:
基于时延的算法
- 以端到端的往返时延为参数来调整拥塞控制窗口的大小。
- 同样也存在一定的片面性,因为时延增大不一定代表网络出现了拥塞,尤其是在异构网络环境下,如果
传输路径中包含卫星链路,则会严重影响业务的实际吞吐量。
TCP Vegas算法
- 基本思想: 以往返时间为单位,分别计算单位时间内的预测吞吐量和实际吞吐量。
以δ值的大小判断路径拥挤状况,当δ大于高阈值时,表示该路径发生严重拥挤,因此需要重新降低发送速率,否则保持当前的发送速率。
TCP Illinois算法
- 基本思想: 首先根据排队时延确定增加因子α和乘减因子β,然后再利用上述因子实时调整拥塞窗口的大小。
- 在平均排队时延较小时,表示网络拥塞状态并不严重,因而可以设置一个较大的α值和一个较小的β值,以充分利用信道带宽;
- 而当平均排队时延较大时,表示网络拥塞状态将迅速恶化,则降低α值、增大β值,以快速避免拥塞状态。
基于可用带宽的算法
- 主要通过测量端到端的可用带宽来直接设置拥塞控制窗口的大小,从而能够在避免拥塞的情况下,快速逼近最大传输速率,以充分利用信道带宽资源,同时降低了时延参数的依赖性,并且对使用卫星链路的业务流更加友好。
TCP Westwood算法
- 基本思想:通过计算接收端返回的ACK数据包的速率来估算端到端的可用带宽,然后再根据可用带宽来调整拥塞窗口。
- 当连续收到3个ACK后,就将SSthresh设置为拥塞窗口的当前值,这样算法可以根据可用带宽的变化,实时动态地调整拥塞窗口的大小,以解决缓冲区过度被占用问题。
- 另外,TCP Westwood算法还将丢包结合进来,一旦发现丢包,则根据一个估计数来设置慢启动,而不是直接将窗口减半,以避免在信道误码的情况下传输速率急剧下降。
参考资料
[1]李英华,崔佳荣.基于丢包和网络测量的TCP拥塞控制算法研究综述[J].数字通信世界,2022(04):9-11+17.
https://www.bilibili.com/video/BV16g411g7uj/?spm_id_from=333.788&vd_source=1fc5b788599bbba1e600bd24a4a1511c