客户端-服务器 WebRTC 应用程序是否需要 ICE?

Is ICE Necessary for Client-Server WebRTC Applications?

我在 public IP 地址上有一个 WebRTC MCU (kurento) 运行 为一些只发送或只接收音频的客户提供服务 所以每个客户端都直接与具有 public IP 地址的 MCU 连接(而不是彼此连接)。

Q1:穿越NAT还有必要用STUN和TURN吗??如果是这样为什么?
Q2:浏览器中的 WebRTC 是否有任何 hack 可以消除对 STUN 和 TURN 的需求?

在我看来:大多数客户端-服务器架构对 NAT 后面的客户端没有任何困难。这里与 webrtc 有什么区别?

  • ICE 是强制性的
  • 但使用任何眩晕和转向服务器都不是。
  • 因为您连接到 public 端口上的服务器,您永远不需要使用 TURN 服务器,但是根据 NAT/Firewall 您的客户落后的类型,您可能需要一个 STUN服务器
  • 您根本不需要修改浏览器。应用程序决定是否使用 stun 服务器。如果您在创建时将空 "iceservers" 参数传递给您的 peerconnection 对象,则浏览器中的 ICE UA 将仅生成主机(本地)候选者。

是的,ICE 对于 WebRTC 来说绝对是必须的。

Q1: Is there still a necessity to use STUN and TURN for NAT traversal ?? if so Why ??

对于您的场景,您不需要来使用 STUN 或 TURN。让我解释一下原因。

私有网络中的每个客户端都在某种具有 public IP 地址的 NAT 之下。外界不知道此客户端的私有 IP 地址,即使他们知道在不知道 public IP 地址的情况下也无法与客户端连接。 STUN 服务器用于收集此 public IP 地址。

因此,如果您的 服务器想要启动 连接,则它需要客户端发送其 NAT 的 public IP。客户端将使用 STUN 服务器知道其 public IP 并将其发送到服务器。但是如果 客户端发起连接 那么就不需要知道 NAT 的 public IP。客户端可以向 public 服务器发送数据包以启动连接。服务器可以从客户端数据包中知道 cilents public IP,然后它们就可以连接了。所以不需要STUN。

在这种情况下,您的服务器正在扮演 TURN 的角色。所以你不需要TURN服务器。

问题 2:浏览器中的 WebRTC 是否有任何 hack 可以消除对 STUN 和 TURN 的需求?

没有黑客。视情况而定,使用 TURN/STUN。对于您的场景,您不需要。如果你想建立客户端-客户端连接,那么你需要 STUN 服务器。