作者: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的機制。使用這一機制,當丟包發生時,在減少擁塞窗口前,協議在為當前丟包更新前記住上一次的
值,稱為
。發生丟包事件時,如果當前
小于其上一次的值,表示當前流的飽和點降低了,因為可用帶寬的改變。那么,我們允許當前流釋放更多的帶寬,通過進一步降低
的值。