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閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容