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加速

ss