TCP BBR 体验记录

大概在2016年国庆节前后,我在网上看到了来自Google的TCP BBR拥塞控制算法。
测试数据看起来非常厉害。
当时并没有特别在意。然而最近关于该算法的中文资料和讨论突然增多了起来,于是,今晚我花了半个小时的时间简单地看了看,对这个算法的一些基本情况有了一个大体的了解。不过,我对该算法的实现细节还不是很清楚,加上我对TCP的传统拥塞控制算法也是一知半解的状态,所以就没法跟大家介绍这个算法啦。
然后,我发现了一个用于CentOS的一键安装4.9版本的内核并启动BBR的脚本,非常简单粗暴,就体验了一下这个算法的效果。

用下面这行命令可以下载并运行一键开启BBR脚本:

wget -O- https://soft.alphabrock.cn/Linux/scripts/bbr_centos_6_7_x86_64.sh | bash

我不建议大家在生产环境下使用它,因为4.9内核太新了,可能会出现一些无法预料的后果。
运行上述脚本以后,重启一下服务器即可。
然后使用该命令查看当前是否使用BBR:

sysctl -a | grep tcp_congestion_control

如果你看到了 net.ipv4.tcp_congestion_control = bbr 字样,说明已经成功升级到4.9版本的内核并打开了BBR。

我所测试的网络环境是这样的:
VPS位于日本东京NTT机房,我的网络是中国电信线路。
我到VPS之间的连接,从我家里出发,一直到上海电信,再到达美国NTT节点,最后到达日本东京。

光速每秒能绕地球七圈半!
嗯,因为网络设备转发数据包的流程复杂,出错要从错误的分组开始重发,还要查路由表,路线也无法自动选择延迟最低的而是经过的路由最少的……

所以……
嗯,几年前有个段子,世界上最遥远的距离不是生与死,而是我在用电信,你在用网通(已经和联通合并了)。
(据说当时两网之间互通总带宽只有1Tbps)

那么绕地球一圈的网络呢?

体验大概令人感动到哭(つд⊂)

测试的项目YouTube视频播放。每一次测试之前我都清除了浏览器缓存。先测试了开启BBR的效果,然后测试了未开启BBR的效果。

没有开启BBR的情况:
NoBBR.png

开启BBR的情况:
BBR.png

直接飞起来了
开启BBR之后,绕地球一圈的距离也能在线观看视频了,啊,真是太感动啦(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥`)。

没有开启BBR时,YouTube打开比较缓慢,打开之后首页的图片在5秒钟之内都没有一个加载出来,10秒之内陆续加载出了4~5个。播放视频时,自动选择了144P分辨率。我手动切换至480P,连接断断续续,几乎无法正常观看。

开启BBR之后,TCP/IP的拥塞控制全部交给BBR算法接管,发送窗口大小由BBR给出,数据包将在BBR的指导下进行发送。

YouTube打开速度比较正常,打开之后2秒内陆续加载图片,5秒后首页图片全部加载完毕。播放视频时,自动选择了720P分辨率,手动切换至480P,缓冲速度大约是播放速度的2.5倍,全程流畅观看。

之后重复进行了几次测试,也测试了推特之类的网站加载速度,从体验结果上看,TCP BBR和传统TCP拥塞控制算法在使用体验上差别极大。原本糟糕到几乎只能浏览文字网页的网络环境,在BBR算法下也能够正常访问网络了。

开启BBR之后,下载速率最低约350Kbps,最高约2400Kbps,相比之前时断时续的网络质量,提升十分显著。

听说YouTube都部署BBR啦,然后发展中国家的访问速度(看的是中文介绍,也许是视频加载速度)提高了四倍(=°Д°=)

你也来试试看吧~

1 条评论

  1. 石樱灯笼

    2011年在电信工作过一阵,有一次是电信放在联通机房的机器作调整,去现场处理。那个机架上就放着电信和联通互通的路由器,用的都是同轴电缆而非网线或光线。当时还有个用户偷偷同时办理的铁通和电信的宽带做流量搬运,被抓被罚了。
    BBR虽好,可惜我用不了,主机是OZ的,不能升级内核(´・ ・`。)。

发表评论