如何让高延迟不稳定的服务器下载速度翻倍
最新的使用锐速的优化合集及锐速与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
2apt-get update
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 |
如果你访问不了该下载地址,也可到这里下载备份:
3,编译:
这里按主机平台划分:
Xen,KVM,物理机:1
sh build.sh
Digital Ocean是KVM虚拟机,用上面这个就可以.
venetX,OpenVZ1
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指令查看你的服务器网卡接口.
当然,也可以使用nohup ./net_speeder eth0 “ip” >/dev/null 2>&1 &来后台运行.
5,复制到/usr/local/目录并设置开机自启动:
1 | mkdir /usr/local/net_speeder/ |
经本人测试,该方案对Ikev2的vpn提速效果十分明显,但对Shadowsocks貌似并不显著(网上也有人Shadowsocks有效果的,此问题待进一步研究).
另附两张使用net-speeder前后,Ikev2 vpn连接后下载速度的对比图:
PS:一键安装脚本
该脚本貌似只在redhat下可用(点击展开):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Set Linux PATH Environment Variables
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
# Check If You Are Root
if [ $(id -u) != "0" ]; then
clear
echo -e "\033[31m Error: You must be root to run this script! \033[0m"
exit 1
fi
if [ $(arch) == x86_64 ]; then
OSB=x86_64
elif [ $(arch) == i686 ]; then
OSB=i386
else
echo "\033[31m Error: Unable to Determine OS Bit. \033[0m"
exit 1
fi
if egrep -q "5.*" /etc/issue; then
OST=5
wget http://dl.fedoraproject.org/pub/epel/5/${OSB}/epel-release-5-4.noarch.rpm
elif egrep -q "6.*" /etc/issue; then
OST=6
wget http://dl.fedoraproject.org/pub/epel/6/${OSB}/epel-release-6-8.noarch.rpm
else
echo "\033[31m Error: Unable to Determine OS Version. \033[0m"
exit 1
fi
rpm -Uvh epel-release*rpm
yum install -y libnet libnet-devel libpcap libpcap-devel gcc
wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz -O -|tar xz
cd net_speeder
if [ -f /proc/user_beancounters ] || [ -d /proc/bc ]; then
sh build.sh -DCOOKED
INTERFACE=venet0
else
sh build.sh
INTERFACE=eth0
fi
NS_PATH=/usr/local/net_speeder
mkdir -p $NS_PATH
cp -Rf net_speeder $NS_PATH
echo -e "\033[36m net_speeder installed. \033[0m"
echo -e "\033[36m Usage: nohup ${NS_PATH}/net_speeder $INTERFACE \"ip\" >/dev/null 2>&1 & \033[0m"
参考链接: