摘要:在国内如果经常要访问一些诸如Google、Facebook、Youtube等在天朝根本不存在的网站,最便捷的方式就是用Shadowsocks搭梯子。但是往往梯子太长,即使梯子带宽足够宽,线路质量也是不忍直视。本文介绍如何使用KCPTun来加速Shadowsocks代理速度。
1、KCPtun介绍
KCPTun是一个使用可信UDP来加速TCP传输速度的网络软件。
官网:https://github.com/xtaci/kcptun
我们知道TCP协议是可信的数据流传输协议。简单来说,如果数据传输过程中发生了丢包,TCP协议会重新发送相应数据包,如果数据包到达顺序与发送顺序不一致,TCP协议会进行数据包重组,即:TCP协议可以通过控制帧来保证数据流的传输顺序和正确性。但TCP协议的控制机制比较复杂,在线路质量差导致丢包率极高时,传输效率就会指数级下降。
UDP协议是数据报协议,由于比TCP简单得多,传输效率和延迟率都要优于TCP协议,但UDP协议不是可信传输协议,不能保证数据正确与可达,所以只能应用在一些对单个数据包的正确与可达不是要求很严格(比如:IM)、但对数据传输延迟率有很高要求(比如:视频流或者多人在线游戏)的场合。
那么,有没有一种传输协议既可信又能保证传输效率呢?这就是R-UDP:可信UDP协议,一种在UDP协议基础上增加了部分TCP的控制逻辑来保证数据正确完整的协议。目前已经有很多可用库(rUDP、enet等等),虽然没有成为像TCP/UDP这样的标准协议,但已经广泛运用到了大型多人在线游戏等领域。KCPTun就是利用这种可信UDP(KCP over UDP),来大幅加速TCP传输效率的。
KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。
参见:http://blog.csdn.net/linshuhe1/article/details/52191625
KCPTun原理图:
KCPTun官方性能实测值:从68Kbps提高到31Mbps,飞一般的感受!
2、软件安装
windows下需要安装几个软件:
kcptun,根据系统平台下载对应的版本:
https://github.com/xtaci/kcptun/releases
windows下的kcptun图形化客户端:kcptun_gclient:
https://github.com/dfdragon/kcptun_gclient/releases
这个图形化客户端不是必须的,我一般不喜欢用,占资源。
3、kcptun服务端配置
我比较喜欢用命令行的方式,windows中也一样,这里我下载的是Linux版本的kcptun客户端(64位),假设我的客户端路径放在/root/kcptun目录下。
梯子命令行如下,监听端口为9999,密码为hello,以deamon进程的方式在后台运行:
/usr/bin/ssserver -p 9999 -k hello -d start
则我直接运行:
/root/kcptun/server_linux_amd64 -l :19900 -t 127.0.0.1:9999 -key hello -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2
参数说明:
-t 127.0.0.1:9999 指向本机Shadowsocks的服务端口,本例中是9999
-l :19900 KCPTun服务端端口,这个值在下一节KCPTun客户端设置中需要用到
--key mykey KCPTun服务端与客户端连接用的secret key
--crypt aes-128 KCPTun服务端与客户端通信时使用aes-128加密(不必须,基于安全性的考虑推荐使用)
--mode fast2 KCPTun服务端与客户端数据传输模式。
根据官方文档:
响应速度: fast3 > fast2 > [fast] > normal > default
有效载荷比:default > normal > [fast] > fast2 > fast3
4、kcptun客户端配置
4.1 Linux客户端配置
由于我本机使用的是Linux机器,所以我直接运行以下命令,来连接服务端的kcptun:
/root/kcptun/client_linux_amd64 -l :12948 -r 1.1.1.1:19900 --key hello --mode fast2 --sndwnd 2048 --rcvwnd 2048
其中:1.1.1.1为服务器的IP地址,请自行更换。
4.2 Windows客户端配置
如果你的机器是windows,则可以使用上文中提到的kcptun_gclient图形化客户端,如下所求:
或者在cmd中使用命令行,我的做法是,新建一个kcptun.bat文件,假设我的windows客户端路径放在D:\soft\kcptun\client_windows_amd64.exe,那么我可以填下以下参数:
D:\soft\kcptun\client_windows_amd64 -l :12948 -r 1.1.1.1:19900 --key hello --mode fast2 --sndwnd 2048 --rcvwnd 2048
5、梯子客户端配置
5.1、Linux下客户端配置
Linux系统中安装比较方便,可以直接使用pip工具来安装python版本的ss工具,命令如下:
pip install shadowsocks
如果系统中没有pip命令,联网情况下,可以使用如下方式安装pip命令:
Ubuntu系统中:
sudo apt-get install python-pip
CentOS系统中:
sudo yum install python-pip
然后就可以让梯子来代理kcptun的网络了,命令如下:
sslocal -s 127.0.0.1 -p 12948 -k hello -l 1080 -d start
Linux中可以使用Firefox浏览器来进行配置代理比较方便,具体操作为:
5.2、Windows下客户端配置
梯子客户端ss下载:
https://github.com/shadowsocks/shadowsocks-windows/releases
Windows下的比较简单,如图,只要红色部分几个重要信息填一下即可:
Win下的客户端做得相对来说要智能一些,只要开启系统代理后,一般的浏览器(firefox除外),都是可以自动代理上网的,一般chrome浏览器会速度会比较稳定些。如果你需要在Linux下使用chrome浏览器扶墙,那么就需要安装一个chrome SwitchyOmega插件,这个会在我博客另外的文章进行说明
这样就可以来加速扶墙了!
最后附上启动脚本,方便停止与运行扶墙程序:
#!/bin/bash
if [ # -lt 1 ];then
echo "0 start|stop"
exit 0
fi
SERVER="www.example.com"
start()
{
echo "Starting..."
/home/chin/kcptun/client_linux_amd64 -l :12948 -r {SERVER}:19900 -key hello -mode fast2 -sndwnd 2048 -rcvwnd 2048 &
/usr/local/bin/sslocal -s 127.0.0.1 -p 12948 -k hello -l 1080 -b 0.0.0.0 -m aes-256-cfb -d start
}
stop()
{
echo "Stoping..."
CLIENT_PID=`ps -ef | grep client_linux_amd64 | grep -v grep | awk '{print 2}'`
kill -9 CLIENT_PID
/usr/local/bin/sslocal -s 127.0.0.1 -p 12948 -k hello -l 1080 -b 0.0.0.0 -m aes-256-cfb -d stop
}
case 1 in
start)
start
;;
stop)
stop
;;
*)
echo "$0 start|stop"
exit 0
;;
esac
exit 0
PS:由于时间紧,写得比较匆忙,有不明白的小伙伴可以给我的博客留言。
- 微信扫码赞助
-
- 支付宝赞助
-