前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebRTC是如何建立链接的

WebRTC是如何建立链接的

作者头像
码农帮派
发布2021-01-12 14:56:27
2.2K0
发布2021-01-12 14:56:27
举报
文章被收录于专栏:码农帮派码农帮派

WebRTC建立链接的基本原则

首先是两个关于WebRTC建立链接的场景:

场景一:双方都在同一个网段内

A和B进行通信,要是双方都在同一个网段内,那么最高效的通信方式就是双方通过内网进行连接,要想让双方进行内网链接,首先需要解决的就是如何让A和B知道对方是在同一个内网中。

场景二:双方处于不同网段

A和B通信,要是双方处于不同网段,那么就必须通过公网进行链接通信,走公网进行通信也有两种方式:

  • 1. 通过P2P的方式进行链接通信;
  • 2. 通过中转服务器,A、B都首先和中转服务器C建立链接,A要想发送消息给B,首先将信息发送给C,C再中转发送给B,同样的B向A发送消息,也需要通过C的转发。

对于上面的两种公网通信的方式,WebRTC中会优先选择方式1,因为方式2会增加A、B之间通信的时长。

WebRTC在建立链接之前,首先会收集所有可能的候选链接方式,并对这些候选链接方式进行优先级排序,然后按照优先级从高到低进行连通性测试,直到找到一个可连通的候选方式,然后通信双方会按照这种连通方式进行链接。

WebRTC众多的链接候选者中,可以分为三类:

  • host:本级候选者
  • srflx:P2P链接候选者
  • relay:中继服务器候选者

三类候选者中,host候选者的优先级是最高的,当host类型的候选者无法建立链接的时候,WebRTC会从srflx候选者中进行连通性测试,也就是尝试通过P2P的方式连接双方,如果失败才会尝试使用relay的方式进行链接。

当WebRTC通信双方需要建立链接的时候,每一段会提供很多候选者,比如一方的主机上有两块网卡,那么两个网卡的不同端口都是一个候选者,WebRTC会按照上面的优先级对每种类型的候选者进行连通性测试,测试成功之后,通信双方就建立了链接。

三种类型候选者的收集:

  • host类型:即本机内网的IP和端口号,这种候选者是最容易收集的;
  • srflx类型:本级通过NAT映射之后的外网IP和端口号;
  • relay类型:中继服务器的IP和端口号;

host类型的候选者直接获取本机的内网IP和端口号就可以了,srflx类型的候选者需要通过STUN服务器获取,relay类型的候选者则需要通过TURN服务器来获得。

1. STUN协议

首先我们的主机要想访问公网资源,必须有自己的公网地址,这样当我们的主机在访问公网中某个主机上的资源的时候,资源主机才能够通过我们主机的公网地址找到我们的主机,并将你想要访问的资源发送给你。

一般情况下,在一个网段内的主机只有内网IP和端口号,那内网的主机是如何访问公网资源的呢?实际上,内网的网关都有NAT的功能,NAT的功能是将内网IP映射转换成公网地址。当我们的内网主机想要访问公网资源的时候,内网网关会将请求的内网地址映射成公网地址,然后将请求发送到要访问的公网服务器上,服务器处理好请求之后,将响应数据传递给请求中携带的公网地址上,该公网接收到响应数据之后,它的网关就会通过之前的地址映射最终中转给内网的主机。通过这种方式实现内网主机访问公网资源的需求。

基于以上的这种方式,我们可以知道内网主机虽然不知道自己在公网的地址,但是内网主机访问的服务器是直到内网主机对应的公网IP的,于是我们在公网中架设一台服务器,通过这台服务器可以询问到自己的公网地址。实际上这一询问流程已经被定义成了一套规范,就是STUN协议。当前比较流行的STUN服务器是CoSTUN,可以直接架设访问。

2. TURN协议

WebRTC通信双方通过P2P的方式无法建立链接的情况下,会使用relay服务进行中转服务。

relay是所有候选者中优先级最低的链接方式,但是relay也是连通率最高的方式。WebRTC通信双方通过向TURN服务器发送Allocation指令获得在relay服务器上的端口,用于中转UDP数据。

总结上面的内容,WebRTC的通信双方在进行链接之前会按照优先级收集链接的候选者,按照优先级的高低,分别是:在本级收集所有的host类型的候选者进行内网链接,通过STUN协议收集srflx候选者进行P2P链接,通过TURN协议收集relay候选者通过中转服务器链接并传输UDP数据。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农帮派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
弹性公网 IP
弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档