WebRTC:如果一个对等方始终使用全锥或地址限制(但不是端口限制)NAT,我们是否需要 TURN 服务器?

Tha*_*bha 5 nat stun webrtc turn

我一直在阅读一些有关 WebRTC 的内容,但我不明白为什么如果只有 1 个对等方使用对称 NAT,而另一个既不使用对称也不使用端口限制 NAT,那么为什么我们需要 Turn 服务器,所以让 \xe2\x80\x99s假设 A 使用 Full Cone NAT,B 使用对称 NAT:

\n
    \n
  1. STUN SERVER会将B的正确IP地址发送给A,将A的正确IP+端口地址发送给B。

    \n
  2. \n
  3. A 尝试连接到 B(现在 A 将能够接受来自 B 的消息,因为它位于目标地址列中的\xe2\x80\x99)。

    \n
  4. \n
  5. B 尝试连接到 A,这将允许从 A 发送到 B 的请求(ofc A 需要将端口更新为从 B 而不是 Sdp 接收到的端口)。

    \n
  6. \n
\n

我是否遗漏了一些东西,或者这是正确的(并已实现),还是这太复杂而无法实现?

\n

如果这是正确的,那么理论上,如果我\xe2\x80\x99m对等体A并且我使用Full Cone NAT,任何对等体B都可以连接到我(只要我先发送连接请求),而不需要转动服务器。

\n

谢谢

\n

sel*_*bie 1

如果对称 NAT 环境仅更改端口,则您对于 Full Cone NAT 连接的看法是正确的。打孔步骤就可以了。

但许多企业和移动环境具有复杂的路由方案和疯狂的网络环境,与传统的家庭网络路由器不同。这些环境不仅仅是连接到电缆调制解调器的小型路由器盒。它是使用一组 IP 地址的复杂路由器和负载平衡器阵列。每个出站连接可能会获得与先前连接不同的 IP 地址。所以从技术上来说它是“对称NAT”。

因此,在此环境中的节点从 STUN 服务器获取外部 IP/端口对后,后续发送到对等地址的数据可能也会更改端口和 IP 地址

因此,当 UDP 数据包在打洞步骤期间到达时,NAT 看到的 IP 地址与预期完全不同。因此,这里需要一个中继地址(TURN)。

  • 该答案没有具体说明为什么在两台设备都有稳定 IP(一台位于对称 NAT 后面,一台位于全锥 NAT 后面)的情况下,如果没有 TURN 服务器就无法建立对等连接。 (2认同)