mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 00:51:53 +08:00
- 新增 RustDesk 模块,支持与 RustDesk 客户端连接 - 实现会合服务器协议和 P2P 连接 - 支持 NaCl 加密和密钥交换 - 添加视频帧和 HID 事件适配器 - 添加 Protobuf 协议定义 (message.proto, rendezvous.proto) - 新增完整项目文档 - 各功能模块文档 (video, hid, msd, otg, webrtc 等) - hwcodec 和 RustDesk 协议技术报告 - 系统架构和技术栈文档 - 更新 Web 前端 RustDesk 配置界面和 API
3.1 KiB
3.1 KiB
RustDesk 通信协议技术报告
概述
本报告详细分析 RustDesk 远程桌面软件的客户端与服务器之间的通信协议,包括 Rendezvous 服务器(hbbs)、Relay 服务器(hbbr)以及客户端之间的 P2P 连接机制。
文档结构
| 文档 | 内容 |
|---|---|
| 01-architecture.md | 整体架构设计 |
| 02-rendezvous-protocol.md | Rendezvous 服务器协议 |
| 03-relay-protocol.md | Relay 服务器协议 |
| 04-p2p-connection.md | P2P 连接流程 |
| 05-message-format.md | 消息格式定义 |
| 06-encryption.md | 加密机制 |
| 07-nat-traversal.md | NAT 穿透技术 |
| 08-onekvm-comparison.md | One-KVM 实现对比分析 |
核心组件
1. Rendezvous Server (hbbs)
- 功能: ID 注册、Peer 发现、NAT 类型检测、连接协调
- 端口: 21116 (TCP/UDP), 21115 (NAT 测试), 21118 (WebSocket)
- 源文件:
rustdesk-server/src/rendezvous_server.rs
2. Relay Server (hbbr)
- 功能: 当 P2P 连接失败时提供数据中转
- 端口: 21117 (TCP), 21119 (WebSocket)
- 源文件:
rustdesk-server/src/relay_server.rs
3. 客户端 (RustDesk)
- 功能: 远程桌面控制、文件传输、屏幕共享
- 核心模块:
rendezvous_mediator.rs- 与 Rendezvous 服务器通信client.rs- 客户端连接逻辑server/connection.rs- 被控端连接处理
协议栈
┌─────────────────────────────────────────┐
│ Application Layer │
│ (Video/Audio/Keyboard/Mouse/File) │
├─────────────────────────────────────────┤
│ Message Layer │
│ (Protobuf Messages) │
├─────────────────────────────────────────┤
│ Security Layer │
│ (Sodium: X25519 + ChaCha20) │
├─────────────────────────────────────────┤
│ Transport Layer │
│ (TCP/UDP/WebSocket/KCP) │
└─────────────────────────────────────────┘
关键技术特点
- 混合连接模式: 优先尝试 P2P 直连,失败后自动切换到 Relay 中转
- 多协议支持: TCP、UDP、WebSocket、KCP
- 端到端加密: 使用 libsodium 实现的 X25519 密钥交换和 ChaCha20-Poly1305 对称加密
- NAT 穿透: 支持 UDP 打洞和 TCP 打洞技术
- 服务器签名: 可选的服务器公钥签名验证,防止中间人攻击
版本信息
- 分析基于 RustDesk 最新版本源码
- Protocol Buffer 版本: proto3
- 加密库: libsodium (sodiumoxide)