二进制协议迁移¶
实现状态:✅ 已实现¶
二进制协议已在 rvpn-core/src/protocol/ 中完全实现。
当前状态:二进制协议(已实现)¶
该协议现在使用自定义二进制格式进行所有消息序列化:
消息格式¶
所有消息使用简单的 4 字节长度前缀:
消息类型¶
0x01: ProxyConnect(代理连接)¶
0x02: ProxyResponse(代理响应)¶
[1 字节:类型 = 0x02]
[8 字节:connection_id(大端序 u64)]
[1 字节:成功(0x00 = 失败,0x01 = 成功)]
[2 字节:错误长度(无错误时为 0)]
[N 字节:错误消息(UTF-8,可选)]
0x03: ProxyData(代理数据)¶
[1 字节:类型 = 0x03]
[8 字节:connection_id(大端序 u64)]
[4 字节:数据长度(大端序 u32)]
[N 字节:数据(原始二进制)]
[1 字节:关闭标志(0x00 = 假,0x01 = 真)]
0x04: RatchetMessage(Ratchet 消息)¶
[1 字节:类型 = 0x04]
[1 字节:has_dh_public(0x00 = 假,0x01 = 真)]
[32 字节:dh_public(仅当 has_dh_public = 0x01 时存在)]
[4 字节:message_number(大端序 u32)]
[4 字节:previous_chain_length(大端序 u32)]
[12 字节:nonce(原始值)]
[4 字节:密文长度(大端序 u32)]
[N 字节:密文(原始二进制)]
大小对比¶
ProxyData 示例(1KB 负载)¶
| 格式 | 大小 | 开销 |
|---|---|---|
| JSON | ~1,400 字节 | Base64 + 字段名 |
| 二进制 | ~1,020 字节 | 20 字节头部 |
| 节省 | ~27% |
RatchetMessage 示例(1KB 密文)¶
| 格式 | 大小 | 开销 |
|---|---|---|
| JSON | ~1,500 字节 | Base64 + 字段名 + 结构包装 |
| 二进制 | ~1,060 字节 | 48 字节头部 |
| 节省 | ~29% |
实现细节¶
修改的文件¶
rvpn-core/src/protocol/mod.rs- 添加编解码器模块rvpn-core/src/protocol/codec.rs- 二进制编解码器实现rvpn-server/src/handler.rs- 使用二进制编解码器rvpn-client/src/tunnel.rs- 使用二进制编解码器rvpn-client/src/socks5.rs- 使用二进制编解码器
实现的收益¶
- 带宽:消息大小减少约 30%
- 延迟:更快的序列化/反序列化
- CPU:消除了 Base64 编码/解码开销
- 内存:更可预测的缓冲区大小