你说的第一步和第二步属于NAT探测阶段,还有打洞阶段。第一、二步之后,A 可以通过 S (我理解你指的是STUN服务器)拿到 B 的公网地址和公网端口。打洞阶段: 1. A 需要使用和访问S时同样的内网 IP 地址和端口发送打洞请求给 B, 请求到达 A 前面的 NAT 设备上时,生成一个 A 到 B 的表项,NAT 设备允许了 B 到 A 的请求。 2. A 到 B 的请求报文到达 B 前面的 NAT 设备时,由于 B 前面的NAT设备中没有A、B的会话表项,这个请求会被丢弃。 3. 所以需要 B 同时也用相同的方式给 A 发送打洞请求,在 B 前面的 NAT 设备中生成表项。等两边的 NAT 设备中都存在表项之后,链路就通了。 这是我的理解,希望对你有帮助。