简介
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穿越了!!
那如果穿越成功了,他们也直接就能通过NAT进行通讯了。
3.TURN服务进行中继
走中继。那这个终端通过NAT将数据转给TURN中继,中继服务,再向另外一个端去转发数据。
那是不是就这三个呢?其实不是啊,在这个终端上其实可能是多网卡。所以有可能是四个,但是可能有那个VPN那就有五个,有可能是虚拟IP那六个。其实每一个都要做一些尝试,ICE的基本的功能就是第一步,要收集终端双方所有的通路(因为终端可能包含多个网卡,必定包含多个通路),那么第二步就是对所有通路进行检测,看能不能通,那通了之后,那么ICE的这个工作就算结束了。
特点
长链接
ICE 会每隔 15 秒通过使用中的候选传输地址发送连接检查,以确保 NAT 映射以及过滤规则不在媒体会话期间超时;这样当媒体暂停或因其他原因没有发送的情况下,仍有数据包可以持续发送;
若媒体会话仍处于活动状态,对端 ICE 代理会生成 STUN 响应,若本端 ICE 收到此 STUN 响应则表明仍可继续发送媒体数据;若本端 ICE 没有收到 STUN 响应则停止媒体流,此时需要重启 ICE
总结:本文对ice只是进行初步表面的了解,如有不妥之处,请多多包涵