为什么使用两个以上 STUN/TURN 服务器会减慢发现速度?

Why does using more than two STUN/TURN servers slow down discovery?

我正在为我的 WebRTC 应用程序(构建在 mediasoup 之上)传递一些 STUN 和 TURN 服务器。当我这样做时,我在控制台中收到一条消息告诉我:"Using more than two STUN/TURN servers slows down discovery"

我可以将服务器减少到 2 个...但是...为什么更多会造成伤害?我不想使用最多的选项来建立连接吗?

因为 ICE 的工作原理是,浏览器最初会查看它可以在您的计算机上找到哪些基于 IP 的网络接口。

然后它获取网络接口的数量并将其与该服务提供的每一个 STUN 服务器和每一个 TURN 服务器相结合。接下来,它需要向这些组合中的每一个发送请求并跟踪响应。在 STUN 的情况下,它只是一个单一的响应,在 TURN 的情况下,它通常是多次往返。因此,您拥有的 STUN 和 TURN 服务器越多,从它们那里获得答案所需的时间就越长。

现在,如果 STUN 服务器 #1 将您的外部 IP 地址报告为 A,端口为 1,那么 STUN 服务器 #2 很可能也会告诉您它认为 A 是您的外部 IP 地址,唯一不同的是它报告端口 2。在几乎所有情况下,所有 STUN 服务器都会报告完全相同的外部 IP A。但是,一遍又一遍地向另一端的 ICE 代理报告相同的外部 IP 地址并不会增加建立完全没有连接,因为它的请求都将达到相同的 router/NAT/firewall.

对于 TURN 服务器,可以说更多的 TURN 服务器可以提供更多帮助,因为每个 TURN 服务器都应该为浏览器提供不同的 IP 地址以进行中继。但是,如果给定的浏览器能够访问一个 TURN 服务器而不是另一个,那将是非常不寻常的。

最后,所有这些服务器都会导致浏览器发出更多的 ICE 候选者。因此,更多的 ICE 候选人需要发送给其他浏览器或 ICE 代理。因此,ICE 检查 table 尝试本地和远程 ICE 候选的所有可能排列,随着每个 ICE 候选变得越来越大。因此它会产生更多的网络流量,而不会增加建立连接的机会。