科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道路由交换SIP协议里面业务创建机制地研究

SIP协议里面业务创建机制地研究

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

随着网络协议的发展,如SIP、RTP/RTCP、RSVP、H.323等的出现和部署,INTERNET逐渐成为语音、数据、视频等多种业务的承载网络,成为了提供多种业务的统一的网络平台。

作者:zdnet安全频道 来源:论坛整理 2008年12月11日

关键字: sip协议

  • 评论
  • 分享微博
  • 分享邮件
  1 简介

  随着网络协议的发展,如SIP、RTP/RTCP、RSVP、H.323等的出现和部署,INTERNET逐渐成为语音、数据、视频等多种业务的承载网络,成为了提供多种业务的统一的网络平台。

  传统的电话网络使用智能网技术(IN:Intelligence Network)以方便网络运营商添加业务而无需变动承载业务的电话网络。与之相对应的INTERNET必须有相应的机制来保证新的业务能够被很快的生成和部署。本文将介绍在SIP协议环境下业务创建的相关机制:呼叫控制语言(CPL: Call Processing Language)、SIP CGI(公共网关接口:Common Gateway Interface) 。

  2 呼叫处理语言(CPL:Call Processing Language)

  IETF的IPTEL工作组在RFC2824描述了CPL的框架以及实现的要求,随后在草案draft-ietf-iptel-cpl-06.txt定义了CPL语言的细节。用户可以通过CPL编写脚本文件,并上传到信令服务器(signaling server)。在用户发起或接收呼叫的过程中,信令服务器根据CPL脚本文件运行的结果动态为用户提供呼叫转移、遇忙前转等服务。

  CPL脚本运行的网络模型由两部分组成:端系统(end system)和信令服务器(signaling server)。端系统(end system)指的是发起和接收信令信息和媒体流的设备,包括电话设备,PC电话客户端,自动语音系统等等。信令服务器是指中继和控制信令信息的设备。在SIP协议构建的网络中,指的是代理服务器,重定向服务器,注册服务器。

  2.1 CPL的特点

  CPL是用来控制和描述IP电话业务的语言。CPL的设计者并没有将CPL与某个信令协议紧密的关联起来,因此CPL是与底层的信令协议无关的脚本语言,可以与任何的底层协议配合使用,如H.323和本文侧重介绍的SIP协议等。

另外CPL在设计中还有下列的一些特点:

* 描述业务(service)能力强;

* CPL脚本通常在信令服务器上运行,有时也会在高级的客户端运行;

* 由于CPL脚本在服务器上运行,为了服务器的安全,对它的表述能力又有所限制,例如没有提供循环和递归的机制;

* 基于XML语言,语言分析比较简单,有很多现成的工具可以使用;

  2.2 CPL语言的体系结构

  众所周知,XML是一种元语言(metalanguage)。CPL正是在XML的基础上附加一些文本类型描述(DTD:Document Type Description)构造而成。因此,与XML表示一样,CPL语言呈树型结构,也使用标签,以及标签的属性来表示呼叫处理过程中的动作和参数等。

  一个CPL脚本主要由两部分信息组成:脚本有关的辅助信息和呼叫处理动作(action).。脚本有关的辅助信息主要用于服务器正确的处理脚本,但在目前的规范中并没有任何的定义,有待扩展。呼叫处理动作则有分为两种:顶层的处理动作和子动作(subaction)。顶层的处理动作由标签和表示,分别表示对来话(incoming call)和去话(outgoing call)时服务器所应采取的动作。而子动作(subaction)则类似于c语言的函数的概念,是可以在其他的动作中调用的动作,而且使用subaction也增强了CPL脚本的模块性和重用性。

  CPL语言主要是通过两个顶层的呼叫处理动作和子动作来对呼叫进行处理,从而为用户提供不同的业务。从抽象的角度来看,呼叫处理动作是由一组节点(Node)组成,每个节点(Node)包含几个参数和输出。其中参数描述了节点的精确的行为,也即一些匹配条件;而输出则是指在参数匹配的前提下节点将要做出的判定或采取的动作。CPL语言定义了如下的四种节点:

* switches:表示CPL脚本做出的选择,其中包括address-switch、string-switch、language-switch、time-switch、priority-switch;分别根据地址、字符、语言、时间、优先级做出选择;

* location modifier:从位置集合中添加或输出记录;其中包括location、lookup、remove-location;

* 信令操作:引发底层信令协议的信令事件;其中包括proxy、redirect和reject;分别引发底层协议的转发、重定向和拒绝操作;

* 非信令操作:引发一些与底层协议无关的动作;其中包括mail、log;

2.3 CPL脚本的例子

  CPL脚本具有与XML相同的语法和表示方法。若有用户呼叫SIP URL 为sip:jones@jonespc.example.com的用户。当请求到达该用户所在代理服务器时,代理服务器根据相应的机制调用图二所示的脚本并加以执行。首先代理服务器发出代理转发(proxy)操作,超时值设为8秒。如果在超时值超时之前,代理服务器没有接收到应答,根据应答的状态码来确定该用户是busy还是noanswer,并采取相应的动作。本例的处理方式比较的简单,对两种情况均采取了呼叫该用户服务提供商的语音邮件设备的动作,再次进行代理转发(proxy)的操作。该语音邮件设备的SIP URL为sip:jones@voicemail.example.com。通过脚本,服务提供商为用户提供了遇忙/无应答呼叫前转业务。显然,使用CPL语言编写更加复杂的脚本,服务提供商可以提供更加高级的业务。

  2.4 CPL有待研究的课题

  对于CPL,到目前为止还有一些领域没有草案和相关的标准出现。例如用户如何将脚本安全地传送到信令服务器上;信令服务器如何将请求或应答消息与用户上传的脚本对应起来等等。

  3 SIP CGI规范

  众所周知,CGI并不是一项新的技术。它最初的出现是和HTTP协议一起,使静态网页具有了与浏览者交互的功能,极大的推动了web技术的发展。CGI技术提供了一种在web环境下创建新业务的机制。从web的发展来看,无疑CGI技术又是非常成功的。它具有以下的一些特点:

* 语言的独立性;CGI技术定义的是接口而非具体的编程语言,它可以与perl, C, VisualBasic, tcl等语言一起工作使用;

* CGI技术允许CGI 的应用程序对消息的头部(header)具有访问权限;

* 产生应答的方式与其他的一些技术,如Java servlets不同;CGI处理应答的所有部分,包括头部、应答码、消息体;

  SIP协议在发展的过程中很大程度上借鉴了HTTP协议,比如消息的格式、消息请求/应答的交互方式,用文本格式对消息进行编码等。所以CGI规范的特点也特别适合SIP协议。因此可以采用CGI作为SIP的一种业务创建(Service Creation)的机制。

  3.1 SIP CGI与HTTP CGI的区别

  尽管SIP与HTTP具有相似的语法和请求/应答的模型,但是它们还是有一些关键的不同点。如代理服务器在SIP协议中起着重要的作用,而在HTTP协议中则不是很重要;SIP协议提供了注册的机制,而HTTP协议没有。这些不同点也反映到了SIP CGI 和HTTP CGI的下列的区别上。

  

*SIP CGI主要运行在代理服务器、重定向服务器、注册服务器上;而HTTP CGI则主要运行在用户代理(user agent)上;

* SIP CGI允许脚本执行代理转发、重定向等操作;而HTTP CGI则不支持;

* SIP CGI支持持续性模型(persistence model),通过一些机制使得允许脚本在SIP事务所包含的所有消息中保持状态;而HTTP CGI并不支持该模型;

  3.2 SIP CGI网络模型

  3.3 SIP CGI规范

  与HTTP CGI类似,SIP CGI规范主要定义了一些机制来使用户能够运行服务器上的应用程序。服务提供商可以使用C、visual Basic、perl等语言来开发应用程序,实现不同的业务。

  3.3.1 SIP CGI 脚本如何从服务器获取数据?

  SIP CGI对于SIP请求或者应答消息的头部和消息体采用了不同的方式。服务器采用操作系统环境变量的机制来传递消息的头部信息。RFC3050定义了超过20个的环境变量,例如AUTH_TYPE,REMOTE_USER等。而对于消息体,服务器则采用标准输入文件描述符stdin来传递。

  3.3.2 CGI应用程序处理结果的输出格式

  CGI脚本应用程序输出有一些消息组成,这些消息分别对应了脚本要求服务器将要执行的动作。每条消息由一个动作(action)、多个CGI头部和多个SIP头部组成。RFC 3050中定义了Status、CGI-PROXY-REQUEST、CGI-FORWARD-RESPONSE、CGI-SET-COOKIE、CGI-AGAIN五种动作,同时还定义了CGI-Request-Token和CGI-Remove两种CGI头部。消息中所涉及到的SIP头部语法同RFC2543。

  第一行告诉通过CGI-PROXY-REQUEST告诉服务器代理转发请求到指定的URL。第二行则告诉服务器在转发的请求中添加Organization头部。需要注意的是,对于SIP协议在每个网络节点通常都会处理的头部,如Via、Max-forwards,服务器则会正常处理。第四行告诉服务器向主叫方发送一个100 Trying的临时应答。第六行则告诉服务器存储cookie信息。当这次呼叫所构成的事务(transaction)中的请求或应答再次触发该脚本应用程序时,这个cookie将会传递给CGI 应用程序。通过这种机制,应用程序可以无状态的运行,但同时CGI 依然跟踪这次事务(transaction)的进度。

  4 其他的业务创建机制

  迄今为止,已经开发了很多种的SIP 应用编程接口API,包括SIP servelets和JAIN(Java Integrated Network)。与CPL和SIP CGI技术比起来,SIP API的创建业务的开销要更低一些。然而,它们的主要缺陷是依赖于开发语言,如Java。

  5 总结

  本文主要介绍了两种SIP协议环境下创建业务的机制,呼叫处理语言CPL和SIP CGI规范。通过这些机制的实现,服务提供商可以很方便和快速地部署新地业务,同时用户也可以对自己的通信根据实际情况进行个性化的定制。

注:本文略有删节。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章