基础概念
ICE(交互式连接建立)是 WebRTC(与其他技术一起)用于连接两个对等端的框架,不受网络拓扑结构的限制(通常用于视频或语音聊天)。这个协议让两端能够互相找到对方并建立一个连接,即便它们都使用了网络地址转译(NAT)去跟内网的其他设备共享同一个公网 IP 地址。
请求细节顺序
这个框架的算法是寻找连接两个对等节点的最低延迟路径,通常采用以下顺序寻找:
- 直接的 UDP 连接(当且仅当在这种情况下,STUN 服务器会被用来查找对等端面向网络的地址)。
- 直接的 TCP 连接,通过 HTTP 端口
- 直接的 TCP 连接,通过 HTTPS 端口
- 间接的连接通过中继器/TURN 服务器(如果直接连接方式失败,例如,如果一个对等端位于阻止穿越 NAT 的防火墙后面)
ICE流程主要包括以下几个步骤
一、连接ICE Server
WebRTC客户端首先需要连接到ICE Server,这可以是STUN(Session Traversal Utilities for NAT)Server或TURN(Traversal Using Relays around NAT)Server。STUN Server用于帮助客户端发现自己的公网地址,而TURN Server则作为中继服务器,当直接连接不可用时,通过TURN Server进行数据传输。
二、创建RTCPeerConnection并设置ICEServer地址
WebRTC客户端通过创建RTCPeerConnection对象来建立与远端的连接。在创建RTCPeerConnection时,需要设置ICEServer地址,这包括STUN Server和/或TURN Server的地址。同时,客户端还需要设置本地的音频和视频轨道(AudioTrack和VideoTrack)。
三、ICE连通性测试
在建立连接之前,WebRTC客户端会进行ICE连通性测试,以确保双方之间的网络连接是可用的。这个过程包括收集候选地址(Candidate)、发送和接收候选地址等步骤。候选地址是客户端通过ICE Server获取的可能用于通信的网络地址。
四、候选地址交换
一旦完成了ICE连通性测试,客户端会将收集到的候选地址通过信令服务器(Signaling Server)发送给对端。对端收到候选地址后,会将其加入到自己的RTCPeerConnection中,以便建立连接。
五、建立连接
当等双方)都来选择拥有最合适的对方的连接候选路径地址。后一旦,连接Web建立RTC成功将开始,尝试双方建立就可以连接。它会根据候选地址的优先级和类型(如Host、STUN、TURN实时音视频通信了。
六、ICE Lite模式
ICE Lite是ICE规范的一个简化版本,适用于公共IP地址上的服务器。在ICE Lite模式下,媒体服务器仅响应传入的STUN绑定请求,并在ICE进程中充当受控实体。这种模式下,媒体服务器不需要主动发起连接请求,而是等待客户端发起连接。ICE Lite模式非常适合用于WebRTC接入服务,因为这类服务通常作为服务程序运行,拥有固定的IP地址(无论是内网还是公网)。
一些主要的特征
ICE找到媒体传输的最短路径
通常情况下,ICE可以帮助你发现本地对等端可能拥有的所有网络IP和端口的组合。这些组合被称为“ICE候选”。
当一个新的会话建立时,这些候选与其他对等端的ICE候选相检查。ICE会寻找提供两个对等端之间路径最短,且安全的ICE候选,然后选择这对候选来发送和接收媒体及数据。这有助于减少延迟,并且当对等端处于同一个网络中时,甚至在全球同一地区内,都会造成很大的不同。
ICE允许我们穿过防火墙和NAT进行工作
关于ICE最酷的事情是当使用STUN和TURN协议时,ICE会帮助定义和创建IP及端口候选,增加了穿过不同的防火墙和NAT设备进行连接的几率。这些协议会找到UDP和TCP端口,即使防火墙被配置为对其他类型的通信进行特别严格的控制,也允许从对等端发送和接收媒体。有些时候,需要把更多的工具加入表格中以确保更快高的成功连接率。如果你所处的是一个合作计算环境,通常就需要TURN。即使这样,如果遇到极为严格的防火墙,即使是ICE和TURN也会遇到困难。
即使通过企业级的防火墙,ICE也可以工作
好的,我知道你现在在想什么……“我在这些极其严格的环境中股工作,那我改怎么办呢?”
确实,在某些环境下,WebRTC不能很好的工作。如果端口被屏蔽了的话,那么它们也会被屏蔽。那么有时候,你需要向友好的企业IT安全团队寻求某些项目和产品的帮助。我们会想到金融机构,比如银行和保险公司,医疗诊所和医院,以及公共部门的政府网络。在这些情况中,我们建议你建立一个端口配置指南,并安排将特定的URL或IP范围列入白名单,然后打开特定的端口以方便进行实时通信。
需要记住的是,即使在使用媒体中继服务(比如TURN)时,通过相连接的对等端之间防火墙的数据仍然是段对端加密的。在极端情况下,可能会出现你需要自定义设置或专用TURN服务器的情况。
我需要知道些什么呢?
ICE框架确实解决了大量的实时数据流量连接问题。但还是由一些缺点,其中最严重的是会增加连接所用的时间。在某些情况下,设置时间中的延迟是不可接受的。当然,根本不能建立是最糟糕的情况,我们必须始终对连接成功和“长于理想连接时间”之间的权衡问题。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/6506