网站模板价格,东莞网站设计讯息,集团网站设计特性,淘宝这种网站怎么做的协议简介
ICE#xff08;Interactive Connectivity Establishment#xff0c;交互式连接建立#xff09;是一种 NAT穿透协议#xff0c;在 WebRTC、VoIP 和视频会议等实时通信场景中被广泛使用。它的主要目标是解决由于 NAT#xff08;网络地址转换#xff09;和防火墙带…协议简介
ICEInteractive Connectivity Establishment交互式连接建立是一种 NAT穿透协议在 WebRTC、VoIP 和视频会议等实时通信场景中被广泛使用。它的主要目标是解决由于 NAT网络地址转换和防火墙带来的连接问题使通信双方能够建立可靠的端到端连接。
广泛用于
WebRTC浏览器实时通信VoIP语音通话视频会议系统P2P 文件传输系统
其核心思想是从多个路径中自动发现一条可用路径并建立连接。
核心目标
发现并测试连接路径通过不同网络路径和地址尝试建立连接。NAT穿透穿越 NAT 和防火墙建立点对点连接。选择最佳连接路径根据连通性检查的结果选择延迟最低、可用性最好的候选地址对。必要时使用 TURN 进行中继
基本概念
Candidate候选地址
ICE 会收集本地、映射和中继地址作为候选
类型描述优先级是否穿透Host Candidate本地地址如 192.168.x.x高否Server Reflexive Candidate使用 STUN 获取的公网映射地址中是Peer Reflexive Candidate连通性检查动态发现的对端地址中等偏高是Relay CandidateTURN 分配的地址中继传输低是最稳定
STUNSession Traversal Utilities for NAT
用于查询 NAT 映射后的公网地址获取 Server Reflexive Candidate。提供最轻量级的 NAT 穿透方式。
TURNTraversal Using Relays around NAT
当 STUN 穿透失败时TURN 中继服务器作为数据转发中介。成本高延迟大但可靠性高。
ICE Agent
每个通信端都运行一个 ICE Agent它负责候选地址的收集、连通性检查、优先级比较、协商等工作。
工作流程
步骤 1候选地址收集Gathering
每个通信端收集自己的候选地址包括
本地地址HostSTUN服务器反射地址Server ReflexiveTURN中继地址Relay
步骤 2交换候选地址Candidate Exchange
使用信令协议如 SDP通常通过 SIP、WebRTC 的信令通道交换候选地址。
步骤 3连通性检查Connectivity Checks
使用 STUN 消息对候选地址对candidate pair进行测试看是否能成功通信。成功的连接对会被 ICE 标记为可用。
步骤 4选择优选连接路径
每对候选地址都有优先级由 ICE 算法计算得出。ICE 会选择具有最高优先级且可达的候选对作为最终连接路径。
步骤 5建立连接Nomination
确认并锁定最终使用的候选对。对于双向通信例如 WebRTC 的数据通道双方都要确认连接对。
优先级与候选对选择
ICE 候选优先级受以下因素影响
地址类型优先级Host Server Reflexive Relay网络接口类型有线 无线类型偏好type preference本地优先级local preference
单个候选优先级
priority (2^24) * type preference (2^8) * local preference 256 - component IDType PreferenceHost Reflexive RelayLocal Preference用于多网卡排序Component IDRTP/RTCP 区分
候选对优先级candidate pair
pair_priority 2^32 * min(local_priority, remote_priority) 2 * max(...) (local remote ? 1 : 0)WebRTC 中 ICE 实现
整体架构
WebRTC 使用 ICE 协议结合 STUN 和 TURN在浏览器内部由 ICE Agent 实现流程如下
浏览器 A 信令通道 浏览器 B
────────────► Gather candidates ◄────────────
─────────────► Exchange SDP (包含 candidates) ◄─────────────
──────────────► Connectivity checks (STUN) ◄───────────────
───────────────► Nomination and Selection ◄───────────────
───────────────► 建立数据通道DTLS SRTP◄──────────────ICE 流程详解WebRTC 版本
步骤 1候选地址收集ICE Gathering
浏览器调用 WebRTC API如 RTCPeerConnection时
浏览器会自动 检查本地网络接口生成 Host 候选地址使用配置的 STUN 服务器获取 Server Reflexive 地址使用配置的 TURN 服务器申请 Relay 候选地址
const pc new RTCPeerConnection({iceServers: [{ urls: stun:stun.l.google.com:19302 },{ urls: turn:your.turn.server, username: ..., credential: ... }]
});步骤 2信令交换SDP 内部包含候选地址
通过 createOffer() 生成包含候选的 SDP交换给对方。
const offer await pc.createOffer();
await pc.setLocalDescription(offer);// 将 offer.sdp 通过信令如 WebSocket发送给对端对端通过 setRemoteDescription() 接收 SDP 并回传 answer。
步骤 3候选地址交换Trickle ICE
候选地址并不是一次性全部发送而是逐步收集并发送trickle ICE
onicecandidate 事件触发时每收集到一个 candidate 就发送给对端对端通过 addIceCandidate() 添加该地址。
// 接收远端的 candidate
pc.addIceCandidate(new RTCIceCandidate(remoteCandidate));步骤 4连通性检查STUN 交叉测试
双方根据候选地址对进行连通性检查connectivity check使用 STUN Binding Request 消息进行握手浏览器使用 STUN over UDP/TCP 判断路径可用性若某对候选可通信则标记为成功。
步骤 5候选优选Nomination
每个候选对被赋予优先级浏览器选择最优的一对进行“提名”nomination一旦确认浏览器锁定该候选对用于媒体通信。
步骤 6连接建立并切换至 DTLS/SRTP
ICE 建立连接后WebRTC 进入安全协商阶段
使用 DTLSDatagram TLS建立安全数据通道使用 SRTP 加密媒体流数据通道使用 SCTP over DTLS。
候选地址优先级逻辑WebRTC
WebRTC 默认优先选择
Host最快最原始Reflexive可 NAT 穿透RelayTURN中继最慢但最稳定
每个候选地址有一个类型优先级type preference和本地优先级local preference组成
priority (2^24) * typePref (2^8) * localPref (2^0) * componentIdWebRTC 默认使用此策略排序所有候选对并逐个测试。
ICE 状态机WebRTC
可以监听 ICE 状态变化
pc.oniceconnectionstatechange () {console.log(ICE 状态:, pc.iceConnectionState);
};状态可能值包括
new未开始checking进行连通性检查connected至少有一个连接建立completed所有连接建立完毕非 Trickledisconnected网络临时中断failed连接失败closed连接已关闭
总结
步骤关键点候选地址收集Host、STUNReflexive、TURNRelay候选交换通过 SDP trickle ICE连通性检查STUN 探测路径可用性优选与提名基于优先级选最优地址对连接建立最终选中路径建立 DTLS/SRTP
相关协议标准
协议说明RFC 8445ICE 规范最新RFC 5245旧版 ICE 标准RFC 5389STUN 协议标准RFC 5766TURN 协议标准RFC 7589TURN over TCP
优缺点
优点缺点适应多种网络环境穿透强实现复杂调试难自动化建立连接提升体验TURN 中继性能和成本问题标准成熟兼容性好STUN、TURN 可用性影响大