最近聽到DK提到TCP BBR這個名詞時,才知道原來它是一種新的TCP 機制,主要可以提高在網路不穩定下的TCP傳輸品質。
當下聽了覺得蠻神奇的,後來去查了以後才發現,這技術已經發表有幾年了,現在才知道真的有點感到汗顏阿0rz…
TCP BBR
TCP BBR 全名為 TCP Bottleneck Bandwidth and Round-trip propagation time
,是Google 在2017年所發現的TCP 擁塞控制演算法,適用於在網路不可靠的環境下,可以有效的提升傳輸效率。
而Google他們那時也宣稱,在他們導入Youtube以後,整個infra的網路傳輸效率平均提升了4%以上。
而相關的演算法原理可以參考這裡,基本上就是控制TCP資料的傳送端,透過演算法來控制更適合的傳輸速率,進而到讓傳輸的資料速率可以到達目前傳送與接收端之間的實際最大值,也因為這樣子,所以在真實不穩定的網路下,它可以更好的讓資料傳輸量不會過大而造成網路擁塞…
設定TCP BBR
目前只要Linux Kernel 的版本大於4.9以上,就可以直接透過更改sysctl
的方式來啟用目前主機上的TCP BBR,詳細的設定如下:
透過以下的設定來確定目前的tcp 擁塞演算法:
sysctl net.ipv4.tcp_available_congestion_control
在還未設定使用bbr
之前,通常應該會顯示cubic
接著加入以下的設定到/etc/sysctl.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
最後執行以下指令來套用bbr的設定
sudo sysctl -p
理論上,這時候再次用下面的指令時,目前的TCP 設定時,應該就會是bbr
sysctl net.ipv4.tcp_available_congestion_control
一些注意事項
由於TCP BBR的運作模式是主動地計算目前兩端點之前的傳輸頻寬,然後用最佳的方式去想辦法灌滿這段連線,所以從上面模式看來,要啟用的TCP BBR的機器最好是傳送資料端,這樣每次傳送時就會使用這套演算法來強化傳輸效率了。
當然,如果兩端的機器都可以啟用的話,那就沒這個問題了…
何時該套用TCP BBR呢
TCP BBR也不是萬能的,它為了提高在網路不穩定的情況下的傳輸效率,但同時也會在一些情況下,表現不如預期;這篇文章描述了一系列的情境來說明,何時套用TCP BBR會得到更好的傳輸效率。