本文最后更新于 2025年5月1日 上午
BBR简介 BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种由Google提出的拥塞控制算法,旨在提升网络传输效率和稳定性。传统的TCP拥塞控制算法通常基于丢包或延迟作为网络拥塞的信号,而BBR则通过实时测量网络的瓶颈带宽和往返时延(RTT),动态调整数据发送速率,从而更准确地利用网络资源。
BBR的核心思想是:
带宽估计 :持续估计网络路径的瓶颈带宽,即最大可用传输速率。
时延估计 :测量并维持最小往返时延,用以判断网络拥塞程度。
速率控制 :根据带宽和时延的估计结果调整发送窗口,保证发送速率接近但不超过瓶颈带宽,避免队列积压和包丢失。
相比传统基于丢包的算法,BBR能够更快地恢复带宽,减少网络延迟,提高数据传输的稳定性和吞吐量。它在Google的各类服务以及开源TCP实现(如Linux内核中的BBR模块)中得到了广泛应用。
有关于BBR的测试和具体讲解:https://songxwn.com/TCP_BBR/
具体作用 BBR(Bottleneck Bandwidth and Round-trip propagation time)具体作用主要体现在以下几个方面:
提高网络吞吐量 BBR通过精确估计网络路径的瓶颈带宽和最小往返时延,动态调整发送速率,使数据传输更接近网络实际可用带宽,避免传统拥塞控制算法中因保守估计导致的低吞吐量问题。
减少网络延迟 传统基于丢包的TCP拥塞控制常常导致发送端积累大量数据,造成网络队列拥堵,从而增加延迟。BBR通过控制发送速率避免队列积压,保持网络管道畅通,显著降低端到端的时延。
快速适应网络变化 BBR能够快速响应网络带宽和延迟的变化,及时调整传输速率,减少恢复网络性能所需时间,提升连接的稳定性和用户体验。
提升连接稳定性和公平性 通过避免过度发送造成丢包,BBR保持网络稳定,减少重传和拥塞波动。同时,BBR设计上也考虑与其他拥塞控制算法的公平共享带宽,提升多连接环境下的整体性能。
广泛适用多种网络环境 无论是在高带宽低延迟的数据中心内部网,还是在高延迟的广域网环境,BBR均能较好地发挥作用,提高传输效率和稳定性。
总结来说,BBR通过基于带宽和时延的实时测量优化数据发送速率,提升了TCP连接的速度和稳定性,改善用户的网络体验。
Windows下BBRv2开启和验证 Windows BBR适用版本。 Windows 11 22H2 以上 支持 TCP BBR 拥塞控制,具体系统版本是从10.0.22621版本开始,而Windows Server 2025也支持此功能。
注意:BBR只会加速上行TCP流量。
Windows查看当前TCP拥塞控制(Powershell 管理员界面) 1 2 3 4 5 6 7 8 9 10 11 12 PS C:\Users\admin> Get-NetTCPSetting | Select SettingName, CongestionProvider SettingName CongestionProvider----------- ------------------ Automatic InternetCustom CUBIC DatacenterCustom CUBIC Compat NewReno Datacenter CUBIC Internet CUBIC
Windows修改为BBRv2 (使用Powershell 管理员权限) 1 2 3 4 5 6 7 netsh int tcp set supplemental Template=Internet CongestionProvider=bbr2 netsh int tcp set supplemental Template=Datacenter CongestionProvider=bbr2 netsh int tcp set supplemental Template=Compat CongestionProvider=bbr2 netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=bbr2 netsh int tcp set supplemental Template=InternetCustom CongestionProvider=bbr2
Windows验证BBR 1 2 3 4 5 6 7 8 9 10 11 12 PS C:\Users\admin> Get-NetTCPSetting | Select SettingName, CongestionProvider SettingName CongestionProvider----------- ------------------ Automatic InternetCustom BBR2 DatacenterCustom BBR2 Compat BBR2 Datacenter BBR2 Internet BBR2
Windows切换为默认拥塞控制 (因为可能会造成本地 TCP 连接无法使用,比如导致Hyper-V不能连接) 1 2 3 4 5 6 7 8 netsh int tcp set supplemental Template=Internet CongestionProvider=cubic netsh int tcp set supplemental Template=Datacenter CongestionProvider=cubic netsh int tcp set supplemental Template=Compat CongestionProvider=newreno netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=cubic netsh int tcp set supplemental Template=InternetCustom CongestionProvider=cubic
Debian系列更新内核开启BBRv3 (包括Ubuntu) 安装 Xanmod 内核 - 使用南京大学镜像站 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 wget -qO - https://dl.xanmod.org/archive.key | sudo gpg --dearmor -vo /etc/apt/keyrings/xanmod-archive-keyring.gpgecho 'deb [signed-by=/etc/apt/keyrings/xanmod-archive-keyring.gpg] https://mirror.nju.edu.cn/xanmod releases main' | sudo tee /etc/apt/sources.list.d/xanmod-release.list sudo apt update && sudo apt install linux-xanmod-x64v3 systemctl reboot
RHEL8-10系列开启BBRv1 (包括Rocky) 1 2 3 4 5 6 7 8 9 10 11 12 13 echo "net.ipv4.tcp_congestion_control = bbr" | sudo tee -a /etc/sysctl.confecho "net.core.default_qdisc = fq" | sudo tee -a /etc/sysctl.conf sudo sysctl -p sysctl net.ipv4.tcp_congestion_control
PS:Debian系列如果内核大于4.9 也可以用上述办法不更新内核不重启开启BBRv1
FreeBSD开启 BBR 1 2 3 4 5 6 7 8 9 10 11 12 13 sysrc kld_list+="tcp_rack tcp_bbr" echo 'net.inet.tcp.functions_default=bbr' >> /etc/sysctl.conf reboot sysctl net.inet.tcp.functions_default
运维技术交流群 发送邮件到 ➡️ [email protected]
或者关注WX公众号:网工格物
博客(最先更新) https://songxwn.com/