流量控制


BBR

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google設計,並於2016年發布的擁塞算法,以往大部分擁塞算法是基於丟包來作為降低傳輸速率的信號,而BBR基於模型主動探測。

谷歌BBR算法基於帶寬實時測量的算法:記錄可用帶寬和通信往返時間的。

測量可用帶寬值BtlBW: BBR在每次收到對方的ack時,都要實時計算傳輸速率,該值等於應答數據量除以應答時間。同時以10個通信往返時間為周期,將周期內測量到的最大帶寬值保存在BtlBW中。

測量通信往返時間值RTprop:實時測量通信往返時間RTT,將值保存在RTprop中。如果10秒內,該值沒有變化,就會在一個RTT時間內只發送4個包,通過大幅減少進入網絡的數據包的方式,使測量到的RTT整體變小,進而提升后續的發送速率。

BBR的目標就是讓inflight packets=BDP(帶寬*物理鏈路延遲),就是讓“網飄”的數據包個數,等於物理帶寬和延遲的乘積。
如何理解呢?當前網路上傳輸的包數=QPS(帶寬)×網路延遲,從而是網飄數據包個數最大。如QPS為100,即每秒處理100數據包,網絡平均延遲為1s,則當前網絡上傳輸的最大數據包個數為100;若網絡平均延遲為0.5s,而1s單位時間處理的QPS為100,則當前網絡上傳輸的最大數據包個數為50(前0.5s處理了50數據包,后0.5秒處理了50數據包,1s處理了100數據包即QPS為100,但1s內的每個時間點處理的數據包個數為50);若網絡平均延遲為2s,2s處理了200個數據包,2s內的米格時間點處理200個數據包。

BBR算法主要處理階段包括:

  1. 起步階段
    傳輸起步階段,與傳統算法基本一致,每次發送速率翻倍增長。不同的是,如果連續三次翻倍增長后,對比發現速率增長小於25%,意味着帶寬進入瓶頸,有部分數據進入了緩沖區。於是立即將發送速率減半,並進入排干階段。

  2. 排干階段
    排干階段主要目的通過減半速率讓緩沖區逐漸清空數據。當outstanding package size(TCP發送出去還沒被對方ack的值)≤BtlBW×RTT,這代表緩沖區數據已經處理完畢,所有流量都在鏈路中,就進入了穩健階段。

  3. 穩健階段
    該階段主要任務就是穩定發包。
    同時,由於網絡中可用帶寬不是一成不變的,所以穩健階段在不停地周期性探測最大可用帶寬的變化趨勢。簡單來說,就是周期性地將發送速率乘以一個大於1的系數,檢查可用帶寬是否增加;同一周期內,再將發送速率除以同樣的系數,保持平穩,並探測可用帶寬是否變小。

通過上述三個階段的處理,BBR對傳統算法進行了有效優化,實了無論帶寬升降,TCP發送速率都是小范圍的波動,避免了突發的速率驟然升降,更好利用了可用帶寬。

參考:

  1. 淺談BBR - 簡書
  2. bbr原理 - 知乎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM