CUBIC: A New TCP-Friendly High-Speed TCP Variant

作者:Sangtae Ha, Injong Rhee@North Carolina State University, Lisong Xu@University of Nebraska

摘要

CUBIC是TCP(传输控制协议)的一种拥塞控制协议。该协议将TCP中的线性窗口增长函数修改为cubic函数,以提高高速和长距离网络的可扩展性。通过将窗口增长独立于RTT,这些流以同样的速率增长它们的拥塞窗口)。因此,协议在具有不同RTT的流之间取得更好的等效带宽分配。在稳定状态期间,当窗口大小离饱和点较远时CUBIC激进地增加窗口大小;当窗口离饱和点较近时,CUBIC缓慢地增加窗口。当网络的带宽延迟积较大时,这一特性使得CUBIC具有较好的扩展性;同时,CUBIC比TCP数据流具有更高的稳定性和公平性。本文给出CUBIC的设计、实现、性能和评估。

导言

  • 随着Internet的演进,高速和长距离网络的数量增加。
  • 拥塞窗口的大小较大:带宽延迟积(网络中in flight的数据包的总量)较大且需要充分利用网络带宽。

TCP-Reno、TCP-NewReno和TCP-SACK之类的TCP协议在每个RTT增长其窗口大小。这使得TCP的数据传输层速率相对缓慢。在极端情况下,导致网络利用率较低,尤其是当数据流的持续时间低于TCP增长其窗口到BDP大小的时间。例如,假设网络链路的速率为10Gbps, RTT大小为100ms,数据大小为1250字节,BDP的大小约为100,000数据包。对于窗口大小从BDP中间值(50,000)开始的TCP,需要花费50,000个RTT(约1.4小时)。如果数据流在这之前完成,导致链路的利用不充分。

BIC-TCP使用二分查找算法;窗口在数据丢包时的窗口大小(max)和上一次RTT期间没有数据丢包的窗口大小(min)之间增长到中间窗口大小。这种查找中间窗口大小的合理性在于当前路径的容量是min和max窗口大小之间的某个值(如果网络状况在最后一个拥塞信号后没有快速变化)。当窗口大小增长到中间值大小,如果网络没有丢包,意味着网络可以容纳更多的流量,因此BIC-TCP将中间值设置为新的min值,并继续执行二分查找。上述过程的效果是:当窗口大小与路径可用容量较远时,窗口大小快速增长;当窗口大小与可用容量接近时,缓慢减少窗口增量。整个窗口增长函数是一种简化的对数凹函数。与线性函数和凸函数相比,凹函数使得饱和点或平衡点处拥塞窗口更长。

BIC-TCP窗口增长函数

上图给出BIC-TCP的增长函数。当出现数据包丢包时,BIC-TCP将窗口减少乘数因子
\beta
。减少前的窗口大小设置为
W_{max}
,减少后的窗口设置为
W_{min}
。然后,BIC-TCP使用这两个变量执行二分查找。
然而,在一个RTT内,窗口大小跳转到中间值可能增长过快。因此,如果中间值和当前最小值之间的距离大于固定常量
S_{max}
时,BIC-TCP将cwnd的值增加
S_{max}
(线性增长)。如果更新窗口大小后没有数据包丢包,该窗口大小成为新的最小值。这一过程持续到窗口增量小于某个小的常量值
S_{min}
,窗口设置为当前最大值。因此,窗口增长函数类似于一个线性函数,后面跟着一个对数函数(标记为"additive increase"和"binary search")。
当窗口超过最大值时,平衡窗口大小必须大于当前最大值,并且需要找到一个新的最大值。BIC-TCP进入称为max probing的新阶段。max probing使用一个和additive increase和binary search(对数函数;它的逆函数是指数函数)对称的窗口增长函数。
BIC-TCP的性能优势来自于其在
W_{max}
附近的慢增长,additive increase期间的线性增长和最大值探测。

BIC的特性:

  • 使用二分查找增加窗口
  • 非常稳定
  • 高度可扩展
  • 在饱和点缓慢增长
  • 与其它TCP流公平共享

CUBIC是BIC-TCP的下一个版本,通过使用cubic函数替代BIC-TCP中的凸和凹窗口增长部分,极大地简化了BIC-TCP的窗口调整算法。

CUBIC窗口增长函数

BIC-TCP在高速网络中取得较好的可扩展性,BIC-TCP竞争流之间的公平性和稳定性。然而,BIC-TCP的增长函数对于TCP来说过于激进,尤其是在小RTT或低速网络。此外,窗口控制的不同阶段(binary search increase, max probing, S_{max}S_{min})增加了协议实现和性能分析的复杂度。

CUBIC的增长函数的形状类似于BIC-TCP的增长函数形状。CUBIC使用距离最后一次拥塞时间的逝去时间的三次函数。

CUBIC窗口增长函数

当紧随丢包事件发生窗口减少时,CUBIC注册
W_{max}
的值为丢包事件发生时的窗口大小,并减少拥塞窗口,较少因子为
\beta
。这里,
\beta
为窗口减少常数。当由快速恢复进入拥塞避免阶段,CUBIC开始使用cubic函数的concave profile增长窗口。当窗口大小超过
W_{max}
时,cubic函数进入convex profile,并且convex窗口增长阶段开始。这一方式(concave和convex)提高了协议和网络的稳定性,同时保持较高的网络利用率。

CUBIC的窗口增长函数使用下面的函数:
W(t) = C(t-K)^{3} + W_{max}
这里,C为CUBIC参数,t为自窗口减少开始的逝去时间,K为上述函数将W增加到W_{max}的时间。

当在拥塞避免阶段接收到ACK时,CUBIC使用上述公式计算下一RTT期间的窗口增长速率。CUBIC设置W(t+RTT)为拥塞窗口的候选目标值。假设当前窗口大小为cwnd。根据cwnd的值,CUBIC运行在以下三种不同的模式:首先,如果cwnd小于TCP在时间t可以达到的窗口大小,那么CUBIC使用TCP模式;否则,如果cwnd小于W_{max},CUBIC进入concave区域,如果cwnd大于W_{max},CUBIC进入convex区域。

Algorithm 1给出CUBIC实现的伪代码。


part 1

part 2

part 3

当在拥塞避免期间收到ACK时,首先采用如下方式检查协议是否在TCP区域。我们可以分析就逝去时间t而言的TCP窗口大小。
W_{tcp(t)} = W_{max}(1-\beta) + 3\frac{\beta}{2-\beta}\frac{t}{RTT}
如果cwnd小于W_{tcp(t)},那么协议在TCP模式,并且在收到每个ACK时,将cwnd设置为W_{tcp(t)}。算法1中的cubic_tcp_friendliness给出这一过程。

当在拥塞避免阶段接收到ACK,如果协议不在TCP模式并且cwnd小于W_{max},那么协议处于concave区域。在这一区域,cwnd增加\frac{W(t+RTT)-cwnd}{cwnd}

如果协议处在convex区域(cwnd的值大于W_{max})且不在TCP模式,那么cwnd的值增加\frac{W(t+RTT)-cwnd}{cwnd}

为了增加现有数据流的带宽释放(为新流释放带宽),我们增加了称为fast convergence的机制。使用这一机制,当丢包发生时,在减少拥塞窗口前,协议在为当前丢包更新W_{max}前记住上一次的W_{max}值,称为W_{last\_max}。发生丢包事件时,如果当前W_{max}小于其上一次的值,表示当前流的饱和点降低了,因为可用带宽的改变。那么,我们允许当前流释放更多的带宽,通过进一步降低W_{max}的值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容