WebRTC 协议
一、WebRTC 协议是什么?
1、概念
WebRTC,即Web Real-Time Communication (网络实时交互) 的缩写,既是一个API,也是一个协议。WebRTC 协议是一套用于两个 WebRTC 代理协商双向安全实时通信的规则。WebRTC API 随后允许开发者使用 WebRTC 协议。WebRTC API 仅针对 JavaScript 进行指定。
类似的关系是HTTP和Fetch API之间的关系。WebRTC 的协议是 HTTP,WebRTC 的 API 是 Fetch API。
WebRTC 协议除了 JavaScript 之外,还支持其他 API 和语言。你也可以找到WebRTC的服务器和领域专用工具。所有这些实现都使用WebRTC协议,以便彼此交互。
网络实时通信,通常称为WebRTC,是一种开源通信协议,拥有一套规则,使设备与网页浏览器之间实现双向且实时的语音、测试和视频流式传输。
这些协议以WebRTC API形式提供,主要以Javascript编写。这意味着,当你集成WebRTC API建立点对点会议(P2P)连接时,你的移动应用和网页浏览器都能支持任何形式的多媒体内容。
2、例子
(1)没有WebRTC
当浏览器1向浏览器2发送消息时,浏览器1的消息首先到达服务器。服务器识别浏览器2并发送消息。通过服务器传输可能并不总是适合实时通信,因为数据传输必须在不到半秒内完成。


(2)有WebRTC
同样的情况也适用于WebRTC。当该协议用于两个浏览器之间的通信时,不需要服务器。WebRTC 协议直接连接对等端进行通信。

WebRTC通常通过通过P2P实时传输音频、视频流和数据来连接用户。但如果用户处于不同的互联网协议(IP)网络,且使用网络地址转换(NAT)防火墙阻止实时通信(RTC),可以使用会话穿越工具(STUN)服务器将IP地址转换为公共互联网地址,从而建立P2P连接。WebRTC API 通过浏览器发起和监控设备间的 P2P 连接,促进多通道的双向数据传输。
二、WebRTC 协议的工作流程
总体而言,用户期望任何语音或视频通话应用都能获得高质量、丰富的互动体验。这需要多种网页浏览器功能,如功能丰富的音频和视频处理、对多种网络协议的支持以及新的应用 API。WebRTCs 以三种主要 API 的形式包装这些内容:
1. MediaStream 媒体流:用于在两个或多个设备之间通信时,从摄像头和视频电话获取音频和视频。
2. RTCPeerConnection 对等连接:负责本地计算机与远程对等端之间连接的发起、维护、监控和关闭
3. RTCDataChannel 数据通道:节点间任意数据通过网络通道双向传输。
第一步:信号传递
让 WebRTC 的agent之间彼此了
用于信令的协议:
Session Description Protocol 会话描述协议(SDP)
信令是 WebRTC 代理(对等节点)之间交换信息以启动通话的过程。在此过程中,一个名为会话描述协议(SDP)的明文协议收集每个节点的信息,并相互交换。信息交流包括:
每个节点的 IP 地址和端口,代理可访问。
代理希望发送给对方的音频和视频轨道总数
每个节点支持的视频编码器
连接值如 uFrag 或 uPwd
安全值就像指纹证书
第二步:连接
连接有/无服务器的对等者
用于连接的协议
Interactive Connectivity Establishment 互动连接机构(ICE)
一旦对等节点获得足够信息交换数据,WebRTC 将使用 **ICE(交互式连接建立)协议连接彼此。
即使对等节点在同一网络或不同网络上,ICE 协议也能在无需服务器的情况下连接这些对等端。
除了直接连接外,**WebRTC 还可以通过 STUN/TURN 服务器的 NAT 穿越,将多个设备通过单一 IP 地址连接到同一网络。**
下一步将是通过强加密保护音频和视频数据。我们来了解一下。
第三步: 确认
加密节点间交换的音频和视频
用于安全的协议
DTLS (Datagram Transport Layer Security) (数据报传输层安全)
SRTP (Secure Real-Time Transport Protocol)(安全实时传输协议)
连接 WebRTC 代理进行通信后,您需要确保数据传输的安全。
为了保护通信信道,WebRTC 使用另外两种协议:DTLS 和 SRTP。
DTLS
当你关注低延迟和容忍丢失时,WebRTC 会通过用户数据报协议(UDP)为你的应用提供这些功能,该协议通过 TLS(传输层安全保护 HTTPS 上的通信)进行加密。
SRTP
该协议加密实时协议(RTP)的数据包。
在 ICE 建立的连接中,WebRTC 进行 DTLS 握手。 DTLS 证书与信令过程生成的指纹匹配,并声明 DTLS 连接。该 DTLS 连接将包含启动 SRTP 会话所需的密钥。
该连接用于数据通道间的消息交换。
接下来,使用 SRTP 安全的 RTP 协议,用于跨通信信道交换音频/视频。
第四步:通信
用于通信的协议
RTP (Real-time Transport Protocol)(实时传输协议)
SCTP (Stream Control Transmission Protocol)(流控制传输协议)
此时你已经连接并保护了两个 WebRTC 代理。现在是时候让同伴们相互沟通了。
RTP
RTP 用于消息交换。它采用 SRTP 加密,提供实时流媒体音频或视频所需的工具。
SCTP
SCTP 用于在数据通道中发送和接收消息。 该协议用于传递顺序不正确或完全不可信的消息。SCTP 采用 DTLS 协议加密。
二、WebRTC 协议的工作流程
构成WebRTC的技术元素和通信协议元素如下。
会话描述协议(SDP):描述通信会话的协议。 它描述了用于建立会话的信息(如IP地址、端口号和加密通信的公钥信息)以及通信信道信息,如视频、音频流和数据信道。 它也被用于视频分发中的实时流式传输协议(RTSP)。
交互式连接建立(ICE):当前的IPv4互联网通常无法通过IP地址实现端到端透明通信,尤其是因为客户端有网络地址转换(NAT)设备和其他设备。 终端之间的通信需要超出NAT的处理。 对于这种“NAT穿越”,使用诸如会话穿越工具(STUN)和利用绕过NAT的中继穿越(TURN)等服务器来释放端口号并中介(中继)通信。 ICE是一种利用STUN和TURN连接终端的技术。
数据报传输层安全(DTLS):一种实现与HTTPS及其他应用中使用的传输层安全(TLS)相同功能的协议。 加密、认证和防篡改。 WebRTC通信在UDP之上使用DTLS。 在该DTLS平台上,音频、视频和数据通信通过SRTP和SCTP实现,具体描述如下。
安全实时传输协议(SRTP):一种用于通过UDP执行高实时通信(如视频)的协议,RFC 3711中增加了加密、认证和防篡改等安全功能。其定义如下。 在WebRTC中,密钥交换通过DTLS进行,加密通信则通过SRTP进行密钥。
流控制传输协议(SCTP):SCTP 是下一代 TCP 协议,支持多归档和每消息数据传输,作为消除开头阻断的协议,RFC 4960 提出。其定义如下。 SCTP 被定义为一种通过 IP 实现的协议,但由于中继设备(中控盒)日益复杂,许多设备仅通过 TCP 和 UDP 进行其他传输,因此并未广泛使用。 WebRTC 使用基于 DTLS/UDP 实现的 SCTP 进行数据通道通信,利用 SCTP 的拥塞控制、消息传输功能和消除线头阻塞功能。

📌 各层协议功能详解
1️⃣ 底层传输层:UDP
WebRTC的实际数据传输是以 UDP 为基础的。UDP 提供轻量、实时性高的数据传输,适合音视频与实时应用。
2️⃣ 连接建立 & NAT 穿透协议:ICE / STUN / TURN
为了在实际网络中建立端对端连接(尤其是两端在 NAT/防火墙后面),WebRTC 使用:
📌 ICE(Interactive Connectivity Establishment):候选地址收集 + 选择最佳路径
📌 STUN(Session Traversal Utilities for NAT):查询公网地址
📌 TURN(Traversal Using Relays around NAT):在无法直连时使用中继
这些协议一起帮助穿越 NAT/firewall,使得 UDP 通路能够连通。
3️⃣ 安全层:DTLS(Datagram TLS)
为了确保安全性和加密,WebRTC 在 UDP 之上使用 DTLS:
DTLS 是针对数据报(UDP)的 TLS 版本
负责密钥协商、身份验证、加密和完整性保护
WebRTC 的所有下层传输数据(RTP 或 SCTP)都通过 DTLS 进行保护。
4️⃣ 媒体传输协议:RTP / SRTP
用于实时音视频媒体的关键协议:
📌 RTP(Real-time Transport Protocol):负责实时媒体的数据传输
📌 SRTP(Secure RTP):对 RTP 加上加密与安全保护
在 WebRTC 中:
RTP / SRTP 在 DTLS 握手后直接在 UDP 上运行
使用 SRTP 为媒体流加密提供安全性与完整性。
5️⃣ 数据通道传输协议:SCTP over DTLS
WebRTC 的 DataChannel 用来传输可靠或非可靠的数据流(除音视频外的任意数据):
📌 SCTP(Stream Control Transmission Protocol) — 一种具有多流、可靠传输和消息边界的传输协议
📌 在 WebRTC 中并不直接跑在 IP,而是:
👉 SCTP 运行在 DTLS 之上,再在 UDP/IP 上承载。
这层组合:
SCTP → DTLS → UDP → IP
允许在已建立 DTLS 安全通道内发送任意数据消息(如文本、文件、游戏数据等)。
6️⃣ 信令(Signaling)
WebRTC 本身不规定信令协议
常见做法是使用 WebSocket / HTTP / HTTPS(基于 TCP)来交换 SDP /候选信息
这部分是为了协调会话参数,而不是数据传输通道。
参考文献
https://ja.tech.jar.jp/webrtc/basics.html?utm_source=chatgpt.com
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols?referrer=grok.com
https://webrtcforthecurious.com/docs/01-what-why-and-how/?referrer=grok.com
https://www.contus.com/blog/webrtc-protocol/?referrer=grok.com
https://getstream.io/glossary/webrtc-protocol/?referrer=grok.com
https://tonybai.com/2024/12/14/webrtc-first-lesson-how-connection-estabish/
1895

被折叠的 条评论
为什么被折叠?



