在 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。
可以先查看当前内核版本:
uname -r如果输出类似:
4.15.0-xxx-generic或者:
5.4.0-xxx-generic说明内核版本已经满足基本要求。
如果是更老的系统,比如 Ubuntu 16.04 或一些旧版 Debian,需要先确认内核是否达到 4.9 以上。否则即使写入 sysctl 参数,也无法真正启用 BBR。
二、查看当前拥塞控制算法 #
开启之前,可以先看一下系统当前使用的 TCP 拥塞控制算法:
sysctl net.ipv4.tcp_congestion_control常见输出可能是:
net.ipv4.tcp_congestion_control = cubiccubic 是很多 Linux 系统默认使用的拥塞控制算法。
再查看系统当前可用的拥塞控制算法:
sysctl net.ipv4.tcp_available_congestion_control如果输出中包含 bbr,说明当前内核已经支持 BBR,例如:
net.ipv4.tcp_available_congestion_control = reno cubic bbr或者:
net.ipv4.tcp_available_congestion_control = bbr cubic reno只要列表中有 bbr,就可以继续配置。
三、开启 BBR #
开启 BBR 需要设置两个系统参数:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr可以直接追加到 /etc/sysctl.conf 文件中:
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 的重定向方式,例如:
sudo echo xxx >> /etc/sysctl.conf因为 sudo 只作用在 echo 命令上,不一定作用在后面的 >> 重定向上。使用 tee -a 会更稳妥。
如果希望配置更清晰,也可以单独创建一个配置文件:
sudo nano /etc/sysctl.d/99-bbr.conf写入:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr这种方式比直接追加到 /etc/sysctl.conf 更便于以后维护和删除。
四、让配置立即生效 #
如果写入的是 /etc/sysctl.conf,可以执行:
sudo sysctl -p如果写入的是 /etc/sysctl.d/99-bbr.conf,可以执行:
sudo sysctl --system执行后,如果没有报错,就说明系统已经重新加载了 sysctl 配置。
也可以直接临时设置,不写入配置文件:
sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr但这种方式重启后可能会失效。长期使用还是建议写入配置文件。
五、验证 BBR 是否开启 #
配置完成后,先查看当前拥塞控制算法:
sysctl net.ipv4.tcp_congestion_control如果输出是:
net.ipv4.tcp_congestion_control = bbr说明系统当前已经切换到 BBR。
再查看可用算法:
sysctl net.ipv4.tcp_available_congestion_control如果输出中包含:
bbr说明内核支持 BBR。
然后检查内核模块是否加载:
lsmod | grep bbr如果输出类似:
tcp_bbr说明 BBR 模块已经加载。
如果 lsmod | grep bbr 没有输出,但 sysctl net.ipv4.tcp_congestion_control 已经显示为 bbr,也不一定代表失败。有些内核可能把相关能力编译进内核,或者模块显示方式不同。实际判断时,优先看当前拥塞控制算法是否已经是 bbr。
六、完整命令整理 #
如果只是想快速开启,可以按下面这组命令执行:
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如果想用独立配置文件,推荐这样写:
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 #
如果执行:
sysctl net.ipv4.tcp_available_congestion_control结果里没有 bbr,说明当前内核不支持 BBR,或者对应模块不可用。
可以先查看内核版本:
uname -r如果内核低于 4.9,需要升级内核后再尝试。
2. sysctl -p 报错 #
如果执行:
sudo sysctl -p提示某个参数不存在,通常说明当前内核不支持该参数,或者参数名称写错。
可以检查配置文件内容:
cat /etc/sysctl.conf确认是否写成了:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr不要多写空格、中文符号或其他不可见字符。
3. 开启后没有明显加速 #
这很正常。
BBR 主要影响 TCP 拥塞控制行为,它不是突破物理带宽限制的工具。如果线路质量本来很好,或者瓶颈不在 TCP 拥塞控制层面,效果可能不明显。
另外,如果服务前面还有 CDN、负载均衡、反向代理、防火墙、隧道或中转节点,最终效果也会受到这些链路影响。
4. 是否需要重启系统 #
一般不需要重启系统。执行:
sudo sysctl -p或者:
sudo sysctl --system后就可以立即生效。
不过如果你同时升级了内核,那就需要重启进入新内核后再配置或验证。
九、如何关闭 BBR #
如果开启后发现网络表现不稳定,可以恢复为系统默认的 cubic。
编辑配置文件:
sudo nano /etc/sysctl.conf把下面两行删除或注释掉:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr然后可以手动改回 cubic:
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic如果之前使用的是独立配置文件:
sudo rm /etc/sysctl.d/99-bbr.conf
sudo sysctl --system最后检查:
sysctl net.ipv4.tcp_congestion_control如果输出变回:
net.ipv4.tcp_congestion_control = cubic说明已经恢复。
总结 #
Ubuntu 18.04 和 Ubuntu 20.04 通常已经具备开启 TCP BBR 的内核条件。核心配置就是两行:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr写入系统配置后执行:
sudo sysctl -p再通过:
sysctl net.ipv4.tcp_congestion_control确认当前算法是否已经变成:
bbr如果系统可用算法中包含 bbr,并且当前拥塞控制算法已经切换为 bbr,就说明 BBR 已经开启成功。
对服务器网络来说,BBR 是一个值得尝试的优化项,尤其适合跨地区访问、长距离传输和公网服务器场景。但它不是万能加速方案,最终效果还要结合实际网络环境和业务访问情况来判断。