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