TCP BBR 是 Google 开发的拥塞控制算法,自 Linux 内核 4.9 起内置。在高延迟的长距离线路上,例如从 JUSTG 约翰内斯堡或莫斯科机房的服务器发送数据到亚洲用户,默认的 CUBIC 算法只要遇到少量丢包就会大幅降速;BBR 则会估算路径的实际带宽与往返时间,通常能让网站、下载、API 与文件传输的 TCP 传输速度明显提升。本文说明如何在 Debian、Ubuntu、CentOS、Rocky Linux 与 AlmaLinux 上用 sysctl 原生开启 TCP BBR,并验证是否生效。
为什么 TCP BBR 能改善长距离线路
CUBIC 这类基于丢包的算法,会把每一次丢包视为拥塞并降低发送速率。在延迟 150-300 毫秒的跨洲线路上,每次降速后要很久才能恢复,因此单个连接往往跑不满服务器的带宽。BBR 会对瓶颈带宽与最小往返时间建立模型,并据此控制发送数据包的节奏。它只改变服务器端的发送方式,访客端不需要安装任何东西。
步骤 1:检查内核版本与虚拟化类型
以 root(或具有 sudo 权限的用户)登录 VPS,确认内核版本。BBR 需要 4.9 以上的内核;Debian 11/12、Ubuntu 20.04/22.04/24.04、Rocky Linux 8/9、AlmaLinux 8/9 等当前版本都符合。
uname -r
systemd-detect-virt
若 systemd-detect-virt 显示 kvm、xen 或 vmware,代表你可以自行控制内核,可以继续操作。OpenVZ 或 LXC 容器使用的是宿主机内核,无法在容器内开启 BBR。
步骤 2:确认系统支持 BBR 模块
列出内核可用的拥塞控制算法;如果列表中没有 bbr,先加载模块:
sysctl net.ipv4.tcp_available_congestion_control
modprobe tcp_bbr
sysctl net.ipv4.tcp_available_congestion_control
常见的输出为 net.ipv4.tcp_available_congestion_control = reno cubic bbr。如果 modprobe 提示找不到模块,表示内核太旧,请参考步骤 6。
步骤 3:用 sysctl 开启 TCP BBR
BBR 搭配 fq(Fair Queue)队列调度效果最好。建议创建独立的配置文件,重启后仍会生效,日后也方便移除。Debian/Ubuntu 与 CentOS/Rocky/AlmaLinux 命令完全相同:
printf 'net.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr\n' | sudo tee /etc/sysctl.d/99-bbr.conf
sudo sysctl --system
设置会立即应用到新的连接,不需要重启;已经建立的连接要重新连接后才会改用 BBR。
步骤 4:验证 BBR 是否已启用
运行以下命令检查:
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
lsmod | grep bbr
正常应看到 net.ipv4.tcp_congestion_control = bbr 与 net.core.default_qdisc = fq。lsmod 通常会出现含有 tcp_bbr 的一行;但部分内核把 BBR 直接编译进内核而非模块,只要 sysctl 显示 bbr,lsmod 没有输出也属正常。想查看实际连接是否使用 BBR,可运行 ss -ti,在输出中寻找 bbr。
步骤 5:测试实际效果
建议从距离服务器较远的客户端比较开启前后的速度,例如用亚洲的电脑测试约翰内斯堡的服务器。可使用 iperf3:
# Debian / Ubuntu
apt install -y iperf3
# CentOS / Rocky / AlmaLinux
dnf install -y iperf3
# 在服务器上
iperf3 -s
# 在客户端(请换成你的服务器 IP)
iperf3 -c 203.0.113.10 -t 30 -R
测试期间才在防火墙开放 TCP 5201 端口,测完记得关闭。结果会受时段与客户端网络影响,建议多测几次再比较。
/etc/sysctl.d/99-bbr.conf,再运行 sysctl -w net.ipv4.tcp_congestion_control=cubic 与 sysctl --system。步骤 6:非常旧的内核(旧方法)
CentOS 6/7(内核 2.6/3.10)或 Debian 8 等旧系统没有内置 BBR。过去社区常用 Teddysun 制作的一键脚本,它会安装较新的主线内核并同时开启 BBR,且从不支持 OpenVZ。现在我们只把这种做法视为旧方法:在已停止维护的发行版上更换内核,可能导致 VPS 无法开机,也收不到安全更新。较安全的方式是先备份数据,再从客户中心把 VPS 重装为当前的操作系统版本,然后按照步骤 1-4 操作。
常见问题
OpenVZ 可以开启 TCP BBR 吗?
不行。OpenVZ 等容器平台与宿主机共用内核,无法在虚拟机内部修改拥塞控制。JUSTG 云服务器采用全虚拟化,可以正常按照步骤 1-4 设置。
BBR 能加快 UDP 流量吗?
不能。BBR 只影响服务器发出的 TCP 连接,UDP 服务以及服务器接收的流量不会改变。
客户端也要开启 BBR 吗?
不需要。只要在发送端开启即可;对网站或下载服务器来说,发送端就是你的 VPS。
如果按照本文操作后仍无法解决,请提交工单,JUSTG 技术支持团队会协助你处理。