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