ICE:Interactive Connectivity Establishment
参考链接:http://tools.ietf.org/html/rfc5245
简介
ICE技术使用请求/应答模型的信令协议建立交互式连接,方便基于UDP的媒体流的NAT穿透。它也整合了STUN和TURN协议的内容,形成了完整的穿透NAT的解决方案,相对于其他解决方案,如ALGs(应用层网关)、Middlebox Control Protocol、STUN(RFC3489)、RSIP等,ICE都表现出优势。
应用场景
两个对端(或者称为代理)之间已经可以通过一些信号协议(SIP、XMPP等)互发SDP消息了,ICE是为了给它们找到最好的媒体流传输路径。
基本思想
ICE使Agent发现足够多的拓扑信息,便于发现一条或者多条潜在的通讯路线,其实是一些候选的传输地址,分三类:本地地址(跟网卡相关)、位于公网的经NAT转换后的地址、Agent使用的中继地址。
两个对端A和B都有用ICE发现自己的候选地址,双方的候选地址有多个组合,ICE尝试所有可以正常工作的组合(连通性检查),直到找到一个或者多个可以工作的组合(具体实现时,可能找到一个就不再找了,即冻结候选,因为候选已经经过排序,前面的优先级高于后面的候选的优先级)。
基本流程
收集候选的传输地址
三种地址:一种从本地接口可以获取的客户端地址;第二种NAT方式转换后的公网IP地址(通过STUN协议发现);第三种是中继地址(通过TURN协议发现)。
候选组合排序
连接性检查
客户端A收集到所有的候选传输地址后,进行排序,然后通过信令通道发给B。B收到后,也进行收集过程,然后作为响应发给A。然后双方互发STUN请求和STUN响应,来检查连通性。
冻结候选
安全性检查