第 4 章 · ICE 与 NAT 穿越 章节摘要:这是接通的第三道关,也是线上故障密度最高的一道。两台终端各自躲在 NAT 与防火墙后面,互相看不见对方的真实地址;ICE 框架的工作就是把两端的候选地址收集齐全、两两配对逐一试探,直连不通时借道 TURN 中继,最终找到至少一条可用通路。本章从 NAT 的行为模型讲到候选收集与打洞机制,再落到 STUN 与 TURN 的部署实务,最后给出一套按症状归因的连接失败诊断手册。 学习目标 读完本章,你应当能够: 解释 NAT 的四类行为模型,并说出哪两类组合注定无法直连; 区分 host、srflx、prflx、relay 四种候选的来源与优先级排序逻辑; 描述连通性检查(打洞)的完整过程:配对、提名、保活;
章节摘要:这是接通的第三道关,也是线上故障密度最高的一道。两台终端各自躲在 NAT 与防火墙后面,互相看不见对方的真实地址;ICE 框架的工作就是把两端的候选地址收集齐全、两两配对逐一试探,直连不通时借道 TURN 中继,最终找到至少一条可用通路。本章从 NAT 的行为模型讲到候选收集与打洞机制,再落到 STUN 与 TURN 的部署实务,最后给出一套按症状归因的连接失败诊断手册。
读完本章,你应当能够:
ICE(Interactive Connectivity Establishment,交互式连接建立)不发明新的网络能力,它只做一件事:把「两个互相看不见的终端如何找到彼此」变成一个穷举加验证的问题。候选地址是终端在网络中的多重身份,配对试探是身份的两两验证,TURN 是验证全败后的保底通道。理解 ICE 的钥匙是把直觉从「配置一个地址」切换到「收集一堆地址再逐个验证」。
一句金句:打洞的本质不是「穿墙」,而是两端同时向对方扔钥匙——谁先接到谁的钥匙,谁家门就开了。
4.1 候选者收集与连通性检查——打洞的原理。NAT 为什么存在、四类行为模型怎么区分、候选地址从哪来、优先级怎么排、连通性检查如何把配对逐个验证并提名最优通路。这一节给你完整的心智模型。
4.2 STUN 与 TURN 部署——打洞的基础设施。STUN 服务器帮终端「照镜子」看自己的公网地址,TURN 服务器在直连无望时提供中继。本节用 coturn 走完部署、凭证、防火墙与验证的全流程,并把中继带宽成本算给你看。
4.3 连接失败诊断手册——打洞的售后。把「连不上」拆成按症状组合的六类故障:缺 STUN、缺 TURN、防火墙拦 UDP、对称 NAT 死局、凭证错误、网络切换。每类给出判据、根因与修复动作,附诊断决策图。
本章三节是「原理、设施、排障」的闭环:没有 4.1 的候选模型,4.2 的部署参数就是无意义的咒语;没有 4.3 的症状归因,前面两节的知识在凌晨故障时用不出来。
4.1 原理 4.2 基础设施 4.3 诊断手册 ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ NAT 行为模型 │ │ coturn 部署 │ │ 症状归因六类 │ │ 候选收集与优先级│───▶│ 凭证与防火墙 │───▶│ 判据与修复动作 │ │ 配对试探与提名 │ │ 成本核算 │ │ 决策图与案例 │ └────────────────┘ └────────────────┘ └────────────────┘ 知其所以然 备其粮草 治其病症
4.2 的部署质量直接决定 4.3 的故障分布:STUN 配错,症状是跨网必失败;TURN 没配,症状是对称 NAT 用户全灭;凭证过期,症状是部分用户时通时断。反过来做排障时,症状也会指向部署——这是三节之间最重要的双向通道。
前置:需要第 3 章的信令通道与 Trickle ICE 概念(候选消息经信令互发)、对 IP 地址与端口的基本理解。不需要网络工程的 NAT 理论底子,本章从「两台路由器为什么要改写地址」讲起。
后续:通路打通后,第 5 章在这条通路 immediate 上建立 DTLS 加密与媒体传输;第 6 章的拥塞控制也依赖通路质量反馈。建议学完本章做两个实验:用浏览器内部工具观察一次真实通话的候选收集过程;故意把 iceServers 清空再看症状变化——亲手看过一次 failed,4.3 节的每一条都会变得具体。