WebRTC 真的是点对点协议吗?

Is WebRTC really peer-to-peer protocol?

WebRTC 是一种点对点通信协议。我想知道,如果它确实需要一个网络服务器,它真的是点对点的吗?例如,要创建 "room",必须在 apprtc.appspot.com 或 https://hello.firefox.com/something 处创建它。

根据你的标签(Chrome & FF),这个问题是针对浏览器的。

如果您想使用 WebRTC 发起呼叫:

  • 您将需要从服务器下载您的网页(WebRTC 应用程序)(如果您已经在您的计算机上下载,则可以是可选的)。
  • 两个浏览器都必须交换一些信息(编解码器、ICE 候选者...),也称为 SDP。此步骤是强制性的,您应该使用服务器。但是您可以涉及任何其他技术(Xaqron 的评论)。
  • 如果浏览器在 NAT 后面,他们需要一个 STUN 服务器来检索他们的 public IP 地址。
  • 如果这两个浏览器之一位于限制性 NAT 或防火墙后面,您必须使用媒体中继,也称为 TURN 服务器。

总而言之,如果你想在 P2P 中与 WebRTC 交换媒体或数据,你应该使用一些服务器。通常媒体将在 P2P 中交换,但有时如果一个或两个浏览器位于限制性 NAT、防火墙之后,媒体将由 TURN 服务器中继....

它是一个真正的 P2P 协议,因为它可以在互联网上的任意两方之间建立直接的无服务器通信。建立通信后,不需要第 3 方。

不过有一些注意事项:

  1. 两个同伴首先需要找到对方。这个 signalling 步骤在 WebRTC 规范中被有意省略,因为 WebRTC 协议不是特定于浏览器的,并且可以在不同情况下被任意数量的不同设备使用。每组对等点都有自己的上下文,并且需要不同的发现方法。您可能还会想要一个根据某些业务规则控制信息流的中间人。

    可以使用其他一些 P2P 协议来建立这个初始信号阶段;例如,如果另一个对等点在同一子网上,您可以只在本地子网上广播 UDP 数据包。您也可以使用信鸽来发出信号;尽管这可能不切实际。在浏览器中通过通用互联网实现这一点的最实用方法是使用某种中央消息代理。

  2. 并不总是可以在任意两个对等点之间建立直接连接。有时这会受到网络拓扑现实的阻碍,例如非许可防火墙或 NAT 路由器。这种情况下物理上两个peer无法通过P2P方式通信,需要第三方中继;这以 TURN 服务器的形式包含在 WebRTC 规范中。

因此,WebRTC 本质上是 一个完整的 P2P 协议,但它需要处理简单的网络现实,有时 经常 , 需要服务器的帮助。