简介
ICE协议是一种NAT穿透技术,用于通过offer/answer模型建立的基于UDP的流媒体传输场景(可以扩展来处理其它协议如TCP)。ICE协议是offer/answer模型的一种扩展,使用在SDP offers和SDP answers中提供的多个ip地址及端口工作,这些IP及端口会被用于连通性检查(connectivity check)。 连通性检查通过修正过的STUN协议[Session Travelsal Utilities for NAT]进行。与 STUN 和 TURN 不同,ICE 不是一种协议,而是一个框架(Framework)并整合了 STUN 和 TURN。
案例
典型的ICE使用场景中会有两个需要进行通信终端(endpoint)叫做agent。这个两个agent能通过使用一些信令如sip来进行间接的SDP信息交换。 ICE启动时,两个agent都位于各自的NAT,而且NAT的类型及属性未知,以至于agent并不知道他自身的网络拓扑结构,但是ICE允许agent去发现他自己的拓扑结构和找出两个agent之间可能进行通信的所有网络路径,然后这个两个agent能通过offer/answer模式来交换SDP信息,一般的这个SDP信息交换是通过sip服务器来进行的。
ICE通讯流程
1.内网直接通信
如果两个对端是在同一个局域网内,那么这俩就直接通过这个本地的IP地址就可以进行通讯。
2.穿越NAT
终端首先访问STUN服务,通过STUN服务,能获取到NAT映射后的终端的公网地址(IP+端口)。
并且终端双方可以通过服务器,获取得到对方的公网地址,就可以进行NAT穿越了!!