WebRTC 协议

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/

相关推荐
deng-c-f8 小时前
Linux C/C++ 学习日记(51):内存池
jvm·学习
丝斯20118 小时前
AI学习笔记整理(33)—— 视觉Transformer (ViT)与自注意力机制
人工智能·笔记·学习
【上下求索】8 小时前
学习笔记096——Windows postgreSQL-18.1[压缩包版本]
windows·笔记·学习·postgresql
路在脚下,梦在心里8 小时前
net学习总结
android·学习
deng-c-f8 小时前
Linux C/C++ 学习日记(52):原子操作(1):cpu缓存、可见性、顺序性、内存序、缓存一致性的介绍
学习·原子操作
●VON8 小时前
小V健身助手开发手记(六):KeepService 的设计、实现与架构演进
学习·架构·openharmony·开源鸿蒙·von
走在路上的菜鸟8 小时前
Android学Dart学习笔记第二十节 类-枚举
android·笔记·学习·flutter
YJlio8 小时前
ZoomIt 学习笔记(11.9):绘图模式——演示时“手写板”:标注、圈画、临时白板
服务器·笔记·学习
专注于大数据技术栈9 小时前
java学习--String
java·开发语言·学习