kcptun提升你的速度
KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以callback的方式提供给 KCP。连时钟都需要外部传递进来,内部不会有任何一次系统调用。[(引用KCP协议)]
本文将教你如何通过配置kcp来加速ss。
目的:
让kexue上网速度更快,体验效果更好。如图:
测试 www.google.com
也许加载网页时候不是很明显,延迟相差不多。但当看到下面两张图差距瞬间出来,第一张(没用加速)当时测试还是144p,其卡无比,而第二张(用加速)显示在1080p还能流畅,体验效果真的不一样。ps:lz的机子还是Tokyo,当时测试ping返回的延迟是两百五十多,还偶尔丢包,体验效果很差
具备条件:
为了实现kcp加速ss,以下资源必须具备的:
1.一台可以kx上网的服务器。
2.在服务器安装ss。
3.在服务器安装kcp服务端。
4.在用户端安装kcp客户端。
满足条件:
对于条件一:购买vps。(这里假设你已经满足)
对于条件二:这里推荐你安装,网上有很多一键安装脚本,这里不多说了。(这里假设你已经满足,且已经能在本地主机上FQ)
对于条件三:安装kcp服务端(这里假设你已经下载好,放在服务器某个目录下)
对于条件四:安装KCP客户端,或者安装kcptun-gui客户端界面版,不过gui界面版目标只找到windows版本,对于别的系统版本需要自己动手寻找。
实现原理:
假如你已经安装好了KCP服务端与客户端,首先你在服务器运行KCP服务端,接着在自己主机配置好与服务端配置的信息,启动运行KCP客户端,当KCP客户端成功连接上KCP服务端后,最后把小飞机shadowsock服务器地址和端口改为KCP客户端上面监听地址和端口即可。
其实上面实现原理过程是基于KCP协议实现一个快速安全隧道,姑且我暂时把这个过程实现理解为是一个tcp建立端口转发。
实现步骤:
Server:
1.在Server安装KCP服务端:(下载地址)
下载前在服务器执行以下命令查看系统的位数与版本号。(lz服务器使用ubuntu 17.10系统)
uname -a; cat /etc/issue
2.通过上面显示内容自己是多少位系统后,通过访问kcptun下载地址,找到对应的服务器安装包复制链接地址,例如lz这里显示i686,即下载32位(x86:amd64, x32: 386)。为了方便,新建一个kcptun文件夹,并切换到该目录下执行如下命令:
wget https://github.com/xtaci/kcptun/releases/download/v20180316/kcptun-linux-386-20180316.tar.gz
3.在当前目录解压,执行如下命令:
tar -zxvf kcptun-linux-386-20180316.tar.gz
4.接着执行如下命令,完成启动运行KCP服务端。
./server_linux_386 -t "127.0.0.1:8889" -l ":4000" -mode fast3
-t参数:表示目标服务器地址,即ss服务器地址,默认地址为127.0.0.1,加速端口为8889,即ss服务器端口。
-l参数:表示kcp服务器开启监听地址,并监听所有连接进来的地址,这里把地址省略。监听端口4000,即”:4000”
想获取更多信息,访问kcptun
Application:
1.下载kcp客户端:
根据自己系统找到对应版本下载。(lz的系统windows 64位)
假如你已经下载并解压好文件。
切换到解压好的文件目录下。
2.执行如下命令连接KCP服务端:
.\client_windows_amd64.exe -r "KCP_SERVER_IP:4000" -l ":8889" -mode fast3
-r参数:表示连接kcp服务器地址和端口,默认是“vps_ip:4000”。
-l参数:表示kcp客户端开启监听端口,等会小飞机ss连接的服务器端口。监听端口为8889。
当然你也可以使用配置文件,这样更加方便。新建一个以json结尾的文件,如图:
#kcptun_Client.json
{
"localaddr": ":8889",
"remoteaddr": "KCP_SERVER_IP:4000",
"key": "it's a secrect",
"crypt": "aes",
"mode": "fast3",
"mtu": 1350,
"sndwnd": 512,
"rcvwnd": 512,
"datashard": 10,
"parityshard": 3,
"dscp": 0,
"nocomp": false,
"quiet": false
}
上面文件中KCP_SERVER_IP改成服务器ip,localaddr自行选择,需要注意的是它与服务端监听的端口一致。
执行如下命令来完成使用kcp客户端连接json文件:
.\client_windows_amd64.exe -c kcptun_Client.json
如图成功连接上KCP服务端
也可以使用更加人性化的界面版kcptun客户端,目前lz只找到windows系统版本。界面版相比上面使用命令行启动,不用每次开机都要重新打开,当然你也可以自己动手写一个后台挂起的程序。QAQ~~~,这个kcptun客户端配置管理工具,目标的版本为1.1.3。
如图1:
也可以使用配置文件连接,如图2:
3.配置小飞机ss
根据前面的配置,这里需要更改服务器地址和服务器端口即可。
完成配置后,打开http://ip111.cn/监测点谷歌网站,检查结果显示服务器ip,说明可以kx上网。
关于KCP参数:
如果想调整更优参数,充分利用带宽资源,把速度再次提升,需要自行测试,调整最佳参数,让速度达到最佳。
更多参数参考:https://github.com/skywind3000/kcp
后台运行KCP服务端:
使用supervisor 管理进程
ubuntu系统下安装执行如下命令:
sudo apt-get install supervisor
其它系统下可以使用pip工具安装:
pip install supervisor
安装好后,查看 supervisord 是否在运行:
ps aux | grep supervisord
把我们需要后台运行的kcp服务端,加入到配置文件。
为了管理它,我们需要把配置信息写入到supervisord.conf 文件。
vim /etc/supervisor/supervisord.conf
把如下信息添加到supervisord.conf
[program:kcptun]
command = /root/kcptun/server_linux_386 -t "127.0.0.1:8889" -l "0.0.0.0:4000" -mode fast3
autostart = true
autorestart = true
;stdout_logfile 日志文件,需要自己手动创建,否则无法正常启动
stdout_logfile = /root/kcptun/kcptun.log
使用 supervisorctl
supervisorctl是一个命令行客户端工具,在启动的时候需要指定与上面supervisord配置文件是同一份,加-c参数,否则它将找到默认配置文件,以至于进入supervisorctl命令行时没有找到kcptun项目而无法启动。当然,如果我们是直接修改默认的配置文件,那么不用指定-c参数,直接输入supervisorctl即可。
执行如下命令进入supervisorctl 工具:
supervisorctl -c /etc/supervisor/supervisord.conf
执行如下命令来重启配置文件,即修改过的程序。
supervisor> update
kcptun: added process group
查看程序状态
supervisor> status
kcptun RUNNING pid 537, uptime 0:00:10
最后执行quit退出supervisorctl 工具
还有一些其它命令:
status # 查看程序状态
stop usercenter # 关闭 program 指定的程序
start usercenter # 启动 program 指定的程序
restart usercenter # 重启 usercenter 程序
reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序
想获取更多有关于supervisor信息,可以查看官方文档:http://supervisord.org/index.html
参考文献:
KCP:A Fast and Reliable ARQ Protocol
KCPTun:A Fast & Secure Tunnel Based On KCP with N:M Multiplexing
supervisor:supervisor 管理进程
Gordy叶:ss安装kcptun加速