当前位置: 首页 > 软件库 > 开发工具 > >

kcptun

数据传输工具
授权协议 MIT
开发语言 Google Go
所属分类 开发工具
软件类型 开源软件
地区 不详
投 递 者 茅昀
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Build Status Go Report Card Coverage Statusd 

TCP流转换为KCP+UDP流,⚡官方下载地址⚡工作示意图:

kcptun是kcp协议的一个简单应用,可以用于任意tcp网络程序的传输承载,以提高在丢包环境下的网络流畅度。
采用极简设计,客户端+服务器源码总共400行,方便用户自己扩展

快速设定 ��

服务器: ./server_linux_amd64 -t "127.0.0.1:1080" -l ":554" -mode fast2 // 转发到本地1080端口 客户端: ./client_darwin_amd64 -r "IP地址:554" -l ":1080" -mode fast2 // 监听本地1080端口

适用范围限定 ��

  1. 实时网络游戏的数据传输
  2. 跨运营商的流量传输
  3. 其他高丢包通信链路的TCP承载

推荐参数 ��

适用大部分ADSL接入(非对称上下行)的参数(实验环境电信100M ADSL) SERVER: -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2 CLIENT: -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46 其它带宽请按比例降低窗口,比如50M ADSL,把CLIENT的 -sndwnd -rcvwnd减掉一半,SERVER不变巭孬嫑乱动

DSCP ��

DSCP差分服务代码点(Differentiated Services Code Point),IETF于1998年12月发布了Diff-Serv(Differentiated Service)的QoS分类标准。它在每个数据包IP头部的服务类别TOS标识字节中,利用已使用的6比特和未使用的2比特,通过编码值来区分优先级。
常用DSCP值可以参考Wikipedia DSCP,至于有没有用,完全取决于数据包经过的设备。

内置模式 ��

响应速度:
fast3 > [fast2] > fast > normal > default
有效载荷比:
default > normal > fast > [fast2] > fast3
中间mode参数比较均衡,总之就是越快越浪费带宽,推荐模式 fast2
更高级的 手动档 需要理解KCP协议,并通过 隐藏参数 调整,例如:-mode manual -nodelay 1 -resend 2 -nc 1 -interval 20

前向纠错 ��

前向纠错采用Reed Solomon纠删码, 它的基本原理如下: 给定n个数据块d1, d2,…, dn,n和一个正整数m, RS根据n个数据块生成m个校验块, c1, c2,…, cm。 对于任意的n和m, 从n个原始数据块和m 个校验块中任取n块就能解码出原始数据, 即RS最多容忍m个数据块或者校验块同时丢失。

通过-datashard 10 -parityshard 3可以调整Reed Solomon参数。

Snappy数据流压缩 ��

Snappy is a compression/decompression library. It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression. For instance, compared to the fastest mode of zlib, Snappy is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger.

Reference: http://google.github.io/snappy/

SNMP ��

go // Snmp defines network statistics indicator type Snmp struct { BytesSent uint64 // payload bytes sent BytesReceived uint64 MaxConn uint64 ActiveOpens uint64 PassiveOpens uint64 CurrEstab uint64 InErrs uint64 InCsumErrors uint64 // checksum errors InSegs uint64 OutSegs uint64 OutBytes uint64 // udp bytes sent RetransSegs uint64 FastRetransSegs uint64 EarlyRetransSegs uint64 LostSegs uint64 RepeatSegs uint64 FECRecovered uint64 FECErrs uint64 FECSegs uint64 // fec segments received }

使用kill -SIGUSR1 pid可以在控制台打印出SNMP信息,通常用于精细调整当前链路的有效载荷比
观察RetransSegs,FastRetransSegs,LostSegs,OutSegs这几者的数值比例,用于参考调整-mode manual,fec的参数。

性能对比 ��

```

root@vultr:~# iperf -s

Server listening on TCP port 5001

TCP window size: 4.00 MByte (default)

[ 4] local 172.7.7.1 port 5001 connected with 172.7.7.2 port 55453 [ ID] Interval Transfer Bandwidth [ 4] 0.0-18.0 sec 5.50 MBytes 2.56 Mbits/sec <-- connection via kcptun [ 5] local 45.32.xxx.xxx port 5001 connected with 218.88.xxx.xxx port 17220 [ 5] 0.0-17.9 sec 2.12 MBytes 997 Kbits/sec <-- direct connnection via tcp ```

免责申明

用户以各种方式使用本软件(包括但不限于修改使用、直接使用、通过第三方使用)的过程中,不得以任何方式利用本软件直接或间接从事违反中国法律、以及社会公德的行为。软件的使用者需对自身行为负责,因使用软件引发的一切纠纷,由使用者承担全部法律及连带责任。作者不承担任何法律及连带责任。

对免责声明的解释、修改及更新权均属于作者本人所有。

  • KCPTun是一个使用UDP来实现网络加速传输速度的开源软件。 KCPTun网络结构 Kcptun结构图 TCP协议是可靠的数据流传输协议。简单来说,如果数据传输过程中发生了丢包,TCP协议会重新发送相应数据包,如果数据包到达顺序与发送顺序不一致,TCP协议会进行数据包重组,即:TCP协议可以通过控制帧来保证数据流的传输顺序和正确性。但TCP协议的控制机制比较复杂,在线路质量差导致丢包率极高时,传

  • 简介 Kcptun是一个非常简单和快速的,基于KCP协议的UDP隧道,它可以将TCP流转换为KCP+UDP流。而KCP是一个快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果。 Kcptun是KCP协议的一个简单应用,可以用于任意TCP网络程序的传输承载,以提高网络流畅度,降低掉线情况。由于 Kcptun使用Go语言编写,内存占用

  • 由于go写的kcptun比较烂,运行一段时间总是莫名其妙的崩溃,所以一直想找一款可以监控其运行的工具,如果是在ubuntu上可以直接使用supervisor来监控,但是这工具是python写的,在openwrt路由器平台上,flash限制根本跑不了python环境,尝试过两次失败了,还是32M的 flash,很多都只有8M/16M 最后找到了monit工具来代替supervisor,目前测试可以完

  • 使用kcptun代替FinalSpeed进行vps加速 2016-8-12 笑看风云 网络知识 在这篇文章中我写了如何通过FinalSpeed进行vps加速,但是因为FinalSpeed是使用java语言进行开发的导致资源占用较高,很多低端的vps无法使用,这里我介绍一下新的加速软件kcptun,它是用go语言开发的加速软件,资源占用叫小,很多低端vps,乃至路由器都可以运行。 首先我们到这里获取

  • 以下内容摘自 https://github.com/yzslab/kcptun 调整发送/接收窗口 为什么还需要调整?一开始不是计算好了吗? 跑的带宽越大,RTT会越高,所以实际的BDP,会比一开始计算的理论值要大,这个具体值,需自行反复调整测试去确定,记得同时更新rmem_max的值。 注意窗口不要调得太大,如果超出接收端的带宽,会有反效果。 国内的服务器的带宽基本都有一些带宽限制,不是特别大,

  • 使用一键安装脚本: wget --no-check-certificate https://github.com/kuoruan/shell-scripts/raw/master/kcptun/kcptun.sh chmod +x ./kcptun.sh ./kcptun.sh 错误提示如下: 2022-05-14 13:05:17 (9.13 MB/s) - ‘kcptun-v20210922.

 相关资料
  • 默认我们的数据传输都是不经过加密的,要加密传输的话得用上HTTPS协议。easyopen在1.4.0版本开始提供了数据加密传输,不需要HTTPS协议。 easyopen基于公私钥+AES加密传输,交互流程如下: 0. 事先把公钥放在客户端,私钥放在服务端 1. 客户端生成一个随机码randomKey 2. 将randomKey通过公钥RSA加密str = rsa_encode(randomKey,

  • 问题内容: 我想知道是否可以使用Node.js将数据从服务器流式传输到客户端。我想将单个AJAX请求发布到Node.js,然后将连接保持打开状态并将数据连续流式传输到客户端。客户端将收到此流并不断更新页面。 更新: 更新-我无法使其正常工作。在你打电话之前不发送。我建立了一个示例程序来实现此目的: Node.js: HTML: 使用这种方法,我打电话之前什么都没拿回来。这是否可能,或者我应该使用长

  • Gob 是 Go 自己的以二进制形式序列化和反序列化程序数据的格式;可以在 encoding 包中找到。这种格式的数据简称为 Gob (即 Go binary 的缩写)。类似于 Python 的 "pickle" 和 Java 的 "Serialization"。 Gob 通常用于远程方法调用(RPCs,参见 15.9 的 rpc 包)参数和结果的传输,以及应用程序和机器之间的数据传输。 它和 J

  • 主要内容:相关知识,2.系统环境,3.任务内容,4.任务步骤1.相关知识 Flume是一个海量日志采集、聚合和传输的日志收集系统。 Kafka是一个可持久化的分布式的消息队列。 由于采集和处理数据的速度不一定同步,所以使用Kafka这个消息中间件来缓冲,如果你收集了日志后,想输出到多个业务方也可结合Kafka,Kafka支持多个业务来读取数据。 上图中Kafka生产的数据,是由Flume提供的,这里我们需要用到Flume集群,通过Flume集群将Agent

  • 我刚刚在Jenkins上启动了一个在nexus存储库中部署工件的工作,但我得到了下面的消息。 [信息]-----------------------------------------------------------------------------------------------------------------------------------------------------

  • 我已经创建了一个通用的Spring批处理作业,用于处理数据并存储到CSV中。我需要从读取器传递到写入器的一些数据,这是我试图使用JobExecution来做的。然而令人惊讶的是,代码似乎首先调用getWriter()而不是getReader()函数。下面给出了我的配置。有人能解释为什么会发生这种情况,以及是否有其他方法将数据从读取器传递到写入器。 我想从读取器传递到写入器的数据是CSV的列名。由于