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 管理员界面)
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 管理员权限)
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
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不能连接)
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 内核 - 使用南京大学镜像站
wget -qO - https://dl.xanmod.org/archive.key | sudo gpg --dearmor -vo /etc/apt/keyrings/xanmod-archive-keyring.gpg
# 从 XanMod 官方网站下载 GPG 公钥,并转换成二进制格式,保存到系统的 keyrings 目录中
echo '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
# 将 XanMod 软件源添加到系统的 APT 软件源列表中,并指定使用刚才导入的公钥进行验证
sudo apt update && sudo apt install linux-xanmod-x64v3
# 更新软件包索引列表,并安装 xanmod 官方提供的 x64v3 架构的 Linux 内核包
systemctl reboot
# 重启,使用新内核,默认会开启BBRv3
RHEL8-10系列开启BBRv1 (包括Rocky)
# 将 BBR 设置为系统默认的 TCP 拥塞控制算法,追加写入 /etc/sysctl.conf 文件(需要 root 权限)
echo "net.ipv4.tcp_congestion_control = bbr" | sudo tee -a /etc/sysctl.conf
# 将流量调度算法设置为 fq(Fair Queueing),是开启 BBR 推荐的默认队列调度器,同样追加写入配置文件
echo "net.core.default_qdisc = fq" | sudo tee -a /etc/sysctl.conf
# 立即应用 /etc/sysctl.conf 中所有配置,使修改生效
sudo sysctl -p
# 查看当前生效的 TCP 拥塞控制算法,确认是否是 bbr
sysctl net.ipv4.tcp_congestion_control
PS:Debian系列如果内核大于4.9 也可以用上述办法不更新内核不重启开启BBRv1
FreeBSD开启 BBR
# 使用 sysrc 命令将 tcp_rack 和 tcp_bbr 内核模块添加到启动时自动加载列表中
# 这样系统启动时会自动加载这两个 TCP 拥塞控制相关的模块
sysrc kld_list+="tcp_rack tcp_bbr"
# 将配置写入 /etc/sysctl.conf 文件,设置 TCP 默认使用的拥塞控制算法为 bbr
# 该设置在系统启动时由 sysctl 读取并应用
echo 'net.inet.tcp.functions_default=bbr' >> /etc/sysctl.conf
# 重启系统,让内核模块加载并应用新的 sysctl 配置
reboot
# 系统启动后,查看当前默认的 TCP 拥塞控制算法,确认是否成功开启 BBR
sysctl net.inet.tcp.functions_default