原创

P2P通信标准协议 - ICE框架详解

简介

ICE全称:Interactive Connectivity Establishment (交互式连接设施) 是一个允许你的浏览器和对端浏览器建立连接的协议框架。在实际的网络当中,有很多原因能导致简单的从A端到B端直连不能如愿完成。这需要绕过阻止建立连接的防火墙,给你的设备分配一个唯一可见的地址(通常情况下我们的大部分设备没有一个固定的公网地址),如果路由器不允许主机直连,还得通过一台服务器转发数据。由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。

工作流程

ICE主要功能就是收集peerA与peerB之间的所有可能通路收集起来,对候选者进行排序,找到可以p2p通讯的最优线路,进行连通性测试。
file

如上图所示,如果A想与B通信,那么其过程如下:

  • 1)A收集所有的IP地址,并找出其中可以从STUN服务器和TURN服务器收到流量的地址;
  • 2)A向STUN服务器发送一份地址列表,然后按照排序的地址列表向B发送启动信息,目的是实现节点间的通信;
  • 3)B向启动信息中的每一个地址发送一条STUN请求;
  • 4)A将收到的B的信息STUN请求的回复信息发送给B;
  • 5)B接到STUN回复后,从中找出那些可在A和B之间实现通信的地址;
  • 6)收集中继地址(Relay Server)信息尝试。
  • 6)利用列表中的排序列最高的地址进一步的设备间通信。

基本概念

ICE Candidate(候选者)

每个Candidate都是一个地址。交换Candidate信息采用SDP格式进行交换。每个candidate都包括协议、ip、端口、类型等信息。

Candidate类型

  • 主机候选者:网卡自己的ip地址与端口
  • 反射候选者:穿越NAT之后的ip地址与端口
  • 中继候选者:通过turn服务开通的ip地址与端口

完整Candidate例子:

candidate:4226293820 1 tcp 1518083839 10.6.78.171 64291 typ host tcptype passive generation 0 ufrag m8RU network-id 6 network-cost 900

Candidate收集

file

获取本机所有的ip地址与端口,得到主机候选者Local Address;向stun或turn服务发送数据,得到反射候选者Server Reflexive Address;向turn服务发送allocate得到turn服务开通的ip与端口。

正文到此结束
本文目录