我正在为我的 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 候选者而变得越来越大。因此它会产生更多的网络流量,而不会增加建立连接的机会。