打洞与会话建立¶
「打洞」指通过协调双方在同一时刻向对端候选地址发送报文,以期在 NAT 上形成可接受的入站过滤状态,从而建立双向数据通道。本章与 ICE(Interactive Connectivity Establishment)等成熟框架思想对齐,但保持实现无关的叙述,便于在 LoongLink 边缘接入主题下自定义状态机。
基本要素¶
| 要素 | 说明 |
|---|---|
| 候选(Candidate) | 主机可尝试的本地、反射(Server Reflexive)、中继(Relayed)等地址 |
| 候选对(Pair) | 本地候选与远端候选的组合 |
| 连通性检查 | 按优先级对候选对发送 STUN Binding 类请求并验证响应 |
| 提名(Nomination) | 选定最终使用的候选对,避免后续抖动(策略因设计而异) |
优先级与排序(研究关注点)¶
常见启发式:直连优先于反射,反射优先于中继;同类型下 RTT 低者优先。研究上应显式记录:
- 排序函数版本与权重;
- 是否启用 aggressive nomination 或等价策略;
- 对称 NAT 检测失败时的早退条件。
可复现性
排序与超时参数应作为配置文件或编译时常量纳入实验包版本管理,见 代码与可复现资源。
典型失败模式¶
| 现象 | 可能原因 | 建议诊断动作 |
|---|---|---|
| 一方永远无响应 | 过滤行为过严、UDP 被丢弃 | 尝试 TCP/TLS 载体或中继 |
| 间歇成功 | 映射超时、移动网络重绑定 | 缩短保活、记录 RAT 切换事件 |
| 单向通 | 非对称路由、错误本地候选 | 双向抓包对比五元组 |
与信令面的耦合¶
打洞依赖候选交换与时序同步。信令通道应具备:
- 低时延与可靠投递(相对数据面的「尽力而为」);
- 抗重放与完整性保护(与 身份、密钥与信任 联动)。
状态机草案(抽象)¶
可简化为:Gathering → Checking → Connected / Failed;失败经退避后进入 RelayRequired 或整体重启会话。正式消息名与超时表见 协议与数据面草案。
开放问题¶
- 大规模并发会话下的 CPU 与定时器开销:候选对爆炸时的剪枝策略。
- 与 QUIC 连接迁移交互:打洞状态是否需在连接 ID 变化时重建。
下一专题:中继与路径选择