kcptun:一个基于kcp协议的远程端口转发工具

news/2025/3/2 4:43:48/文章来源:https://www.cnblogs.com/o-O-oO/p/18603889

kcptun是一个基于kcp协议的远程端口转发工具。它创建基于kcp协议的UDP隧道,可以将TCP流转换为KCP+UDP流。

kcptun使用Go开发,可以用于Windows、Linux、MacOS等操作系统。它对硬件要求非常低,内存最低仅需要20MB。
安装非常简单,库提供了安装脚本:

curl -L  https://raw.githubusercontent.com/xtaci/kcptun/master/download.sh | sh

为了在服务器上发挥最大性能,建议你做如下操作:
1,增加文件打开数量。

ulimit -n 65535

2,调整udp包的相关参数。

net.core.rmem_max=26214400 // BDP - bandwidth delay product
net.core.rmem_default=26214400
net.core.wmem_max=26214400
net.core.wmem_default=26214400
net.core.netdev_max_backlog=2048 // proportional to -rcvwnd

3,增大buffer大小,默认的buffer大小为4MB。对于速度较慢的处理器,增加缓冲区对于正确接收数据包至关重要。

-sockbuf 16777217

这是使用kcptun启动的一个示例:

KCP Client: ./client_darwin_amd64 -r "KCP_SERVER_IP:4000" -l ":8388" -mode fast3 -nocomp -autoexpire 900 -sockbuf 16777217 -dscp 46
KCP Server: ./server_linux_amd64 -t "TARGET_IP:8388" -l ":4000" -mode fast3 -nocomp -sockbuf 16777217 -dscp 46

上面的命令将会建立端口转发通道,应用->KCP客户端(8388/tcp)->KCP 服务端(4000/udp)->目标服务(8388/tcp)。
使用kcptun基本调优指南:

一、如果拥有高速网络连接,如何提高带宽使用?

同时增加kcptun客户端rcvnd参数和kcptun服务端sndnd参数。这些值中的最小值决定了链路的最大传输速率,如wnd * mtu / rtt。然后,尝试下载一些东西,看看它是否符合您的要求。MTU可以通过-mtu进行调整。

二、如果使用kcptun加速游戏,如何减小延迟?

延迟通常表示数据包丢失。您可以通过更改-mode参数来减少延迟。这里延迟从小到大的模式:fast3>fast2>fast>normal>default。

三、如何减少头部阻塞?

由于流被多路复用到单个物理信道中,因此可能会发生头部阻塞。将smuxbuf增加到更大值(默认为4MB)可能会缓解这个问题,但它会使用更多的内存。对于版本>= v20190924,可以切换到smux版本2。这个版本可以现在流内存使用。通过-streambuf可以限制每个流的内存使用。

四、性能低的设备如何调优?例如嵌入式设备?

kcptun使用Reed-Solomon码来恢复丢失的数据包,而这需要大量的计算。低端ARM设备可能无法很好地与kcptun配合使用。为了获得最佳性能,建议使用AMD、Intel等多核服务器CPU。如果必须使用ARM路由器,最好禁用FEC并使用salsa20作为加密方法。
看了很多帖子及GitHub kcptun项目,kcptun特别适合在长距离通信以及拥塞严重的网络发挥优势。相较于TCP,它能提供更低的延时,但消耗更多的带宽。KCP的好处和劣势都非常明显,请选择合适的场景来应用kcptun工具。
更多的内容,请参考Github:

https://github.com/xtaci/kcptun

原创 Eagle1949 技术源泉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/851733.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读数据保护:工作负载的可恢复性12数据库模型

数据库模型1. 数据库中的数据 1.1. 大多数组织的重要信息都存放在某种数据库里1.1.1. 有些组织虽然会把这些信息保存在应用程序中,但这款应用程序还是会将它的数据保存在数据库里1.2. 最为困难的备份与恢复问题基本上都跟数据库有关1.2.1. …

【订运单中心】技术架构概述

1. 订运单中心是什么?2. 再看前言3. 架构目标4. 架构原则5. 业务价值6. 总体架构7. 部署结构8. 面临技术挑战9. 产品能力9.1 订单能力 9.2 运单能力9.3 举例:货物跟踪图解10. 核心架构设计10.1 数据模型10.1.1 基本原则 10.1.2 已具备的可扩展能力10.2 元数据引擎10.2.1 元数…

销售绝技:精准逼单三部曲

逼单是销售流程中的核心环节,其成功与否直接决定整个业务的成果。这一过程并非简单的催促,而是需要策略性地推进,既要避免急躁,也不可拖延,需保持节奏,稳扎稳打,同时结合理性分析与情感共鸣来影响客户。 在推进客户至逼单阶段前,需确认以下三大要素:兴趣:客户需对产品…

企业IPO上市流程步骤一览图

企业IPO上市流程步骤一览图

docker云部署自建知识库的ai微信机器人(易上手很详细)

docker云部署自建知识库的ai微信机器人(易上手很详细)hhyuuu9 月 22 日 北京 阅读 7 分钟11、前言 1.1、介绍 本次演示采用的是2核2g Ubunto系统,无内置镜像的华为云服务器推荐使用腾讯云轻量云服务器docker镜像,可以省去前面第二节步骤,如果还是境外服务器更方便了 1.2、注…

JMeter如何对文件下载功能进行测试

1、首先要明白的是,所谓的文件下载,在jmeter中是以数据流的形式存在,最终的响应数据也是数据流,而jmeter本身不具备将数据流转换成文件并保存到本地的功能,所以需要使用beanshell脚本来实现文件下载并本地本地。 2、右键线程组-添加-取样器-beanshell取样器(注意,beansh…

42. JavaScript变量、数据类型、运算符

1. JavaScript简介 JavaScript是由 ECMAScript 标准 + DOM + BOM 组成DOM --- document 指的是页面源码文档对象BOM --- browser 指的是浏览器对象 2. JavaScript基础 2.1 注释语法//这是单行注释/* 这是多行注释 这是多行注释 */2.2 书写方式 [1]在head或body标签内写script标…

ESP32-WIFI配网优化

前言 之前文章中有介绍过两种 WIFI 配网的方式,如果需要详细了解相关内容可以参考之前的文章: [[ESP32-两种有趣的wifi连接方式]],这里主要对于强制门户认证过程再进行优化和升级。 在强制门户认证中,在生成的网页中,WiFi 名称总是要自己输入,这里总感觉有一点麻烦,前段时…

Excel中使用VBA实现word邮件合并功能

Excel中使用VBA实现word邮件合并功能 代码为窗体程序样式如下:代码: Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpPa…

系统设计精髓

系统设计精髓-稳快灵🛡️ 『稳~高可用性』 ▫️通过冗余和故障转移技术,确保系统几乎无间断运行 ▪️适用于需要7x24小时不间断服务的业务,如云服务、在线交易平台,确保用户随时都能访问服务🚀『快~高吞吐量』 ▫️通过异步处理和负载均衡,提高系统处理请求…

11.20-12-12移动开发记录

数据库和AI调用NETMAUI 1、MySQL搭建 在我的服务器上完成MySQL搭建: [root ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is ??? Server version: 8.0.40 MySQL Community Server - GPLCop…