您好、欢迎来到现金彩票网!
当前位置:ds视讯 > 服务原语 >

pjsip教程-ICE-NAT passthrough

发布时间:2019-07-04 17:56 来源:未知 编辑:admin

  在现今的网络中网络地址转换技术/设备(NAT)很常见,这种技术允许多台主机共享同一个公网地址从而接入网络,其主要目的就是为了缓解IPv4地址的枯竭。 这种技术在普通的服务器/客户端模式下并不存在问题,因为请求总是由客户端发起,并且客户端也不需要维持长时间的维持与服务器的连接。但是NAT技术最大的问题就是使得点对点通信不能进行,比如VoIP.

  session对象(比如 STUN session, TURN session, ICE session)是维护通信协议中session的核心对象,它是与传输无关的(意思是说它自己没有专门用于传输数据的socket,它只有发送和接受数据的接口,至于发送和接收数据时用到的具体的协议它是不关心的)。这样,不管传输层使用的什么协议,开发者都可以重用这个对象,比如使用UDP, TCP或者TLS或者是开发者自己实现的其他某种协议。

  ICE是提供客户端穿越能力的有力武器,只要在两个客户端之间确实存在一条可以通信的路径,ICE肯定就能找到该路径,并且该路径是两个客户端之间通信路径中最高效的最节省资源的(在两个客户端之间经ICE探测后,可能存在多条路径,而ICE保证从它那里获取的路径是最高效的).

  ICE把几个协议结合在一起,在两个客户端之间能提供几条候选路径,这在最大程度上保证了两端通信成功的几率。并且它还提供了在几条通信路径中给出优先顺序的能力,让使用中继(中继的方式代价比较昂贵)的传输方式的优先级降到最低,只有在其他路径都行不通的情况下,才会启用该路径。具体的ICE协商的过程包括以下几个几步:

  1:候选地址的收集:ICE客户端收集本地所有可能用于通信的地址。所收集的地址类型分3种:主机候选地址(host candidate),这个地址其实就是本地物理网卡的地址;服务器反射候选地址(server reflexive candidate,其实就是在NAT上关于本地ip的映射地址),这个地址通过STUN服务器获取;中转/中继候选地址(relay candidate),这个地址是在使用中继(relay)的传输方式时,在中继服务器(或者称为TURN服务器)上为本地机器所分配的地址。

  2:候选地址的优先策略:一般情况下,使用中继方式而产生的中继候选地址的优先权最低,因为它的代价最昂贵。

  3:将本地候选地址编码,把编码后的候选地址传送至对端,双方通过报告/应答的方式进行协商。

  4:为候选地址配对儿:将本端的地址与对端的地址一一进行配对。此时应该已经通过某种方式得到了对端的候选地址。

  6:得到结果:由于已经对所有候选地址一一配对,并一一进行连接测试,所以,如果确实存在一个可以通信的路径,ICE肯定会找到他。

  ICE stream transport是一个现成可用的对象,可以使用它来进行ICE操作,而且它为应用程序提供了数据发送与接受的接口,而数据收发的路径,正是经ICE协商过后的高效的路径。

  如果ICE stream transport还是不能满足您的需求,那么您还可以通过使用本软件包提供的ICE Session以及自己的数据传输策略去实现自己的运输层,ICE stream transport在这方面为您提供了很好的借鉴。

  . 这个结构体中包含了ICE stream transport 的配置信息,其中就包括了SUTN以及TURN的配置信息.

  方法创建stream transport的实例. 该函数的成功调用还需要以下列出的重要的参数:

  后,初始化的过程会在后台运行,该初始化过程主要是收集本地的候选地址,最后,当初始化完成,应用程序会在回调函数

  通常在两个客户端开始打洞之前,双方都需要知道对方的ICE信息(ICE信息,包括用户名,密码以及3组候选地址),那么可以使用下面的方法得到自己的ICE信息:

  当应用程序收到远程客户端发来的ICE消息后,就可以开始ICE探测了。开始ICE探测需要调用

  需要注意的是,PJNATH库不支持直接处理SDP消息,SDP消息的封装与拆解还需应用程序自己实现。

  应用程序在程序运行的任何时刻都能发送或者接受数据,但是ICE的stream transport 对象它能否发送数据,取决于它发送数据时候的状态。状态分为三种:1,探测协商之前,这种状态下可以发送数据,并且使用的是默认的地址;2,探测协商的过程中,此时不能发送数据;3,探测协商完成之后,这种状态下也可以发送数据,且发送数据的地址为探测成功的地址对!

  关于ICE stream transport,在单次媒体交互完成后,可以选择销毁ICE stream transport或保留它以备后用。保留ICE stream transport有利有弊,好处是减少下次会话时创建它的时间;坏处是应用程序需要与STUN server以及relay server中相应的端口保活,这会无形中造成电量的损耗(consume power), 而电量损耗的高低是移动设备应用的重要参考标准之一。

  ICE Session 是PJNATH库中关于ICE的最底层的抽象,它使用一个单一的媒体流来执行两端的连接检测(双方通过互发数据包进行协商,从而确定一条从A到B可以互通的路径)。ICE Session 使用pj_ice_sess结构体来表示.

  此处描绘的ICE Session它不做数据的传输(is independent from any transports),那么这也表明网络的IO得是由应用程序本身或者由它更高的抽象层来执行。使用这个框架,应用程序就可以使用ICE Session来处理所有接收到的数据包,并且该框架也为ICE Session提供了向外发送数据的回调接口。

  STUN 的配置:STUN的一些设置,比如超时时间以及STUN 中需要用到的timer heap、ioqueue实例.

  为每一个构建添加本地地址候选. 每个构件初始化过程中必须至少有一个候选地址,并且所有的控件必须拥有相同的候选地址数,不然会导致配对过程的失败。

  创建本地信息的实例(用于描述本地ICE候选者):ICE session没有提供创建该实例的功能,但是应用程序应该实现该功能。如果应用程序使用

  来让ICE Session选择使用在SDP c= and m= lines中的默认的传输地址.

  当本地接收到对端的应答(包含了对端的候选者信息),应马上解析该消息,建立关于对端的候选者列表,并且通过

  由于ICE Session本身没有传输机制,所以应用程序必须把从底层接收到的所有数据包都通过pj_ice_sess_on_rx_pkt()方法传递给ICE Session,ICE Session判断该包是否为STUN包,如果是,则处理;如果不是,则使用on_rx_data回调把数据包向上传递给应用上层.

  第七章发送消息发送和接收消息是SIP应用的核心操作。每个模块里的on_rx_request()和on_rx_response()回调函数来处理接收到来的消息。这章将介绍基本的发送外出消息的方法,例如,...博文来自:smllyy的学习时间轴

  帐号相关流程注册范围n企业n政府n媒体n其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  MATLAB编程题rn题目描述:从一个NxM的矩阵C中找出与1xM的矩阵P欧氏距离最小的某一行row,要求不能用循环!!!rn输入:矩阵C(NxM)、矩阵P(1xM)rn输出:rowrnrnrn解题思...博文来自:henryzhihua

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  由于CLion的工程都是基于CMake来构建的,因此导入第三方库就需要在CMake文件中进行配置。这里把利用CMake导入第三方库的过程记录下来。...博文来自:大迷毛的LALALAND

  卷积神经网络是深度学习的基础,但是学习CNN却不是那么简单,虽然网络上关于CNN的相关代码很多,比较经典的是tiny_cnn(C++)、DeepLearnToolbox(Matlab)等等,但通过C语...博文来自:tostq的专栏

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  一、定义状态(State)模式又称为状态对象模式(Pattern of Objects for State),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变时改变其行为,用于解决系统中...博文来自:小小本科生成长之路

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  一、概述最近在springboot项目引入thymeleaf模板时,使用非严格标签时,运行会报错。默认thymeleaf模板对html5标签是严格检查的。二、在项目中加NekoHTML库在Maven中...博文来自:Luck_ZZ的博客

  本文介绍如何使用VS2015作为编译开发环境,调用OpenCV3.31和Qt5.9.1写图像处理的GUI。rn1.目录结构rn假设我们要创建一个名为VideoZoom的工程,那么首先按下图构建目录结构...博文来自:zhhp1001的博客

http://wendevick.net/fuwuyuanyu/644.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有