作者: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将窗口减少乘数因子
然而,在一个RTT内,窗口大小跳转到中间值可能增长过快。因此,如果中间值和当前最小值之间的距离大于固定常量
当窗口超过最大值时,平衡窗口大小必须大于当前最大值,并且需要找到一个新的最大值。BIC-TCP进入称为max probing的新阶段。max probing使用一个和additive increase和binary search(对数函数;它的逆函数是指数函数)对称的窗口增长函数。
BIC-TCP的性能优势来自于其在
BIC的特性:
- 使用二分查找增加窗口
- 非常稳定
- 高度可扩展
- 在饱和点缓慢增长
- 与其它TCP流公平共享
CUBIC是BIC-TCP的下一个版本,通过使用cubic函数替代BIC-TCP中的凸和凹窗口增长部分,极大地简化了BIC-TCP的窗口调整算法。
CUBIC窗口增长函数
BIC-TCP在高速网络中取得较好的可扩展性,BIC-TCP竞争流之间的公平性和稳定性。然而,BIC-TCP的增长函数对于TCP来说过于激进,尤其是在小RTT或低速网络。此外,窗口控制的不同阶段(binary search increase, max probing, 和)增加了协议实现和性能分析的复杂度。
CUBIC的增长函数的形状类似于BIC-TCP的增长函数形状。CUBIC使用距离最后一次拥塞时间的逝去时间的三次函数。
当紧随丢包事件发生窗口减少时,CUBIC注册
CUBIC的窗口增长函数使用下面的函数:
这里,C为CUBIC参数,t为自窗口减少开始的逝去时间,K为上述函数将W增加到的时间。
当在拥塞避免阶段接收到ACK时,CUBIC使用上述公式计算下一RTT期间的窗口增长速率。CUBIC设置W(t+RTT)为拥塞窗口的候选目标值。假设当前窗口大小为cwnd。根据cwnd的值,CUBIC运行在以下三种不同的模式:首先,如果cwnd小于TCP在时间t可以达到的窗口大小,那么CUBIC使用TCP模式;否则,如果cwnd小于,CUBIC进入concave区域,如果cwnd大于,CUBIC进入convex区域。
Algorithm 1给出CUBIC实现的伪代码。
当在拥塞避免期间收到ACK时,首先采用如下方式检查协议是否在TCP区域。我们可以分析就逝去时间t而言的TCP窗口大小。
如果cwnd小于,那么协议在TCP模式,并且在收到每个ACK时,将cwnd设置为。算法1中的cubic_tcp_friendliness给出这一过程。
当在拥塞避免阶段接收到ACK,如果协议不在TCP模式并且cwnd小于,那么协议处于concave区域。在这一区域,cwnd增加。
如果协议处在convex区域(cwnd的值大于)且不在TCP模式,那么cwnd的值增加。
为了增加现有数据流的带宽释放(为新流释放带宽),我们增加了称为fast convergence的机制。使用这一机制,当丢包发生时,在减少拥塞窗口前,协议在为当前丢包更新前记住上一次的值,称为。发生丢包事件时,如果当前小于其上一次的值,表示当前流的饱和点降低了,因为可用带宽的改变。那么,我们允许当前流释放更多的带宽,通过进一步降低的值。