目录
[步骤2:SDP Offer/Answer交换](#步骤2:SDP Offer/Answer交换)
[🔑 核心协议类型速查](#🔑 核心协议类型速查)
总体流程概览
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 | 加密协商 | 动态 |
