当前位置: 首页 > 工具软件 > kcptun > 使用案例 >

java quic kcptun_Server-网络加速Kcptun

郎雪风
2023-12-01

KCPTun是一个使用UDP来实现网络加速传输速度的开源软件。

KCPTun网络结构

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),来大幅加速网络传输效率的。

网络测试

丢包率/网络延时测试:

ping -n 100 www.baidu.com,windows –n/linux -c

总结:

在丢包率比较大的情况下加速才比较明显,网络丢包率很小或者不丢包时反而会降低传输效率。

Kcptun网络加速

Kcptun

集成加速Shadowsocks

Windows&Linux64位版本

解压 tar -zxvf xxxx.tar.gz

WindowsClient客户端命令

client_windows_amd64 -r "172.245.210.123:61250" -l ":61240" -mode fast2

LinuxServer服务端命令

/home/soft/server_linux_amd64 -t "127.0.0.1:61240" -l ":61250" -mode fast2

速度

fast3 > fast2 > fast > normal > default

参数调试

// FEC关闭

-datashard 0 -parityshard 0

//调节发送/接受窗口

-sndwnd 2048 -rcvwnd 512

//高有效载荷

-mtu 1300 -sndwnd 2048 -rcvwnd 512 -datashard 0 -parityshard 0 -mode normal -nodelay 1 -resend 0 -nc 1 -interval 500

参数issue:

https://github.com/xtaci/kcptun/issues/251参数组合分享

https://github.com/xtaci/kcptun/issues/342增加SNMP信息

https://github.com/xtaci/kcptun/issues/329有效载荷

参数解析

*      --nocomp    true/false  //是否压缩

*      --localaddr value, -l value      //本地地址

*      --remoteaddr value, -r value     // kcp server address

*      //加密算法

* --crypt value   // aes, aes-128, aes-192, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, xor, none (default: "aes")

*          -crypt none //不加密

*      --key value     //加密密码?

*      --mode value    //模式 profiles: fast3, fast2, fast, normal (default: "fast")

*      --conn value    //设置服务器的UDP连接数(默认值:1)

* --autoexpire value //设置单个UDP连接的自动过期时间(以秒为单位),禁用0(默认值:0)

*      --mtu value     //设置UDP数据包的最大传输单元(默认值:1350)

*      --sndwnd value  //设置发送窗口大小(数据包数量)(默认值:128)

*      --rcvwnd value  //设置接收窗口大小(数据包数量)(默认值:512)

*      --datashard value, --ds value    //设置reed-solomon删除编码 - 数据库 (default: 10)

* --parityshard value, --ps value  //设置reed-solomon擦除编码 - 奇偶校验分片(默认值:3)

*          // fec占比parityshard/datashard parityshard=0关闭FEC

*      --dscp value    // set DSCP(6bit) (default: 0)

*常用值:https://en.wikipedia.org/wiki/Differentiated_services#Commonly_used_DSCP_values

*      --snmplog value     //收集snmp文件,了解golang的时间格式,如:./snmp-20060102.log

*      --snmpperiod value  // snmp collect period, in seconds (default: 60)

*      --log value         // specify a log file to output, default goes to stderr

*      -c value            // config from json file, which will override the command from shell

*      --help, -h          // show help

*      --version, -v       // print the version

*手动控制

*      -mode manual -nodelay 1 -interval 20 -resend 2 -nc 1

*          nodelay:是否启用节点模式,未启用0; 1启用。

*          interval:协议内部工作间隔,以毫秒为单位,例如10毫秒或20毫秒。

*              interval的作用是控制 flush 的时间间隔,主要控制 cpu 的耗用

*              interval设的大些可以增加有效数据的载荷

*          resend:快重传模式,0表示默认关闭,2可以设置(2个ACK跨度将导致直接重传)

*          nc:是否关闭流量控制,0代表默认“不关闭”,1代表“关闭”。

*总结:

*场景:丢包率小/大延时网络场景

*          FEC/MTU/发送-接收窗口参数对带宽影响大

*          crypt/nocomp加密压缩影响性能及安全性

*手动控制参数影响小

*      REF:

*      https://github.com/xtaci/kcptun

*     https://github.com/skywind3000/kcp/blob/master/README.en.md#protocol-configuration

官方资源

Ref:

 类似资料: