欢迎光临
我们一直在努力

比锐速还强的 TCP拥塞控制技术 —— TCP-BBR 测试及开启教程

本文最后更新于 2016年12月17日 21:54 可能会因为没有更新而失效。如已失效或需要修正,请留言!

这几天BBR很火的样子,我就半夜测试一下。BBR和锐速都属于TCP拥塞控制技术,虽然这类技术互联网上面不少,不过我都不是很了解。

本文章仅为我个人的测试,各地区测试情况不一样,而且BBR还处于开发初期并且开源,而锐速则已经停止开发了。


一键脚本安装:『原创』Debian/Ubuntu系统 TCP拥塞控制技术 ——TCP-BBR 一键安装脚本

注意:TCP-BBR和锐速一样,不支持Openvz,查看本教程之前,请先确定你的VPS的虚拟化技术!
注意:本教程涉及到VPS更换内核,所以如果步骤错误,或者VPS不兼容最新的内核,会导致无法开机等错误,请勿用于生产环境!!!!

启动步骤

首先是教程,本人喜欢Debian,所以我先使用 Debian 7 / 8 x64 系统来做测试。Ubuntu随后考虑加上。

每一个步骤,我都会加上VPS中执行后的提示,本教程以64位为例。但是各个系统可能会存在差异,所以仅为参考。

在 2016-12-05 21:00 更新的 4.9.0-rc8 内核已经支持了TCP-BBR,最新内核看这里。(目前最新的是 4.9.0 正式版)

注意:TCP-BBR必须是 2016-12-05 21:00 更新的 4.9.0-rc8 内核及以后的版本 才能开启,而锐速并不支持这个最新的内核版本,所以TCP-BBR和锐速是不能共存的。

下载内核文件(64位系统)

  1. wget O linuximage4.9.0amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

下载内核文件(32位系统)

  1. wget O linuximage4.9.0i386.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_i386.deb
  1. # VPS提示(64位)
  2.  
  3. root@bbr1:~# wget -O linux-image-4.9.0-amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb
  4. converted ‘http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb’ (ANSI_X3.41968) -> ‘http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9-rc8/linux-image-4.9.0-040900rc8-generic_4.9.0-040900rc8.201612051443_amd64.deb’ (UTF8)
  5. 20161208 15:31:16 http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb
  6. Resolving kernel.ubuntu.com (kernel.ubuntu.com)… 91.189.94.216
  7. Connecting to kernel.ubuntu.com (kernel.ubuntu.com)|91.189.94.216|:80... connected.
  8. HTTP request sent, awaiting response 200 OK
  9. Length: 60489324 (58M) [application/xdebianpackage]
  10. Saving to: ‘linux-image-4.9.0-amd64.deb’
  11.  
  12. linuximage4.9.0040900 100%[=====================================>] 57.69M 3.02MB/s in 14s
  13.  
  14. 20161208 15:31:31 (4.05 MB/s) ‘linux-image-4.9.0-amd64.deb’ saved [60489324/60489324]

安装内核(64位)

  1. dpkg i linuximage4.9.0amd64.deb

安装内核(32位)

  1. dpkg i linuximage4.9.0i386.deb
  1. # VPS提示
  2.  
  3. root@bbr1:~# dpkg -i linux-image-4.9.0-amd64.deb
  4. Selecting previously unselected package linuximage4.9.0040900rc8generic.
  5. (Reading database 25141 files and directories currently installed.)
  6. Preparing to unpack linuximage4.9.0040900rc8generic_4.9.0040900rc8.201612051443_amd64.deb
  7. Done.
  8. Unpacking linuximage4.9.0040900rc8generic (4.9.0040900rc8.201612051443)
  9. Setting up linuximage4.9.0040900rc8generic (4.9.0040900rc8.201612051443)
  10. Running depmod.
  11. updateinitramfs: deferring update (hook will be called later)
  12. Examining /etc/kernel/postinst.d.
  13. runparts: executing /etc/kernel/postinst.d/aptautoremoval 4.9.0040900rc8generic /boot/vmlinuz4.9.0040900rc8generic
  14. runparts: executing /etc/kernel/postinst.d/initramfstools 4.9.0040900rc8generic /boot/vmlinuz4.9.0040900rc8generic
  15. updateinitramfs: Generating /boot/initrd.img4.9.0040900rc8generic
  16. runparts: executing /etc/kernel/postinst.d/zzupdategrub 4.9.0040900rc8generic /boot/vmlinuz4.9.0040900rc8generic
  17. Generating grub configuration file
  18. Found linux image: /boot/vmlinuz4.9.0040900rc8generic
  19. Found initrd image: /boot/initrd.img4.9.0040900rc8generic
  20. Found linux image: /boot/vmlinuz3.16.04amd64
  21. Found initrd image: /boot/initrd.img3.16.04amd64
  22. done

列出并删除旧内核

列出VPS 除了刚才安装的内核以外的 所有内核名称:

注意:这个代码是排除了刚才安装的 4.9.0内核,所以不会显示刚才安装的那个内核。删除了多余的内核后,就会什么都不显示!
  1. dpkg l|grep linuximage | awk ‘{print $2}’ | grep v ‘linux-image-4.9.0-040900-generic’
  1. root@bbr1:~# dpkg -l|grep linux-image | awk ‘{print $2}’ | grep -v ‘linux-image-4.9.0-040900-generic’
  2. linuximage3.16.04amd64
  3. linuximageamd64

我使用的VPS是 3.16.0-4-amd64 内核的,所以删除这两个内核:linux-image-3.16.0-4-amd64、linux-image-amd64

删除旧内核:

  1. aptget purge 旧内核名称
  1. # !!!!示例!!!!
  2. # 比如我是有这两个内核,所以我把这两个删掉,不要照着我的这个步骤做,自己换成你VPS的内核名称!!!
  3. aptget purge linuximage3.16.04amd64
  4. aptget purge linuximageamd64
  5. # !!!!示例!!!!

删除旧内核的过程中会提示你是否继续,选择 Y ,然后还会提示你是否终止删除内核的行为,选择 NO

  1. # VPS提示
  2.  
  3. root@bbr1:~# apt-get purge linux-image-3.16.0-4-amd64
  4. Reading package lists Done
  5. Building dependency tree
  6. Reading state information Done
  7. The following packages were automatically installed and are no longer required:
  8. libuuidperl linuxbase
  9. Use ‘apt-get autoremove’ to remove them.
  10. The following packages will be REMOVED:
  11. linuximage3.16.04amd64* linuximageamd64*
  12. 0 upgraded, 0 newly installed, 2 to remove and 7 not upgraded.
  13. After this operation, 164 MB disk space will be freed.
  14. Do you want to continue? [Y/n] y
  15. (Reading database 31152 files and directories currently installed.)
  16. Removing linuximage3.16.04amd64 (3.16.361+deb8u2)
  17. Ok, proceeding with removing running kernel image.
  18. /etc/kernel/postrm.d/initramfstools:
  19. updateinitramfs: Deleting /boot/initrd.img3.16.04amd64
  20. /etc/kernel/postrm.d/zzupdategrub:
  21. Generating grub configuration file
  22. Found linux image: /boot/vmlinuz4.9.0040900rc8generic
  23. Found initrd image: /boot/initrd.img4.9.0040900rc8generic
  24. done
  25. The link /vmlinuz.old is a damaged link
  26. Removing symbolic link vmlinuz.old
  27. You may need to rerun your boot loader
  28. The link /initrd.img.old is a damaged link
  29. Removing symbolic link initrd.img.old
  30. You may need to rerun your boot loader
  31. Purging configuration files for linuximage3.16.04amd64 (3.16.361+deb8u2)
  32.  
  33. # ================================================
  34.  
  35. root@bbr1:~# apt-get purge linux-image-amd64
  36. Reading package lists Done
  37. Building dependency tree
  38. Reading state information Done
  39. The following packages were automatically installed and are no longer required:
  40. libuuidperl linuxbase
  41. Use ‘apt-get autoremove’ to remove them.
  42. The following packages will be REMOVED:
  43. linuximageamd64*
  44. 0 upgraded, 0 newly installed, 1 to remove and 7 not upgraded.
  45. After this operation, 164 MB disk space will be freed.
  46. Do you want to continue? [Y/n] y
  47. (Reading database 31152 files and directories currently installed.)
  48. Removing linuximageamd64 (3.16.361+deb8u2)
  49. Ok, proceeding with removing running kernel image.
  50. /etc/kernel/postrm.d/initramfstools:
  51. updateinitramfs: Deleting /boot/initrd.imgamd64
  52. /etc/kernel/postrm.d/zzupdategrub:
  53. Generating grub configuration file
  54. Found linux image: /boot/vmlinuz4.9.0040900rc8generic
  55. Found initrd image: /boot/initrd.img4.9.0040900rc8generic
  56. done
  57. The link /vmlinuz.old is a damaged link
  58. Removing symbolic link vmlinuz.old
  59. You may need to rerun your boot loader
  60. The link /initrd.img.old is a damaged link
  61. Removing symbolic link initrd.img.old
  62. You may need to rerun your boot loader
  63. Purging configuration files for linuximageamd64 (3.16.361+deb8u2)
  64.  
  65. # ================================================
  66. # 最后在看一下内核是否只剩下教程安装的内核。
  67. root@bbr1:~# dpkg -l|grep linux-image | awk ‘{print $2}’
  68. ii linuximage4.9.0040900generic 4.9.0040900rc8.201612051443 amd64 Linux kernel image for version 4.9.0 on 64 bit x86 SMP

更新 grub 系统引导文件并重启VPS

  1. # 更新系统引导文件
  2. updategrub
  3. # 重启VPS,执行后SSH链接会断开,等十几秒再重新连接继续执行下面的启动命令。
  4. reboot
  1. # VPS提示
  2.  
  3. root@bbr1:~# update-grub
  4. Generating grub configuration file
  5. Found linux image: /boot/vmlinuz4.9.0040900rc8generic
  6. Found initrd image: /boot/initrd.img4.9.0040900rc8generic
  7. done

开启bbr

  1. echo “net.core.default_qdisc=fq” >> /etc/sysctl.conf
  2. echo “net.ipv4.tcp_congestion_control=bbr” >> /etc/sysctl.conf

执行这个保存生效更改。

  1. sysctl p
  1. # VPS提示
  2.  
  3. root@bbr1:~# sysctl -p
  4. net.ipv6.conf.all.accept_ra = 2
  5. net.core.default_qdisc = fq
  6. net.ipv4.tcp_congestion_control = bbr

关闭bbr

  1. sed i ‘/net\.core\.default_qdisc=fq/d’ /etc/sysctl.conf
  2. sed i ‘/net\.ipv4\.tcp_congestion_control=bbr/d’ /etc/sysctl.conf
  3. sysctl p

执行完上面的代码,就使用reboot重启VPS后才能关闭bbr,重启后再用下面的查看bbr状态代码,查看是否关闭了。

  1. reboot

查看bbr是否开启

执行下面命令,如果结果中有bbr,即证明你的内核已开启bbr。

  1. sysctl net.ipv4.tcp_available_congestion_control

执行下面命令,看到有 tcp_bbr 模块,即说明bbr已启动

  1. lsmod | grep bbr
  1. # VPS提示
  2. root@bbr1:~# sysctl net.ipv4.tcp_available_congestion_control
  3. net.ipv4.tcp_available_congestion_control = bbr cubic reno
  4.  
  5. # ================================================
  6.  
  7. root@bbr1:~# lsmod | grep bbr
  8. tcp_bbr 20480 0

因为BBR是集成在内核中的,所以不能卸载,除非更换其他的内核。

裸 SS/锐速+SS/BBR+SS 速度对比

本人的测试环境是:晚上23:00点,联通运营商,美国渣渣VPS。

各个地区和运营商都存在差别,我的测试 速度对比仅供参考。谷歌网盘单线程下载测速地址:100MB

因为是半夜测试的,再加上用的美国垃圾小鸡,所以 裸SS 速度感人。

使用 锐速+SS 后,单线程下载测速,翻了十倍,Youtube 也能看 1080P流畅 了。

换成 BBR+SS 后,单线程又在 锐速+SS 的基础上翻了一倍,Youtube 速度有上升了一个档次 1440P 倒是勉强,1080P可以随便拖拉了。

虽然 Youtube 的数值不是很准,但是还是有点用的,数值太低同样也代表速度不行。

总其以上,锐速(ServerSpeed)的技术已经成熟、定型,加速效果还是不错的,但是不再更新和维护了。

而 TCP-BBR 属于新生的技术,处于开发初期,买没有完善成熟,未来的潜力相信还好更好。

所以总的来说:非折腾党,还是建议先使用锐速观望 TCP-BBR 一段时间,这是最稳妥的办法。

裸 SS

锐速+SS

BBR+SS

本文章安装步骤来自:https://github.com/iMeiji/shadowsocks_install/wiki/开启TCP-BBR拥塞控制算法


责任声明:本站一切资源均原创或收集自互联网,仅作交流学习之用,请勿用作商业!如造成任何后果,本站概不负责!
历史上的今天
十二月
18
    哇哦~~~,历史上的今天没发表过文章哦
赞(0) 打赏
未经允许不得转载:顶好爱迪 » 比锐速还强的 TCP拥塞控制技术 —— TCP-BBR 测试及开启教程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  • Q Q(选填)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮