HKT VPS的CN2 GIA线路质量本身就不错,从深圳实测延迟能做到28ms左右,但默认的TCP内核参数还是为局域网环境设计的,在香港到大陆这种跨境链路上跑不满带宽是常有的事。
Google开发的BBR拥塞控制算法,正好能解决这个问题。它跟传统CUBIC算法不一样,CUBIC靠检测丢包来降速,把丢包都当成拥塞,在跨境网络这种随机丢包常见的情况下,动不动就降速,吞吐量上不去。BBR则是持续测量带宽和往返时间,主动估计链路的实际承载能力来调整发送速率,不依赖丢包判断,在长距离、高带宽的链路上能把带宽利用率从30%-60%拉到接近上限。
下面这份实操教程,适合Ubuntu 20.04/22.04和Debian 10/11系统。步骤不复杂,跟着做就行。
一、检查当前内核版本
BBR要求Linux内核版本在4.9以上。先确认一下当前版本够不够:
uname -r
如果输出是4.9.0或更高(比如5.4.0-xx、6.x.x),直接跳到第二步。如果版本低于4.9,需要先升级内核。推荐用Ubuntu的HWE内核或者手动安装ELRepo源里的新版内核。
二、开启BBR模块并设置队列规则
BBR需要配合fq(公平队列)调度器一起用。用下面两条命令把配置写进系统配置文件:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
然后让配置生效:
sysctl -p
三、验证BBR是否启用成功
执行下面这个命令,如果输出里能看到bbr,就说明BBR算法已经被系统识别了:
sysctl net.ipv4.tcp_available_congestion_control
再确认一下当前正在用的拥塞控制算法是不是BBR:
sysctl net.ipv4.tcp_congestion_control
如果输出是net.ipv4.tcp_congestion_control = bbr,就说明已经切换成功了。
到这里,BBR就算正式开启了。但仅仅是"开启"还不够,要让BBR在香港到大陆这条链路上真正发挥威力,下面这几项内核参数得跟着调。
四、配套内核参数调优(这一步很关键)
很多教程只教开BBR,但真正决定提速效果的,是缓冲区大小、队列长度这些参数的配合。把下面这段配置追加到/etc/sysctl.conf文件里:
# 基础网络性能
net.core.somaxconn = 65536
net.core.netdev_max_backlog = 65536
# 增大socket最大收发缓存(关键)
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# TCP读写缓冲区(适配香港到大陆的链路)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 开启窗口缩放(让大带宽链路能用满)
net.ipv4.tcp_window_scaling = 1
# 开启SACK和FACK(丢包恢复更快)
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
# 连接建立优化
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 重传和超时控制
net.ipv4.tcp_retries2 = 8
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
改完之后再次执行sysctl -p让新参数生效。
五、验证效果:看看BBR到底起了多大作用
可以用iperf3简单测一下,看开启BBR前后单线程TCP吞吐量的变化,效果一般很明显。
在远端服务器(比如另一台机器)上跑服务端:
iperf3 -s
在HKT VPS上跑客户端测试(把<远端IP>换成实际IP):
iperf3 -c <远端IP> -t 30 -i 1
另外,用ss -ti命令可以实时看到当前TCP连接的拥塞控制算法和具体参数,确认BBR在工作状态:
ss -ti | grep bbr
常见问答:
问:我的系统是CentOS 7,内核版本低于4.9,怎么升级?
答: CentOS 7默认内核是3.10,需要手动升级。推荐用elrepo源安装kernel-ml,过程不复杂,但升级后记得改/etc/default/grub设置默认启动新内核,然后重启。
问:为什么我开启了BBR,但下载速度感觉没变化?
答: 可能有几种情况:①内核参数没配套调优(尤其rmem_max和wmem_max);②检查网卡MTU是不是标准1500,MTU不对会导致分片增多影响性能;③如果是共享带宽或者商家做了限速策略,BBR也救不了。先逐项排查。
问:BBR和BBR Plus有什么区别?哪个更快?
答: BBR Plus是社区修改版,针对多线程做了优化,在某些场景下确实能跑出更高速度。但稳定性不如主线内核自带的BBR,生产环境优先用官方版本。
问:开启BBR之后,TCP的延迟会变低吗?
答: 不一定。BBR主要提升的是吞吐量(带宽利用率),不是直接降低物理延迟。但在网络拥塞的场景下,BBR能避免传统算法因丢包导致的频繁降速,间接让数据包到达得更快、更稳定。
相关内容
