當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 小林coding
[導(dǎo)讀]0x00.前言 這是TCP/IP協(xié)議棧系列的第三篇文章,之前的一篇面試熱點(diǎn)|理解TCP/IP傳輸層擁塞控制算法講述了傳統(tǒng)的擁塞控制算法基本原理,今天一起來(lái)學(xué)習(xí)下最新Linux內(nèi)核中增加的擁塞控制算法:TCP BBR算法。 鑒于TCP擁塞控制算法背后有一套復(fù)雜的數(shù)學(xué)理論和控制


0x00.前言

這是TCP/IP協(xié)議棧系列的第三篇文章,之前的一篇面試熱點(diǎn)|理解TCP/IP傳輸層擁塞控制算法講述了傳統(tǒng)的擁塞控制算法基本原理,今天一起來(lái)學(xué)習(xí)下最新Linux內(nèi)核中增加的擁塞控制算法:TCP BBR算法。

鑒于TCP擁塞控制算法背后有一套復(fù)雜的數(shù)學(xué)理論和控制策略,因此本文也只能是淺談,通過(guò)本文你將了解到以下內(nèi)容(溫馨提示:文章較長(zhǎng)需要一些耐心,也可以先收藏再閱讀):

  • 回顧傳統(tǒng)擁塞控制算法
  • TCP BBR算法的概況
  • BBR算法的原理簡(jiǎn)介

0x01. 擁塞控制簡(jiǎn)史

大約在1988年之前TCP/IP是沒(méi)有擁塞控制的,但是隨著網(wǎng)絡(luò)接入規(guī)模的發(fā)展之前僅有的端到端窗口控制已經(jīng)無(wú)法滿(mǎn)足要求,在1986年引發(fā)大規(guī)模網(wǎng)絡(luò)癱瘓,此時(shí)就要提到一個(gè)重量級(jí)人物:Van Jacobson范·雅各布森。

這位力挽狂瀾的人物入選了計(jì)算機(jī)名人堂Internet Hall of Fame,Van Jacobson大神提出并設(shè)計(jì)實(shí)施了TCP/IP擁塞控制,解決了當(dāng)時(shí)最大的問(wèn)題,來(lái)簡(jiǎn)單看下Van Jacobson的維基百科簡(jiǎn)介(筆者做了部分刪減):

范·雅各布森Van Jacobson是目前作為互聯(lián)網(wǎng)技術(shù)基礎(chǔ)的TCP/IP協(xié)議棧的主要起草者,他以其在網(wǎng)絡(luò)性能的提升和優(yōu)化的開(kāi)創(chuàng)性成就而聞名。

2006年8月,他加入了帕洛阿爾托研究中心擔(dān)任研究員,并在位于相鄰的施樂(lè)建筑群的Packet Design公司擔(dān)任首席科學(xué)家。在此之前,他曾是思科系統(tǒng)公司首席科學(xué)家,并在位于勞倫斯伯克利國(guó)家實(shí)驗(yàn)室的網(wǎng)絡(luò)研究小組任領(lǐng)導(dǎo)者。

范·雅各布森因?yàn)樵谔岣逫P網(wǎng)絡(luò)性能提升和優(yōu)化所作的工作而為人們所知,1988到1989年間,他重新設(shè)計(jì)了TCP/IP的流控制算法(Jacobson算法),他因設(shè)計(jì)了RFC 1144中的TCP/IP頭壓縮協(xié)議即范·雅各布森TCP/IP頭壓縮協(xié)議而廣為人知。此外他也曾與他人合作設(shè)計(jì)了一些被廣泛使用的網(wǎng)絡(luò)診斷工具,如traceroute,pathchar以及tcpdump 。

范·雅各布森于2012年4月入選第一批計(jì)算機(jī)名人堂,計(jì)算機(jī)名人堂簡(jiǎn)介:https://www.internethalloffame.org/inductees/van-jacobson

如圖為Van Jacobson計(jì)算機(jī)名人堂的簡(jiǎn)介:

筆者找了Van Jacobson和Michael J. Karels在1988年11月發(fā)布的關(guān)于擁塞避免和控制的論文,總計(jì)25頁(yè),感興趣的讀者可以查閱:

https://ee.lbl.gov/papers/congavoid.pdf

我們常用的tracetoute和tcpdump也是van-jacobson大神的杰作,作為互聯(lián)網(wǎng)時(shí)代的受益者不由得對(duì)這些互聯(lián)網(wǎng)發(fā)展早期做出巨大貢獻(xiàn)的開(kāi)拓者、創(chuàng)新者、變革者心生贊嘆和敬意。

0x02.傳統(tǒng)擁塞控制算法回顧

2.1  算法目的

看到一篇文章說(shuō)到TCP 傳輸層擁塞控制算法并不是簡(jiǎn)單的計(jì)算機(jī)網(wǎng)絡(luò)的概念,也屬于控制論范疇,感覺(jué)這個(gè)觀點(diǎn)很道理。

TCP擁塞控制算法的目的可以簡(jiǎn)單概括為:公平競(jìng)爭(zhēng)、充分利用網(wǎng)絡(luò)帶寬、降低網(wǎng)絡(luò)延時(shí)、優(yōu)化用戶(hù)體驗(yàn),然而就目前而言要實(shí)現(xiàn)這些目標(biāo)就難免有權(quán)衡和取舍。

但是現(xiàn)在的網(wǎng)絡(luò)通信基礎(chǔ)設(shè)施水平一直在飛速提高,相信在未來(lái)的某個(gè)時(shí)間點(diǎn)這些目標(biāo)都可以達(dá)到,小孩子才選擇,我們大人全都要!

2.2  算法分類(lèi)

在理解擁塞控制算法之前我們需要明確一個(gè)核心的思想:聞道有先后 術(shù)業(yè)有專(zhuān)攻,筆者覺(jué)得這是一個(gè)非常重要的共識(shí)問(wèn)題,把A踩在泥土里,把B吹捧到天上去,都不是很好的做法。

實(shí)際的網(wǎng)絡(luò)環(huán)境十分復(fù)雜并且變化很快,并沒(méi)有哪個(gè)擁塞控制算法可以全部搞定,每一種算法都有自己的特定和適用領(lǐng)域,每種算法都是對(duì)幾個(gè)關(guān)鍵點(diǎn)的權(quán)衡,在無(wú)法兼得的條件下有的算法選擇帶寬利用率,有的算法選擇通信延時(shí)等等。

在明確這個(gè)共識(shí)問(wèn)題之后,我們對(duì)待各個(gè)擁塞控制算法的態(tài)度要平和一些,不要偏激地認(rèn)為誰(shuí)就是最好,幾十年前的網(wǎng)絡(luò)狀況和現(xiàn)在是截然不同的,我們永遠(yuǎn)都是站在巨人的肩膀之上的,這也是科學(xué)和文明進(jìn)步的推動(dòng)力


傳統(tǒng)擁塞控制算法并不是一蹴而就的,復(fù)雜的網(wǎng)絡(luò)環(huán)境和用戶(hù)的高要求推動(dòng)著擁塞控制算法的優(yōu)化和迭代,我們看下基于丟包策略的傳統(tǒng)擁塞控制算法的幾個(gè)迭代版本,如圖所示:


與此同時(shí)還有一類(lèi)算法是基于RTT延時(shí)策略來(lái)進(jìn)行控制的,但是這類(lèi)算法在發(fā)包速率上可能不夠激進(jìn)競(jìng)爭(zhēng)性能不如其他算法,因此在共享網(wǎng)絡(luò)帶寬時(shí)有失公平性,但是算法速率曲線(xiàn)卻是很平滑,我們暫且把這類(lèi)算法當(dāng)做君子吧!

其中比較有名的Vegas算法是大約在1995年由亞利桑那大學(xué)的研究人員拉里·彼得森和勞倫斯·布拉科夫提出,這個(gè)新的TCP擁塞算法以?xún)?nèi)華達(dá)州最大的城市拉斯維加斯命名,后成為T(mén)CP Vegas算法。

關(guān)于基于RTT的TCP Vegas算法的詳細(xì)介紹可以查閱文檔

http://www.cs.cmu.edu/~srini/15-744/F02/readings/BP95.pdf

文檔對(duì)Vegas算法和New Reno做了一些對(duì)比,我們從直觀圖形上可以看到Vegas算法更加平滑,相反New Reno則表現(xiàn)除了較大的波動(dòng)呈鋸齒狀,如圖所示:




實(shí)際上還有更細(xì)粒度的分類(lèi),由于不是今天的重點(diǎn),就不再深入展開(kāi)了,當(dāng)前使用的擁塞控制算法還是基于丟包Loss-Based作為主流。

2.3  算法原則

我們知道在網(wǎng)絡(luò)鏈路中連接的數(shù)量是動(dòng)態(tài)變化且數(shù)量巨大的,每一條連接都面臨著一個(gè)黑盒子式的網(wǎng)絡(luò)環(huán)境,這并不像我們平時(shí)出行時(shí)看看地圖就知道哪里堵了,為了維護(hù)一個(gè)好的網(wǎng)絡(luò)環(huán)境,每一條連接都需要遵守一些約定。


如果連接端都無(wú)所顧忌地發(fā)生數(shù)據(jù)包,那么網(wǎng)絡(luò)鏈路很快就到了瓶頸了,數(shù)據(jù)通信完全無(wú)法保障,所以要到達(dá)一個(gè)穩(wěn)定高效的網(wǎng)絡(luò)環(huán)境還是需要費(fèi)很大心思的,這其中有兩個(gè)重要的概念:公平性和收斂性


說(shuō)來(lái)慚愧筆者在網(wǎng)絡(luò)上找了很多資料去理解TCP擁塞控制的公平性和收斂性,但是仍然沒(méi)有獲得一個(gè)很好的權(quán)威解釋?zhuān)灾荒芙Y(jié)合一些資料和自身的理解去闡述所謂的公平性和收斂性。


筆者認(rèn)為公平性是相對(duì)于網(wǎng)絡(luò)鏈路中的所有連接而言的,這些共享鏈路的連接啟動(dòng)和結(jié)束的時(shí)間不同,在實(shí)際的交互過(guò)程中每條連接占有帶寬的機(jī)會(huì)是均等的,并且由于帶寬限制連接雙方通信的數(shù)據(jù)量是動(dòng)態(tài)調(diào)整并且近似收斂于某個(gè)值,也就是呈現(xiàn)一個(gè)鋸齒狀或者更加平滑的波動(dòng)曲線(xiàn),對(duì)于基于丟包的擁塞控制算法而言AIMD線(xiàn)性增乘性減策略起了關(guān)鍵控制作用。


接下來(lái)我們來(lái)重點(diǎn)看下AIMD特性,先來(lái)貼一張經(jīng)典的圖,直觀看AIMD的過(guò)程:

看看維基百科對(duì)于AIMD的定義:

The additive-increase/multiplicative-decrease(AIMD) algorithm is a feedback control algorithm best known for its use in TCP congestion control.

AIMD combines linear growth of the congestion window with an exponential reduction when congestion is detected.

Multiple flows using AIMD congestion control will eventually converge to use equal amounts of a shared link.

The related schemes of multiplicative-increase/multiplicative-decrease (MIMD) and additive-increase/additive-decrease (AIAD) do not reach stability.

簡(jiǎn)單翻譯一下:線(xiàn)性增加乘性減少算法是一個(gè)反饋控制算法,因其在TCP擁塞控制中的使用而廣為人知,AIMD將線(xiàn)性增加擁塞窗口和擁塞時(shí)乘性減少窗口相結(jié)合,基于AIMD的多個(gè)連接理想狀態(tài)下會(huì)達(dá)到最終收斂,共享相同數(shù)量的網(wǎng)絡(luò)帶寬,與其相關(guān)的乘性增乘性減MIMD策略增性加增性減少AIAD無(wú)法保證穩(wěn)定性。


AIMD相比MIMD和AIAD在連接進(jìn)入擁塞避免階段使用試探線(xiàn)性加策略而不是乘性加策略更加安全,在探測(cè)丟包時(shí)則大幅度乘性減少到1/2這樣對(duì)于緩解擁塞會(huì)有比較好的效果更加快速,相反如果探測(cè)到丟包時(shí)采用線(xiàn)性減少AD可能擁塞持續(xù)的時(shí)間會(huì)更長(zhǎng),總體來(lái)說(shuō)AIMD算是一個(gè)比較簡(jiǎn)單實(shí)用的工程版本的反饋控制,也具備可工程收斂性,因而被廣泛實(shí)用。


2.4  弱網(wǎng)絡(luò)環(huán)境下的AIMD

時(shí)間拉回20多年前,在互聯(lián)網(wǎng)早期幾乎所有的設(shè)備都是通過(guò)有線(xiàn)網(wǎng)絡(luò)進(jìn)行連接通信的,這也是擁塞控制在設(shè)計(jì)之后一直都起到不錯(cuò)作用的重要因素,有線(xiàn)連接的網(wǎng)絡(luò)穩(wěn)定性比較好,因此把丟包作為網(wǎng)絡(luò)擁堵的一個(gè)特征也很正常。


再拉回到現(xiàn)在,從2010年之后移動(dòng)互聯(lián)網(wǎng)蓬勃發(fā)展,移動(dòng)終端的持有量已經(jīng)可以稱(chēng)為海量,無(wú)線(xiàn)網(wǎng)絡(luò)的引入讓網(wǎng)絡(luò)環(huán)境變得更加復(fù)雜,因此不穩(wěn)定丟包變得更加頻繁,但是這時(shí)的丟包就不一定是網(wǎng)絡(luò)擁堵造成的了,因?yàn)檎麄€(gè)數(shù)據(jù)包經(jīng)過(guò)多重路由、交換機(jī)、基站等基礎(chǔ)通信設(shè)備每個(gè)環(huán)節(jié)都可能發(fā)生異常。


在弱網(wǎng)環(huán)境下,尤其是移動(dòng)互聯(lián)網(wǎng)中之前的基于AIMD的擁塞控制策略可能會(huì)由于丟包的出現(xiàn)而大幅降低網(wǎng)絡(luò)吞吐量,從而對(duì)網(wǎng)絡(luò)帶寬的利用率也大大下降,這時(shí)我們采用更加激進(jìn)的控制策略,或許可以獲得更好的效果和用戶(hù)體驗(yàn)。


惡意丟包的情況下,基于AIMD的擁塞控制確實(shí)就相當(dāng)于被限速了,因?yàn)锳IMD確實(shí)有些保守謹(jǐn)慎了,這個(gè)其實(shí)也很好理解的哈。


我們都知道在移動(dòng)網(wǎng)絡(luò)環(huán)境下是由終端以無(wú)線(xiàn)形式和附近的基站交互數(shù)據(jù),之后數(shù)據(jù)傳輸至核心網(wǎng),最后落到具體的服務(wù)器所在的有線(xiàn)網(wǎng)絡(luò),其中最后一公里的區(qū)域?qū)儆诟哐訒r(shí)場(chǎng)景,有線(xiàn)網(wǎng)絡(luò)屬于低延時(shí)高帶寬場(chǎng)景。


在國(guó)外有相關(guān)實(shí)驗(yàn)證明弱網(wǎng)環(huán)境下RTT的變化對(duì)于使用傳統(tǒng)擁塞控制算法下網(wǎng)絡(luò)吞吐量的影響,數(shù)據(jù)和曲線(xiàn)如圖所示:



實(shí)驗(yàn)含義:RTT的增大影響了比如CUBIC這類(lèi)擁塞控制算法的慢啟動(dòng)等階段,我們知道慢啟動(dòng)階段每經(jīng)過(guò)1個(gè)RTT周期擁塞窗口cwnd將加倍,但是更大的RTT就意味著發(fā)送方以很低的速率發(fā)送數(shù)據(jù),更多的時(shí)間是空閑的,發(fā)包的加速度極大將低了,所以整個(gè)吞吐量就下降很明顯。


看下實(shí)驗(yàn)者的原文表述:

The delay before acknowledgment packets are received (= latency) will have an impact on how fast the TCP congestion window increases (hence the throughput). 

When latency is high, it means that the sender spends more time idle (not sending any new packets), which reduces how fast throughput grows.

0x03 TCP BBR算法簡(jiǎn)介

BBR算法是個(gè)主動(dòng)的閉環(huán)反饋系統(tǒng),通俗來(lái)說(shuō)就是根據(jù)帶寬和RTT延時(shí)來(lái)不斷動(dòng)態(tài)探索尋找合適的發(fā)送速率和發(fā)送量。


看下維基百科對(duì)BBR算法的說(shuō)明和資料:

相關(guān)文獻(xiàn):https://queue.acm.org/detail.cfm?id=3022184

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google設(shè)計(jì),并于2016年發(fā)布的擁塞算法,以往大部分擁塞算法是基于丟包來(lái)作為降低傳輸速率的信號(hào),而BBR基于模型主動(dòng)探測(cè)

該算法使用網(wǎng)絡(luò)最近出站數(shù)據(jù)分組當(dāng)時(shí)的最大帶寬往返時(shí)間來(lái)創(chuàng)建網(wǎng)絡(luò)的顯式模型。數(shù)據(jù)包傳輸?shù)拿總€(gè)累積或選擇性確認(rèn)用于生成記錄在數(shù)據(jù)包傳輸過(guò)程和確認(rèn)返回期間的時(shí)間內(nèi)所傳送數(shù)據(jù)量的采樣率。

該算法認(rèn)為隨著網(wǎng)絡(luò)接口控制器逐漸進(jìn)入千兆速度時(shí),分組丟失不應(yīng)該被認(rèn)為是識(shí)別擁塞的主要決定因素,所以基于模型的擁塞控制算法能有更高的吞吐量和更低的延遲,可以用BBR來(lái)替代其他流行的擁塞算法例如CUBIC。Google在YouTube上應(yīng)用該算法,將全球平均的YouTube網(wǎng)絡(luò)吞吐量提高了4%,在一些國(guó)家超過(guò)了14%。BBR之后移植入Linux內(nèi)核4.9版本,并且對(duì)于QUIC可用。

3.1 基于丟包反饋策略可能在的問(wèn)題

基于丟包反饋屬于被動(dòng)式機(jī)制,根源在于這些擁塞控制算法依據(jù)是否出現(xiàn)丟包事件來(lái)判斷網(wǎng)絡(luò)擁塞做減窗調(diào)整,這樣就可能會(huì)出現(xiàn)一些問(wèn)題:

  • 丟包即擁塞
    現(xiàn)實(shí)中網(wǎng)絡(luò)環(huán)境很復(fù)雜會(huì)存在錯(cuò)誤丟包,很多算法無(wú)法很好區(qū)分擁塞丟包和錯(cuò)誤丟包,因此在存在一定錯(cuò)誤丟包的前提下在某些網(wǎng)絡(luò)場(chǎng)景中并不能充分利用帶寬。
  • 緩沖區(qū)膨脹問(wèn)題BufferBloat
    網(wǎng)絡(luò)連接中路由器、交換機(jī)、核心網(wǎng)設(shè)備等等為了平滑網(wǎng)絡(luò)波動(dòng)而存在緩沖區(qū),這些緩存區(qū)就像輸液管的膨脹部分讓數(shù)據(jù)更加平穩(wěn),但是Loss-Based策略在最初就像網(wǎng)絡(luò)中發(fā)生數(shù)據(jù)類(lèi)似于灌水,此時(shí)是將Buffer全部算在內(nèi)的,一旦buffer滿(mǎn)了,就可能出現(xiàn)RTT增加丟包等問(wèn)題,就相當(dāng)于有的容量本不該算在其中,但是策略是基于包含Buffer進(jìn)行預(yù)測(cè)的,特別地在深緩沖區(qū)網(wǎng)絡(luò)就會(huì)出現(xiàn)一些問(wèn)題。
  • 網(wǎng)絡(luò)負(fù)載高但無(wú)丟包事件
    假設(shè)網(wǎng)絡(luò)中的負(fù)載已經(jīng)很高了,只要沒(méi)有丟包事件出現(xiàn),算法就不會(huì)主動(dòng)減窗降低發(fā)送速率,這種情況下雖然充分利用了網(wǎng)絡(luò)帶寬,同時(shí)由于一直沒(méi)有丟包事件出現(xiàn)發(fā)送方仍然在加窗,表現(xiàn)出了較強(qiáng)的網(wǎng)絡(luò)帶寬侵略性,加重了網(wǎng)絡(luò)負(fù)載壓力。
  • 高負(fù)載丟包
    高負(fù)載無(wú)丟包情況下算法一直加窗,這樣可以預(yù)測(cè)丟包事件可能很快就出現(xiàn)了,一旦丟包出現(xiàn)窗口將呈現(xiàn)乘性減少,由高位發(fā)送速率迅速降低會(huì)造成整個(gè)網(wǎng)絡(luò)的瞬時(shí)抖動(dòng)性,總體呈現(xiàn)較大的鋸齒狀波動(dòng)。
  • 低負(fù)載高延時(shí)丟包
    在某些弱網(wǎng)環(huán)境下RTT會(huì)增加甚至出現(xiàn)非擁塞引起丟包,此時(shí)基于丟包反饋的擁塞算法的窗口會(huì)比較小,對(duì)帶寬的利用率很低,吞吐量下降很明顯,但是實(shí)際上網(wǎng)絡(luò)負(fù)載并不高,所以在弱網(wǎng)環(huán)境下效果并不是非常理想。

3.2 TCP BBR算法基本原理

前面我們提到了一些Loss-Based算法存在的問(wèn)題,TCP BBR算法是一種主動(dòng)式機(jī)制,簡(jiǎn)單來(lái)說(shuō)BBR算法不再基于丟包判斷并且也不再使用AIMD線(xiàn)性增乘性減策略來(lái)維護(hù)擁塞窗口,而是分別采樣估計(jì)極大帶寬和極小延時(shí),并用二者乘積作為發(fā)送窗口,并且BBR引入了Pacing Rate限制數(shù)據(jù)發(fā)送速率,配合cwnd使用來(lái)降低沖擊。


3.2.1 一些術(shù)語(yǔ)

  • BDP
    BDP是 Bandwidth-Delay Product 的縮寫(xiě),可以翻譯為 帶寬延時(shí)積 ,我們知道帶寬的單位是bps(bit per second),延時(shí)的單位是s,這樣BDP的量綱單位就是bit,從而我們知道BDP就是衡量一段時(shí)間內(nèi)鏈路的數(shù)據(jù)量的指標(biāo)。這個(gè)可以形象理解為 水管灌水 問(wèn)題, 帶寬就是水管的水流速度立方米/s,延時(shí)就是灌水時(shí)間單位s,二者乘積我們就可以知道當(dāng)前水管內(nèi)存儲(chǔ)的水量 了,這是BBR算法的一個(gè)關(guān)鍵指標(biāo),來(lái)看一張 陶輝大神文章 中的圖以及一些 網(wǎng)絡(luò)場(chǎng)景中的BDP計(jì)算

  • 長(zhǎng)肥網(wǎng)絡(luò)
    我們把具有長(zhǎng)RTT往返時(shí)間和高帶寬的網(wǎng)絡(luò)成為長(zhǎng)肥網(wǎng)絡(luò)或者長(zhǎng)肥管道,它的帶寬延時(shí)積BDP很大大,這種網(wǎng)絡(luò)理論上吞吐量很大也是研究的重點(diǎn)。

  • TCP Pacing機(jī)制
    可以簡(jiǎn)單地理解TCP Pacing機(jī)制就是將擁塞控制中數(shù)據(jù)包的做平滑發(fā)送處理,避免數(shù)據(jù)的突發(fā)降低網(wǎng)絡(luò)抖動(dòng)


3.2.2 帶寬和延時(shí)的測(cè)量

BBR算法的一些思想在之前的基于延時(shí)的擁塞控制算法中也有出現(xiàn),其中必有有名的是TCP WestWood算法。

TCP Westwood改良自New Reno,不同于以往其他擁塞控制算法使用丟失來(lái)測(cè)量,其通過(guò)對(duì)確認(rèn)包測(cè)量來(lái)確定一個(gè)合適的發(fā)送速度,并以此調(diào)整擁塞窗口和慢啟動(dòng)閾值。其改良了慢啟動(dòng)階段算法為敏捷探測(cè)和設(shè)計(jì)了一種持續(xù)探測(cè)擁塞窗口的方法來(lái)控制進(jìn)入敏捷探測(cè),使鏈接盡可能地使用更多的帶寬。

TCP WestWood算法也是基于帶寬和延時(shí)乘積進(jìn)行設(shè)計(jì)的,但是帶寬和延時(shí)兩個(gè)指標(biāo)無(wú)法同時(shí)測(cè)量,因?yàn)檫@兩個(gè)值是有些矛盾的極值,要測(cè)量最大帶寬就要發(fā)送最大的數(shù)據(jù)量但是此時(shí)的RTT可能會(huì)很大,如果要測(cè)量最小的RTT那么久意味著數(shù)據(jù)量非常少最大帶寬就無(wú)法獲得。


TCP BBR算法采用交替采樣測(cè)量?jī)蓚€(gè)指標(biāo),取一段時(shí)間內(nèi)的帶寬極大值和延時(shí)極小值作為估計(jì)值,具體的實(shí)現(xiàn)本文就不展開(kāi)了。


3.2.3 發(fā)送速率和RTT曲線(xiàn)

前面提到了BBR算法核心是尋找BDP最優(yōu)工作點(diǎn),在相關(guān)論文中給出了一張組合的曲線(xiàn)圖,我們一起來(lái)看下:


1.曲線(xiàn)圖示說(shuō)明:
這張圖是由兩個(gè)圖組合而成,目前是展示[數(shù)據(jù)發(fā)送速率vs網(wǎng)絡(luò)數(shù)據(jù)]和[RTTvs網(wǎng)絡(luò)數(shù)據(jù)]的關(guān)系,橫軸是網(wǎng)絡(luò)數(shù)據(jù)數(shù)量。


兩個(gè)縱軸從上到下分別為RTT和發(fā)送速率,并且整個(gè)過(guò)程分為了3個(gè)階段:應(yīng)用限制階段、帶寬限制階段、緩沖區(qū)限制階段。

2.曲線(xiàn)過(guò)程說(shuō)明:

  • app limit應(yīng)用限制階段
    在這個(gè)階段是應(yīng)用程序開(kāi)始發(fā)送數(shù)據(jù),目前網(wǎng)絡(luò)通暢RTT基本保持固定且很小,發(fā)送速率與RTT成反比,因此發(fā)送速率也是線(xiàn)性增加的,可以簡(jiǎn)單認(rèn)為這個(gè)階段有效帶寬并沒(méi)有達(dá)到上限,RTT是幾乎固定的沒(méi)有明顯增長(zhǎng)。
  • band limit帶寬限制階段
    隨著發(fā)送速率提高,網(wǎng)絡(luò)中的數(shù)據(jù)包越來(lái)越多開(kāi)始占用鏈路Buffer,此時(shí)RTT開(kāi)始增加發(fā)送速率不再上升,有效帶寬開(kāi)始出現(xiàn)瓶頸,但是此時(shí)鏈路中的緩存區(qū)并沒(méi)有占滿(mǎn),因此數(shù)據(jù)還在增加,RTT也開(kāi)始增加。
  • buffer limit緩沖區(qū)限制階段
    隨著鏈路中的Buffer被占滿(mǎn),開(kāi)始出現(xiàn)丟包,這也是探測(cè)到的最大帶寬,這個(gè)節(jié)點(diǎn)BDP+BufferSize也是基于丟包的控制策略的作用點(diǎn)。

3.一些看法

網(wǎng)上有一些資料都提及到了這張圖,其中的一些解釋也并不算非常清晰,結(jié)合這些資料和自己的認(rèn)識(shí),筆者認(rèn)為在網(wǎng)絡(luò)鏈路的緩存區(qū)沒(méi)有被使用時(shí)RTT為最小延時(shí)MinRTT,在網(wǎng)絡(luò)鏈路緩沖區(qū)被占滿(mǎn)時(shí)出現(xiàn)最大帶寬MaxBW(鏈路帶寬+鏈路緩存),但是此時(shí)的MaxBW和MinRTT并不是最優(yōu)的而是水位比較高的水平,有數(shù)據(jù)表明按照2ln2的增益計(jì)算此時(shí)為3BDP,整個(gè)過(guò)程中MinRTT和MaxBW是分開(kāi)探測(cè)的,因?yàn)檫@二者是不能同時(shí)被測(cè)量的。


3.2.4 BBR算法的主要過(guò)程

BBR算法和CUBIC算法類(lèi)似,也同樣有幾個(gè)過(guò)程:StartUp、Drain、Probe_BW、Probe_RTT,來(lái)看下這幾個(gè)狀態(tài)的遷移情況:



  • StartUp慢啟動(dòng)階段
    BBR的慢啟動(dòng)階段類(lèi)似于CUBIC的慢啟動(dòng),同樣是進(jìn)行探測(cè)式加速區(qū)別在于BBR的慢啟動(dòng)使用2ln2的增益加速,過(guò)程中即使發(fā)生丟包也不會(huì)引起速率的降低,而是依據(jù)返回的確認(rèn)數(shù)據(jù)包來(lái)判斷帶寬增長(zhǎng),直到帶寬不再增長(zhǎng)時(shí)就停止慢啟動(dòng)而進(jìn)入下一個(gè)階段,需要注意的是在尋找最大帶寬的過(guò)程中產(chǎn)生了多余的2BDP的數(shù)據(jù)量,關(guān)于這塊可以看下英文原文的解釋?zhuān)?/span>

To handle Internet link bandwidths spanning 12 orders of magnitude, Startup implements a binary search for BtlBw by using a gain of 2/ln2 to double the sending rate while delivery rate is increasing. This discovers BtlBw in log2BDP RTTs but creates up to 2BDP excess queue in the process.

  • Drain排空階段
    排空階段是為了把慢啟動(dòng)結(jié)束時(shí)多余的2BDP的數(shù)據(jù)量清空,此階段發(fā)送速率開(kāi)始下降,也就是單位時(shí)間發(fā)送的數(shù)據(jù)包數(shù)量在下降,直到未確認(rèn)的數(shù)據(jù)包數(shù)量<BDP時(shí)認(rèn)為已經(jīng)排空,也可以認(rèn)為是RTT不再下降為止,排空階段結(jié)束。

  • ProbeBW帶寬探測(cè)階段
    經(jīng)過(guò)慢啟動(dòng)和排空之后,目前發(fā)送方進(jìn)入穩(wěn)定狀態(tài)進(jìn)行數(shù)據(jù)的發(fā)送,由于網(wǎng)絡(luò)帶寬的變化要比RTT更為頻繁,因此ProbeBW階段也是BBR的主要階段,在探測(cè)期中增加發(fā)包速率如果數(shù)據(jù)包ACK并沒(méi)有受影響那么就繼續(xù)增加,探測(cè)到帶寬降低時(shí)也進(jìn)行發(fā)包速率下降。

  • ProbeRTT延時(shí)探測(cè)階段
    前面三個(gè)過(guò)程在運(yùn)行時(shí)都可能進(jìn)入ProbeRTT階段,當(dāng)某個(gè)設(shè)定時(shí)間內(nèi)都沒(méi)有更新最小延時(shí)狀態(tài)下開(kāi)始降低數(shù)據(jù)包發(fā)送量,試圖探測(cè)到更小的MinRTT,探測(cè)完成之后再根據(jù)最新數(shù)據(jù)來(lái)確定進(jìn)入慢啟動(dòng)還是ProbeBW階段。

們來(lái)看一下這四個(gè)過(guò)程的示意圖:


曲線(xiàn)說(shuō)明這兩個(gè)坐標(biāo)給出了10Mbps和40msRTT的網(wǎng)絡(luò)環(huán)境下CUBIC和BBR的一個(gè)對(duì)比過(guò)程,在上面的圖中藍(lán)色表示接收者,紅色表示CUBIC,綠色表示BBR,在下面的圖中給出了對(duì)應(yīng)上圖過(guò)程中的RTT波動(dòng)情況,紅色代表CUBIC,綠色代表BBR。

0x04.TCP BBR算法的一些效果

有一些文章認(rèn)為BBR有鮮明的特點(diǎn),把擁塞控制算法分為BBR之前和BBR之后,可見(jiàn)BBR還是有一定影響,但是BBR算法也不是銀彈,不過(guò)可以先看看BBR算法在谷歌推動(dòng)下的一些應(yīng)用效果,其中包括吞吐量、RTT、丟包率影響


從圖中我們可以看到在YouTube應(yīng)用BBR算法之后,就吞吐量普遍有4%左右的提升,特別地在日本的提升達(dá)到14%,RTT的下降更為明顯平均降低33%,其中IN(猜測(cè)是印度地區(qū))達(dá)到50%以上,在丟包率測(cè)試中BBR并不想CUBIC那么敏感,在丟包率達(dá)到5%是吞吐量才開(kāi)始明顯下降。

0x05.總結(jié)

本文先回顧了以CUBIC為代表傳統(tǒng)的擁塞控制算法,之后展開(kāi)了對(duì)BBR算法的一些介紹。

網(wǎng)絡(luò)上關(guān)于BBR的文章很多,筆者也嘗試結(jié)合很多文章和外文資料進(jìn)行理解和歸納,但是由于筆者工作經(jīng)驗(yàn)和水平所致上述文字中可能存在一些問(wèn)題,對(duì)此表達(dá)歉意,并且很多細(xì)節(jié)也并未展開(kāi),所以只能當(dāng)做是一次淺談了。

0x06.巨人的肩膀

  • https://cloud.tencent.com/developer/article/1369617

  • https://www.cnblogs.com/codingMozart/p/9497254.html

  • https://blog.csdn.net/dog250/article/details/57072103

  • https://my.oschina.net/piorcn/blog/806997

  • https://my.oschina.net/piorcn/blog/806994

  • https://my.oschina.net/piorcn/blog/806989

  • https://accedian.com/enterprises/blog/measuring-network-performance-latency-throughput-packet-loss/

  • https://mp.weixin.qq.com/s/BGWkvLl0AAx9slI1lSZMgw

  • https://www.zhihu.com/question/53559433

  • https://cloud.google.com/blog/products/gcp/tcp-bbr-congestion-control-comes-to-gcp-your-internet-just-got-faster

  • https://cloud.tencent.com/developer/article/1383232

  • https://queue.acm.org/detail.cfm?id=3022184

  • https://juejin.im/post/5e0894a3f265da33d83e85fe

  • https://zhuanlan.zhihu.com/p/63888741


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉