如何让高延迟不稳定的服务器下载速度翻倍

最新的使用锐速的优化合集及锐速与net-speeder的对比已经更新,请移步这篇文章查看:更换Linux内核优化锐速,为shadowsocks和IkeV2加速

最近Digital Ocean的速度越来越不稳定,Bandwagon的延迟越来越高,真心各种捉急.今天无意中在V2EX上看到有关单线程下载速度提速的一个项目: net-speeder ,便测试了下,优化后网速翻倍,可谓效果显著.

net-speeder可以在高延迟不稳定链路上优化单线程下载速度,项目地址:Google Code

其中,作者在其博客说明了该方法的优劣:
这种方式下,直接优点是降低丢包率,直接缺点是耗费双倍流量。一些延伸影响是更容易触发快速恢复逻辑,避免了丢包时窗口缩减过快。一定程度也能提高网络速度。
在一台VPS上测试后发现,未开启时单线程下载、ssh管道速度在十几K级别。开启后可以达到平均300KB+的速度。效果非常明显。但对于不加速就可以跑满带宽的类型来讲(多线程下载),开启后反而由于多出来的无效流量,导致速度减半。所以对于多线程/高速链路,这个方案是不适合的。

考虑到DO目前是不限流量的,速度又越来越慢,就以此来测试了下,本人环境为Ubuntu 14.04,作者项目中另有其他系统的方法(本人未测试).

1,安装依赖库:

这里按操作系统划分:
Ubuntu/Debian:

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

Centos(未测试):
下载epel:https://fedoraproject.org/wiki/EPEL/zh-cn
例:CentOS6 64位:

1 wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

如果是centos5,则在epel/5/下

然后安装epel:rpm -ivh epel-release-X-Y.noarch.rpm

然后即可使用yum安装:

1 yum install libnet libpcap libnet-devel libpcap-devel

2,下载net-speeder并解压:

1 wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz
2 tar xzf net_speeder-v0.1.tar.gz
3 cd net_speeder*

如果你访问不了该下载地址,也可到这里下载备份:

3,编译:

这里按主机平台划分:
Xen,KVM,物理机:

1 sh build.sh

Digital Ocean是KVM虚拟机,用上面这个就可以.

venetX,OpenVZ

1 sh build.sh -DCOOKED

搬瓦工是OpenVZ的,用上面这个.

4,运行:

编译完成后,一切顺利就能在当前目录下看到编译的net_speeder文件了.
按照项目说明:
使用方法(需要root权限启动):
参数:./net_speeder 网卡名 加速规则(bpf规则)
最简单用法: # ./net_speeder venet0 "ip" 加速所有ip协议数据

这里,Digital Ocean的网卡名是eth0,于是执行

1 ./net_speeder eth0 "ip"

就可以运行了,具体可以使用ifconfig指令查看你的服务器网卡接口.

运行如下图:
net-speeder

当然,也可以使用nohup ./net_speeder eth0 “ip” >/dev/null 2>&1 &来后台运行.

5,复制到/usr/local/目录并设置开机自启动:

1 mkdir /usr/local/net_speeder/
2 cp net_speeder /usr/local/net_speeder/net_speeder
3 echo 'nohup /usr/local/net_speeder/net_speeder eth0 "ip" >/dev/null 2>&1 &' >> /etc/rc.local

经本人测试,该方案对Ikev2的vpn提速效果十分明显,但对Shadowsocks貌似并不显著(网上也有人Shadowsocks有效果的,此问题待进一步研究).

另附两张使用net-speeder前后,Ikev2 vpn连接后下载速度的对比图:

before-net-speeder加速前

after-net-speeder加速后

PS:一键安装脚本

该脚本貌似只在redhat下可用(点击展开):

1 #!/bin/sh
2  
3 # Set Linux PATH Environment Variables
4 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
5 export PATH
6  
7 # Check If You Are Root
8 if [ $(id -u) != "0" ]; then
9     clear
10     echo -e "\033[31m Error: You must be root to run this script! \033[0m"
11     exit 1
12 fi
13  
14 if [ $(arch) == x86_64 ]; then
15     OSB=x86_64
16 elif [ $(arch) == i686 ]; then
17     OSB=i386
18 else
19     echo "\033[31m Error: Unable to Determine OS Bit. \033[0m"
20     exit 1
21 fi
22 if egrep -q "5.*" /etc/issue; then
23     OST=5
24     wget http://dl.fedoraproject.org/pub/epel/5/${OSB}/epel-release-5-4.noarch.rpm
25 elif egrep -q "6.*" /etc/issue; then
26     OST=6
27     wget http://dl.fedoraproject.org/pub/epel/6/${OSB}/epel-release-6-8.noarch.rpm
28 else
29     echo "\033[31m Error: Unable to Determine OS Version. \033[0m"
30     exit 1
31 fi
32  
33 rpm -Uvh epel-release*rpm
34 yum install -y libnet libnet-devel libpcap libpcap-devel gcc
35  
36 wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz -O -|tar xz
37 cd net_speeder
38 if [ -f /proc/user_beancounters ] || [ -d /proc/bc ]; then
39     sh build.sh -DCOOKED
40     INTERFACE=venet0
41 else
42     sh build.sh
43     INTERFACE=eth0
44 fi
45  
46 NS_PATH=/usr/local/net_speeder
47 mkdir -p $NS_PATH
48 cp -Rf net_speeder $NS_PATH
49  
50 echo -e "\033[36m net_speeder installed. \033[0m"
51 echo -e "\033[36m Usage: nohup ${NS_PATH}/net_speeder $INTERFACE \"ip\" >/dev/null 2>&1 & \033[0m"

参考链接:

使用net_speeder加速你的VPS

网络加速/优化器net-speeder

作者博客项目介绍页面

作者项目托管地址


原创文章,转载请注明: 转载自quericy Eden*博客

Share

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment