0.前言

这几天因为服务器搬迁的缘故, 自搭的VPN线路也跟着从香港搬到了西雅图。 西雅图的ping值可比香港高到不知道哪里去了, 想要有和以前一样的网络体验, 就需要在其他的地方搞一些小聪明了。

在尝试了将协议换成KCP后, 发现因为kcp采用的是疯狂发包的模式, 在发送了一定数量的包后, 容易被运营商QoS, 最后会出现网络断开的情况。 因为在生活中短时间内不会有大量的UDP包发送到某一端口, 所以有一个解决方法为动态调整kcp连接的端口, 从而使每个端口的流量降低至不被检测出来。 但是因为配置实在是过于麻烦, 就准备使用google的黑科技来帮个忙。


1.原理

BBR的原理很复杂, 看起来并不是几个工程师在短时间内就能够做出来的, 详情可以参考来自Google的TCP BBR拥塞控制算法解析这篇文章, 反正我是看不太懂, 但是感觉这种东西有一个感性的认识就好, 真正的深层原理层面涉及到很多的理论, 不是我等可以理解的。。。

照我的理解, 简单来说, 这是一个利己利人的东西。 当网络上只有单向的流量时, 就像高速公路不会堵车, 但一旦在双向车道大家都互相抢道, 看似自己占用对面车道争取了一点时间, 没想到会造成一个大规模的堵车。 而BBR要做的是预测自己的发包量, 使得网络带宽到达最大限度而不发生拥堵。 就像让别人一步, 虽然自己稍微慢了一些, 但总比大拥堵要好的多吧。 所以, BBR算法是在一个不损害大家利益的情况上做对自己有益的事情, 能将服务器的平均发送速度增加不少。


2.配置

BBR的配置十分简单, 只需要三步即可完成, 当然这指的是正常的做法, 至于想用其他个人脚本或者魔改版本的不在讨论中。 唯一需要确定的是内核版本需要在4.9及以上, 可以用下面命令来查看。

uname -a

在系统的配置文件/etc/sysctl.conf中末尾加入下面两句:

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

保存后, 在命令行执行下面命令即可使sysctl.conf文件生效。

sysctl -p

3.检验

当执行下面代码时:

sysctl net.ipv4.tcp_available_congestion_control

出现下面输出即为设置成功 (等号后的顺序可能会有变化) :

net.ipv4.tcp_available_congestion_control = bbr cubic reno

当然也可以执行下面的代码:

lsmod | grep bbr

出现下面输出即为成功:

tcp_bbr 20480 14


4.The End

一般来说, BBR执行后会对服务器数据的发送速度有着较大的提升(但对于我这种ping值贼高网站的响应速度就没什么帮助啦), 快来试试吧~

发表评论

电子邮件地址不会被公开。 必填项已用*标注