【NGN学习笔记】6 代理(Proxy)和背靠背用户代理(B2BUA)

1. 什么是Proxy模式?

按照RFC3261中的定义,Proxy服务器是一个中间的实体,它本身即作为客户端也作为服务端,为其他客户端提供请求的转发服务。一个Proxy服务器首先提供的是路由服务,也就是说保证请求被发到更加”靠近”目标用户的地方。Proxy服务器在施行某些强制政策时也有用(比如,确认一个用户是否允许建立一个呼叫等)。而一个Proxy服务器翻译,如果有需要的话在转发消息前会重写该请求消息。

 

2. 什么是B2BUA?

按照RFC3261中的定义,背对背的用户代理(B2BUA)是一个逻辑实体,它就像用户代理服务器(UAS)一样接收和处理请求。为了决定该如何应答一个请求,B2BUA就像UAC一样工作,并且发出请求。但是它不像代理服务器(proxy),它维持对话状态,并且参与已经建立的对话中的每一个请求。由于它是直接的UAC和UAS的串连,所以,不需要对他有额外的定义。

 

3.Proxy模式和B2BUA模式有什么不同?各有什么优缺点?

最常见的Proxy服务器仅仅完成两个UA的连接。而B2BUA服务器则是一个智能的实体,更为强大,它有一些Proxy无法做到的功能,它更灵活,并渐渐取代一般的Proxy服务器而成为SIP服务器的主流。

 

根据sip-router.org 的描述,Proxy模式和B2BUA的最大区别是前者是事务有状态(transaction-stateful),而后者是呼叫有状态(call stateful)。 也就是说,代理服务器只在SIP事务交互时(会话的开始和终结)保持状态,而并不是在整个呼叫中维护状态。而B2BUA则在两个或多个UA通过某种手段互联时起作用,B2BUA在整个呼叫中会维护一些状态(通常是内存中的一些结构)。B2BUA与SIP代理服务器不同,B2BUA可以接收呼叫,并能对其进行修改,以其它形式代表发起呼叫的UA向终端目标发起呼叫,并能充当呼叫双方的媒体协商代表或对其进行监控管理。B2BUA可以对经过它的来自于私网的呼叫进行处理完成NAT的穿越。为适应所有类型NAT的环境,B2BUA也需要做媒体流的中介。这就让B2BUA有了一些Proxy没有的特性,例如,B2BUA可以终结一个已经存在的呼叫,而Proxy不行。运行商常常为了不泄露其网络拓扑而多使用B2BUA。在B2BUA中,我们可以提供点对点呼叫的增值业务能力或者多点呼叫控制能力,而其他的SIP服务器,比如Proxy就不能提供如此复杂的增值业务。而所有这一切的背后都是由B2BUA有一个宽泛的定义所致,这使得它有无限的能力去扩展(当然,这也是争议所在)。我们可以看下边的这个结构图:

dRAD 1(1)

 

我们举几个B2BUA独有支持的业务:

a.第三方呼叫控制机(3PCC)

dRAD 2(1)

这个业务的特点是一个实体(往往是一个控制器)为两个或多个对端建立连接,常用于运营商业务和电话会议。一些典型的应用是:在线计费、QoS、资源优先分配,呼叫转移、点击拨号、呼叫中阶段通知送达等。由于例如Proxy服务器都是维护一个被动的非呼叫有状态是无法发起这样的业务的,这就成了B2BUA的专利。用B2BUA可以自动的触发3PCC动作,比如在一个在线计费系统中,根据余额来挂掉一个呼叫。当然,这些也可以通过一个远程管理控制(remote administrative control (OSS))系统来完成,比如,去邀请多方加入一个多点会议会话中。

b.互操作性的网络互连功能(IWF 

IWF(Inter-working Functions )是为了解决SIP强大的扩展性所带来的诟病,它对一个强大的SIP服务器有比较宽泛的定义,来完成对不同协议实现或者支持不同能力的SIP客户端的互连。当它被使用在客户端和网络时,它实际就是一种接入设备。

dRAD 3(1)

例如:

  • 通过添加或者删除IMS中对于连接ISM网络很重要的SIP协议扩展(AKA P-Headers) 来对SIP终端和IMS 网络进行连接。
  • 连接两个不同会话计时器设置的客户端。
  • 通过在两个不同控制会话类型中进行转述来连接有不同媒体能力和不同SDP消息的两个终端。
  • 来支持不同的网络类型(v4,v6)、和不同的传输类型,TCP/UDP/SCTP/TLS

c.多点呼叫管理

这个场景中多个CPE(CPE是“CustomerPremiseEquipment”的缩写,直译为“用户前端设备”)与B2BUA相连,由B2BUA为所有CPE提供业务。

d.融入IMS网络

在3GPP的IMS标准中,IMS的大量逻辑实体都是定义为B2BUA模式的,这样做的原因是增值业务往往都是呼叫有状态的,而这个要求远远超过了基本呼叫代理所能及的范围。在B2BUA应用服务器之上的应用可以充分的完成SIP UA、SIP注册服务器、SIP代理服务器等角色。

我们在给出是一些B2BUA的应用例子:

  • 在线计费、预付费功能
  • 支持资源优先权和QoS的服务器
  • 多点会议服务器
  • IVR服务器
  • PBX应用和软交换
  • 应用层网关
  • 防火墙/NAT穿越应用
  • 私有服务器
  • 第三方呼叫控制应用
  • 业务生成环境运行时引擎
  • 会话边界控制器
  • IMS中的S-CSCF/P-CSCF/I-CSCF
  • SIP网间互联网关
  • 安全网关
  • 语音呼叫连续性业务

另一方面,B2BUA面临着诸多挑战,比如产品上市周期、一致性、互操作性,为私有业务提供定制,支持高可用性和冗余等等。尤其是在可伸缩性上很容易成为瓶颈。一个健壮的B2BUA框架应该有模块化的程序设计结构以应对增长的灵活性、抽象性需求。对于通信双方来说,呼叫控制信令和媒体流在传输过程中均增加了一跳,随着用户的增加,B2BUA将成为系统瓶颈。

我们举一个B2BUA是如何实现PBX的例子, B2BUA担当两台UA(用户代理服务器)功能,其中一台模拟接收器,一台模拟发送器,二者之间安装有控制逻辑。在这种控制逻辑下,B2BUA能控制SIP数据流,将其转换为PSTN信令模式或厂商的专用控制协议方式,这是大多数厂商采用的PBX方式.另外一些SIP厂商采用的是纯SIP代理方式,它不同于通常意义上的代理服务器。运用SIP代理服务,SIP信令流直接在两UA间传输。毫无疑问,完善的SIP网络缺少不了B2BUA功能,因为要连接到PSTN。但如果要在VoIP网关的核心实现B2BUA功能,则难度大多了。事实上,PBX厂商提供B2BUA功能实现成本要比SIP代理高得多,部分原因是体系结构实现难。由于SIP代理在呼叫建立阶段不直接处理信令流,因而保持有关会话的状态信息要比B2BUA方式少。而且,SIP代理的支撑硬件也比B2BUA方式少,在同一平台易于扩展支持更多UA。而且,企业电话运营所需的核心功能基于PBX实现,而不是B2BUA,这进一步增加了成本。

另外,SIP代理方式在安全性与可靠性方面也略胜一筹。由于B2BUA会重写数据包核心,存在潜在弱点,有受攻击可能;而SIP代理在处理进程中仅暴露SIP标题。B2BUA操作失败的可能性也高于SIP代理方式,从而会影响到所有呼叫通过;SIP代理失败仅影响新到呼叫,现行呼叫或已到达目标并为设备所俘获的呼叫并不受影响。

最后,SIP代理服务器比B2BUA适应性更强。由于B2BUA会中断媒体会话,如果B2BUA不支持,UA功能就很难发挥。这意味着,如果UA功能实现与B2BUA各异,一家厂商的电话就有可能无法与另一厂商的协同工作。运用SIP代理服务器就不一样了,UA协议会话功能直接实现。

 

参考文献:

1.http://colocation.tmcnet.com/topics/sip-and-open-standards/articles/18257-back-back-user-agents-telecommunications.htm

2.http://blog.sina.com.cn/s/blog_414e587f01000b9g.html

 




本文转自gnuhpc博客园博客,原文链接http://www.cnblogs.com/gnuhpc/archive/2012/12/11/2813499.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《人人都该买保险》读书笔记

内容目录: 1.你必须知道的保险知识 2.家庭理财的必需品 3.保障型保险产品 4.储蓄型保险产品 5.投资型保险产品 6.明明白白买保险 现在我所在的公司Manulife是一家金融保险公司,主打业务就是保险,因此我需要熟悉一下保险的基础知识&#xff0c…

如何击败腾讯_击败股市

如何击败腾讯个人项目 (Personal Proyects) Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an…

配置静态IPV6 NAT-PT

一.概述: IPV6 NAT-PT( Network Address Translation - Port Translation)应用与ipv4和ipv6网络互访的情况,根据参考链接配置时出现一些问题,所以记录下来。参考链接:http://www.cisco.com/en/US/tech/tk648/tk361/technologies_c…

python3虚拟环境中解决 ModuleNotFoundError: No module named '_ssl'

前提是已经安装了openssl 问题 当我在python3虚拟环境中导入ssl模块时报错,报错如下: (py3) [rootlocalhost Python-3.6.3]# python3 Python 3.6.3 (default, Nov 19 2018, 14:18:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux Type "help…

通过Xshell登录远程服务器实时查看log日志

主要想总结以下几点: 1.如何使用生成密钥的方式来登录Xshell连接远端服务器 2.在远程服务器上如何上传和下载文件(下载log文件到本地) 3.如何实时查看log,提取错误信息 一. 使用生成密钥的方式来登录Xshell连接远端服务器 ssh登录…

如何将Jupyter Notebook连接到远程Spark集群并每天运行Spark作业?

As a data scientist, you are developing notebooks that process large data that does not fit in your laptop using Spark. What would you do? This is not a trivial problem.作为数据科学家,您正在开发使用Spark处理笔记本电脑无法容纳的大数据的笔记本电脑…

是银弹吗?业务基线方法论

Fred.Brooks在1987年就提出:没有银弹。没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍。 我无意挑战这个理论,只想讨论一个方案,一个可能大幅提高业务系统开发效率的方案。 方案描述 我管这个方案叫做“由基线扩展…

同一服务器部署多个tomcat时的端口号修改详情

2019独角兽企业重金招聘Python工程师标准>>> 同一服务器部署多个tomcat时&#xff0c;存在端口号冲突的问题&#xff0c;所以需要修改tomcat配置文件server.xml&#xff0c;以tomcat7为例。 首先了解下tomcat的几个主要端口&#xff1a;<Connector port"808…

第一章-从双向链表学习设计

链表学习链表是一种动态的数据结构使用节点作为链表的基本单位存储在节点包括数据元素和节点指针一个完整的数据链表应包括转载于:https://www.cnblogs.com/cjxltd/p/7125747.html

思维导图分析http之http协议版本

1.结构总览 在http协议这一章&#xff0c;我将先后介绍上图六个部分&#xff0c;本文先介绍http的协议版本。 2.http协议版本 http协议的历史并不长&#xff0c;从1991的0.9版本到现在(2017)仅仅才20多年&#xff0c;算算下来,http还是正处青年&#xff0c;正是大好发展的好时光…

使用管道符组合使用命令_如何使用管道的魔力

使用管道符组合使用命令Surely you have heard of pipelines or ETL (Extract Transform Load), or seen some method in a library, or even heard of any tool to create pipelines. However, you aren’t using it yet. So, let me introduce you to the fantastic world of…

C# new关键字和对象类型转换(双括号、is操作符、as操作符)

一、new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object objnew Object(); 以下是new操作符做的事情 1、计算类型及其所有基类型(一直到System.Object,虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数.堆上每个对象都需要一些额外的成员,包括“类型…

JDBC01 利用JDBC连接数据库【不使用数据库连接池】

目录&#xff1a; 1 什么是JDBC 2 JDBC主要接口 3 JDBC编程步骤【学渣版本】 5 JDBC编程步骤【学神版本】 6 JDBC编程步骤【学霸版本】 1 什么是JDBC JDBC是JAVA提供的一套标准连接数据库的接口&#xff0c;规定了连接数据库的步骤和功能&#xff1b;不同的数据库提供商提供了一…

编译原理—词法分析器(Java)

1.当运行程序时&#xff0c;程序会读取项目下的program.txt文件 2. 程序将会逐行读取program.txt中的源程序&#xff0c;进行词法分析&#xff0c;并将分析的结果输出。 3. 如果发现错误&#xff0c;程序将会中止读取文件进行分析&#xff0c;并输出错误提示 所用单词的构词规…

为什么我们需要使用Pandas新字符串Dtype代替文本数据对象

We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually come in a nice and clean format and require a lot preprocessing.我们必须以数值表示数据的每…

递归方程组解的渐进阶的求法——代入法

递归方程组解的渐进阶的求法——代入法 用这个办法既可估计上界也可估计下界。如前面所指出&#xff0c;方法的关键步骤在于预先对解答作出推测&#xff0c;然后用数学归纳法证明推测的正确性。 例如&#xff0c;我们要估计T(n)的上界&#xff0c;T(n)满足递归方程&#xff1a;…

编译原理—语法分析器(Java)

递归下降语法分析 1. 语法成分说明 <语句块> :: begin<语句串> end <语句串> :: <语句>{&#xff1b;<语句>} <语句> :: <赋值语句> | <循环语句> | <条件语句> <关系运算符> :: < | < | > | > | |…

编译原理—语义分析(Java)

递归下降语法制导翻译 实现含多条简单赋值语句的简化语言的语义分析和中间代码生成。 测试样例 begin a:2; b:4; c:c-1; area:3.14*a*a; s:2*3.1416*r*(hr); end #词法分析 public class analyzer {public static List<String> llistnew ArrayList<>();static …

linux boot菜单列表,Bootstrap 下拉菜单(Dropdowns)简介

Bootstrap 下拉菜单是可切换的&#xff0c;是以列表格式显示链接的上下文菜单。这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现。如需使用下拉菜单&#xff0c;只需要在 class .dropdown 内加上下拉菜单即可。下面的实例演示了基本的下拉菜单&#xff1a;实例主…

数据挖掘—Apriori算法(Java实现)

算法描述 &#xff08;1&#xff09;扫描全部数据&#xff0c;产生候选1-项集的集合C1&#xff1b; &#xff08;2&#xff09;根据最小支持度&#xff0c;由候选1-项集的集合C1产生频繁1-项集的集合L1&#xff1b; &#xff08;3&#xff09;对k>1&#xff0c;重复执行步骤…