架构概述

架构概述

https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols

This article introduces the protocols on top of which the WebRTC API is built.

ICE

Interactive Connectivity Establishment (ICE) 是一个框架,允许您的Web浏览器与对等方(peers)连接。有很多原因导致从对等A到对等B的直接连接根本不起作用。它需要绕过防止打开连接的防火墙,如果大多数情况下你的设备没有公共IP地址,则给你一个唯一的地址,如果你的路由器不允许你直接连接到对等方(peers),则通过服务器中继数据。 ICE使用STUN和/或TURN服务器来完成此任务,如下所述。

STUN

Session Traversal Utilities for NAT (STUN)是一种协议,用于发现您的公共地址并确定路由器中的任何限制,这些限制会阻止与对等方的直接连接。

STUN是其他协议使用的工具,例如交互式连接建立(ICE),会话启动协议(SIP)或WebRTC。

客户端将向Internet上的STUN服务器发送请求,该服务器将回复客户端的公共地址,以及客户端是否可以在路由器的NAT后面访问。

NAT

Network Address Translation (NAT)用于为您的设备提供公共IP地址。路由器具有公共IP地址,并且连接到路由器的每个设备都将有专用(private)IP地址。请求将从设备的专用IP转换为具有唯一端口的路由器的公共IP。这样,您不需要为每个设备提供唯一的公共IP,但仍可以在Internet上发现。

某些路由器将限制谁可以连接到网络上的设备。这可能意味着即使我们拥有STUN服务器找到的公共IP地址,也没有人可以创建连接。在这种情况下,我们需要转向TURN。

TURN

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

Traversal Using Relays around NAT (TURN)意味着通过打开与TURN服务器的连接并通过该服务器中继所有信息来绕过对称NAT限制。您将与TURN服务器建立连接,并告诉所有对等方将数据包发送到服务器,然后将其转发给您。这显然带来了一些开销,因此仅在没有其他替代方案时使用。

SDP

Session Description Protocol (SDP)是用于描述连接的多媒体内容的标准,例如分辨率,格式,编解码器,加密等,以便一旦数据传输,两个对等体都可以彼此理解。实质上,这是描述内容的元数据,而不是媒体内容本身。

SDP由一行或多行UTF-8文本组成,每行以单字符类型开头,后跟等号(“=”),后跟包含值或描述的结构化文本,其格式取决于类型。以给定字母开头的文本行通常称为“字母行”。例如,提供媒体描述的行具有类型“m”,因此这些行被称为“m行”。

例如,具体可自信研究

Session description
v=  (protocol version number, currently only 0)
o=  (originator and session identifier : username, id, version number, network address)
s=  (session name : mandatory with at least one UTF-8-encoded character)
i=* (session title or short information)
u=* (URI of description)
e=* (zero or more email address with optional name of contacts)
p=* (zero or more phone number with optional name of contacts)
c=* (connection information—not required if included in all media)
b=* (zero or more bandwidth information lines)
One or more Time descriptions ("t=" and "r=" lines; see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more Media descriptions (each one starting by an "m=" line; see below)
Media description (if present)
    m=  (media name and transport address)
    i=* (media title or information field)
    c=* (connection information — optional if included at session level)
    b=* (zero or more bandwidth information lines)
    k=* (encryption key)
    a=* (zero or more media attribute lines — overriding the Session attribute lines)
Time description (mandatory)
    t=  (time the session is active)
    r=* (zero or more repeat times)

Last updated