diff --git a/deps/submodules/minirtc b/deps/submodules/minirtc index 47c0b91d..5e1b4381 160000 --- a/deps/submodules/minirtc +++ b/deps/submodules/minirtc @@ -1 +1 @@ -Subproject commit 47c0b91da3c67f498d226979d6d95034d2b40022 +Subproject commit 5e1b4381fbd243893289ec434a8fe4030be2f79e diff --git a/docs/p2p-punching-implementation-plan.md b/docs/p2p-punching-implementation-plan.md index 9aefc8c6..cee83d53 100644 --- a/docs/p2p-punching-implementation-plan.md +++ b/docs/p2p-punching-implementation-plan.md @@ -175,6 +175,11 @@ SDP 的能力行不是命令;资源数量由本地配置和认证后的协商 控制状态消息按 200/400/800 毫秒退避,最多重发 3 次;使用本轮总截止时间约束。每种消息响应幂等,重复 READY/START 不重复分配 socket,也不重启轮次。乱序消息只能在对应状态允许的范围内缓存或拒绝,不能越级启动。 +HELLO 的重发额度耗尽只停止主动发送,在原升级截止内继续接收认证控制消息, +允许仍在正常 ICE 重查中的对端随后开始协商。此等待不分配端口池、不刷新快照 +或重放窗口、不延长任何截止;PREPARE/READY/START 的重发耗尽仍结束协商。 +取消、过期的同 generation 不能被迟到 HELLO 恢复。原因及复现见 16.4。 + 每方向、每密钥域保留 256 项序号重放窗口,允许正常乱序;已处理的控制请求可重新发送缓存响应,不能重新执行副作用。探测 ACK 必须匹配本轮尚有效的 nonce 和本地 socket_id。未认证包不回复。 上述直接 socket_id 是本地注册表的不透明标识,不是 OS 文件描述符;不得由远端指定本地 FD。 @@ -747,3 +752,28 @@ socket。命中、ACK、发送失败、同进程会话争用、原窗口剩余 各 36 个传输层 SDP 组合通过;128 端点 runtime 8/8、DRAINING 2/2 通过。 这些是本机回环受控网络结果,Windows 新配置及真实异网尚未运行;详情见 [本次回归记录](../deps/submodules/minirtc/tests/ice/lab/punch-runtime-validation-2026-09-14.md#离散递增及扩大默认数量2026-09-14u01x01-之后)。 + + +### 16.4 HELLO 启动错位与映射地址碰撞修复(2026-09-14) + +15:50 批次日志暴露两个边界:一端的合法 ICE 重查使 HELLO 晚于另一端约 2.2 秒 +的重发结束时间;另一个会话已提升 pool socket,却在 Windows 被归为 ordinary-ice +并关闭全部额外 socket。不能把这些现象直接算成探测端口不足或纯日志误判。 + +源码与本机最小网络实验确认:旧协商器把 HELLO 重发耗尽当作整体超时;libnice +在处理真实 STUN 响应的 XOR-MAPPED-ADDRESS 时,只比较 UDP 传输类型和映射地址, +可能复用另一 socket 的候选,从而将命中检查关联到旧 socket。受控复现中两种 +角色都选错并失去直连传输,和历史日志中的不一致有相同机制;未对历史进程的 +内存状态作追溯证明。 + +修复保留原 HELLO 发送次数,耗尽后被动接收至原截止,由迟到对端的认证 HELLO +推进原协议;实际采样新鲜度和剩余时间仍在准备阶段重新检查。libnice 新补丁 +`punch_socket_identity_0.1.24.patch` 要求普通 UDP 的反射候选同时匹配实际 socket, +并让提升候选的反射别名保留内部候选标记。TCP/TURN 的原兼容性判定不变。 +依赖配方校验补丁 SHA,`punch_v1_revision` 从 2 升至 3,使旧缓存失效;ABI 仍为 2。 +选路日志增加实际 GSocket 的 bound 和对应 handle,不能以公网四元组代替 socket。 + +新增 late-hello 与 mapped-collision 回归,先在旧实现上验证失败,再检验真实 +TURN → 标准 ICE → 同一命中 socket 上持续 SRTP。默认开关、128/1024/128 PPS +实验参数、30 秒升级截止及 DTLS 生命周期不变。结果和 Windows 操作见 +[修复验证记录](../deps/submodules/minirtc/tests/ice/lab/punch-runtime-validation-2026-09-14.md#hello-启动错位与映射地址碰撞修复2026-09-14)。