在Linux kernel 4.13上使用BBR魔改版

前言

所谓的bbr魔改版最初是由hostloc论坛的用户Yankee发布的。因为原贴设置了阅读权限,所以我只能找到转帖和其修改的源码。该魔改版通过修改bbr中的一些参数使该拥塞协议较之Linux kernel中的协议更加“暴力”(但与此同时也破坏了tcp的公平性,如果这样做的人多了,反而会引起更加严重的网络拥塞),解决拥塞的效果更加明显。但是该修改版无法在Linux kernel 4.13+上编译,需要使用另一个修改版

使用教程

  1. 使用root权限在shell里依次输入一下命令,编译内核模块并插入内核,启用新的拥塞协议
1
2
3
4
5
6
7
8
apt install make gcc
wget -O ./tcp_tsunami.c https://raw.githubusercontent.com/liberal-boy/tcp_tsunami/master/tcp_tsunami.c
echo "obj-m:=tcp_tsunami.o" > Makefile
make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc
cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4
insmod tcp_tsunami.ko
sysctl -w net.core.default_qdisc=fq
sysctl -w net.ipv4.tcp_congestion_control=tsunami
  1. 查看内核模块:lsmod | grep tcp_tsunami
  2. 查看tcp拥塞协议:cat /proc/sys/net/ipv4/tcp_congestion_control image

PS:重启后需要重新加载内核,启用协议(为了安全起见,不要设置自启)

1
2
3
insmod tcp_tsunami.ko
sysctl -w net.core.default_qdisc=fq
sysctl -w net.ipv4.tcp_congestion_control=tsunami

效果

  • 服务器:digitalocean旧金山2号机房+共享1G出口带宽(Linux ubuntu 4.13.0-32-generic #35-Ubuntu SMP Thu Jan 25 09:13:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux)

  • 客户端:MediaTek MT7621 + 50M中国移动带宽(Linux RT-N56U_B1 3.4.113 #3 SMP Tue Jan 16 23:14:25 CST 2018 mips GNU/Linux)

测速

在两个著名的测试网站测试,都能很快达到宽带的标称速率,当然这主要归功于移动国际出口的用户少,没有明显的拥塞,如果是电信的163线路,再暴力的拥塞协议都抵不过ISP的QoS。 image image

扩展阅读

  1. 之所以50M带宽,能跑出50M以上的速度。我猜测可能是因为移动在流量整形中使用了令牌桶算法,该算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。但是这些流量都是你自己令牌桶中剩余的,所以你是无法一直突破标称速率的。
  2. speedtest里显示Google是因为我修改了http header里的X-Forwarded-For参数,很多网站提供这个参数获取用户在访问时CDN的IP地址,但是显然这种做法并不安全。