用 Rust 重写 kcptun,完全线上兼容 kcptun-go
🚀 kcptun-rs: 基于 Rust 重构的 KCP 加速隧道
> 这是一个使用 Rust 完整重构的 kcptun ( [kcptun](https://github.com/xtaci/kcptun) ) 兼容实现。不仅做到完全兼容原版 Go 协议与算法,同时在二进制体积控制与系统底层 IO 上优化。
🔗 项目地址: [kcptun-rs](https://github.com/xsean2020/kcptun-rs)
✨ 核心亮点
1. 100% 协议与算法双向兼容( Drop-in Replacement )
- 无缝替换:Rust 客户端 / 服务端可与现有的 Go 版本 kcptun 双向互通,无需修改已有拓扑或配置文件。
- 全加密算法覆盖:完整支持原版包含的 14 种加密算法( AES, Blowfish, Twofish, Cast5, 3DES, Salsa20, SM4, XOR 等)以及 AES-GCM 。
- 68 项 E2E 互通测试:通过严格的端到端集成测试,确保包含 SMUX 多路复用、Snappy 压缩在内的每一层协议报文与 Go 版本完全对齐。
2. 极致的二进制体积控制
- 超小身材:通过精细化剥离重型依赖、定制编译配置与优化静态链接,编译产物体积控制极其优秀,极度适合部署在路由器、OpenWrt 及各类资源受限的嵌入式设备中。
3. 深入底层的零拷贝与批量 IO
- SMUX 刷新逻辑重构:将 SMUX 刷新循环拆分为 4 阶段,大幅降低锁竞争与 CPU 轮询消耗。
- 管道零拷贝与批量系统调用:KCP 输出管道做到全链路 Zero-Copy ,结合 sendmmsg / recvmmsg 批量网络 IO ,显著降低内核态/用户态切换开销。
🛠️ 跨语言完全兼容踩坑记录
在做到完全无缝兼容 Go 版的过程中,我也解决了一系列隐蔽的跨语言协议细节:
1. Snappy 校验和差异:Go 与 Rust 生态中 Snappy 对 CRC32 / CRC32C 的默认处理存在细微差异(早期 Go 端会静默吃掉数据),经过逐层报文分析后实现了严格对齐。
2. Twofish 算法逻辑对齐:修复了 256-bit 密钥下缺失第 5 层 S-box 的问题,确保密文输出与 Go x/crypto 算出的结果完全一致。
3. Blowfish 密钥调度优化:修正了早期版本中在处理每块加密时重复调度密钥的问题。
欢迎有嵌入式加速需求、路由器部署场景或对 Rust 网络数据平面感兴趣的朋友前去体验、提 Issue 或点个 ⭐ Star !
👉 [kcptun-rs](https://github.com/xsean2020/kcptun-rs)
---
原文链接:[点击查看](https://www.v2ex.com/t/1230941)
> 这是一个使用 Rust 完整重构的 kcptun ( [kcptun](https://github.com/xtaci/kcptun) ) 兼容实现。不仅做到完全兼容原版 Go 协议与算法,同时在二进制体积控制与系统底层 IO 上优化。
🔗 项目地址: [kcptun-rs](https://github.com/xsean2020/kcptun-rs)
✨ 核心亮点
1. 100% 协议与算法双向兼容( Drop-in Replacement )
- 无缝替换:Rust 客户端 / 服务端可与现有的 Go 版本 kcptun 双向互通,无需修改已有拓扑或配置文件。
- 全加密算法覆盖:完整支持原版包含的 14 种加密算法( AES, Blowfish, Twofish, Cast5, 3DES, Salsa20, SM4, XOR 等)以及 AES-GCM 。
- 68 项 E2E 互通测试:通过严格的端到端集成测试,确保包含 SMUX 多路复用、Snappy 压缩在内的每一层协议报文与 Go 版本完全对齐。
2. 极致的二进制体积控制
- 超小身材:通过精细化剥离重型依赖、定制编译配置与优化静态链接,编译产物体积控制极其优秀,极度适合部署在路由器、OpenWrt 及各类资源受限的嵌入式设备中。
3. 深入底层的零拷贝与批量 IO
- SMUX 刷新逻辑重构:将 SMUX 刷新循环拆分为 4 阶段,大幅降低锁竞争与 CPU 轮询消耗。
- 管道零拷贝与批量系统调用:KCP 输出管道做到全链路 Zero-Copy ,结合 sendmmsg / recvmmsg 批量网络 IO ,显著降低内核态/用户态切换开销。
🛠️ 跨语言完全兼容踩坑记录
在做到完全无缝兼容 Go 版的过程中,我也解决了一系列隐蔽的跨语言协议细节:
1. Snappy 校验和差异:Go 与 Rust 生态中 Snappy 对 CRC32 / CRC32C 的默认处理存在细微差异(早期 Go 端会静默吃掉数据),经过逐层报文分析后实现了严格对齐。
2. Twofish 算法逻辑对齐:修复了 256-bit 密钥下缺失第 5 层 S-box 的问题,确保密文输出与 Go x/crypto 算出的结果完全一致。
3. Blowfish 密钥调度优化:修正了早期版本中在处理每块加密时重复调度密钥的问题。
欢迎有嵌入式加速需求、路由器部署场景或对 Rust 网络数据平面感兴趣的朋友前去体验、提 Issue 或点个 ⭐ Star !
👉 [kcptun-rs](https://github.com/xsean2020/kcptun-rs)
---
原文链接:[点击查看](https://www.v2ex.com/t/1230941)
· 0 个赞