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

时间:2015-08-30 21:00:57

标签: webrtc nat-traversal kurento ice-protocol

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

Q1:是否仍然需要使用STUN和TURN进行NAT遍历?如果是这样的话?
Q2:浏览器中的WebRTC中是否有任何hack可以消除对STUN和TURN的需求?

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

2 个答案:

答案 0 :(得分:5)

是的,ICE绝对是WebRTC的必备条件。

  

Q1:是否仍然需要使用STUN和TURN进行NAT遍历   ??如果是这样的话为什么?

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

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

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

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

Q2:浏览器中的WebRTC是否有任何黑客攻击可以消除对STUN和TURN的需求?

没有黑客攻击。根据场景使用TURN / STUN。对于您不需要的场景。如果您想进行客户端 - 客户端连接,那么您将需要STUN服务器。

答案 1 :(得分:1)

  • ICE是强制性的
  • 但是使用任何眩晕和转弯服务器都不是。
  • 由于您要连接到公共端口上的服务器,您永远不需要使用TURN服务器,但根据您的客户端所在的NAT /防火墙的类型,您可能需要STUN服务器
  • 您根本不需要修改浏览器。应用程序决定是否使用stun服务器。如果在创建时将空的“iceservers”参数传递给peerconnection对象,浏览器中的ICE UA将只生成主机(本地)候选者。