NAT 设备只放行「内网主动发起的连接」的回包,外网无法主动连入,P2P 通信因此需要打洞。NAT 按映射行为分四类:全锥、限制锥、端口限制锥、对称型。打洞原理(以 UDP 为例):双方先经公网信令服务器交换地址,然后同时向对方 NAT 映射出的公网 IP:端口发包——A 发给 B 的包虽被 B 的 NAT 丢弃,但已在 A 的 NAT 上打出洞,B 随后的包就能进来,反之亦然,双洞齐开后直连建立。锥形 NAT 映射可预测所以可打洞;对称 NAT 对每个目的地分配不同端口,猜不到映射端口,打洞失败,只能走中继。

三个协议的分工:STUN 让客户端发现自己经 NAT 映射后的公网地址和 NAT 类型;TURN 是保底的中继服务器,打洞失败时流量经它转发(带宽成本高);ICE 是整合框架——收集所有候选地址(本地、STUN 反射、TURN 中继),按优先级两两连通性检查,选出最优可用路径。WebRTC 就是这套组合。追问方向:TCP 打洞为什么更难(同时开放的 SYN 同步问题)、运营商级 NAT(CGN)双层 NAT 的影响、QUIC 的连接迁移与 NAT 重新绑定的互动。

(约 440 字)