〝 古人学问遗无力,少壮功夫老始成 〞
随着5G技术的发展,音视频直播领域发生了翻天覆地的变化,尤其是 2011 年 Google 推出 WebRTC 技术后,大大降低了音视频技术的门槛,你再也不必自己去实现回音消除算法了,也不用自己去实现各种音视频的编解码器了,更不必去考虑跨平台的问题了。如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。
目录
一、Candidate
二、STUN 协议
三、TURN 协议
四、NAT 打洞 /P2P 穿越
五、ICE
六、完全锥型 NAT
七、IP 限制锥型 NAT
八、端口限制锥型
九、对称型 NAT
一、Candidate
-
即 ICE Candidate(ICE 候选者)。表示 WebRTC 与远端通信时使用的协议、IP 地址和端口 -
一般组成包括: 本地 IP 地址、本地端口号、候选者类型,包括 host、srflx 和 relay、优先级、传输协议等等 -
当 WebRTC 通信双方彼此要进行连接时,每一端都会提供许多候选者,比如你的主机有多块网卡,那么每块网卡的不同端口都是一个候选者 -
WebRTC 会按照上面描述的格式对候选者进行排序,然后按优先级从高到低的顺序进行连通性测试,当连通性测试成功后,通信的双方就建立起了连接 -
在WebRTC 中,它首先会尝试 NAT 穿越,即尝试端到端直连。如果能够穿越成功,那双方就通过直连的方式传输数据,这是最高效的。但如果 NAT 穿越失败,为了保障通信双方的连通性,WebRTC 会使用中继方式,当然使用这种方式传输效率会低一些 -
在众多候选者中,host 类型的候选者优先级是最高的。在 WebRTC 中,首先对 host 类型的候选者进行连通性检测,如果它们之间可以互通,则直接建立连接。其实,host 类型之间的连通性检测就是内网之间的连通性检测。WebRTC 就是通过这种方式巧妙地解决了大家认为很困难的问题 -
同样的道理,如果 host 类型候选者之间无法建立连接,那么 WebRTC 则会尝试次优先级的候选者,即 srflx 类型的候选者。也就是尝试让通信双方直接通过 P2P 进行连接,如果连接成功就使用 P2P 传输数据;如果失败,就最后尝试使用 relay 方式建立连接 -
如果用代码结构表示,大概可以是如下: -
host:表示本机候选者 -
srflx:表示内网主机映射的外网的地址和端口 -
relay:表示中继候选者
{
IP: 127.0.0.1,
port: 3333,
type: host/srflx/relay,
priority: number,
protocol: UDP/TCP,
usernameFragment: string
}
二、STUN 协议
-
如果主机没有公网地址,是无论如何都无法访问公网上的资源的 -
而一般情况下,主机都只有内网 IP 和端口,那它是如何访问外网资源的呢 -
在内网的网关上都有 NAT (Net Address Transport) 功能 -
NAT 的作用就是进行内外网的地址转换 -
这样当你要访问公网上的资源时,NAT 首先会将该主机的内网地址转换成外网地址,然后才会将请求发送给要访问的服务器;服务器处理好后将结果返回给主机的公网地址和端口,再通过 NAT 最终中转给内网的主机 -
而想让内网主机获得它的外网 IP 地址,就只需要在公网上架设一台服务器,并向这台服务器发个请求即可获得,也就是 STUN 协议,我们只要遵守这个协议就可以拿到自己的公网 IP 了
三、TURN 协议
四、NAT 打洞 /P2P 穿越
-
NAT解决的问题: IPv4 地址不够用的、安全问题 -
当收集到 Candidate 后,WebRTC 就开始按优先级顺序进行连通性检测了。它首先会判断两台主机是否处于同一个局域网内,如果双方确实是在同一局域网内,那么就直接在它们之间建立一条连接 -
但如果两台主机不在同一个内网,WebRTC 将尝试NAT 打洞,即 P2P 穿越。在 WebRTC中,NAT 打洞是极其复杂的过程,它首先需要对 NAT 类型做判断,检测出其类型后,才能判断出是否可以打洞成功,只有存在打洞成功的可能性时才会真正尝试打洞 -
WebRTC 将 NAT 分类为 4 种类型:完全锥型 NAT、IP 限制型 NAT、端口限制型 NAT、对称型 NAT
五、ICE
-
ICE 就是包括了 STUN、TURN 协议的一套框架 -
其实 ICE 就是上面所讲的获取各种类型 Candidate 的过程 -
就是:在本机收集所有的 host 类型的 Candidate,通过 STUN协议收集 srflx 类型的 Candidate,使用 TURN 协议收集 relay 类型的 Candidate
六、完全锥型 NAT
七、IP 限制锥型 NAT
八、端口限制锥型
?
九、对称型 NAT
|