VPS加速全纪录

起因

一方面是原来的vps速度确实不太行,另一方面是我现在在用的ipv4基本天天早上都炸裂,打开百度开了我30秒实在是没办法办公,就想到了用ipv6vps来做代理,但是这速度也不太行,今天终于痛下杀心决定好好搞一波,为了能够愉快上油管看视频,冲啊。

BBR

当年我第一次装完ipv6的时候,速度大概是200KB/s,然后听网上说用到bbr加速,我就开开心心找了一个脚本(@秋水逸冰),启动了bbr加速,发现速度达到了2M/s,十分开心。今天有空打算来好好梳理一下。

我们都知道TCP有一个叫“拥塞控制”(Tcp Congestion Control)的机制。简单说就是目前有一条路,你不知道这条路具体是几车道的,那你肯定不能让你所有的“车”都跑到这条路上去,否则这条路就堵上了,正确做法是一开始少上几辆“车”,发现没有问题之后再慢慢增加“车”的数量,直到逼近这条路的极限。这也是拥塞控制的目的:最大限度利用了网络带宽且不出现拥堵现象。

之前在《计算机网络》谢希仁的那版里,首先我们假定接收方的缓存区域无限大,因此发送方发送的数据包的多少由网络拥塞程度来决定(应用到实际中么就是取网络拥塞程度和接收方接受窗口中较小的那个,这里为了简洁性直接设接收方窗口为无限大比较方便)。其次是一些概念,RTTround-trip time)就是发送方发送包到它收到对于这个包的确认所用的时间。

慢启动算法

发送方维持一个叫做拥塞窗口cwndcongestion window)的状态变量。

慢启动算法的思路非常简单,一开始只发1个数据包,然后等待确认。每当接到一个确认,就把窗口值翻倍。当然这样不停翻倍肯定是不行的,还有一个叫ssthresh的状态变量,当拥塞窗口值大于这个数的时候,就不采用翻倍这种粗暴的方法了,而改用拥塞避免算法。

拥塞避免算法

拥塞避免算法也很简单,每次都把拥塞的窗口的大小加1。这样不停下去迟早有一天会发生拥塞,只要一发生拥塞,ssthresh就被设置为发生拥塞时的发送窗口大小的一半。然后把拥塞窗口cwnd重新设置为1,重新启动慢启动算法。

快重传算法

接收方在收到一个失序的报文段后就立即发出重复确认。发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

快恢复算法

一旦发送方收到了三个重复确认,那么会把ssthresh门限减半(注意和上面的拥塞避免是不一样的),然后将cwnd设置为ssthresh减半后的值,然后慢慢增大发送窗口。

下面这张图很好解释了上面的四个阶段。

Reno拥塞控制示意

OK上面的四种算法是非常简单的,但是它的问题是什么呢?当你发生阻塞的时候,意味着目前节点路由器的缓存已经被用完了,这个时候其实晚了,而BBR的想法就是比传统的TCP拥塞阻塞算法提前一点。

BBR摒弃了丢包和实时RTT作为拥塞控制因素。引入BDP管道容量来衡量链路传输水平。BBR追求的是在链路最小RTT(物理链路延迟)的状态下,找到最大带宽。

锐速

国产闭源的一款软件,我个人是不推荐使用的,很简单:它闭源。但是从网上看来效果还行,所以要不要使用自行斟酌。

KCPTUN

开源的,这里是github的地址:https://github.com/xtaci/kcptun

从原理上来说也很简单,如下图所示:

kcptun原理

就是把TCP装进了KCP里面进行传输。那为什么能加速呢?简单来说,假设一个数据包从美国到中国需要花费t秒,现在有一个数据包从美国发送过来,结果丢了,那么需要再重发一个,这个时间消耗是2t秒了。但是如果我一次发送两个呢?这样只要其中一个到了就行,这样时间消耗就只需要t秒。所以这东西对于高丢包率情况下加速非常非常可观。

1
2
浏览器 -> shadowsocks客户端 -> kcpclient -> kcpserver -> shadowsocks服务端 -> 被墙的网站
本机上面 | VPS上面

至于具体怎么配置,网上一搜一大堆,这里就不赘述了。我个人的实际体验是从用完BBR之后的2M/s直接提升到了峰值20M/s,YouTube从1080P进化到4K了。

PS:但是我用纯的kcptun来加速ss和直接使用v2ray的kcp混淆差距有点大,纯的kcptun加速只有2倍,但是v2ray的kcp混淆加速可达10倍,而且kcptun的客户端需要自行修改ipv6地址,这点也需要注意。

总结

首先我得声明我测试的环境是vultr的日本服务器,用的是ipv6进行相关的测试,其他环境下可能达不到我这样的数据。然后个人的推荐是使用v2ray的kcp进行伪装(原理一样,但是和kcptun是不一样的东西),然后在服务器上开启BBR加速,这样应该就能达到比较理想的数据了。

最后引用一段其他网站的结论:

加速的速度:KCPTUN > 魔改BBR > 锐速 > 原版BBR

安装的难易程度:原版BBR > 魔改BBR > 锐速 > KCPTUN

如果你对加速效果有较高追求,那么建议首选KCPTUN,效果高出其它几款一大截,并且OVZ平台也能用。
如果你想要一个各方面比较平衡的、无需客户端的方案,那么魔改BBR是不错的选择。
如果你只想对服务器上架设的网站加速,那么也可以选择魔改BBR。
如果你的VPS服务器是OVZ架构,那么建议首选KCPTUN,其次OVZ魔改BBR。