目录
前言
ICE的全称是Interactive Connectivity Establishment(交互式连通建立方式),它是基于offer/answer模式解决NAT穿透的协议集合,它综合利用现有的STUN,TURN等协议获得更加有效的方式来建立会话连接。 其中,连接建立的依据就是本段和远端的candidates对儿,它们是ICE通讯的基础。
正文
WebRTC利用ICE的穿透能力,实现端到端的连接。但是连接的建立,就需要公网的IP地址,所以ICE建立过程中找到匹配本端和远端的IP地址对儿就显得非常关键。
一般情况下,WebRTC通过STUN遍历所有的会话session,就能够找到可用的连接地址。如果网络状态非常糟糕,STUN不能满足需要,就需要中继NAT服务器TURN寻找候选的备用地址,这种情况下,一般是可以成功的,媒体连接能够正常建立。
四种candidate类型
接下来,我们介绍一下ICE建立过程中的candidate候选备用地址。
WebRTC中定义了四种candidate类型,分别是host candidates(host)、server reflexive candidates(srflx)、peer reflexive candidates(prflx)、and relayed candidates(relay)。其中,srflx、prflx是通过STUN或者TURN获取的,relay是通过TURN获取的。
Candidate在列表中的位置越靠前越重要,接下来分别看一下四个candidate。
host:主候选项,表示一个真正的ip地址,可以直接用来和对端通讯。
srflx:一个服务器自反候选项,其中的ip表示由STUN服务器分配的一个中间地址,以匿名的方式与对端通讯。
prflx:一个peer自反候选项,其中的ip是一个由STUN服务器分配的中间地址,以匿名的方式与对端通讯。
relay:中继候选项,其中的ip是由TURN服务器获得的,可以用于在两个对等端之间转发媒体的地址。
也可以参考下图中的描述:
编辑