什么是Candidate
每一个candidate 是一个网络地址信息,它包括: 协议簇、IP、端口、类型
例如 : “a = candidate: … UDP … 192.168.2.1 8080 typ host”
WebRTC收集candidate的过程
1、收集本地的candidate: 当前主机上有几块网卡, 每个网卡上有几个IP地址, 例如机器上有2个网卡, 每个网卡上有2个IP地址, 同时每个网卡都支持TCP和UDP, 那么candidate信息就有8(222)条
2、Server Reflexive Address : 主机在NAT之后, 即收集映射后的外网地址, 协议簇依然可以是TCP/UDP, 地址和端口号都是映射后的, 类型则是“srflx”
3、TURN给我们分配的中专地址 : 当NAT无法穿透的时候, 中转服务器会给我们开辟一个IP和端口, 一般使用UDP协议, 地址和端口是TURN服务器分配的, 类型则是“relay”
Candidate的类型及优先级
1、Host 主机候选者 : 本机所有的IP和指定端口
2、Srflx 服务器映射候选者 : 通过STUN/TURN服务器返回的信息中取得
3、Prflx 对端映射候选者 : 通过上图的三种方法收集到candidate之后交给对端, 对端在与我们的连接过程中返回的源地址是一个未知的IP地址, 说明对端在连接时NAT又给他重新映射了一个IP地址, 而这个地址就称为Peer reflex candidate
4、Relay 中继候选者 : 双方无法直接连接, 则会专门发送一个信令给TURN服务以获取IP和端口
以上按优先级从高到低顺序排列