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/

相关推荐
AOwhisky1 天前
Python 学习笔记(第一期与第二期)——基础语法——核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发
STLearner1 天前
ICML 2026 | LLM×Graph论文总结[1]【图基础模型,文本属性图,多模态属性图,图对齐,图提示学习,关系深度学习
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
什巳1 天前
JAVA练习278- 和为 K 的子数组
java·学习·算法·leetcode
碎光拾影1 天前
CPU与MCU核心区别揭秘
单片机·学习·51单片机
我命由我123451 天前
复利极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
AOwhisky1 天前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
tyqtyq221 天前
药品说明书解读 —— AI 安全用药助手,鸿蒙原生应用深度解析
人工智能·学习·华为·生活·harmonyos
小心亦新1 天前
STM32学习13 定时器1中断
stm32·嵌入式硬件·学习
我命由我123451 天前
72 法则极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
qq_263_tohua1 天前
第112期 CNN学习,不错的文章
学习