了解 WebRTC 中的 SFU、TURN 服务器

Understanding SFU's, TURN servers in WebRTC

如果我正在构建 WebRTC 应用程序并使用选择性转发单元媒体服务器,这是否意味着我将不需要 STUN / TURN 服务器?

据我了解,STUN 服务器用于客户端发现其 public IP / 端口,而 TURN 服务器用于在客户端无法通过 STUN 直接相互连接时在客户端之间中继数据.

我的问题是,如果我使用 public 地址部署我的 SFU 媒体服务器,是否不需要 STUN 和 TURN 服务器?由于数据将始终通过 SFU 中继,并且客户端/对等方永远不会直接相互交谈?

但是,我注意到 Kurento(一种流行的具有 SFU 功能的媒体服务器)的安装指南包含有关 configuring STUN or TURN servers 的部分。为什么需要 STUN 或 TURN 服务器?

运行使用 SFU 时,您仍应使用 TURN 服务器。深入了解 ICE 会有所帮助。所有 SFU 的工作方式都略有不同,但大多数情况下都是如此。

  • 对于每个 PeerConnection,SFU 将监听一个随机的 UDP(有时是 TCP 端口)
  • 此 IP/Port 组合将提供给随后尝试联系 SFU 的每个对等方。
  • 然后 SFU 检查传入的数据包是否包含有效的哈希值(由 upwd 确定)。这确保没有攻击者连接到此端口。

TURN 服务器由

  • 提供对等点可以连接到的单个分配端口。您可以使用 UDP、DTLS、TCP 或 TLS。您需要一个有效的 username/password.
  • 一旦通过身份验证,您就可以通过此连接发送数据包,TURN 服务器会为您中继这些数据包。
  • TURN 服务器随后会在一个随机端口上进行侦听,以便其他人可以将内容发送回对等点。

因此 TURN 服务器有一些 SFU 没有的好东西

  • 您只需监听一个 public 端口。如果您正在与不在互联网上的服务进行通信,您可以让您的客户只连接到分配
  • 您还可以通过 UDP、DTLS、TCP 和 TLS 提供您的服务。大多数 ICE 实现仅支持 UDP。

这两个因素在 government/hospital 情况下非常重要。您的网络只允许端口 443 上的 TLS 流量。因此 TURN 服务器是您唯一的解决方案(您 运行 您在 TLS 443 上的分配)

所以您需要根据您的需要设计您的系统。但是 IMO 你应该总是 运行 在现实世界环境中配置良好的 TURN 服务器。