为你的Linux服务器开启BBR网络加速

Kaku Lv4

前言

最近在优化服务器网络性能时,发现跨国访问和网络波动时速度很不稳定。特别是那些部署在海外的VPS,虽然带宽足够,但实际使用中经常遇到速度忽快忽慢的问题。

尝试了Google开发的TCP BBR拥塞控制算法后,网络吞吐量和稳定性都有了明显提升。今天就来分享一下什么是BBR,以及如何在Linux服务器上开启这个网络加速功能。

什么是TCP BBR?

在如今这个对网络速度要求越来越高的时代,服务器的网络性能直接影响着用户体验和业务效率。TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) 是由 Google 开发的一种先进的 TCP 拥塞控制算法。与传统的基于丢包的拥塞控制算法(如 Cubic)不同,BBR 通过主动探测网络的瓶颈带宽和往返延迟,来更精确地调整发送速率。

BBR的主要优势

启用 BBR 的主要优势包括:

  • 显著提升网络吞吐量:尤其是在有一定丢包率或延迟较高的网络链路上(例如跨国访问、Wi-Fi 和移动网络)
  • 有效降低网络延迟:通过避免不必要的缓冲膨胀 (Bufferbloat),BBR 可以让网络连接更加灵敏
  • 更好的网络波动适应性:即使在网络质量不稳定的情况下,BBR 也能维持相对较高的性能

对于网站服务器、应用服务器、游戏服务器或任何需要处理大量互联网流量的 Linux 服务器来说,开启 BBR 往往能带来立竿见影的性能改善。

拥塞控制算法科普

传统算法的局限性

互联网曾广泛使用基于丢包的拥塞控制算法,例如Reno和CUBIC,这类算法认为丢包和拥塞是等效的。长久以来这类算法都运作的很好,但这并不能说明他们是绝对正确的。这种良好的表现是由于网络交换机和路由器的缓冲区都十分适配当时的网络带宽。而一旦发送者的发送速率足够快,缓冲区便会被快速填满,进而引发丢包。

实际上丢包并不等效于拥塞。拥塞可以被看作是一种在网络路径中,传输中的数据量始终大于带宽-时延积的场景。随着互联网的不断发展,丢包现象在非拥塞场景下也频繁发生。而基于丢包的拥塞控制策略给网络带来了源源不断的问题:

浅缓存问题:在浅缓存场景下,丢包往往发生在拥塞之前。高速、长距离的现代网络,搭配上消费级的浅缓存交换机,基于丢包的拥塞控制算法可能会导致极其糟糕的吞吐量,而这种现象则归咎于这类算法对于丢包的过激反应。

深缓存问题:在有着深缓存的瓶颈链路中,拥塞往往发生在丢包之前。在现今的边缘网络中,基于丢包的拥塞控制算法对众多最后几英里的设备,进行了深缓存的反复填充,引发了不必要的数秒级的排队延时,也就是”缓冲膨胀”的问题。

BBR的创新之处

BBR拥塞控制算法使用了另类的方式:不用丢包去衡量拥塞是否发生,而是直接对网络建模来避免以及应对真实的拥塞。

BBR是基于模型的拥塞控制算法:其行为方式是对传输流通过的网络路径的确切模型的表现。BBR模型包括两个估算参数:

  • BBR.BtlBw:估计的传输通道的瓶颈带宽,估算自滑动窗口的最大传发送速率样本
  • BBR.RTprop:估计的该路径的双向往返传播延时,估算自滑动窗口的最小往返延时样本

通过这两个参数的精确估算,BBR能够更智能地调整发送速率,避免不必要的网络拥塞。

如何在你的Linux服务器上检查和启用BBR?

下面,我们将一步步指导你如何在常见的Linux发行版(如 Ubuntu, Debian, CentOS)上操作。

第一步:检查当前是否已启用BBR

首先,我们需要确认你的系统当前正在使用哪种TCP拥塞控制算法。

在服务器终端输入以下命令:

1
sysctl net.ipv4.tcp_congestion_control

如果输出结果是:

1
net.ipv4.tcp_congestion_control = bbr

恭喜你!这说明 BBR 已经在你的系统上启用了。🎉

接下来,可以进一步确认内核是否已经加载了 BBR 模块:

1
lsmod | grep bbr

如果看到类似下面的输出(具体数字可能不同):

1
tcp_bbr               20480  1

这表明内核已成功加载 BBR 模块,并且系统正在使用 BBR 进行网络加速。

第二步:如果BBR未启用,如何开启?

如果上述检查结果显示你没有启用BBR(例如,tcp_congestion_control 的值是 cubic),别担心,按照以下步骤来开启它。

1. 确认内核版本

BBR 需要 Linux 内核版本 4.9 或更高。使用以下命令查看你的内核版本:

1
uname -r

例如,输出可能是 5.15.0-72-generic。只要主版本号大于等于 4,次版本号大于等于 9,就满足条件。

2. 启用BBR并设置为永久生效

如果内核版本符合要求,你可以通过以下命令立即启用BBR:

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

fq (Fair Queue) 是一种队列调度程序,通常推荐与 BBR 配合使用以获得最佳效果。

为了让这些设置在服务器重启后依然生效,我们需要将它们添加到 sysctl 的配置文件中:

1
2
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

然后,应用这些永久配置,使其立即生效,无需重启:

1
sudo sysctl -p

执行后,系统会加载 /etc/sysctl.conf 中的配置。

3. 再次检查以确认

完成上述步骤后,再次运行检查命令,确保BBR已经成功启用:

1
sysctl net.ipv4.tcp_congestion_control

预期输出:

1
net.ipv4.tcp_congestion_control = bbr

以及:

1
lsmod | grep bbr

预期能看到 tcp_bbr 模块。

性能测试与效果验证

开启BBR后,你可以通过一些简单的测试来验证效果:

网络延迟测试

1
2
3
4
5
# 测试到目标服务器的延迟
ping -c 10 your-target-server.com

# 使用mtr进行更详细的网络路径分析
mtr --report your-target-server.com

带宽测试

1
2
3
4
5
6
# 使用iperf3进行带宽测试
# 在一台服务器上启动服务端
iperf3 -s

# 在另一台服务器上测试到服务端的带宽
iperf3 -c server-ip -t 30

实际应用测试

对于Web服务器,你可以使用curl测试页面加载时间:

1
2
# 测试页面加载时间
time curl -o /dev/null -s -w "Total: %{time_total}s\n" https://your-website.com

常见问题与解决方案

1. 内核版本过低

如果你的内核版本低于4.9,需要先升级内核:

Ubuntu/Debian:

1
2
sudo apt update
sudo apt install linux-image-generic-hwe-20.04

CentOS/RHEL:

1
sudo yum update kernel

2. 模块加载失败

如果lsmod | grep bbr没有输出,可以手动加载模块:

1
sudo modprobe tcp_bbr

3. 配置不生效

检查sysctl配置是否正确:

1
2
3
4
5
# 检查所有网络相关配置
sysctl -a | grep -E "(congestion|qdisc)"

# 检查配置文件语法
sudo sysctl -p

总结

BBR作为Google开发的现代拥塞控制算法,确实在很多场景下能够显著改善网络性能。特别是在跨国访问、网络质量不稳定的环境中,BBR的表现往往优于传统的CUBIC算法。

从我个人的使用经验来看,开启BBR后最明显的改善是网络连接的稳定性。之前那些偶尔出现的网络抖动和速度波动问题得到了很好的缓解,特别是在晚高峰时段,服务器的响应速度更加平稳。

不过也要注意,BBR并不是万能的。在网络质量本身就很好的环境中,你可能感受不到明显的性能提升。但在那些存在一定丢包率或延迟较高的网络环境中,BBR的优势就会非常明显。

参考资料

  • 标题: 为你的Linux服务器开启BBR网络加速
  • 作者: Kaku
  • 创建于 : 2025-09-30 14:21:00
  • 更新于 : 2025-09-30 14:25:12
  • 链接: https://www.kakunet.top/2025/09/30/为你的Linux服务器开启BBR网络加速/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论