连接机制
本章主要讲述 MSST-Net 的连接机制。
虚拟网络地址
MSST-Net 为每个接入设备分配一组固定的虚拟 IP 地址,用于设备间通信。
虚拟地址范围:
- IPv4:
172.22.0.0/16 - IPv6:
fd22:2222:2222:2222::/64
每个设备的虚拟 IP 由其设备 ID 确定性推导而来,因此在不同会话间保持不变。
数据加密
MSST-Net 使用 WireGuard 协议对设备间传输的所有数据进行加密。
每个设备在首次启动时生成唯一的 Curve25519 密钥对。公钥在设备注册时提交至协调器,用于与对端建立加密信道。
连接路径
MSST-Net 会自动选择最优的连接路径,将设备间的数据流量路由到延迟最低的通道。
连接路径有以下三种模式:
| 模式 | 说明 |
|---|---|
| 中继(Relay) | 数据通过中继服务器转发 |
| 探测(Probing) | 正在探测直连路径,数据仍经中继转发 |
| 直连(Direct) | 建立了点对点直连,数据不经过中继 |
中继模式
中继模式是所有连接的初始状态。
在此模式下,数据包通过 MSST-Net 中继服务器进行转发,不受 NAT 或防火墙限制。
中继模式是最稳定的连接方式,但延迟高于直连。
探测模式
当系统获取到对端的网络端点信息时,会进入探测模式,尝试建立点对点直连。
在探测阶段,数据仍通过中继转发,不影响正常通信。
探测过程会向对端的各个候选地址(包括 IPv6 和 IPv4,优先测试 IPv6)发送探测包,并统计响应情况。
升级至直连的条件
同时满足以下两个条件,才会从探测模式升级为直连模式:
- 连续成功响应:对某个候选地址连续收到 10 次以上探测回包
- 延迟优势:P2P 路径的往返延迟(RTT)不超过中继路径 RTT 的 80%
对于局域网内的设备,条件 2 自动满足(局域网端点无条件优先)。
直连模式
直连模式下,数据包直接在两台设备间传输,无需经过中继服务器,延迟更低、性能更佳。
直连建立后,系统会持续监控连接质量,并在以下情况下自动降级回中继模式:
| 降级原因 | 行为 |
|---|---|
| 连续 3 次未收到保活回包 | 立即降级 |
| 往返延迟突增至基准值 3 倍以上 | 立即降级 |
| 保持期结束后丢包率超过 20% | 降级 |
降级后,系统会继续探测,在条件满足时重新升级为直连。
保持期
每次路径切换(包括升级和降级)后,系统会进入 20 秒的保持期。
在保持期内,不会主动发起新的路径升级(但路径失效导致的降级不受此限制)。
保持期的目的是避免网络抖动时路径频繁切换。
连接协商
当两台设备需要建立连接时,协调器会通过 WebSocket 信道将双方的端点信息和加密公钥相互通知,触发 P2P 探测。
设备的端点信息由客户端在加入房间或网络时自动检测并上报,包括:
- 本机局域网地址
- NAT 映射后的公网地址(通过 STUN 检测)
IPv6 支持
MSST-Net 优先使用 IPv6 进行直连探测。
若本机网络不支持 IPv6 路由,系统会自动回退至 IPv4。
在 IPv4 和 IPv6 双栈环境下,IPv6 候选地址会优先参与探测。