WebRTC概念简介

WebRTC概念简介,第1张

WebRTC(Web Real-Time Communication)。Real-Time Communication,实时通讯。

WebRTC能让web应用和站点之间选择性地分享音视频流。在不安装其它应用和插件的情况下,完成点对点通信。

WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规JavaScript API的形式提供。对于客户端(例如Android和iOS),可以使用提供相同功能的库。 WebRTC是个 开源项目 ,得到Google,Apple,Microsoft和Mozilla等等公司的支持。2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。

WebRTC包括一系列API和相互关联的协议来实现通信。

Voice over Internet Protocol,在网络上传输声音消息的技术。

例如网络音频通话。或者叫做IP电话,宽带电话。使用VoIP技术的一大原因是费用低。

Network address translation,网络地址转换。

NAT能给你的设备一个公共IP地址。一个路由器(router)有一个公共IP地址,每个连接到路由的设备有一个私有的IP地址。

设备发送请求时,会从一个特定端口,通过私有IP发送到路由的公共IP。这样每个设备在网上不需要都有一个公共IP地址,但也能被其它设备发现。

参考 IP Network Address Translator (NAT) Terminology and Considerations

Interactive Connectivity Establishment,互动式连接建立(交互式连通性建立)。

ICE是一套能让web浏览器之间互相连接的框架。通常来说,节点A到B是很难直接相连的。防火墙会阻止连接,设备没有公共IP地址,路由不允许直接连接其他节点。

ICE使用STUN或者TURN服务(或者同时使用两者)来建立连接。

参考 ICE | rfc8445

Session Traversal Utilities for NAT (STUN) ,NAT会话传输工具。

STUN协议能发现客户端(节点)的公共地址。客户端发送一个请求给网上的STUN服务器,服务器返回客户端的公共地址。不管客户端在路由器的NAT后能否可达。

STUN为请求者提供了可公开访问的IP地址,它就不再参与对话了。

有些路由器会限制设备与外面其它设备的连接。这意味着即使STUN服务器知道了路由的公共IP地址,也没法建立连接。

这种情况下我们需要使用 TURN

Traversal Using Relays around NAT,使用中继绕过NAT传输。

一些路由器使用一种叫“Symmetric NAT”(对称型NAT)的限制。这意味着路由器仅允许之前连接过的节点(peer)来建立连接。

STUN 提供了一个能让应用(终端,节点)穿过NAT的方法。STUN允许客户端获得一个传输地址(一个IP和端口)来获取其它节点的数据。

然而STUN获取到的地址不一定能被所有节点使用。这些地址是否可用取决于网络拓扑的情况。所以,单独STUN无法提供完整的穿越NAT的方案。

TURN协议允许两个处于NAT环境的主机利用中继进行通讯。客户端能够在TURN服务器上分配资源,与其它客户端(peer)进行通讯。

客户端关联一个TURN服务器的地址(relayed server address)来作为中继。

客户端发送报文给TURN服务,TURN服务使用relayed server address作为源地址向其他客户端中继转发报文。

穿越NAT,这个过程就像是“打洞”。也有人称TURN服务器为“打洞服务器”。

这么看,TURN服务器需要有大的带宽。因此,ICE会优先考虑直接通讯,无法直接通讯情况下会使用TURN。

参考 TURN rfc8656

Session Description Protocol,会话描述协议。

描述多媒体连接内容的协议。例如分辨率,格式,编码,加密算法等等。

实际上,SDP不是个真正的协议。它也是用来描述设备之间连接与传输多媒体的数据格式。

参考 SDP: Session Description Protocol | rfc8866

一些缩写

更多请参考 WebRTC概念简介

对称型NAT 将内网和外网的IP一一对应, 常用于电信系网关.

特征: 即使同一个设备的同一个进程向外网访问, 也会得到不同的IP和端口

常见于家用路由器.

内网某{IP, 端口}会被映射成一个固定的{IP, 端口}地址. 即使是第三方外网程序访问之, 也可以成功.

相比于2.1的完全锥形NAT, 这里路由器会查询NAT表, 如果外网访问进来的数据包在自己的NAT表中没有记录, 则不能访问.

相比于IP限制型NAT, 端口限制NAT 额外 又限制了端口, 即, 对方的端口也要和我NAT表中记录的一样才能访问内网.

这里主要讨论的是完全锥形NAT

UDP最适合打洞, 只要服务器提前给路由器打出洞后, 其他设备/程序就可以直接利用这个"洞"

更高级的处理方式是利用 UPnP 技术, 提前向路由器告知要使用的映射端口. 即, 外网对这个{地址, 端口}的访问要交付给某个{地址 端口}.

不过当前应用前景不是很明亮, 因为其十分依赖于路由器是否支持UPnP

TCP也能够打洞, 不过过程比较繁琐.

假设两个节点A,B 分别位于自己的NAT_A和NAT_B之后,两者想直接建立关系, 都需要先访问中间服务器.

不能,一个公网ip可能n个人使用,路由器会给每个人分配端口,这个端口还需要暴露在外网。所以UDP打洞的核心就在这里,获取公网地址,获取路由器给他分配的空闲端口,因为只有这样socket才可以运行,socket需要ip+端口,而不是单纯地ip


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/121852.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-14
下一篇2023-03-14

发表评论

登录后才能评论

评论列表(0条)

    保存