在 Linux 服务器上做网络优化时,经常会看到一个关键词:BBR。

BBR 的全称是 Bottleneck Bandwidth and RTT,是一种 TCP 拥塞控制算法。它的目标不是简单粗暴地“把速度拉满”,而是根据网络链路的瓶颈带宽和往返时延,尽量让连接保持较高吞吐,同时减少不必要的排队延迟。

简单理解,传统拥塞控制算法很多时候会把丢包当成网络拥塞的信号,而 BBR 更关注链路本身的带宽和延迟变化。对于跨国访问、长距离传输、云服务器、网站服务、下载服务、代理服务等场景,BBR 有时能改善吞吐和延迟表现。

不过 BBR 不是万能加速器。它对不同网络、不同运营商、不同线路的效果不一样。开启后是否有明显提升,最终还是要结合实际业务访问体验和网络测试结果判断。

一、适用系统和内核要求 #

TCP BBR 需要 Linux Kernel 4.9 及以上版本支持。

Ubuntu 18.04 LTS 默认内核一般是 4.15,Ubuntu 20.04 LTS 默认 GA 内核一般是 5.4,因此这两个版本通常不需要额外升级内核,就可以直接通过系统参数开启 BBR。

可以先查看当前内核版本:

Bash
uname -r

如果输出类似:

TEXT
4.15.0-xxx-generic

或者:

TEXT
5.4.0-xxx-generic

说明内核版本已经满足基本要求。

如果是更老的系统,比如 Ubuntu 16.04 或一些旧版 Debian,需要先确认内核是否达到 4.9 以上。否则即使写入 sysctl 参数,也无法真正启用 BBR。

二、查看当前拥塞控制算法 #

开启之前,可以先看一下系统当前使用的 TCP 拥塞控制算法:

Bash
sysctl net.ipv4.tcp_congestion_control

常见输出可能是:

TEXT
net.ipv4.tcp_congestion_control = cubic

cubic 是很多 Linux 系统默认使用的拥塞控制算法。

再查看系统当前可用的拥塞控制算法:

Bash
sysctl net.ipv4.tcp_available_congestion_control

如果输出中包含 bbr,说明当前内核已经支持 BBR,例如:

TEXT
net.ipv4.tcp_available_congestion_control = reno cubic bbr

或者:

TEXT
net.ipv4.tcp_available_congestion_control = bbr cubic reno

只要列表中有 bbr,就可以继续配置。

三、开启 BBR #

开启 BBR 需要设置两个系统参数:

INI
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

可以直接追加到 /etc/sysctl.conf 文件中:

Bash
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf

这里不建议直接使用没有 sudo 的重定向方式,例如:

Bash
sudo echo xxx >> /etc/sysctl.conf

因为 sudo 只作用在 echo 命令上,不一定作用在后面的 >> 重定向上。使用 tee -a 会更稳妥。

如果希望配置更清晰,也可以单独创建一个配置文件:

Bash
sudo nano /etc/sysctl.d/99-bbr.conf

写入:

INI
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

这种方式比直接追加到 /etc/sysctl.conf 更便于以后维护和删除。

四、让配置立即生效 #

如果写入的是 /etc/sysctl.conf,可以执行:

Bash
sudo sysctl -p

如果写入的是 /etc/sysctl.d/99-bbr.conf,可以执行:

Bash
sudo sysctl --system

执行后,如果没有报错,就说明系统已经重新加载了 sysctl 配置。

也可以直接临时设置,不写入配置文件:

Bash
sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

但这种方式重启后可能会失效。长期使用还是建议写入配置文件。

五、验证 BBR 是否开启 #

配置完成后,先查看当前拥塞控制算法:

Bash
sysctl net.ipv4.tcp_congestion_control

如果输出是:

TEXT
net.ipv4.tcp_congestion_control = bbr

说明系统当前已经切换到 BBR。

再查看可用算法:

Bash
sysctl net.ipv4.tcp_available_congestion_control

如果输出中包含:

TEXT
bbr

说明内核支持 BBR。

然后检查内核模块是否加载:

Bash
lsmod | grep bbr

如果输出类似:

TEXT
tcp_bbr

说明 BBR 模块已经加载。

如果 lsmod | grep bbr 没有输出,但 sysctl net.ipv4.tcp_congestion_control 已经显示为 bbr,也不一定代表失败。有些内核可能把相关能力编译进内核,或者模块显示方式不同。实际判断时,优先看当前拥塞控制算法是否已经是 bbr

六、完整命令整理 #

如果只是想快速开启,可以按下面这组命令执行:

Bash
uname -r

sysctl net.ipv4.tcp_available_congestion_control

echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf

sudo sysctl -p

sysctl net.ipv4.tcp_congestion_control
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr

如果想用独立配置文件,推荐这样写:

Bash
sudo tee /etc/sysctl.d/99-bbr.conf > /dev/null <<EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

sudo sysctl --system

sysctl net.ipv4.tcp_congestion_control
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr

七、如何判断有没有效果 #

BBR 开启成功,只代表系统已经使用新的 TCP 拥塞控制算法,不代表所有网络访问都会立刻变快。

可以从几个角度观察效果:

第一,看网站或服务的实际访问体验。 比如跨地区访问是否更稳定,下载是否更平滑,远程连接是否减少明显卡顿。

第二,看测速结果。 可以使用 iperf3 做更标准的测试,不过测试两端的网络环境要尽量固定,否则结果容易受线路波动影响。

第三,看延迟和丢包。 BBR 的一个目标是减少不必要的队列堆积,因此在某些线路上可能表现为延迟更稳定,而不仅仅是带宽更高。

第四,看业务类型。 如果服务器主要是内网访问,或者瓶颈不在网络,而是在 CPU、磁盘、数据库或应用本身,那么 BBR 的改善可能并不明显。

八、常见问题 #

1. available_congestion_control 里没有 bbr #

如果执行:

Bash
sysctl net.ipv4.tcp_available_congestion_control

结果里没有 bbr,说明当前内核不支持 BBR,或者对应模块不可用。

可以先查看内核版本:

Bash
uname -r

如果内核低于 4.9,需要升级内核后再尝试。

2. sysctl -p 报错 #

如果执行:

Bash
sudo sysctl -p

提示某个参数不存在,通常说明当前内核不支持该参数,或者参数名称写错。

可以检查配置文件内容:

Bash
cat /etc/sysctl.conf

确认是否写成了:

INI
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

不要多写空格、中文符号或其他不可见字符。

3. 开启后没有明显加速 #

这很正常。

BBR 主要影响 TCP 拥塞控制行为,它不是突破物理带宽限制的工具。如果线路质量本来很好,或者瓶颈不在 TCP 拥塞控制层面,效果可能不明显。

另外,如果服务前面还有 CDN、负载均衡、反向代理、防火墙、隧道或中转节点,最终效果也会受到这些链路影响。

4. 是否需要重启系统 #

一般不需要重启系统。执行:

Bash
sudo sysctl -p

或者:

Bash
sudo sysctl --system

后就可以立即生效。

不过如果你同时升级了内核,那就需要重启进入新内核后再配置或验证。

九、如何关闭 BBR #

如果开启后发现网络表现不稳定,可以恢复为系统默认的 cubic

编辑配置文件:

Bash
sudo nano /etc/sysctl.conf

把下面两行删除或注释掉:

INI
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

然后可以手动改回 cubic:

Bash
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic

如果之前使用的是独立配置文件:

Bash
sudo rm /etc/sysctl.d/99-bbr.conf
sudo sysctl --system

最后检查:

Bash
sysctl net.ipv4.tcp_congestion_control

如果输出变回:

TEXT
net.ipv4.tcp_congestion_control = cubic

说明已经恢复。

总结 #

Ubuntu 18.04 和 Ubuntu 20.04 通常已经具备开启 TCP BBR 的内核条件。核心配置就是两行:

INI
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

写入系统配置后执行:

Bash
sudo sysctl -p

再通过:

Bash
sysctl net.ipv4.tcp_congestion_control

确认当前算法是否已经变成:

TEXT
bbr

如果系统可用算法中包含 bbr,并且当前拥塞控制算法已经切换为 bbr,就说明 BBR 已经开启成功。

对服务器网络来说,BBR 是一个值得尝试的优化项,尤其适合跨地区访问、长距离传输和公网服务器场景。但它不是万能加速方案,最终效果还要结合实际网络环境和业务访问情况来判断。