国外vps访问加速-net_speeder

当使用国外服务器时,经常会发现,下载速度只有十几k。平时可能不太注意,认为服务器带宽不足,或者自己使用的宽带不给力,其实很有可能原因并不在此。

由于光速的局限性,延迟会比较高(即使光沿直线传播,太平洋一个往返也要一百多毫秒)。并且由于距离较远,途径路由跳数较多,并且网络拥堵的原因。经常会发生丢包的情况。

对于平时使用最广泛的TCP协议来讲,发送端发出包后,接收端会回复ACK,表示自己收到了。用这种机制来保证可靠性。但对于高延迟链路来讲,如果每发送一个包都等待应答,那么大部分时间都在等待数据包到达,而链路则空置了。为此一般会采用滑动窗口技术。即在窗口满之前,发送端一直发送包,然后收到应答后将确认收到的包从窗口中移除。这样可以提高链路利用率。

TCP还有一个特性则是拥塞控制。当发送端检测到链路发生丢包时,则会主动缩小窗口大小以减慢发送速度,避免拥塞。不过对于跳数较多的链路来讲,只要有一个路由不够稳定丢包,就会被发送端判断为拥塞,从而影响网络速度。

为了解决丢包问题,最简单粗暴的方法就是双倍发送,即同一份数据包发送两份。这样的话在服务器带宽充足情况下,丢包率会平方级降低。

这种方式下,直接优点是降低丢包率,直接缺点是耗费双倍流量。一些延伸影响是更容易触发快速恢复逻辑,避免了丢包时窗口缩减过快。一定程度也能提高网络速度。

net-speeder相对于修改协议栈来讲,由于后者需要重新升级编译内核,使用用户态程序部署更方便,稳定性更高,兼容性更好。缺点则是性能开销稍大和自由度有损失。总体比较起来,个人使用还是使用用户态程序更合适一些,特别是在虚拟机中使用(OpenVZ,LXC等虚拟机无法自己定制内核)。

下面说下vps上的安装方法:(我的测试环境为debian7 openvz)

1、安装依赖包

1
2
apt-get update
apt-get install libnet1 libpcap0.8 libnet1-dev libpcap0.8-dev

2、下载编译


wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz -O -|tar xz

现在项目转到github了,得要使用git克隆项目代码了:

1
2
3
4
5
git clone https://github.com/snooda/net-speeder.git
cd net_speeder
编译的时候,需要针对不同的vps类型对号入座:
如果你的vps是OpenVZ,网卡为venetX)执行:sh build.sh -DCOOKED
如果你的vps是基于Xen或KVM的,执行:sh build.sh

3、运行
使用方法(需要root权限启动):

1
2
参数:./net_speeder 网卡名 加速规则(bpf规则)
最简单用法: # ./net_speeder venet0 "ip" 加速所有ip协议数据

我在openvz和kvm上的vps上都测试过,都能够正常使用。在kvm上用ipv6时,使用锐速的时候,cpu会持续占用很高,而net-speeder就不会。

加速速度因vps网络环境而异,我这里是有一定效果的,特别是晚上的时候。