【发布时间】:2019-10-03 17:02:27
【问题描述】:
我正在为我的 WebRTC 应用程序(基于 mediasoup 构建)传递一些 STUN 和 TURN 服务器。当我这样做时,我在控制台中收到一条消息,告诉我:“使用两个以上的 STUN/TURN 服务器会减慢发现速度”
我可以将服务器减少到 2 个……但是……为什么更多的伤害?我不希望有最多的可用选项来建立连接吗?
【问题讨论】:
我正在为我的 WebRTC 应用程序(基于 mediasoup 构建)传递一些 STUN 和 TURN 服务器。当我这样做时,我在控制台中收到一条消息,告诉我:“使用两个以上的 STUN/TURN 服务器会减慢发现速度”
我可以将服务器减少到 2 个……但是……为什么更多的伤害?我不希望有最多的可用选项来建立连接吗?
【问题讨论】:
因为 ICE 的工作原理是浏览器最初会查看它可以在您的计算机上找到哪些基于 IP 的网络接口。
然后它获取网络接口的数量并将其与单个 STUN 服务器和该服务提供的每个单个 TURN 服务器相结合。接下来,它需要向这些组合中的每一个发送请求并跟踪响应。在 STUN 的情况下,它只是一个单一的响应,在 TURN 的情况下,它通常是多次往返。因此,您拥有的 STUN 和 TURN 服务器越多,获得所有答案所需的时间就越长。
现在,如果 STUN 服务器 #1 将您的外部 IP 地址报告为 A,端口为 1,则很可能 STUN 服务器 #2 也会告诉您它将 A 视为您的外部 IP 地址,唯一的区别是它报告端口 2 . 在几乎所有情况下,所有 STUN 服务器都将报告完全相同的外部 IP A。但是一遍又一遍地向另一端的 ICE 代理报告相同的外部 IP 地址并不会增加建立连接的机会因为它的请求都将到达同一个路由器/NAT/防火墙。
对于 TURN 服务器,可以说更多的 TURN 服务器可以提供更多帮助,因为每个 TURN 服务器应该为浏览器提供不同的 IP 地址以进行中继。但是,如果给定的浏览器能够访问一个 TURN 服务器而不是另一个,那将是非常不寻常的。
最终,所有这些服务器都会导致浏览器发出更多的 ICE 候选。所以更多的 ICE 候选人需要发送到其他浏览器或 ICE 代理。结果,尝试本地和远程 ICE 候选者的所有可能排列的 ICE 检查表随着每个 ICE 候选者而变得越来越大。因此它会产生更多的网络流量,而不会增加建立连接的机会。
【讨论】: