共计 3601 个字符,预计需要花费 10 分钟才能阅读完成。
文章目录 [隐藏]
摘要:在国内如果经常要访问一些诸如 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:由于时间紧,写得比较匆忙,有不明白的小伙伴可以给我的博客留言。
