一、Candidate种类&优先级
高到底:host、srflx、prflx、relay.
同一局域网内通过host类型的Candidate在内网建立连接。
非同一局域网,隔断从STUN、TURN服务器中收集srflx和relay类型的Candidate。收集srflx类型Candidate时,ICE会尝试NAT打洞。如果打洞成功则使用P2P传输,否则使用TURN服务器中转数据。
二、ICE策略
RTCPeerConnection对象,输入参数RTCconfiguration是json格式。
三、P2P连接
1、NAT穿越原理
NAT就是一种地址映射技术,在内网地址和外网地址之间建立映射关系。内网主机向外网主机发送消息是。数据经过NAT层时,NAT会将数据爆头中源IP地址和源端口号替换为映射后的IP地址和端口号。反之亦然。
2、NAT类型
完全锥形、IP限制锥型、端口限制锥型、对称型。
穿越难度一次增大。
(1)完全锥型NAT
NAT打洞成功,所有知道该洞的主机均可通过该洞与内网主机通信。
NAT穿越多数使用UDP
(2)IP限制锥型NAT
NAT打洞成功,只有与之打洞成功的主机才能通过该洞与内网主机通信,其他外网主机即使知道洞口也不能与之通信。(要求同一IP主机,不区分端口)
(3)端口限制锥型NAT
同IP限制锥型NAT。(要求同一IP主机,并且要求是同一端口)
(4)对称型NAT
内网主机每次访问外网不同主机时,都会生成一个新洞。打洞成功率非常低。
3、NAT类型检测
需要两台STUN服务器,每台STUN服务器又需要两块网卡,每块网卡需要配置公网IP地址。
4、如何进行NAT穿越
四、网络中继
1、TURN协议中转数据
TURN协议底层依赖于STUN协议
TURN协议采用CS模式。
流程:
主机X TurnClient向TurnServer 3478端口发送Allocate指令。TurnServer分配对应的relay地址。
indication
指令Send indication(XOR-PEER-ADDRESS、DATA)
指令Data indication
tunnel机制
只需要在开始发送数据之前,发送ChannelBind指令将channel number与目标地址绑定一次即可。后面统一使用channel number就能找到发往的目的地。
2、WebRTC使用TURN协议
WebRTC收集到的Relay类型Candidate,只得就是通过TURN协议的Allocation指令分配的地址
3、STUN/TURN服务器的部署
云主机
STUN/TURN服务器是Google开源的coturn服务器。
使用trickle-ice工具进行测试。