ICE简介
ICE是用于UDP媒体传输的NAT穿透协定(适当扩大也能够反对TCP),它须要利用STUN和TURN协定来实现工作。
STUN协定提供了获取一个内网地址对应的公网地址映射关系(NAT Binding)的机制,并且提供了它们之间的保活机制。
TURN协定是STUN协定的一个扩大,容许一个peer只应用一个转发地址就能够和多个peer实现通信。其本质是一个中继协定。
在WebRTC中,ICE会在SDP中减少传输地址信息,利用这个信息进行NAT穿透及确定媒体流传输地址。
ICE Candidate
WebRTC中的ICE Candidate是用来形容能够连贯的远端的根本信息,它至多包含(address,port,protocol)三元组,还有Candidate类型、用户名等。
WebRTC将Candidate分成四种类型,且类型间存在优先级秩序,从高到低别离为host、srflx、prflx和relay。
- host:从本机网卡上获取到的地址,一般来说,一个网卡对应一个地址。
- srflx(server reflexive):从STUN服务器获取到的地址。
- relay:从TRUN服务器获取到的地址。
- prflx(peer reflexive):在联通测试中从对端数据报文中获取到的地址。
其中,srflx和prflx地址可能是一样的,但获取的路径不一样。
ICE的根本流程
ICE的根本流程有三步:收集Candidate,替换Candidate,按优先级尝试连贯。
收集Candidate
WebRTC在进行NAT穿透时(也就是俗称的打洞),首先会收集Candidate。客户端会按程序先获取本地的host地址,而后从STUN服务器获取srflx地址,再从TRUN服务器获取relay地址。
替换Candidate
客户端收集到的这些地址会写到SDP报文中,之后通过信令零碎将它们发送给对端。对端收到这些Candidate后,会与本地的Candidate组成CandidatePair。当然,这种组合也是有规定的,比方传输协定雷同的Candidate能力组成CandidatePair。
须要阐明的是WebRTC中的Candidate替换是应用的trickle形式,也就是边收集边替换。
按优先级尝试连贯
WebRTC会将CandidatePair按优先级排序,而后依照这个程序去进行连通性测试。如果有能够连通的CandidatePair就进行尝试,将它作为数据传输地址。后续开始建设连贯,胜利后就能够利用这个通道传输音视频数据了。
总结
- WebRTC的ICE会抉择出最好的连贯通道来传输音视频数据。
- WebRTC的连通率简直是100%,因为即便无奈实现P2P的连贯,最终也能通过中继(relay)的形式来实现端到端的连贯。
- 那么WebRTC具体是怎么利用ICE协定来实现P2P的NAT穿透的呢?请关注后续文章。