傳統 TCP 擁塞控制算法,基於 丟包反饋
的協議。
基於「丟包反饋」的協議是一種 被動式 的擁塞控制機制,其依據網絡中的 丟包事件
來做網絡擁塞判斷。即便網絡中的負載很高時,只要沒有產生擁塞丟包,協議就不會主動降低自己的發送速度。
這種協議可以 最大程度的利用網絡剩餘帶寬,提高吞吐量。
然而,由於基於丟包反饋協議在網絡近飽和狀態下所表現出來的侵略性,一方面大大提高了網絡的帶寬利用率;但另一方面,對於基於丟包反饋的擁塞控制協議來說,大大提高網絡利用率同時意味着下一次擁塞丟包事件爲期不遠了,所以這些協議 在提高網絡帶寬利用率的同時也間接加大了網絡的丟包率
,造成整個網絡的抖動性加劇。
還有誰導致了丟包?
丟包並不總是擁塞導致,丟包可能原因是多方面,比如:
全球最牛的防火牆 GWF 的隨機丟包策略
網路中由於多路徑衰落(multi-path fading)所造成的信號衰減(signal degradation)
通道阻塞造成的丟包(packet drop),再者損壞的封包(corrupted packets)被拒絕通過
有缺陷的網路硬件、網路驅動軟件發生故障
信號的信噪比(SNR)的影響
Google BBR 的出現
我們自然不喜歡 GWF 這種人爲的隨機丟包策略,當路過 GWF 時,數據被丟包,我們在此時應該 立刻重新發包,增大發送的頻率,而不希望降低速度,也就是不希望傳統的 TCP 擁塞算法去控制。
由此,就出現了基於不丟包的擁塞控制算法 CDG
, 以 延遲 作爲判斷依據,延遲增大說明擁塞, 數據開始在路由器的緩衝中積累. 降低發送 窗口 。然而 CDG 算法與基於丟包的算法不兼容, 只有全球的設備都換上 CDG,但這是不可能的,目前市面上的設備不可能一下子都切換到 CDG,因此 Google 就不開心了,Google 的科學家們開發了一種過渡算法來解決這個問題,這個算法的名字就是 BBR(Bottleneck Bandwidth and RTT)
,它是一種全新的 擁塞控制算法,BBR 同 CDG 一致的思想是不以丟包作爲擁塞控制信號,但是和 CDG 不同的是,BBR 能和 cubic 和 reno 共存。
使用BBR前後網絡吞吐量對比圖 / By Google
BBR 由 Google 開發,供 Linux 內核的 TCP 協議棧使用,有了 BBR 算法,Linux 服務器可以顯著提高吞吐量並減少連接延遲,簡單來說 BBR 能加速網絡傳輸速度。此外,部署 BBR 也很容易,因爲該算法只需要發送方,而不需要網絡或接收方的支持。
CentOS 7 服務器 實例上部署 BBR
下面我將向您分享我如何在 CentOS 7 KVM 服務器實例上部署 BBR。
步驟〇: 前置條件
CentOS 7 x64 服務器實例。
一個 sudo 用戶
步驟 ① :使用 ELRepo RPM 倉庫升級內核
要使用BBR,您需要將CentOS 7機器的內核升級到4.9.0。您可以使用ELRepo RPM第三方倉庫輕鬆完成該操作。
在升級之前,您可以查看當前內核:
uname -r
此命令應可能輸出類似於以下字符串:
3.10.0-514.2.2.el7.x86_64
如您所見,當前內核爲3.10.0,因此我們需要更新內核。
更新內核之前,先安裝 ELRepo 倉庫:
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgsudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
使用ELRepo repo安裝4.9.0內核:
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y
確認結果:
rpm -qa | grep kernel
如果安裝成功,您應該看到類似於一下列,且 kernel-ml-4.18.5-1.el7.elrepo.x86_64
在輸出列表中看到:
kernel-ml-4.18.5-1.el7.elrepo.x86_64 kernel-3.10.0-514.el7.x86_64 kernel-tools-libs-3.10.0-514.2.2.el7.x86_64 kernel-tools-3.10.0-514.2.2.el7.x86_64 kernel-3.10.0-514.2.2.el7.x86_64
現在,您需要通過設置默認引導爲 grub2 ,來啓用4.18.5內核。
顯示 grub2 菜單中的所有條目:
sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
結果應該類似於:
CentOS Linux 7 Rescue a0cbf86a6ef1416a8812657bb4f2b860 (4.18.5-1.el7.elrepo.x86_64)CentOS Linux (4.18.5-1.el7.elrepo.x86_64) 7 (Core)CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-bf94f46c6bd04792a6a42c91bae645f7) 7 (Core)
由於行計數開始於 0
,且4.18.5內核條目位於第一行,因此將默認引導條目應設置爲 0
:
sudo grub2-set-default 0
重啓系統:
sudo shutdown -r now // 或 reboot
當服務器重新聯機時,請重新登錄並重新運行uname命令以確認您使用的是正確的內核:
uname -r
您應該看到如下結果:
4.18.5-1.el7.elrepo.x86_64
步驟 ②:啓用BBR
要啓用 BBR 算法,您需要修改 sysctl
配置,如下所示:
echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
現在,您可以使用以下命令,確認是否已經啓用了BBR:
sudo sysctl net.ipv4.tcp_available_congestion_control
正常情況下應輸出類似以下的字符串:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
接下來,繼續驗證:
sudo sysctl -n net.ipv4.tcp_congestion_control
應該輸出類似以下字符串:
bbr
最後,檢查內核模塊是否已加載:
lsmod | grep bbr
應該輸出類似於:
tcp_bbr 20841 0
步驟 ③(可選):測試網絡性能是否增強
爲了測試BBR的網絡性能是否增強,您可以在Web服務器目錄中創建一個文件以供下載,然後從臺式機上的Web瀏覽器測試下載速度。
sudo yum install httpd -y sudo systemctl start httpd.service sudo firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd --reload cd /var/www/html sudo dd if=/dev/zero of=500mb.zip bs=1024k count=500
最後, http://[your-server-IP]/500mb.zip
從桌面計算機上的 Web 瀏覽器訪問 URL ,然後評估下載速度。
當然服務器在國外的話,也可以在 YouTube 上直接打開一個 4K 畫質視頻,進行感官速度測試,如下圖:
使用BBR後的YouTube速度 © JANDOU
就這樣,盡情享受高速網絡帶來的新體驗。
步驟 ④ (可選):刪除無用的舊內核
升級內核之後,往往老舊的內核也保留下來了,執行以下命令,將自動篩選並刪除當前無用的系統內核版本。
yum remove $(rpm -qa | grep kernel | grep -v $(uname -r))
詳情請參考文章: CentOS 7 刪除無用的舊內核
非專業技術人員福利
如果您不是專業技術人員,可以採取一鍵安裝腳本進行安裝,執行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh
詳情請參考文章: 一鍵安裝最新內核並開啓 BBR 腳本
參考鏈接:
TCP BBR congestion control comes to GCP – your Internet just got faster
How to Deploy Google BBR on CentOS 7 By ×××
技術致謝
Neal Cardwell,高級軟件工程師;
Yuchung Cheng,高級軟件工程師;
C. Stephen Gunn,高級職員可靠性工程師;
Soheil Hassas Yeganeh,高級軟件工程師;
Van Jacobson, 研究科學家;
Amin Vahdat, 谷歌研究員。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持 碼農網