在互联网的公路上挤死别人 - 全系系统开启BBR提高TCP性能

本文最后更新于 2025年5月1日 上午

BBR简介

BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种由Google提出的拥塞控制算法,旨在提升网络传输效率和稳定性。传统的TCP拥塞控制算法通常基于丢包或延迟作为网络拥塞的信号,而BBR则通过实时测量网络的瓶颈带宽和往返时延(RTT),动态调整数据发送速率,从而更准确地利用网络资源。

BBR的核心思想是:

  1. 带宽估计:持续估计网络路径的瓶颈带宽,即最大可用传输速率。

  2. 时延估计:测量并维持最小往返时延,用以判断网络拥塞程度。

  3. 速率控制:根据带宽和时延的估计结果调整发送窗口,保证发送速率接近但不超过瓶颈带宽,避免队列积压和包丢失。

相比传统基于丢包的算法,BBR能够更快地恢复带宽,减少网络延迟,提高数据传输的稳定性和吞吐量。它在Google的各类服务以及开源TCP实现(如Linux内核中的BBR模块)中得到了广泛应用。

有关于BBR的测试和具体讲解:https://songxwn.com/TCP_BBR/

具体作用

BBR(Bottleneck Bandwidth and Round-trip propagation time)具体作用主要体现在以下几个方面:

  1. 提高网络吞吐量BBR通过精确估计网络路径的瓶颈带宽和最小往返时延,动态调整发送速率,使数据传输更接近网络实际可用带宽,避免传统拥塞控制算法中因保守估计导致的低吞吐量问题。

  2. 减少网络延迟传统基于丢包的TCP拥塞控制常常导致发送端积累大量数据,造成网络队列拥堵,从而增加延迟。BBR通过控制发送速率避免队列积压,保持网络管道畅通,显著降低端到端的时延。

  3. 快速适应网络变化BBR能够快速响应网络带宽和延迟的变化,及时调整传输速率,减少恢复网络性能所需时间,提升连接的稳定性和用户体验。

  4. 提升连接稳定性和公平性通过避免过度发送造成丢包,BBR保持网络稳定,减少重传和拥塞波动。同时,BBR设计上也考虑与其他拥塞控制算法的公平共享带宽,提升多连接环境下的整体性能。

  5. 广泛适用多种网络环境无论是在高带宽低延迟的数据中心内部网,还是在高延迟的广域网环境,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.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)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 将 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

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用 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

运维技术交流群

发送邮件到 ➡️ [email protected]

或者关注WX公众号:网工格物

微信扫码

博客(最先更新)

https://songxwn.com/


在互联网的公路上挤死别人 - 全系系统开启BBR提高TCP性能
https://songxwn.com/ALL_enableBBR/
作者
Song
发布于
2025年5月1日
更新于
2025年5月1日
许可协议