| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> webrtc基础 -> 正文阅读 |
|
[网络协议]webrtc基础 |
基本概念它是一套点对点的实时通信框架,主要用作音、视频的传输,也支持普通文本的传输。 它是基于浏览器的通信框架。 学习webrtc其实主要是要先了解周边的技术概念,这些了解清楚了,webrtc的通信逻辑基本就了解了。 NAT(Network Address Translation,网络地址转换)是1994年提出的。. 当在 专用网 内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。. 这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。. 装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。. 这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。 通常NAT有两类组网方式:锥型NAT(cone NAT)和对称NAT(Symmetric NAT)。锥型NAT又可细分为完全圆锥形NAT,受限圆锥形NAT和端口受限圆锥形NAT。锥型NAT的一个标志特征是同一个内部地址(iAddr:iPort)只会映射相同的外部地址(eAddr:ePort),完全圆锥形NAT对于外部发送给(eAddr:ePort)不做任何限制,受限圆锥形NAT只允许通过NAT发出过网络包的目标ip才能通过拦截,端口受限圆锥形NAT只允许通过NAT发出过网络包的目标ip和port才能通过拦截。对称NAT表示即使内部服务使用同一个端口,不同session对应的NAT server上的端口都是不一致的。因此对称NAT是无法实现p2p打洞的。 NAT组网可能存在多层级(拓扑),也就是NAT路由器下面仍旧连接别的NAT路由器。 UDP?P2P打洞在各自局域下(NAT)的服务(或浏览器)想要实现通信的一种方式。通常client-server模式下,server都有公网的域名或ip,这样client就可以直接访问到它。但是两个NAT下的内部服务,它需要先和一个在公网上的服务(stun server)进行通信,stun server会把内部服务在其NAT server上映射的地址和端口值、及其NAT相关信息回传给它,这样它就可以把这些信息通过信令服务传递给它想要连接的服务对象。 根据不同的组网方式,其连接方案也是不同的。 完全圆锥形NAT
受限圆锥形NAT和端口受限圆锥形NAT
两个Client在同一个NAT的后面首先这种情况仍然可以使用上述两种方式打洞成功,双方的数据(音视频)传输时都会通过NAT服务器,这是没有必要的。 这里存在了两个路径,一个是局域网路径,另一个是公网的路径。一旦局域网是通的,使用它可以更加高效。 后面的ICE candidates会提供可选路径的选择方案。 对称NAT无法实现p2p打洞 信令服务Signaling server,每套业务都需要有自己的信令服务。它主要提供以下功能: 用户登陆与离开 与客户端保持长链接,帮助传递SDP、ICE candidates等信息 Stun serverSession Traversal Utilities for NAT。P2p打洞依赖的服务,它能告知NAT内部的服务其公网ip,port,NAT类型,这样内部服务可以通过交换这些信息,以及NAT留下的“漏洞”,不通过server而进行连接。 Turn serverTraversal Using Relays around NAT 如果一台主机处于NAT后面,那么在一定条件下(NAT穿透失败)两台主机无法之间进行通讯。在这种条件下,那么使用中继服务提供通讯是有必要的。TURN协议允许一台主机使用中继服务与对端进行报文传输。 TURN协议也是ICE(交互式连接建立)协议的组成部分,也可以单独使用。如果TURN使用于ICE协议中,relay地址会作为一个候选,由ICE在多个候选中进行评估,选取最合适的通讯地址。一般来说中继的优先级都是最低的。 TURN和其他中继协议的不同之处在于,它允许客户端使用同一个中继地址(relay address)与多个不同的peer进行通信。 Turn协议的工作原理主要有三个阶段,也称三大机制。分配(Allocation),转发(Relay)和信道(Channel)。分配的主要功能是给在NAT内的服务开一个公网上的ip/port;转发是说所有发送和NAT内的服务的信息可以先发送到公网的ip/port,由turn server进行转发给内部服务;信道是为了降低转发方式所带的stun header引起的带宽浪费,使用了更为简介的channel id的方式进行通信,这种方式需要在握手阶段添加一个channel id生成与广播环节。 Media server虽然webrtc是一种p2p的通讯解决方案,但是有些应用场景会涉及到1对多的情况。这是如果仍然使用p2p方案,会造成发送方网络拥堵的情况。使用Media server后,用户只需要把音视频流发送给它,再由它广播出去。除了这个功能以外,Media server还可以进行数据的存储,回放,协议转换等工作。 SDPSession Description Protocal。描述浏览器的基础信息,比如支持的音视频的编码解码格式,网络拓扑,以及其它浏览器的相关信息。通过交换SDP,通讯双方可以选出一种合适的交互方式进行数据传输,如使用同一种编码解码协议等。 ICE candidates?Interactive Connectivity Establishment,通常两个peer之间可供连接的方式有多种,比如client之间直接连接,或者通过relay的方式进行转发连接。对于直接连接的方式,不同的组网方式也可能会存在多条路径(通过NAT server,或者直接通过内网连接),这些就是ICE candidates。 浏览器在准备建立连接之前,会收集所有可能创建连接的ip、port以及对应的连接方式,包括本地的,不同层级NAT server映射的,和turn server映射的。一旦收集到任何一条方式,会实时的发送给连接的另一方,即使(视频、音频)通信已经开始了,这样可以方便的切换到一条更为高效的通路上。 把上面这些放到盒子里?
参考文献P2P通信原理与实现-- P2P通信原理与实现 - evilpan Webrtc tutorial -- WebRTC Tutorial NAT组网方式 -- NAT穿透 - 知乎 Stun server -- https://help.singlecomm.com/hc/en-us/articles/115007993947-STUN-servers-A-Quick-Start-Guide Turn server -- https://zhuanlan.zhihu.com/p/71025431 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:33:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |