“后”疫情时代,以线上为主的学习、工作、交流、娱乐方式成了常态,这一现象背后是实时音视频技术的不断创新和突破。为了给企业和开发者提供极致的音视频体验,拍乐云技术团队除了采用广布 DC,将服务下沉到最后一公里之外, 还会根据应用场景切换技术方案,如果仅有两个终端参与通信,会选择媒体直连方案以降低服务器开销。现在的电脑和设备通常都位于防火墙之后,无法简单建立直连,于是防火墙穿越技术应运而生。穿越防火墙的技术方案多种多样,本文将详细介绍其中一个框架——ICE协议,帮助大家掌握防火墙穿越的基本流程。
#01
什么是直连?
直连模式也称为 P2P 模式(Peer to Peer 下文称 peer 为终端),而 P2P 模式成功的第一步就是要建立连接。如何让处在各自 NAT[RFC3489]后面的设备建立连接,也就是在系统设计的时候尽量提高 P2P 的连接成功率显得非常重要。接下来我们就是选一种标准协议[RFC 8445] ICE (Interactive Connectivity Establishment)进行分析,一探NAT后的设备是如何尝试 Peer to Peer 通信的。
(经典系统架构图)
#02
ICE的建连过程
ICE实现NAT穿透的所要完成的核心处理包括候选地址信息的收集,之后对收集到的地址进行排序、配对,然后执行连通性检查。
一个终端有多种候选传输地址(ip地址和端口用于特定传输协议)用以与其他终端进行通信, 它可能包含:
o 直接连接的网络接口上的传输地址(网卡地址)
o NAT公共端的翻译后的传输地址 (Server reflexive 服务反向地址)
o turn 服务分配的传输地址 (Relayed address 服务中继地址)
01
名词解释
Transport Address:包含IP、port和传输协议。
Candidate:除了Transport Address 外还包括类型、优先级、foundation还有Base。
Base:Host candidate 关联一个 Server reflexive candidate 。
02
候选地址收集
终端必须确定所有的候选的地址。这些地址包括本地网络接口的地址和由它派生的其他所有地址。本地网络地址包括本地网卡地址、VPN 网络地址、MIP 网络地址等。派生地址指的是通过本地地址向 STUN 服务器发送 STUN 请求获得的网络地址,这些地址分为两类,一类是通过 STUN 的绑定得到的地址,称为服务器反向候选地址(Server Reflexive Candidates)或服务器反向地址。另一类是通过 turn 服务中继得到的,称为中继候选地址(Relay Candidates)。
终端通过各个主机候选地址向 STUN server 发送一个 Bind Request 和向 Turn server 发送 Allocate 消息获取额外的服务器反向地址和服务器中继地址。
下