WebRTC 中的两个端点是否需要 STUN/TURN config/credentials

Do both endpoints in WebRTC need STUN/TURN config/credentials

在 WebRTC 中工作,似乎只有提供客户需要提供 STUN 和 TURN 位置和凭证,这些位置和凭证将包含在报价中,然后由接收客户使用。是这样吗?如果不是,为什么不呢?

不是,两端的客户端需要提供某种STUN/TURN配置,注意这些配置需要而不是相同。

回想一下,STUN 和 TURN 只是为您提供了绕过的工具 NAT。换句话说,它为同行提供了一种工具,可以找到一种公开联系的方式。他们通过生成我们通过信令发送的 ICE 候选人来做到这一点。只要我们能够生成至少一个有效的 ICE 候选者并将其告诉我们的对等方,我们就可以建立连接。

之所以两端都需要提供配置,是因为否则,对端之一将无法分辨哪个IP地址属于另一个。因此,即使应答端有您的 ICE 候选者(因此它知道如何联系到您),如果 ICE 候选者仅由提供方生成,那么这一方无法安全地判断传入连接尝试实际上正在到来来自您向其发送报价的同行(尽管很可能是)。

对于赏金问题“我想知道当只有一个对等点具有所需的 TURN 凭据时是否可以通过 TURN 连接对等点。”,答案也是否定的。

要了解原因,您需要了解那里有一个 TURN 服务器,以防万一您由于防火墙、不兼容等原因无法建立直接连接。它会生成“假”ICE 候选人发送给您的peer,因为实际上,这些候选人实际上代表了您的 TURN 服务器。然后,您的 TURN 服务器会将您的对等方发送给您的数据转发给您,此时,它不再被视为点对点。

也就是说,您的同行甚至不知道您的 TURN 服务器,它会像其他任何候选人一样看到您的 TURN 生成的候选人。您的同行仍然需要以某种方式收集 ICE 候选人才能派给您。它不能使用您的 TURN 服务器来执行此操作,因为您从未在整个工作流程中提供其凭据。

如果您对此感兴趣,我建议您阅读 WebRTC For the Curious 这本书。很全面。