梁劍
【摘 要】 隨著網(wǎng)絡技術(shù)的發(fā)展,網(wǎng)絡的帶寬越來越大,并且無線設備應用越來越廣,傳統(tǒng)的擁塞控制算法無法很好地適應這一變化。BBR是由谷歌公司提出的新的擁塞控制算法,它使用往返時延和帶寬控制擁塞窗口。本文通過研究其原理及在Linux中的實現(xiàn),以及相關(guān)實驗,評估了BBR算法的性能,包括吞吐量、往返時間、公平性,并提出了進一步研究的方向。
【關(guān)鍵詞】 擁塞控制;BBR;Linux
【中圖分類號】 TP393 【文獻標識碼】 A
【文章編號】 2096-4102(2019)03-0097-03 開放科學(資源服務)標識碼(OSID):
1前言
TCP(Transmission Control Protocol)是因特網(wǎng)協(xié)議中最重要的協(xié)議之一。作為傳輸層的主要協(xié)議,TCP實現(xiàn)了可靠傳輸、流量控制、擁塞控制等功能。由于網(wǎng)絡層的IP協(xié)議是盡最大努力交付的非連接協(xié)議,因此其不能有效地分配網(wǎng)絡資源,這使得IP網(wǎng)絡中的擁塞控制變得非常難。TCP作為IP網(wǎng)絡的上一層,承擔者擁塞控制的任務,確保因特網(wǎng)不會因擁塞而癱瘓。
TCP基本的擁塞控制算法有四種,分別是慢 開始、擁塞避免、快重傳、快恢復。無論什么樣的擁 塞控制算法,都可以歸結(jié)為設置擁塞控制窗口。傳統(tǒng)的擁塞控制算法通過丟包來感知擁塞的,事實上這已經(jīng)比擁塞的發(fā)生晚了許多。及早將路由器緩存的情況報告給發(fā)送者,是減少丟包的好方法。方法一是使用ECN(顯式擁塞通告),當路由器發(fā)生擁塞時,把減速的信號發(fā)給數(shù)據(jù)發(fā)送者。這種方法的問題是需要對現(xiàn)有的路由器做出較大的改造,并且會加重路由器的負擔。另一種方法是測量RTT(數(shù)據(jù)包往返時延)值,當RTT值增大時,就減小發(fā)送的數(shù)據(jù)。其中的代表是Vegas算法,但它的問題在于當路由器緩存被占據(jù)時,Vegas會主動減速,這時會把帶寬讓給其他TCP數(shù)據(jù)發(fā)送者。
2 BBR算法的工作原理
BBR是一種TCP新的擁塞控制算法,它不再把 丟包作為擁塞產(chǎn)生的信號,而是和Vegas一樣基于RTT來檢測擁塞。相比于丟包,檢測RTT能更早地發(fā)現(xiàn)擁塞,進而采取減速的措施。在BBR算法中通過周期性地檢測RTT和帶寬來發(fā)現(xiàn)網(wǎng)絡的擁塞情況。如圖1所示:
在第一個豎線之前,路由器有充足的帶寬,因 為不會出現(xiàn)排隊,RTT的值是個恒定的值,實際傳 輸?shù)臄?shù)據(jù)就是注入的數(shù)據(jù)量。當?shù)竭_第一個豎線點時,實際帶寬將不再增加,注入更多的數(shù)據(jù)只會增加RTT。在這點,發(fā)送方就不能再增加注入網(wǎng)絡的數(shù)據(jù)量了。當?shù)竭_第二個豎線時,路由器的緩存就會被填滿,丟包就會出現(xiàn)。
在理想情況下,擁塞窗口內(nèi)的數(shù)據(jù)等于已注入網(wǎng)絡的數(shù)據(jù)。這個值就是時延帶寬積,記作BDP(Bandwidth-Delay Product),時延記作RTT,帶寬記作BtlBw,于是就有:
BDP=BtlBw*RTT
BBR擁塞控制算法的核心在于控制注入網(wǎng)絡 的數(shù)據(jù)量,即控制擁塞窗口,擁塞窗口記作Cwnd, 引入?yún)?shù)增益值gain,于是擁塞窗口就有:
Cwnd=BtlBw*RTT*gain
通過控制增益值gain的大小,就能控制實際數(shù) 據(jù)包的發(fā)送速度。
BBR擁塞控制算法有四個階段分別是STARTUP、DRAIN、PROBE_BW、PROBE_RTT。相比其他的擁塞控制算法,BBR沒有傳統(tǒng)意義的慢開始階段,STARTUP可以看作是等效于慢開始。
在STARTUP階段,gain會取一個比較大的值,默認是2/ln2,大約是2.885,在這個階段注入網(wǎng)絡的數(shù)據(jù)量會從一個較小的值開始快速增加,一直到帶寬不再增長,則退出STARTUP階段,進入DRAIN階段。
在DRAIN階段,將設置一個較小的gain值,默認是ln2/2,大約是0.3466,在這個階段先前注入的到網(wǎng)絡中過多數(shù)據(jù)包被排空后,將會進入PROBE_BW階段。
正常情況下,BBR的多數(shù)時間將處于PROBE_BW階段,在這個階段發(fā)送方會試探性地向網(wǎng)絡中多注入一些數(shù)據(jù)包,以檢測是否有多余的帶寬。具體方法是在第一個RTT時間內(nèi)將gain增加到1.25,探測是否有多余帶寬,在第二個RTT,將gain減少到0.75排空多余的數(shù)據(jù)包,接著6個RTT時間內(nèi),將gain設置為1,持續(xù)外送數(shù)據(jù)。這樣每8個RTT作為一個周期,探測帶寬。
一般情況下,在沒有數(shù)據(jù)排隊的情況下,測得 的RTT值最小,BBR會在每10秒的傳輸中消耗200ms探測最小RTT值,這就是PROBE_RTT階段。在此階段,將窗口縮小為4個MSS,可以檢測出最小的RTT,這同時也是帶寬禮讓的過程,讓其他的TCP連接有機會占用帶寬。
3 BBR算法的仿真
3.1 BBR行為仿真
文獻使用Netem實現(xiàn)了BBR仿真,但是數(shù)據(jù)量取得不夠多。本實驗使用MiniNet仿真。只有一個TCP連接,使用BBR算法,帶寬設置是10Mbit/s,鏈路延時為250ms,前20秒的數(shù)據(jù)發(fā)送量如圖2所示。
由圖2可以看出初始階段數(shù)據(jù)發(fā)送量增長很快,在第6秒進入穩(wěn)定狀態(tài),并且多次探測有更大窗口的可能,在第11.5秒,發(fā)送量快速減少進入RTT探測階段。
圖3顯示的是實際完成的吞吐量,由于中間路由器系統(tǒng)的限制,超過8Mb/s的部分就被截掉了。
圖4中數(shù)據(jù)說明,當注入網(wǎng)絡中數(shù)據(jù)量大時,則RTT就變大,當數(shù)據(jù)量小時,RTT變小,但不會小于鏈路的延時。
3.2 BBR與CUBIC的對比
設置瓶頸帶寬是10Mb/s,網(wǎng)絡延時是250ms,CUBIC實際RTT如圖5所示。
從圖5中可以看到CUBIC更傾向于占用緩存,從而導致RTT的值偏大。
圖6是設置瓶頸帶寬是10Mb/s,網(wǎng)絡延時是250ms,一個BBR連接,一個CUBIC連接的情況。
從圖6中看出,BBR的帶寬搶占能力非常強,其原因是BBR不區(qū)分擁塞丟包和誤碼丟包,丟包時對發(fā)送速率影響小,而CUBIC會在丟包時大幅度減速。
3.3 BBR協(xié)議的公平性
正如前面所述,BBR與CUBIC之間不具備公平性。圖7是設置瓶頸帶寬是10Mb/s,網(wǎng)絡延時是250ms,兩個BBR連接的情況。
圖7中在20秒時,第二個BBR連接開始發(fā)送數(shù)據(jù),從圖中分析可知,當多個BBR流同時傳送時,后發(fā)的BBR流是可以獲得帶寬的,關(guān)鍵在于BBR的RTT探測階段會釋放所占用的帶寬,這種退避機制保證了其他的TCP流能獲得發(fā)送數(shù)據(jù)的機會,但這個過程比較長。
4結(jié)論
BBR作為一個新的擁塞控制算法主要體現(xiàn)在 對TCP傳輸中基于延時來調(diào)整發(fā)送速率,由于 BBR對丟包不敏感,因此在一些誤碼率較高的網(wǎng)絡上有積極意義。比如說在衛(wèi)星網(wǎng)絡中,延時和丟包率都比較高,在這樣的網(wǎng)絡中部署B(yǎng)BR具有較高的效果。
BBR擁塞控制算法在網(wǎng)絡延時上有一定的減 小,但當整個網(wǎng)絡中出現(xiàn)因擁塞而導致丟包時,BBR算法不會快速降低發(fā)送速度,使得部署B(yǎng)BR的計算機能搶得更多的帶寬,這使得其在公平性上存在嚴 重問題,這將是下一步的研究方向。
【參考文獻】
[1]Xu LS,Rhee I.CUBIC:A new TCP-friendly high-speedTCP variant[J].ACM SIGOPS Operating System Review,2005,42(5):64-74.
[2]BrakmoL,O’Malley S.TCP vegas:New techniques forcongestion detection and avoidance[J].Conference onCommunications Architectures,1994,24(4): 24-35.
[3]Cardwell N,Cheng YC.BBR:Congestion-based congestioncontrol[J]. ACM Queue,2016,14(5):20-53.
[4]李振濤,任勇毛,周旭,等.BBR-TCP協(xié)議實驗性能評價[J].計算機系統(tǒng)應用,2018,27(9):229-235.