本博客曾经发布了通过 Finalspeed 加速 Shadowsocks 的教程,大家普遍反映能达到一个非常不错的速度。Finalspeed 虽好,就是内存占用稍高,不适合服务器内存本来就小的用户;而且现在 Finalspeed 停止维护,就需要寻找一个能替代 Finalspeed 的工具。
今天我就给大家介绍这么一个能替代 Finalspeed 的项目 — Kcptun。
Kcptun介绍
Kcptun 是一个非常简单和快速的,基于 KCP 协议的 UDP 隧道,它可以将 TCP 流转换为 KCP+UDP 流。而 KCP 是一个快速可靠协议,能以比 TCP 浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。
Kcptun 是 KCP 协议的一个简单应用,可以用于任意 TCP 网络程序的传输承载,以提高网络流畅度,降低掉线情况。由于 Kcptun 使用 Go 语言编写,内存占用低(经测试,在64M内存服务器上稳定运行),而且适用于所有平台,甚至 Arm 平台。
Kcptun 工作示意图:
KCP 协议:https://github.com/skywind3000/kcp
Kcptun 项目地址:https://github.com/xtaci/kcptun
2016.08.31 v20160831发布,新版支持配置文件!
2016.08.29 新的客户端可视化配置工具可选
2016.08.13 发布一键安装脚本 https://blog.kuoruan.com/110.html
2016.08.06 添加Kcptun可视化运行工具和Android使用说明。
2016.06.17 添加客户端开机自启批处理,重写软件启动vbs脚本。
相关项目
以下为 Kcptun 的相关项目,如果有兴趣,可以了解一下。
1.Kcp-server:https://github.com/clangcn/kcp-server
Kcp-server 是在 Kcptun 的基础上,添加了配置文件的支持,并整合了一个socks5代理,可用不用配合其他软件单独使用,而原版 Kcptun 需要配合其他软件使用而不能单独使用。Kcp-server 简化了安装过程,一条命令即可配置完毕。
2.Shadowsocks-Plus:https://github.com/shadowsocks-plus/shadowsocks-plus
基于 Shadowsocks Go 版本,加入了以下特性:
- 启动后降低权限至 nobody , 增强安全性;
- 与 kcptun 集成,配合相应客户端可加速传输;
- 网页控制面板。
部署Kcptun
现在博主编写的一键安装脚本已公开发布测试,支持 Kcptun 一键安装、更新、卸载、配置,欢迎测试使用:Kcptun 服务端一键安装脚本
响应速度:
fast3 > [fast2] > fast > normal > default
有效载荷比:
default > normal > fast > [fast2] > fast3
中间 mode 参数比较均衡,总之就是越快越浪费带宽(根据设置,可能会浪费数倍流量),请自行斟酌。推荐模式 fast2。
可用的参数请使用 ./server_linux_amd64 -h 查看:
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
|
./server_linux_amd64 -h
NAME:
kcptun - kcptun server
USAGE:
server_darwin_amd64 [global options] command [command options] [arguments...]
VERSION:
20160820
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--listen value, -l value kcp server listen address (default: ":29900")
--target value, -t value target server address (default: "127.0.0.1:12948")
--key value pre-shared secret for client and server (default: "it's a secrect") [$KCPTUN_KEY]
--crypt value aes, aes-128, aes-192, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, xor, none (default: "aes")
--mode value profiles: fast3, fast2, fast, normal (default: "fast")
--mtu value set maximum transmission unit of UDP packets (default: 1350)
--sndwnd value set send window size(num of packets) (default: 1024)
--rcvwnd value set receive window size(num of packets) (default: 1024)
--datashard value set reed-solomon erasure coding - datashard (default: 10)
--parityshard value set reed-solomon erasure coding - parityshard (default: 3)
--dscp value set DSCP(6bit) (default: 0)
--nocomp disable compression
--help, -h show help
--version, -v print the version
|
更深层次的参数调整需要理解 KCP 协议,并通过“隐藏参数”调整。巭孬嫑乱动
下面是作者给的配置参数样例,适用大部分ADSL接入(非对称上下行)的参数(实验环境电信100M ADSL)。其它带宽请按比例调整,比如 50M ADSL,把 CLIENT 的 -sndwnd -rcvwnd 减掉一半,SERVER 不变。
1
2
|
服务端: -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2
客户端: -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46
|
在不丢包的情况下,有最大-rcvwnd 个数据包在网络上正在向你传输,以平均数据包大小avgsize计算,在任意时刻,有:
network_cap = rcvwnd*avgsize
数据流向你,这个值再除以ping值(rtt),等于最大带宽使用量。
max_bandwidth = network_cap/rtt = rcvwnd*avgsize/rtt
举例,设rcvwnd = 1024, avgsize = 1KB, rtt = 400ms,则:
max_bandwidth = 1024 * 1KB / 400ms = 2.5MB/s ~= 25Mbps
(注:以上计算不包括前向纠错的数据量)
前向纠错是最大带宽量的一个固定比例增加:
max_bandwidth_fec = max_bandwidth*(datashard+parityshard)/datashard
举例,设datashard = 10 , partiyshard = 3,则:
max_bandwidth_fec = max_bandwidth * (10 + 3) /10 = 1.3*max_bandwidth = 1.3 * 25Mbps = 32.5Mbps
看不懂?那就别管它,你只要会简易自我调优方法就够了:
- 同时在两端逐步增大 client rcvwnd 和 server sndwnd;
- 尝试下载,观察如果带宽利用率(服务器+客户端两端都要观察)接近物理带宽则停止,否则跳转到第一步。
基本原则:SERVER 的发送速率不能超过 ADSL 下行带宽,否则只会浪费您的服务器带宽。
如果你有任何问题,欢迎加入我们的QQ群寻求帮助:43391448
配置客户端
首先下载 Kcptun 的客户端文件。
请注意:客户端版本建议和服务端版本一致,有许多朋友没有检查两端造成无法连接!
Windows 64位:
1
|
https://github.com/xtaci/kcptun/releases/download/v20161031/kcptun-windows-amd64-20170221.tar.gz
|
Mac 64位:
1
|
https://github.com/xtaci/kcptun/releases/download/v20161031/kcptun-darwin-amd64-20170221.tar.gz
|
注意:
1.0830以后的版本不和之前的版本兼容,请确保两端使用相同的版本!
2.下面的软件截图仅供选择软件时参考,请不要照着填写里边的参数!
当前,Kcptun 已经有可视化配置工具了,你可以自行选择使用。如果不想用工具,可以往后翻,手动创建启动文件。
1.Kcptun客户端配置管理工具,来自 @dfdragon
下载地址:https://github.com/dfdragon/kcptun_gclient/releases
2.kcptun-gui-windows,来自 @GangZhuo
下载地址:https://github.com/GangZhuo/kcptun-gui-windows/releases
Mac 系统可以下载使用:https://github.com/dfdragon/kcptun_xclient/releases
注意:客户端和服务端参数必须一致的有:
- datashard
- parityshard
- nocomp
- key
- crypt
上面的配置过程中出现了多个端口,我在这里画个图,方便各位理解各端口的作用(点击看大图):
Shadowsocks 客户端配置
在客户端中新建服务器:
- 服务器 IP 填写本机:127.0.0.1
- 服务器端口填写:12948
正确填写你的 Shadowsocks 密码,加密方式,协议和混淆方式。
切换到该服务器上,测试是否正确运行。
速度实测
我用的服务器是搬瓦工 512M 内存,费利蒙机房,以此测试加速效果。
- 按结论看,Kcptun 的加速效果略逊于 Finalspeed,估计需要细调配置。
- 刚运行 Finalspeed 时,内存占用就达到了 9.1% 也就是接近 47M;而此时 Kcptun 占用 0.4%,也就是 2M左右。
- YouTube 1440p 满跑情况下,FInalspeed 最高内存占用 15.4%,接近 79M;而此时 Kcptun 占用 3% 左右,即 15.5M。
- 速度方面,Finalspeed 最大速度达到了10000 Kbps +,Kcptun 6000+ Kbps。
以上结论为本人测试所得,仅作为参考;实际情况请自行测试,如有纰漏,欢迎指出。
多人同时使用
如果想多人使用同一个服务器并同时使用 Kcptun 加速,需要启动多个 Kcptun 进程:
1.你使用的是本站的一键安装脚本,请使用命令:
1
|
./kcptun.sh add
|
来添加一个新实例,新 Kcptun 实例使用的端口需要与其他实例不一致。
2.你是自己创建的启动脚本:
为了启动多个 Kcptun 服务端,你可以将 start.sh 拷贝一份,然后修改其中的 Kcptun 运行端口。
Android上使用
请看这篇文章:Shadowsocks-Android客户端上的KCP配置说明
在路由器上使用
如果需要在路由器上使用 Kcptun,首先你得有个智能路由器,然后能正常进入shell。
编译好的客户端文件请到官方下载:https://github.com/xtaci/kcptun/releases
小米路由器、极路由等大部分国产智能路由器都是 MT7620 的芯片,请下载 mipsle 版本。如果运行失败请尝试下载 mips 或者 arm 版。
1
2
3
|
kcptun-linux-arm-*.tar.gz
kcptun-linux-mips-*.tar.gz
kcptun-linux-mipsle-*.tar.gz
|
Openwrt/LEDE 用户可以使用我写的 Luci-app-kcptun:OpenWrt平台Kcptun Web管理界面
本文出自:
文章评论