kcptun为何物?
Kcptun 是一个非常简单和快速的,基于 KCP 协议的 UDP 隧道,它可以将 TCP 流转换为 KCP+UDP 流。而 KCP 是一个快速可靠协议,能以比 TCP 浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。
Kcptun 是 KCP 协议的一个简单应用,可以用于任意 TCP 网络程序的传输承载,以提高网络流畅度,降低掉线情况。由于 Kcptun 使用 Go 语言编写,内存占用低(经测试,在64M内存服务器上稳定运行),而且适用于所有平台,甚至 Arm 平台。
Kcptun相关项目地址:
https://github.com/xtaci/kcptun/
https://github.com/shadowsocks/kcptun/releases
https://github.com/dfdragon/kcptun_gclient/releases
KCP协议简介
KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。
整个协议只有 ikcp.h, ikcp.c两个源文件,可以方便的集成到用户自己的协议栈中。也许你实现了一个P2P,或者某个基于 UDP的协议,而缺乏一套完善的ARQ可靠协议实现,那么简单的拷贝这两个文件到现有项目中,稍微编写两行代码,即可使用。
技术特性
TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢,但每秒流量很大的大运河,而KCP是水流湍急的小激流。KCP有正常模式和快速模式两种,通过以下策略达到提高流速的结果:
相关项目地址:
https://github.com/skywind3000/kcp
https://link.jianshu.com/?t=https://github.com/dfdragon/kcptun_gclient/releases
废话不多少,下面开始配置实战环境如下:
SS-服务器: CentOS Linux release 7.5.1804 (Core) x64 连接客户端:windows 10 pro x64
加速原理图
一、下载Kcptun服务端
#下载地址:https://github.com/xtaci/kcptun/releases #注意:我这里下载的是kcptun-linux-amd64-20181114.tar.gz,根据你当前的系统环境选择! #进入SS服务器 #注意:当前我是在CentOS操作系统下。 mkdir /root/kcptun cd /root/kcptun wget https://github.com/xtaci/kcptun/releases/download/v20181114/kcptun-linux-amd64-20181114.tar.gz tar -zxvf kcptun-linux-amd64-20181114.tar.gz
SS服务器只需要运行server_linux_amd64
1.创建启动脚本
vim /root/kcptun/kcptun.sh
2.粘贴以下内容
#!/bin/bash cd /root/kcptun/ ./server_linux_amd64 -l :6666 -t xx.xx.xx.xx:8080 -key test -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2 > kcptun.log 2>&1 & echo "开始运行Kcptun"
3.解释下:
-l :6666 //监听本地端口,待会我们从windows 10 x64 客户端需要连接此端口。 xx.xx.xx.xx:8080 //当前SS服务器部署好的SS连接IP与端口 key test //为Kcptun你的验证密钥,这里为test,可以自己写,其他参数先不做介绍,可自行--help
4.关闭服务
killall server_linux_amd64
5.启动Kcptun
sh /root/kcptun/kcptun.sh
6.查看端口是否起来
[root@host2 kcptun]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 678/sshd tcp6 0 0 :::8080 :::* LISTEN 3874/python tcp6 0 0 :::22 :::* LISTEN 678/sshd udp 0 0 127.0.0.1:323 0.0.0.0:* 456/chronyd udp 0 0 0.0.0.0:68 0.0.0.0:* 1224/dhclient udp 0 0 0.0.0.0:40307 0.0.0.0:* 3874/python udp6 0 0 :::6666 :::* 21830/./server_linu udp6 0 0 ::1:323 :::* 456/chronyd udp6 0 0 :::8080 :::* 3874/python #发现UDP 6666端口已经启动监听 #服务已经启动,至此服务端配置完毕 #######接下来,我们到windows 10 客户端#####
二、客户端Kcptun配置
#下载地址:https://github.com/xtaci/kcptun/releases/download/v20181114/kcptun-windows-amd64-20181114.tar.gz #注意:当前我是在windows10 64位操作系统下。 #下载后解压到一个指定的文件夹内,。在此文件夹内创建文本文件,改名为run.bat,内容如下:
client_windows_amd64.exe -l :8080 -r xxx.xx.xx.xx:6666 -key test -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46 >kcptun.log
1.解释下
-l :8080 //监听本地端口,待会我们从shadowsocks 客户端需要连接此端口。 xxx.xx.xx.xx:6666 //为刚刚在SS服务器IP,及监听的UDP6666端口。 key test //为Kcptun你的验证密钥,这里为test 服务端配置好的,其他参数先不做介绍,可自行--help
2.启动
双击打开run.bat 即可
接下来我们在设置下shadowsocks:
服务器IP为127.0.0.1
服务器端口为8080
密码为你的ss密码(和原来你用ss时候的密码一样)
三、加速前后效果对比
1.加速前
2.加速后
可以看到效果非常明显!速度快到起飞。
四、知识扩展
1.开机自动启动,后台运行等
#SS服务器开即自动启动Kcptun服务 echo "sh /root/kcptun/kcptun.sh" >> /etc/rc.local
#windown 10 #windown 10 #windown 10 后台运行脚本,放到Kcptun目录下,保存为run.vbs,内如如下: Dim RunKcptun Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") '获取文件路径 currentPath = fso.GetFile(Wscript.ScriptFullName).ParentFolder.Path & "\" '软件运行参数 exeConfig = "client_windows_amd64.exe -l :8080 -r xxx.xxx.xxx.xx:6666 -key test -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46" '日志文件 logFile = "kcptun.log" '拼接命令行 cmdLine = "cmd /c " & currentPath & exeConfig & " > " & currentPath & logFile & " 2>&1" '启动软件 WshShell.Run cmdLine, 0, False '等待1秒 'WScript.Sleep 1000 '打印运行命令 'Wscript.echo cmdLine Set WshShell = Nothing Set fso = Nothing '退出脚本 WScript.quit
2.安卓手机端Kcptun插件
https://github.com/shadowsocks/kcptun-android/releases
#下载apk安装后,打开ss,启动插件(相当Kcptun客户端), #连接地址为SS服务器IP的Kcptun端口:6666 #下面参数与win10客户端想对应即可。 key=test;mtu=1400;sndwnd=256;rcvwnd=2048;mode=fast2;dscp=46
请登录后查看评论内容