ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7┃音视频直播系统之 WebRTC 中的连接的创建、STUN/TURN 以及 NAT 穿越

2022-05-16 13:01:52  阅读:286  来源: 互联网

标签:候选者 IP 音视频 TURN host NAT 主机 WebRTC


一、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 协议

  • 我们经常说的 relay 服务器或 TURN 服务器它们是同一个意思,都是指中继服务器

  • 而relay 服务是通过 TURN 协议实现的

  • relay 型候选者的优先级与其他类型相比是最低的,但在其他候选者都无法连通的情况下,relay 候选者就成了最好的选择。因为它的连通率是所有候选者中连通率最高的

 

四、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

  • 完全锥型 NAT 的特点是,当 host 主机通过 NAT 访问外网的 B 主机时,就会在 NAT 上打个“洞”,所有知道这个“洞”的主机都可以通过它与内网主机上的侦听程序通信

  • 所谓的“打洞”就是在 NAT 上建立一个内外网的映射表,并且一般会使用UDP 是无连接协议,也就是说只要你发送数据给它,它就能收到

 

七、IP 限制锥型 NAT

  • IP 限制锥型要比完全锥型 NAT 严格得多

  • 它主要的特点是,host 主机在 NAT 上“打洞”后,NAT 会对穿越洞口的 IP 地址做限制

  • 只有指定的 IP 地址才可以通过,也就是说,只有 host 主机访问过的外网主机才能穿越 NAT

 

八、端口限制锥型

  • 端口限制锥型比 IP 限制锥型 NAT 更加严格

  • 它主要的特点是,在 NAT 上对打洞时对IP 地址做了限制,还对具体的端口做了限制

 

九、对称型 NAT

  • 对称型 NAT 是所有 NAT 类型中最严格的一种类型

  • 对称型 NAT 对每个连接都使用不同的端口,甚至更换 IP 地址,会建立多个内外网的映射表

 

标签:候选者,IP,音视频,TURN,host,NAT,主机,WebRTC
来源: https://www.cnblogs.com/autofelix/p/16276569.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有