WebRTC 和术语海洋

我开始使用 WebRTC 的经历可以用三个字母的缩略词来概括,所以决定写这篇文章来回答我许多问题。我一直说,如果你不知道一个缩略词,它可能就是一个网络协议。

什么是 ICE?

交互式连接建立 (ICE) 是一种框架,允许您的 Web 浏览器与对等体建立连接。有很多原因会导致从对等体 A 到对等体 B 的直接连接无法正常工作。它需要绕过会阻止打开连接的防火墙,为您提供一个唯一的地址(如果您像大多数情况一样,您的设备没有公共 IP 地址),并在您的路由器不允许您直接与对等体连接的情况下通过服务器中继数据。ICE 使用以下一些技术来实现这一点。

什么是 STUN?

用于 NAT 的会话穿越实用程序 (STUN)(缩略词中的缩略词)是一种协议,用于发现您的公共地址并确定路由器中任何阻止与对等体直接连接的限制。

客户端将向互联网上的 STUN 服务器发送请求,服务器将回复客户端的公共地址,以及客户端是否可以通过路由器的 NAT 访问。

什么是 NAT?

网络地址转换 (NAT) 用于为您的设备提供一个公共 IP 地址。路由器将有一个公共 IP 地址,连接到路由器的每个设备将有一个私有 IP 地址。请求将从设备的私有 IP 转换为路由器的公共 IP,并使用唯一的端口。这样,您就不需要为每个设备提供唯一的公共 IP,但仍然可以在互联网上被发现。

一些路由器会对谁可以连接到网络上的设备进行限制。这意味着即使我们获得了 STUN 服务器找到的公共 IP 地址,也并非所有人都能创建连接。在这种情况下,我们需要转向 TURN。

什么是 TURN?

一些使用 NAT 的路由器采用了称为“对称 NAT”的限制。这意味着路由器只接受来自您之前连接的对等体的连接。

使用中继绕过 NAT 的穿越 (TURN) 旨在通过与 TURN 服务器建立连接并通过该服务器中继所有信息来绕过对称 NAT 限制。您将与 TURN 服务器建立连接,并告诉所有对等体将数据包发送到服务器,然后服务器将转发到您。这显然会带来一些开销,所以只有在没有其他选择的情况下才会使用。

什么是 SDP?

会话描述协议 (SDP) 是一种用于描述连接的多媒体内容(例如分辨率、格式、编解码器、加密等)的标准,以便两个对等体在数据传输后能够相互理解。这不是媒体本身,而更多的是元数据。

什么是 Offer/Answer 和信号通道?

不幸的是,WebRTC 无法在没有中间服务器的情况下创建连接。我们称之为信号通道。它是任何类型的通信通道,用于在建立连接之前交换信息,无论是通过电子邮件、明信片还是信鸽……由您决定。

我们需要交换的信息是 Offer 和 Answer,它们只包含上面提到的 SDP。

对等体 A 将成为连接的启动者,它将创建一个 Offer。然后,它们将使用所选择的信号通道将此 Offer 发送到对等体 B。对等体 B 将从信号通道接收 Offer 并创建一个 Answer。然后,它们将将其发送回对等体 A,沿着信号通道。

什么是 ICE 候选?

除了交换有关媒体的信息(如 Offer/Answer 和 SDP 中所述)之外,对等体还必须交换有关网络连接的信息。这被称为 ICE 候选,并详细说明了对等体能够通信的可用方法(直接或通过 TURN 服务器)。

整个交换过程的复杂图表

image

关于 Louis Stowasser

我是一名 Mozilla 的合作伙伴工程师,Gamedev Weekly 的维护者,以及位于澳大利亚布里斯班的 CraftyJS 游戏引擎的创建者。

更多来自 Louis Stowasser 的文章……

关于 Robert Nyman [名誉编辑]

Mozilla Hacks 的技术布道者和编辑。发表关于 HTML5、JavaScript 和开放网络的演讲和博客文章。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年起就开始从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发表博客文章,喜欢旅行和结识新朋友。

更多来自 Robert Nyman [名誉编辑] 的文章……


6 评论

  1. Chris Allen

    非常清晰,非常有用。

    我必须问 - 我们为什么要把自己弄成这样?不仅仅是 tcp/ip 协议给了我们一个设备数量可能远远超过有限地址空间的互联网。还有防火墙和思科路由器中荒谬的过度检查和阻止。
    我们仍然需要开发一组简单的并行协议来允许无服务器的对等连接。有人同意吗?

    2013 年 7 月 23 日 13:19

    1. Fabrizzio Rivera

      我 100% 同意 Chris 的观点。
      尽管需要考虑安全问题,但我确实同意您关于简单 P2P 协议的想法(可能包括基于任何类型的凭据的握手),应该让生活更轻松。

      2013 年 7 月 24 日 12:13

    2. Robert Reese

      Chris,防火墙和路由器中的检查和阻止一点也不荒谬。很抱歉您认为安全不方便。然而,仅仅为了方便而删除安全措施是荒谬的。

      事实上,安全是我更喜欢不默认启用 WebRTC 的原因。幸运的是,我找到了在 Firefox 23 中禁用它的不容易的方法。不幸的是,大多数用户甚至不知道它的存在,更不用说启用它了。

      不,我一点也不同意您的观点。

      2013 年 8 月 10 日 03:10

  2. Luis

    这就是我还没有实现 WebRTC 电话会议解决方案的主要原因。这些缩略词吓跑了我。

    2013 年 7 月 24 日 18:19

  3. 网站开发者布里斯班

    我同意 Chris 的观点 :)

    2013 年 7 月 25 日 03:30

  4. Stephan

    Firefox OS 有没有关于 WebRTC 支持的时间表?

    2013 年 7 月 26 日 21:22

这篇文章的评论已关闭。