运维与部署· 约 6 分钟读完

Linux 开启 BBR 拥塞控制:原生配置与一键脚本两种做法

带宽明明很大,下载速度却上不去?多半是 TCP 拥塞控制算法拖了后腿。本文梳理 BBR 的原理、版本选择、原生开启步骤、脚本方案与常见问题。

  • #Linux
  • #BBR
  • #TCP
  • #网络优化
  • #VPS

买了一台标称 1 Gbps 的 VPS,实测下载却只有几百 KB/s——这种情况很常见,而且不一定是带宽不够。跨洲链路天然带有较高的延迟和丢包,系统默认的 TCP 拥塞控制算法一旦“感觉”到丢包,就会急刹车,把发送速率压得很低。BBR 就是为了解决这个问题而出现的。

本文按“先理解、再选择、后动手”的顺序,讲清楚怎样在 Linux 服务器上启用 BBR。

BBR 到底改变了什么

传统算法(例如 CUBIC)把“丢包”当作网络拥塞的信号:只要出现丢包,就大幅降低发送窗口,之后再慢慢回升。在丢包并不代表拥塞的长距离链路上,这种策略会白白浪费带宽。

BBR(Bottleneck Bandwidth and Round-trip propagation time)由 Google 提出,思路是主动测量链路的瓶颈带宽与往返时延,据此估算最合适的发送速率,而不是被动地等丢包再减速。因此在存在一定随机丢包的海外线路上,它往往能明显提高吞吐。

BBR 优化的是“因丢包导致的不必要降速”。如果链路本身的物理带宽很小,或者被运营商限速,任何算法都无法突破上限。

先看看内核支持情况

BBR 从 Linux 4.9 内核开始内置。先确认当前内核版本和已启用的算法:

uname -r
sysctl net.ipv4.tcp_congestion_control
sysctl net.ipv4.tcp_available_congestion_control

当前主流发行版(Ubuntu 22.04 / 24.04、Debian 11 / 12 等)的内核都远高于 4.9,可以直接使用原生 BBR,不需要更换内核。

几个版本该怎么选

方案特点适用场景
原生 BBR稳定、兼容性最好,随内核维护绝大多数服务器,首选
BBRplus对传输机制做了修改,在极差的跨海链路上更激进老系统或确有需要的场景
BBR2 / 其他魔改版理论上限更高,但需要第三方内核,存在崩溃风险实验与折腾,不建议生产使用

结论很简单:能用原生就用原生,把魔改内核留给确实有需求、也有能力救机器的人。

方法一:原生 BBR(推荐)

内核不低于 4.9 时,三步即可完成。

1. 写入系统参数

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

2. 让配置立即生效

sysctl -p

3. 验证结果

sysctl net.ipv4.tcp_congestion_control
# 期望输出:net.ipv4.tcp_congestion_control = bbr
lsmod | grep bbr

输出里出现 bbr,就说明已经生效。注意重复执行第 1 步会往文件里追加重复行,不影响功能,但建议事后打开 /etc/sysctl.conf 清理一下。

为什么要同时设置 fq

BBR 依赖**公平队列(Fair Queuing,fq)**来控制数据包的发送间隔(pacing)。net.core.default_qdisc=fq 这一行不能漏,否则 BBR 的节奏控制会打折扣。

方法二:使用社区的一键脚本

如果系统很老(比如 CentOS 7,内核低于 4.9),或者想试试 BBRplus,需要先更换内核,手工操作风险较大。社区里有一个流传很广的“四合一”脚本(项目名 Linux-NetSpeed)可以简化流程,大致步骤是:

  1. 下载并运行脚本,先选择“安装内核”(想试 BBRplus 就选对应内核);
  2. 重启服务器;
  3. 重启后再次运行脚本,选择“开启加速”。

执行前请注意三点:

  • 先做快照或备份。更换内核是有风险的操作,一旦无法引导,只能靠云厂商的 VNC / 救援模式。
  • 运行任何第三方脚本前,先读一遍源码,确认它做了什么再执行。
  • 能升级系统就别硬撑老系统:换成较新的 Ubuntu / Debian,用原生 BBR 更省心。

常见问题

开启 BBR 会被服务商认为滥用带宽吗? 不会。BBR 只是调整数据发送的节奏,属于正常的内核调优,主流云厂商的默认镜像里也已经在使用。

开启后速度没有明显变化,是为什么? 先排查物理带宽上限、运营商限速(QoS)、对端服务器自身的出口限制。BBR 只能缓解“丢包导致的降速”,对本来就很窄的链路无能为力。

BBRplus 会让系统不稳定吗? 在 CentOS 7 上确实有过更换内核后无法正常启动的案例。如果不是非用不可,建议使用新版 Ubuntu / Debian 搭配原生 BBR。

小结

  • 内核 ≥ 4.9:直接写入两行 sysctl 参数,用 sysctl 验证即可;
  • 同时启用 fq 队列,不要漏;
  • 需要换内核的老系统,务必先备份,并审阅脚本;
  • BBR 不是万能药,它解决的是丢包造成的降速,不是带宽不足。