最近发现我的宽带丢包特别严重,看nas文件视频非常卡,尝试用bbr之后,带宽从2mbps变到了20mbps,确实有进步,于是分享一下。

测速

在家庭宽带进入千兆时代之后,许多人惊讶地发现:网速越来越快,延迟却依然居高不下,甚至在高峰时段还会出现丢包现象。罪魁祸首往往不是带宽不足,而是网络拥塞控制算法。它就像高速公路的交警,决定了数据包在网络拥堵时如何排队、如何让行。如果交警指挥不当,再宽的马路也会堵成一锅粥。

BBR(Bottleneck Bandwidth and RTT)是 Google 在 2016 年开源的一种全新 TCP 拥塞控制算法。与传统的 CUBIC、Reno 等算法不同,BBR 不再依赖丢包来判断网络是否拥塞,而是实时估算网络的“瓶颈带宽”和“往返时延”,让数据流量既能把带宽吃满,又避免了不必要的延迟。结果是网页加载更快、在线视频更流畅,打游戏时的延迟也会明显降低。

那么,如何在 OpenWrt 软路由上启用 BBR 呢?首先要确认内核支持。较新的 OpenWrt 固件通常内置了 BBR 模块,如果没有,可以通过 opkg install kmod-tcp-bbr 来安装。一旦内核具备 BBR 功能,只需在路由器的配置中添加以下两行:

1
2
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

查看当前 OpenWrt 版本和内核

1
uname -r

要求返回的结果大于4.9。

内核版本

检查是否已经支持 BBR

1
sysctl net.ipv4.tcp_congestion_control

如果返回的是 bbr,说明已经启用,无需后续操作。

如果返回 cubic 或 reno,那我们继续。

安装 BBR 内核模块

更新软件包列表:

1
opkg update

安装 BBR 模块:

1
opkg install kmod-tcp-bbr

opkg 是 OpenWrt 的包管理工具,类似于 Ubuntu 里的 apt。

kmod-tcp-bbr 就是 BBR 的内核模块,必须有它才能启用 BBR。

装好后加载模块:

1
modprobe tcp_bbr

没有报错就成功了。

修改 sysctl 配置,让 BBR 开机自动生效

在 OpenWrt 上推荐把配置写到 /etc/sysctl.d/ 里:

1
2
echo "net.core.default_qdisc=fq" >> /etc/sysctl.d/99-bbr.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/99-bbr.conf

让配置立即生效:

1
sysctl -p /etc/sysctl.d/99-bbr.conf

验证 BBR 是否启用

执行:

1
sysctl net.ipv4.tcp_congestion_control

如果看到:

1
net.ipv4.tcp_congestion_control = bbr

那就说明启用成功了。

关闭 BBR

执行:

1
2
rm /etc/sysctl.d/99-bbr.conf
sysctl -p /etc/sysctl.conf

参考文章

软路由 OpenWrt 开启 BBR(因该站点不符合规定,不做外链)