Linux 开启 BBR 拥塞控制:原生配置与一键脚本两种做法
带宽明明很大,下载速度却上不去?多半是 TCP 拥塞控制算法拖了后腿。本文梳理 BBR 的原理、版本选择、原生开启步骤、脚本方案与常见问题。
买了一台标称 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)可以简化流程,大致步骤是:
- 下载并运行脚本,先选择“安装内核”(想试 BBRplus 就选对应内核);
- 重启服务器;
- 重启后再次运行脚本,选择“开启加速”。
执行前请注意三点:
- 先做快照或备份。更换内核是有风险的操作,一旦无法引导,只能靠云厂商的 VNC / 救援模式。
- 运行任何第三方脚本前,先读一遍源码,确认它做了什么再执行。
- 能升级系统就别硬撑老系统:换成较新的 Ubuntu / Debian,用原生 BBR 更省心。
常见问题
开启 BBR 会被服务商认为滥用带宽吗? 不会。BBR 只是调整数据发送的节奏,属于正常的内核调优,主流云厂商的默认镜像里也已经在使用。
开启后速度没有明显变化,是为什么? 先排查物理带宽上限、运营商限速(QoS)、对端服务器自身的出口限制。BBR 只能缓解“丢包导致的降速”,对本来就很窄的链路无能为力。
BBRplus 会让系统不稳定吗? 在 CentOS 7 上确实有过更换内核后无法正常启动的案例。如果不是非用不可,建议使用新版 Ubuntu / Debian 搭配原生 BBR。
小结
- 内核 ≥ 4.9:直接写入两行 sysctl 参数,用
sysctl验证即可; - 同时启用
fq队列,不要漏; - 需要换内核的老系统,务必先备份,并审阅脚本;
- BBR 不是万能药,它解决的是丢包造成的降速,不是带宽不足。