ICE简单小结

现在来说说ICE,其实ICE不是一种协议,更准确的说它是一种框架Framework,它使用的是STUN和TURN协议,综合运用,使得能够穿越NAT;ICE没有独特的报文交互,其报文一般是承载在其他信令中的(如SDP)。


一、ICE原理 

ICE是一种探索和更新式的解决方案,通过收集自己的和通信对端的尽可能多的网络信息(各种网络地址),尝试在这些地址之间建立数据通道,并在此过程中不断更新先前收集到的信息,从而找到和选择一条能够进行NAT穿越的数据通道。


1、收集候选地址

需要收集的地址主要包括

(1)直接依附于网络接口(或者多初始地址主机的那些接口)的地址(可使用gethostname获取本机所有网卡的IP地址)

(2)位于公网的经过NAT转换的地址,即STUN反馈的映射地址

(3)媒体中继地址,即TURN分配的中继地址

需要通信的双方收集自己的候选地址信息,通过信令(如SDP)发送给对方,这样,通信双方就有了双方完整的通信地址列表


2、连通检查

(1)按照优先顺序对候选地址进行排序

Agent将本地地址集和远程地址集进行配对,如本地有n个地址,远程有m个地址,那么配成n*m对,需要对这些地址对进行连通性检查


(2)利用每一个候选传输地址对发送一个检查包

若通信双方以某一地址对通过一个完整的四次握手,那么该地址对就是有效地址对

四次握手是指:当通过地址对中的本地地址向地址对中远程地址发送一个STUN请求,并成功收到STUN响应,称该地址对是可接收的;当地址对中的本地地址收到地址对中远程地址的一个STUN请求,并成功地响应,则称该地址对为可发送的;若一个地址对是可接收的,同时又是可发送的,则称该地址对是有效的,即通过连通性检查。

注:此时,在每个地址对的本地地址上,通信方必须同时充当STUN服务器和STUN客户端的角色


(3)一旦任何一个候选传输地址对的指定媒体成分的连通性检查成功,ICE使用该候选传输地址


二、信令中的处理

主要增加了四个属性,分别是candidate属性、ice-ufrag属性、ice-pwd属性和remote-candidates属性:

(1)candidate属性为通信提供多种可能的候选地址中的一个

(2)remote-candidates属性提供请求者想要应答者在应答中使用的远程候选传输地址标识

(3)ice-pwd属性提供用于保护STUN连通性检查的密码

(4)ice-ufrag属性提供在STUN连通性检查中组成用户名的片断



你可能感兴趣的:(P2P)