webrtc两个client配对交互信令流程

目录

​编辑

总体流程概览

一、信令协商阶段 (HTTP 8080)

步骤1:客户端注册与等待

[步骤2:SDP Offer/Answer交换](#步骤2:SDP Offer/Answer交换)

步骤3:ICE候选地址交换

二、TURN中继协商阶段 (UDP 3478)

步骤4:STUN地址发现

步骤5:TURN中继分配

步骤6:对端权限创建

三、连接建立阶段

步骤7:ICE连通性检查

步骤8:DTLS安全握手

步骤9:媒体数据传输

[🔑 核心协议类型速查](#🔑 核心协议类型速查)


总体流程概览

WebRTC两个客户端的配对过程分为两大阶段信令协商 (通过HTTP 50920)和连接建立(通过TURN 3478)。整个过程涉及4个核心实体:Client A、Client B、Signaling Server、Coturn Server。


一、信令协商阶段 (HTTP 8080)

步骤1:客户端注册与等待

text

复制代码
Client A → Signaling Server: POST /sign_in?uid=A
Client A → Signaling Server: GET /wait?peer_id=A (长轮询)
Client B → Signaling Server: POST /sign_in?uid=B  
Client B → Signaling Server: GET /wait?peer_id=B (长轮询)

关键点:双方建立长轮询连接,随时等待对方消息。

步骤2:SDP Offer/Answer交换

text

复制代码
Client A → Signaling Server: POST /message?from=A&to=B (包含SDP Offer)
Signaling Server → Client B: (通过/wait响应转发Offer)
Client B → Signaling Server: POST /message?from=B&to=A (包含SDP Answer)
Signaling Server → Client A: (通过/wait响应转发Answer)

关键点:交换媒体能力信息(编解码器、ICE信息等)。

步骤3:ICE候选地址交换

text

复制代码
Client A → Signaling Server: POST /message?from=A&to=B (包含ICE候选)
Signaling Server → Client B: 转发ICE候选
Client B → Signaling Server: POST /message?from=B&to=A (包含ICE候选)
Signaling Server → Client A: 转发ICE候选

关键点:交换网络地址信息(Host/Srflx/Relay候选)。


二、TURN中继协商阶段 (UDP 3478)

步骤4:STUN地址发现

text

复制代码
Client → Coturn: STUN Binding Request (0x0001)
Coturn → Client: STUN Binding Success (XOR-MAPPED-ADDRESS)

关键点:获取客户端的公网映射地址(用于Srflx候选)。

步骤5:TURN中继分配

text

复制代码
Client → Coturn: Allocate Request (首次, 0x0003)
Coturn → Client: 401 Unauthorized (NONCE, REALM)
Client → Coturn: Allocate Request (带鉴权)
Coturn → Client: Allocate Success (中继IP:端口, 如1.2.3.4:60000)

关键点:分配中继端口,获得Relay候选地址。

步骤6:对端权限创建

text

复制代码
Client → Coturn: CreatePermission Request (对端的中继地址)
Coturn → Client: CreatePermission Success

关键点:授权TURN服务器转发数据给特定对端。


三、连接建立阶段

步骤7:ICE连通性检查

text

复制代码
Client A → Coturn: STUN Binding Request (发往B的中继地址)
Coturn → Client B: Data Indication (转发STUN请求)
Client B → Coturn: STUN Binding Success (通过Send Indication)
Coturn → Client A: Data Indication (转发STUN响应)

关键点:通过TURN中继测试连通性,确认路径可用。

步骤8:DTLS安全握手

text

复制代码
Client A → Coturn: Send Indication (DTLS ClientHello)
Coturn → Client B: Data Indication (转发)
Client B → Coturn: Send Indication (DTLS ServerHello/Finished)
Coturn → Client A: Data Indication (转发)

关键点:建立端到端加密通道(DTLS over TURN)。

步骤9:媒体数据传输

text

复制代码
Client A → Coturn: Send Indication / ChannelData (SRTP/SCTP)
Coturn → Client B: Data Indication / ChannelData (转发)
Client B → Coturn: Send Indication / ChannelData (SRTP/SCTP)
Coturn → Client A: Data Indication / ChannelData (转发)

关键点:音视频数据通过TURN中继进行双向传输。


🔑 核心协议类型速查

阶段 协议 报文类型 作用 端口
信令 HTTP POST /sign_in 用户注册 50920
信令 HTTP GET /wait 长轮询等待 50920
信令 HTTP POST /message 消息发送 50920
地址发现 STUN Binding Request (0x0001) 获取映射地址 3478
中继分配 TURN Allocate Request (0x0003) 申请中继端口 3478
权限创建 TURN CreatePermission (0x0008) 授权对端 3478
数据传输 TURN Send/Data Indication (0x0006/7) 媒体转发 动态
安全握手 DTLS ClientHello/Finished 加密协商 动态
相关推荐
SendTomo20 小时前
跨设备文件互传新方案
javascript·网络·webrtc·html5·p2p
红尘散仙3 天前
浏览器不能监听端口、没有文件系统,凭什么能点对点传文件?
rust·webrtc·webassembly
福大大架构师每日一题4 天前
mediamtx v1.19.3正式发布:认证安全、WebRTC跨域、MoQ稳定性、RTSP与HLS全面升级
安全·ffmpeg·webrtc
hellojackjiang20114 天前
移动端实时音视频聊天框架 RainbowAV v2.2.7发布
webrtc·实时音视频·即时通讯
淡淡的香烟4 天前
Android中WebRTC通信使用
android·webrtc
SendTomo6 天前
send.wang私传网:P2P直连传大文件首选工具
javascript·网络·网络协议·webrtc·p2p
桑榆4167 天前
WebRTC 本地视频文件推流 Demo 搭建指南 (Ubuntu 24.04)
linux·ubuntu·webrtc
音视频牛哥11 天前
WebRTC 能解决低延迟直播吗?为什么 RTSP、RTMP、GB28181 仍然不可替代?
音视频·webrtc·低延迟rtsp播放器·音视频sdk·smartmediakit·低延迟rtmp播放器·低延迟音视频
云栖梦泽在19 天前
稳如狗网络工具箱:IP、DNS、WebRTC、测速、连通性和全球延迟检测工具简明介绍
网络·网络协议·tcp/ip·网络安全·性能优化·webrtc
用户07806253471920 天前
getUserMedia 权限排障实战:浏览器拒绝,不一定是用户点了“拒绝”
nginx·webrtc