微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

我是否遗漏了什么,或者这是正确的(并已实施),还是太复杂而无法实施?

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

谢谢

解决方法

如果对称 NAT 环境仅更改端口,那么您对 ​​Full Cone NAT 的连接性是正确的。打孔步骤会起作用。

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

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

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

,

如果您从映射/过滤的角度考虑,这个问题会更容易一些。其他 NAT 术语不能很好地描述事情的实际工作方式。我的答案来自RFC 4787WebRTC for the Curious: Connecting

映射是指您的 NAT 为出站数据包分配 IP/端口。远程对等方可以将流量发送到此映射。过滤是关于谁可以使用这些映射的规则。

过滤和映射然后可以是地址相关和独立的。如果映射依赖于地址,则意味着每次联系新 IP/端口时都会创建一个新映射。如果映射与地址无关,则意味着无论您将流量发送到何处,都会重新使用它。这些规则同样适用于过滤。


如果一个对等点是独立于地址和过滤的,我认为 TURN 服务器不会提供任何好处。

如果您想要 TCP 连接,则部署 TURN 服务器是个好主意。一些 WebRTC 服务器支持 TCP,但我认为没有任何浏览器会生成被动 TCP 候选。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。