精华内容
下载资源
问答
  • WebRTC 基础 TURN的工作过程和原理

    千次阅读 2019-08-22 10:48:57
    参考文档: ... ... 我们在STUN工作过程介绍的文章中提到过,STUN能够处理Cone NAT,但是没有处理对称NAT的能力,也就是说位于对称NAT后面的2台内网机器是无法进行p2p连接的。...TURN协议就是为了解决...

    参考文档:

    https://www.jianshu.com/p/4a15556c6318

    https://www.cnblogs.com/pannengzhi/p/5048965.html

     

    我们在STUN工作过程介绍的文章中提到过,STUN能够处理Cone NAT,但是没有处理对称NAT的能力,也就是说位于对称NAT后面的2台内网机器是无法进行p2p连接的。

    TURN协议就是为了解决对称NAT的问题,它扩展了STUN(所以说TURN服务也会提供STUN的功能), 添加了一个中继(Relaying)的功能,使得位于对称NAT后面的2台内网机器能够进行通信。

     

    需要注意的是,使用TURN进行的通信,本质上讲它不是p2p,同时由于需要中继数据,从而增加了TURN服务器的负担。

     

    TURN的工作流程

    下面将从数据的传输过程来了解TURN是如何让对称NAT后面的内网机器间进行通信的。

    先解释一个名词,这样有利于后面的描述:

    反射地址(Reflexive Transport Address): 它是NAT分配给内网机器与外网进行通信的公网IP和端口

     

    环境:

    client A: 位于对称NAT后的内网机器, 192.168.10.2:1234

    NAT A:   client A 到达公网时的最后一个NAT,反射地址为  112.11.11.11:4000

    TURN Server: TURN服务器,位于公网, 112.11.11.11:3478

    NAT B:   client B 到达公网时的最后一个NAT,反射地址为  112.11.11.11:6000

    client B: 位于对称NAT后的内网机器, 192.168.10.2:4321

     

    1. 准备中继地址

    要使得2个client能够通信,我们需要TURN为我们准备一个位于公网的中继地址

    1)client A 向TURN服务器发送了Allocate请求

    2)服务器根据请求为A分配了一个位于公网的中继地址

    3)服务器向A发送响应,响应中包括中继地址信息

     

    2. 信息传递过程

    上一步中Client A已经拿到了TURN为其分配的中继地址,需要通过其他方式将这个中继地址告诉其他想和A通信的对象,例如Client B。 当ClientB拿到这个中继地址后,就可以和A进行通信了,过程如下:

    图片来自  https://www.jianshu.com/p/4a15556c6318 版权属于原作者所有

    上图中所示,整个过程是B给A发了个Hello消息,然后A给B回了个Hi,下面详细分析下这个过程:

    1. 蓝色箭头代表的是B的发送信息的过程, 绿色箭头代表A回应B的信息的过程。

    2. 在编号为 1,2的两个阶段,发送的是单纯的UDP数据, 而4,5两个阶段发送是使用STUN协议封装过的“Hello”,它被称为Data Indication。

    3. 同样的, 在6,7阶段被发送的是被STUN协议封装过的“Hi”,被称为 Send Indication。 而9,10阶段发送的单纯的包含Hi的udp包。

    4. 在4,5阶段中,数据是从STUN port转发过来的,进行了STUN封装,目的是告诉A这些数据是谁发过来的,也就是包含了B的反射地址信息

    5. 在6,7阶段中,对Hi进行了封装,也就是添加了目的地信息(就是B的反射地址信息),这样TURN才能知道把这个数据通过中继地址发给谁。

    6. 在阶段3中,为数据“hello”进行TURN封装(主要是加入了B的反射地址)

    7. 在阶段8中,对被TURN封装的“HI”解封装,获取数据“Hi”和目的地址,经由中继端口发出

     

    在上面的例子中,我们看到是B先发起的请求,那A怎么先发起请求呢??

    主动发起方必须获取对方的中继信息后才能发起请求,也就意味着,如果A想主动发起,那边B必须首先建立自己的中继通道,然后通知A。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • webrtc turn服务器的坑

    千次阅读 2017-04-19 16:15:37
    在做webrtc的开发时,开始配置了turn服务器但是一直都没有联通成功。  后面调试检查的时候发现客户端的turn配置必须配上 用户名username 和密码password  同时服务器端需要   --user=100:100 --realm=...

      在做webrtc的开发时,开始配置了turn服务器但是一直都没有联通成功。

      后面调试检查的时候发现客户端的turn配置必须配上 用户名username 和密码password 


    同时服务器端需要 

     --user=100:100 --realm=mycompany.org --stale-nonce=600
    加上这些参数才能正常联通

    user为用户名密码

    realm用于生成turn交互数据的hash参数

    展开全文
  • WebRTC协议栈 图一 WebRTC stack TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如图一所示,TURN协议是建立在UDP协议之上的一个应用层协议。如果一台主机处于...

    WebRTC协议栈

    图一 WebRTC stack

    TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如图一所示,TURN协议是建立在UDP协议之上的一个应用层协议。如果一台主机处于NAT后面,那么在一定条件下(NAT穿透失败)两台主机无法之间进行通讯。在这种条件下,那么使用中继服务提供通讯是有必要的。TURN协议允许一台主机使用中继服务与对端进行报文传输。TURN协议也是ICE(交互式连接建立)协议的组成部分,也可以单独使用。如果TURN使用于ICE协议中,relay地址会作为一个候选,由ICE在多个候选中进行评估,选取最合适的通讯地址。一般来说中继的优先级都是最低的。

    TURN和其他中继协议的不同之处在于,它允许客户端使用同一个中继地址(relay address)与多个不同的peer进行通信。如图二所示。

    图二 同一个中继地址和多个peer通信

    Turn协议工作原理

    Turn协议的工作原理主要有三个阶段,也称三大机制。分配(Allocation),转发(Relay)和信道(Channel)。

    1.分配机制:

    客户端想要使用中继功能,需要在中继服务器上申请一个中继地址。客户端发送分配请求(Allocate request)到服务器,服务器为用户开启一个relay端口然后返回分配成功响应,并包含了分配的地址。

    Allocation Mechanism

    图三 Allocation Mechanism

    a) 客户端A向STUN Port发送Allocate请求(图中绿色部分)。

    b) STUN服务器接收到客户端A的Allocate请求,服务器一看是Allocate请求,则根据relay端口分配策略为A分配一个端口。

    c) 服务器发送response成功响应。在该response中包含XOR-RELAYED-ADDRESS属性。该属性值就是A的relay端口。

    d) 客户端接收到response后,就知道了自己的relay地址。该relay地址是个公网地址,可以看作是客户端A在公网上的一个代理,任何想要联系A的客户端,只要将数据发送到A的relay地址就可以了。

    2.转发机制:

    任何想要联系客户端A的人,只要知道客户端A的relay地址就可以了。

    client和peer之间有两种方法通过中继服务器交换数据。第一种是使用relay,第二种使用channel。两种方法都通过某种方式告知服务器哪个peer应该接收数据,以及服务器告知client数据来自哪个peer。

    Relay Mechanism使用了Send和Data指令(Indication)。其中Send指令用来把数据从client发送到server,而Data指令用来把数据从server发送到client。

    图四 Relay Mechanism

    如上图所示是B主动给A发消息:“Hello”,A回应“Hi”的过程。

    a) 序号1、2、3、4、5为B的发送请求(蓝色箭头方向);

    b) 序号6、7、8、9、10为A的回应,原路返回(绿色箭头方向)。

    c) 1、2阶段时,发送的是裸的UDP数据。

    d) 第3阶段是:从A的relay端口收到数据,添加STUN头后,最后从STUN Port 发出的过程。

    e) 在4、5过程中,是被STUN协议包装过的“Hello”,称之为Data indication。为了能够让客户端A知道这个包是哪个客户端发来的,所以,STUN 协议对“Hello”进行了重新的包装,最主要的就是添加了一个XOR-PEER-ADDRESS属性。

    f) 6、7阶段为被STUN协议包装过的“Hi”,称之为Send indication。为了能够让A的relay port知道最终发往哪个客户端,因此也为“Hi”添加了STUN头,也是添加了XOR-PEER-ADDRESS属性。

    g) 第8阶段是:从STUN Port 接收到带STUN 头的数据,去掉STUN头,最后从A的relay端口发出的过程。

    h) 9、10是裸的UDP数据。

    3.信道机制:

    对于一些应用程序,比如VOIP,在Send/Data Indication中多加的36字节格式信息会加重客户端和服务端之间的带宽压力。为改善这种情况,TURN提供了第二种方法来让client和peer交互数据.该方法使用另一种数据包格式,即ChannelData message,信道数据报文。

    ChannelData message不使用STUN头部,而使用一个4字节的头部,包含了一个称之为信道号的值(channel number),每一个使用中的信道号都与一个特定的peer绑定,即作为对等端地址的一个记号。

    要将一个信道与对等端绑定,客户端首先发送一个信道绑定请求(ChannelBind Request)到服务器,并且指定一个未绑定的信道号以及对等端的地址信息。

    图五 Channel Mechanism

    如图五所示,中继服务器将数据封装成channel message发送给peer。对比图四,其实就是讲4/5/6/7的indication换成channel message。

    在音视频的传输应用中,使用信道机制会大大减少包头长度,节省带宽占用,提高传输效率。

    Turnserer实践

    部分政府、企业客户会部署有防火墙将办公环境与外网隔离开来,而且其防火墙通常会有很严格的ip和port限制,所以点对点传输基本无法进行。此时,Turn协议就是一个很好的选择。Turnserver具有固定的公网ip,固定的端口,只需在防火墙上开通其白名单,就可以搭建通信信道。

    Agora在Web端提供了很好的解决方案:WebProxy。

    图六 WebProxy

    如图六所示,WebProxy包含信令和数据两个中继服务器,Turnserver主要负责音视频数据的传输。Turnserver为用户开放一个TCP和一个UDP的端口,用户通过这两个端口创建中继地址,后端服务通过中继地址和内网的用户进行数据传输。

    后记

    TURN协议在实时音视频中是一个比较重要的协议,能很好的保证实时音视频传输中连接的可用性,稳定性和高效性。但是TURN协议对服务器有很高的依赖,服务器在带宽和集群上有很大的压力,所以TURN协议通常是当作ICE协议中的一部分来使用。

    展开全文
  • webrtc系列3——对于stun和turn的理解

    千次阅读 2019-09-03 08:05:51
    文章目录对于stun和turn的理解1. SDP协议2. 地址转换NAT3. candidatestunTURNICE 对于stun和turn的理解 在介绍turn和stun之前我们先来了解几个概念 会话描述协议 SDP(Session Description Protocol ) 网络地址...

    对于stun和turn的理解

    在介绍turn和stun之前我们先来了解几个概念

    1. 会话描述协议 SDP(Session Description Protocol )
    2. 网络地址转换 NAT (Network Address Translation)
    3. 网络协商 candidate

    1. SDP协议

    我们来思考,如果两个不同的手机,一个手机支持VP8、VP9的媒体格式,另一个支持VP8、h264的协议,他们如果通信的话会选择什么格式的媒体来进行交流?

    [外链图片转存失败(img-uB81o8AW-1567468988824)(SDP协商.png)]

    这时候我们就需要用到这个SDP协议了,在WebRTC中,参与视频通讯的双方必须先交换SDP信息,这样双方才能知根知底,而交换SDP的过程,也称为"媒体协商"。

    记住一点,SDP不叫媒体协商,交换SDP的过程才叫媒体协商,SDP全名叫会话描述协议

    2. 地址转换NAT

    经常有人问我=

    1. 为什么我配置了stun,进行了p2p穿透,可还是有很多情况下不通?
    2. 为什么ios通,android不通?
    3. 为什么移动能打通,电信打不通,wifi和4g有的通有的不通

    好吧,其实我也不是很清楚

    历史告诉我们,当我们无法触及到某个真理的时候,我们只能通过类比或者工具模拟的方式来解释我们所看到的一切。

    [外链图片转存失败(img-COwrIGGF-1567468988826)(nat协商.png)]

    说起nat,其实就是不知道对方实际地址,然后通过扔一个探测包,然后有回应就拿到对方地址的方式

    我们说的nat不通,是因为咱们这个国内网络情况比较复杂,究其历史原因,就要说到移动、联通、电信的历史了,篇幅太长,暂时搁置。

    总而言之,不通就不通嘛,总还有别的办法

    3. candidate

    我们先来看下Ice candidate类中的属性

      public final String sdpMid;//描述协议的id
      public final int sdpMLineIndex;//描述协议的行索引
      public final String sdp;//会话描述协议
    

    好了,到这为止,应该已经了解到,这玩意就是个模版

    当我们调用setLocalDescription的时候,底层的代码就会帮我们的收集candidate(候选信息),然后回调到上层,然后我们将其发送到服务器,然后服务器再发送到另一端

    一定会好奇这个candidate里有啥是吧,其实就是一些网络信息的候选地址,一个不通换另一种的那种。

    我们称交换candidate的过程称为网络协商

    stun

    好了,我们的主角登场

    STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重
    NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的
    Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC 5389定
    义。
    其实有好多人问我,在局域网需不需要stun服务器

    我很认真的告诉你,不需要!

    这时候,又会有人问了,你的demo为啥不部署stun,局域网内不通呢

    我也很认真的告诉你,请看官方demo,有个直连的类你可以借鉴,直接填写对方的地址,因为需要知道对方的地址才能进行通信的咧

    来张图

    [外链图片转存失败(img-myeYWWDt-1567468988842)(D:\github\csdn\webrtc\stun.png)]

    STUN并不是每次都能成功的为需要NAT的通话设备分配IP地址的,P2P在传输媒体流时,使用的本
    地带宽,在多人视频通话的过程中,通话质量的好坏往往需要根据使用者本地的带宽确定。

    这时候,就需要turn来协调,保证通话质量,用服务器来解压

    TURN

    TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如果
    终端在NAT之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网
    的服务器作为一个中继, 对来往的数据进行转发。这个转发的协议就被定义为TURN。

    再来张图

    [外链图片转存失败(img-Vo7XkDv6-1567468988844)(D:\github\csdn\webrtc\turn.png)]

    在STUN分配公网IP失败后,可以通过TURN服务器请求公网IP地址作为中继地址。这种方式的带宽由服务器端承
    担,在多人视频聊天的时候,本地带宽压力较小,并且,根据Google的说明,TURN协议可以使用在所有的环境中。

    ICE

    ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。
    coturn开源项目集成了STUN和TURN的功能

    好了这篇文章到此位置,看看代码消化一下

    Android端:https://github.com/ddssingsong/webrtc_android

    服务器端:https://github.com/ddssingsong/webrtc_server_node

    展开全文
  • 1 WebRTC入门 本章目的: (1)了解什么WebRTC (2)掌握WebRTC通话原理 (3)学完该课程的收获 1.1 什么是WebRTC WebRTC(Web Real-Time Communication)是 Google于2010以6829万美元从 Global IP Solutions ...
  • 1、安装相关依赖 yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel 2、下载可以编译的源码包...wget https://coturn.net/turnserver/v4.5.0.8/turnserver-4.5.0.8.tar.gz 解压并进...
  • WebRTC源码中turnserver的使用方法

    千次阅读 2017-03-07 17:13:36
    WebRTC的源码中自带了一个turnserver,介绍下用法
  • WebRTC的源码中自带了一个turnserver,编译之后,会在out/Default下生成一个turnserver文件,可以充当STUN和TURN server。用法如下: ./turnserver int_addr ext_addr realm auth_file int_addr指的是面对...
  • 如何设置Kamailio + RTPEngine + TURN服务器以启用WebRTC客户端和旧版SIP客户端之间的呼叫。 默认情况下,此配置启用了IPv6。 此设置将桥接SRTP-> RTP和ICE-> nonICE,以使WebRTC客户端(sip.js)能够调用旧版SIP...
  • 前文链接:实际中的WebRTC:STUN,TURN以及信令(一),实际中的WebRTC:STUN,TURN以及信令(二),实际中的WebRTC:STUN,TURN以及信令(三),实际中的WebRTC:STUN,TURN以及信令(四)   STUN NAT给设备...
  • 本文主要讨论用于 WebRTCTURN 服务器的应用,这里我们使用 coturn 。 coturn 是一个免费的开源的 TURN/STUN 服务器。coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙。 STUN 服务器用于...
  • 请教有关webrtcturn知识 生产环境是某机构内网,不能上网。机构一台前置机可供内网外网访问,并部署了视频应用服务站点,这种条件下,turn可以打通内外网的实时视频交互吗? webrtc,stun,turn,视频会议
  • WebRtc-Freeswitch介绍

    2018-11-08 00:08:14
    WebRTC + JsSIP + freeSWITCH一对一视频聊天。WebRTC介绍。Freeswitch安装配置
  • WebRTC 应用部署Turn Server

    千次阅读 2014-03-27 16:31:35
    部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了。 这里我们使用turnserver-0.7.3  下载confuse依赖库 wget ...
  • 这段时间在研究webrtc,看了很多文章也算是能在局域网视频,也加了些额外的基本功能,例如:静音,扬声器,切换摄像头等等,但是在总感觉在局域网内不(bu)太(neng)方(zhuang)便(bi),所以找朋友借了个阿里云小...
  • webRTC支持点对点通讯,但是webRTC仍然需要服务端: . 协调通讯过程中客户端之间需要交换元数据, 如一个客户端找到另一个客户端以及通知另一个客户端开始通讯。 . 需要处理NAT(网络地址转换)或防火墙,这是...
  • {'url': 'turn:xxxxxx:3478?transport=udp', 'credential':'simon', 'username':'user'} ]}; try { pc = new RTCPeerConnection(pc_config); console.log("*********新建对象****...
  • WebRTCTURN服务器是几乎所有WebRTC部署中必不可少的部分,连接WebRTC会话是在多个WebRTC服务器的协助下精心策划的工作,WebRTC中的NAT遍历服务器负责确保正确连接多媒体,这些服务就是STUN和TURN服务。 在...
  • 作者: 亢少军 彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路。需要做以下两个处理。 获取外网IP地址映射。 ...在解决WebRTC使用过程中的上述问题的时候,我们需要用到STUN和TURN
  • WEBRTC需要,配置自己的 TURN/STUN 服务

    千次阅读 2018-04-10 22:11:39
    1、服务器环境 UBUNUTU...2、安装需要的依赖 sudo apt-get -y install sqlite libsqlite3-dev libevent-dev libssl-dev3、下载TURNSERVER 源码 wget http://turnserver.open-sys.org/downloads/v4.5.0.7/turnser...
  • 最近项目要用到webrtc,测试发现内网穿透有时候传输数据不稳定,需要架设一个中转服务器用作数据中转; 由于turn包含了stun的功能,所以这里就只部署了turn服务器,用的是coturn,可以在这里下载,...
  • WebRTC:stun/turn服务器搭建

    千次阅读 2020-08-17 09:27:46
    stun/turn服务器通常要部署在公网上,能被所有peer端访问到,coturn开源项目同时实现了stun和turn服务的功能,是webrtc应用的必备首选。 1. coturn的搭建过程 1.1. 找一台有公网IP的主机 我的公务IP服务器:华为云...
  • WebRTCturn服务器搭建

    千次阅读 2016-01-25 20:37:49
    coturn服务器介绍: 1.This project evolved from rfc5766-turn-server project ... There are many new advanced TURN specs which are going far beyond the original R
  • 相信有很多小伙伴也会遇到和我一样的问题,怎么强制webrtc client 仅使用turn转发不使用p2p 和host。面临的场景是想要测试Turn服务器压测。但目前host p2p都能拿到,这两种情况则无法对turn服务器造成压力。 Google...
  • 安装WebRTC视频中继服务 参考 https://blog.csdn.net/xqj198404/article/details/48222273 安装 创建并进入源码文件夹 mkdir /sources cd /sources 下载服务源码 git clone https://github.com/coturn/coturn.git #...
  • webrtc应用turn服务器搭建

    千次阅读 2015-09-05 08:40:30
    基于阿里云的turn服务器搭建
  • Webrtc中stun和turn的理解

    千次阅读 2020-04-14 23:55:01
    对于stun和turn的理解 在介绍turn和stun之前我们先来了解几个概念 会话描述协议 SDP(Session Description Protocol ) 网络地址转换 NAT (Network Address Translation) 网络协商 candidate 1. SDP协议 我们来思考...
  • WebRTC的建立借助于Turn服务器,用于交换双发的媒体协议信息等等。 但不要怕,跟着步骤走就搭建好了。 但是在win10上搭建比较繁琐,建议linux中搭建 ​ 项目启动 运行turn服务器,node运行server.js完事 ​ WebRTC...
  • 12%,这就是Callstats.io的CEO Varun Singh,告诉WebRTC Conference-in-Conference大会上的听众WebRTC通话失败的比例。对于那些失败的通话,有22%的通话需要某些形式的媒体传输。造成12%这个比例的主要原因是因为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,812
精华内容 1,124
关键字:

turnwebrtc

友情链接: freq_counter(Verilog).rar