IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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

  1. 搭建一个具有公网IP和Port的服务(Stun Server)
  2. (Client)发送一个数据包给这个公网服务(Stun Server)
  3. (Stun Service)通过解析IP协议包,就能得知(Client)的公网地址(eAddr:ePort)
  4. (Stun Service)将该公网地址(eAddr:ePort)回传给(Client)
  5. 两个不同的节点Client1和Client2通过信令服务器交换公网地址(eAddr1:ePort1)(eAddr2:ePort2)
  6. 自由地进行通讯

受限圆锥形NAT和端口受限圆锥形NAT

  1. 搭建一个具有公网IP和Port的服务(Stun Server)
  2. (Client)发送一个数据包给这个公网服务(Stun Server)
  3. (Stun Server)通过解析IP协议包,就能得知(Client)的公网地址(eAddr:ePort)
  4. (Stun Server)将该公网地址(eAddr:ePort)回传给(Client)
  5. 两个不同的节点Client1和Client2通过第三方服务器交换公网地址(eAddr1:ePort1)(eAddr2:ePort2)
  6. 连接双方Client1和Client2先向对方地址发送一个数据包
  7. 自由地进行通讯

两个Client在同一个NAT的后面

首先这种情况仍然可以使用上述两种方式打洞成功,双方的数据(音视频)传输时都会通过NAT服务器,这是没有必要的。

这里存在了两个路径,一个是局域网路径,另一个是公网的路径。一旦局域网是通的,使用它可以更加高效。

后面的ICE candidates会提供可选路径的选择方案。

对称NAT

无法实现p2p打洞

信令服务

Signaling server,每套业务都需要有自己的信令服务。它主要提供以下功能:

用户登陆与离开

与客户端保持长链接,帮助传递SDP、ICE candidates等信息

Stun server

Session Traversal Utilities for NAT。P2p打洞依赖的服务,它能告知NAT内部的服务其公网ip,port,NAT类型,这样内部服务可以通过交换这些信息,以及NAT留下的“漏洞”,不通过server而进行连接。

Turn server

Traversal 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还可以进行数据的存储,回放,协议转换等工作。

SDP

Session Description Protocal。描述浏览器的基础信息,比如支持的音视频的编码解码格式,网络拓扑,以及其它浏览器的相关信息。通过交换SDP,通讯双方可以选出一种合适的交互方式进行数据传输,如使用同一种编码解码协议等。

ICE candidates

?Interactive Connectivity Establishment,通常两个peer之间可供连接的方式有多种,比如client之间直接连接,或者通过relay的方式进行转发连接。对于直接连接的方式,不同的组网方式也可能会存在多条路径(通过NAT server,或者直接通过内网连接),这些就是ICE candidates。

浏览器在准备建立连接之前,会收集所有可能创建连接的ip、port以及对应的连接方式,包括本地的,不同层级NAT server映射的,和turn server映射的。一旦收集到任何一条方式,会实时的发送给连接的另一方,即使(视频、音频)通信已经开始了,这样可以方便的切换到一条更为高效的通路上。

把上面这些放到盒子里

?

  1. 所有服务向外的请求都需要通过NAT服务器,使用同一个端口向外发送网络包的请求会映射到同一个NAT服务端口(对称NAT 除外);
  2. 包括向信令服务进行注册,发送ICE candidates信息,以及SDP信息给通信对方;
  3. 通过STUN server可以获取到外网的ip/port,NAT type等信息;
  4. 如果不能实现p2p打洞的话,需要在turn server上创建一个relay的端口,数据通过该端口发送给client;
  5. 在所有条件都准备好后,p2p连接就建立了。

参考文献

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地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:18:36  更:2022-01-28 12:19:32 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码