cubic





abstract

CUBIC是TCP的拥塞控制协议(传输控制协议),是Linux中当前的默认TCP算法。

  • 该协议将现有TCP标准的线性窗口增长函数修改为三次函数,以提高TCP在快速和长距离网络上的可伸缩性。
  • 通过使窗口增长独立于RTT,它还可以在具有不同RTT(往返时间)的流之间实现更多合理的带宽分配,因此,这些流以相同的速率增长其拥塞窗口。
  • 在稳定状态下,当窗口远离饱和点时,CUBIC会主动增大窗口大小,而当窗口接近饱和点时,CUBIC会缓慢增大窗口大小。当网络的带宽和延迟乘积很大时,此功能使CUBIC具有很高的可扩展性,同时具有很高的稳定性,并且对标准TCP流也很公平

Linux中CUBIC的实现经历了多次升级。本文将其设计,实现,性能和演进记录为Linux的默认TCP算法。


1 introduction

  • 在TCP-Reno,TCP-NewReno和TCP-SACK之类的标准TCP中,TCP每往返时间(RTT)会增加一个窗口。至少可以说,这使得在所有主要操作系统(包括Windows和Linux)中使用的TCP的数据传输速度都相当缓慢,尤其是在流的长度比TCP增长的时间短得多的情况下,网络的利用率极低。 especially if the length of flows is much shorter than the time TCP grows its windows to the full size of the BDP of a path.

这里说的就是短流呗= =

  • BIC-TCP是个凹函数,所以在saturation point 停留时间更长 ,而且在快饱和的时候动作也比较舒缓
    • CUBIC 是BIC-TCP的下一版本 which 用三次函数替代了BIC-TCP,简化了窗口调整算法。
    • CUBIC 的三次函数既包含了凸的部分 又包含了凹的部分 [ 实际上任意一个奇函数都有这个性质 ]
  • 窗口增长只取决于两个连续的拥塞事件之间的时间

real time between two consecutive congestion events.

所以 和RTT无瓜
所以 竞争同一条带宽的瓶颈流们能实现很好的RTT-fairness

  • congestion event
    the time when TCP undergoes fast recovery.
  • congestion epoch

定义上问提到的real time

  • 此外,当RTT较短时,由于窗口增长率是固定的,因此其增长率可能会比TCP标准慢【我觉得这得看RTT到底有多短了】。由于TCP标准(例如TCP-SACK)在短时间的RTT下工作良好,因此此功能增强了协议的TCP友好性【那这样不就会很慢吗= =】

增长速率与RTT无关,所以就算RTT比较短,回来的ack很多,同样事件下标准的TCP可能增长了很多窗口 ,但是CUBIC表示与我无瓜

比人家长得慢就是协议友好性我也是服了 = = ??


cubic的几次重大升级

平方根算法的改进

Linux中CUBIC的实现经历了多次升级。The most notable upgrade is the efficient implementation of cubic root calculation.

removal of window clamping



3 Cubic congestion control – detailed work

3.1 BIC-TCP

  • BIC-TCP的主要特点是其独特的窗口增长功能,如引言中所述。图1显示了BIC-TCP的增长功能。当发生丢包事件时,BIC-TCP将其窗口减小乘数β。将缩小之前的窗口大小设置为最大Wmax,缩小之后的窗口大小设置为最小Wmin。然后,BIC-TCP使用这两个参数执行二进制搜索-通过跳到Wmax和Wmin之间的“中点”。由于在Wmax时发生了数据包丢失,因此网络当前可以处理而不会丢失的窗口大小必须介于这两个数字之间。

在这里插入图片描述

但是,在一个RTT中跳到中点可能会增加太多,因此,如果中点和当前最小值之间的距离大于固定常数Smax,则BIC-TCP增量cwnd为Smax(线性增加)。 如果在更新后的窗口大小下BIC-TCP没有丢失数据包,则该窗口大小将成为新的最小值(current min)。 这个过程一直持续到窗口增量小于一个称为Smin的小常数为止,此时将窗口设置为当前最大值(current max)。 因此,窗口缩小后的增长函数很可能是线性函数,然后是对数函数(在图1(a)中分别标记为“加法增长”和“二分搜索”)。

  • window increment有上限 【addictive increase 阶段】
  • window increment低于下限则将当前窗口设置成之前标记过的窗口最大值(current max) 【binary search 阶段 在此结束】,然后开始max probing阶段

如果窗口超过了最大值,则equilibrium window的大小must be大于当前的最大值,and a new maximum must be found。
BIC-TCP进入称为“最大探测(max probing)”的新阶段。 最大探测使用的窗口增长函数与加性增加和二分搜索(对数;其倒数将是指数的)完全对称,然后加性增加。 图1(a)显示了最大探测期间的增长函数。

  • 【max probing阶段】

在最大探测期间,窗口最初缓慢增长,以在附近找到新的最大值,经过一段时间的缓慢增长后,如果找不到新的最大值(即,没有遇到数据包丢失的情况),则它猜测新的最大值距离较远,因此 通过切换到指数增加(其中窗口大小以大的固定增量增加)来切换到更快的增加。

  • BIC-TCP的良好性能来自Wmax附近的缓慢增加以及在addictive increase 和最大探测期间的线性增加。

3.2 CUBIC window growth function

  • BIC-TCP缺点

    • BIC-TCP的增长功能对于TCP来说仍然过于激进,特别是在短RTT或低速网络下。
    • 此外,窗口控制的几个不同阶段(二进制搜索增加,最大探测,Smax和Smin)增加了实现协议和分析其性能的复杂性。
  • CUBIC使用自上次拥塞事件以来经过时间的三次函数。标准TCP的大多数替代算法都使用凸增加函数,在丢失事件之后,窗口增量始终在增加,而CUBIC则使用三次函数的凹轮廓和凸轮廓来增加窗口,形状和BIC-TCP很相似。图1(b)显示了CUBIC的生长功能。

working details

  • 快速恢复和重传TCP依旧沿用,β为因子执行拥塞窗口的乘数减小也沿用BIC-TCP

在发生丢失事件后的窗口缩小后,它将Wmax注册为发生丢失事件的窗口大小,并以β为因子执行拥塞窗口的乘数减小,其中β是窗口减小常数,并且是规则的快速恢复和重传TCP。

  • 在control avoidance阶段做这个事情

在从快速恢复中避免拥塞后,它开始使用三次方函数的凹轮廓来增加窗口。三次函数设置为在Wmax处保持平稳,因此凹面增长将持续到窗口大小变为Wmax为止。之后,三次函数变为凸轮廓,并且凸窗口开始增长。这种样式的窗口调整(先凹后凸)可改善协议和网络稳定性,同时保持较高的网络利用率[12]。

这是因为窗口大小几乎保持不变,从而在Wmax周围形成了一个平台,在此状态下网络利用率最高,并且在稳定状态下, CUBIC的大多数窗口大小样本都接近Wmax,从而提高了网络利用率和协议稳定性。具有凸增长函数的协议往往在饱和点附近具有最大的窗口增量,从而导致大量的数据包丢失。

这个分析写的真好

窗口的增长函数使用如下式子:
在这里插入图片描述

C是CUBIC参数
t是从上一次窗口缩小开始经过的时间
K是上述函数在没有其他损失事件发生时将W增加到Wmax所花费的时间段,并使用以下公式计算

在这里插入图片描述
将W(t + RTT)设置为拥塞窗口的候选目标值。 假设当前窗口大小为cwnd。 根据cwnd的值,CUBIC以三种不同的模式运行。

首先,如果cwnd小于最后一次丢失事件发生后的时间t处(标准)TCP的窗口大小,则CUBIC处于TCP模式(我们将在下面描述如何根据时间确定标准TCP的窗口大小 t)。


否则,如果cwnd小于Wmax,则CUBIC在凹区域中;
如果cwnd大于Wmax,则CUBIC在凸区域中。

在这里插入图片描述
在这里插入图片描述

TCP region

避免拥塞阶段收到ACK时,我们首先检查该协议是否在TCP区域中。

  • 使用[16]中的简单分析,我们可以找到具有加性因子α和乘性因子β的加性增加和乘性减少(AIMD)的平均窗口大小为以下函数:
    在这里插入图片描述

传统TCP 有α = 1 and β = 0.5 ,所以上面的式子应该为
在这里插入图片描述
对于上述的TCP ,如果CUBIC的算法要得到相同的窗口均值,那么given β,我们计算出α的值如下( 就是让原文中的式3等于上述的式子 )
在这里插入图片描述

Multiplicative decrease

当发生丢包时,CUBIC将其窗口大小减小β倍。

  • 我们将β设置为0.2。 将β设置为小于0.5的副作用是收敛速度较慢。
  • 我们相信,尽管β的more adaptive setting of β 可以导致更快的收敛,但它将使协议的分析更加困难,并影响协议的稳定性。
  • β的这种自适应调整是未来的研究问题。

convex region & concave region

增长的pace是一致的(不落在TCP mode里面的时候


Fast Convergence

为了提高CUBIC的收敛速度,我们在协议中添加了一种启发式方法。 当新的流加入网络时,网络中的现有流需要放弃其带宽份额,以使新的流有一定的增长空间。 为了增加现有流对带宽的释放,我们添加了以下机制,称为快速收敛。

发布了177 篇原创文章 · 获赞 28 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Hesy_H/article/details/104203695