您的位置:KC网络电话 >> 媒体报道>> SIP协议栈的设计方案

SIP协议栈的设计方案

来源:kc SIP协议  发布时间:2014-08-18 15:34:45

SIP协议栈的实现需包括IP网络通信、SIP消息的词法分析、消息的可靠性、状态的管理以及向高层应用实体提供方便、灵活的接口等。因此,我们提出SIP协议栈的实现原则:(1)SIP协议独立于传输层,可采用UDP或TCP进行传输;(2)SIP协议独立于应用程序,以支持多种应用;(3)SIP协议是发展中的协议,应支持SIP的易扩展性;(4)SIP协议用于互联网环境,应支持易移植性;(5)软件重用,以避免重复开发工作;(6)具备并发处理能力,满足呼叫对实时性的要求。基于这些原则,我们提出了SIP协议栈的实现方案:采用面向对象的Java语言以支持软件的移植性;采用层次结构支持独立于传输层和应用层以及软件重用;支持并发处理及相应的同步机制支持呼叫实时性要求。

 

SIP协议

 

层次结构模型

SIP协议虽然是应用层协议,为了对SIP协议进一步细化,我们借鉴OSI的网络层次参考模型,提出了SIP协议栈的层次结构,如图1所示。每一层使用下层提供的服务并为上层提供服务,应用从最高层开始访问SIP服务。A层向上层提供网络通信功能,直接与网络层交互。我们首先实现了UDP传输方式,A层将SIP消息通过UDP数据报发送出去,并将收到的UDP数据报上报至B层。B层把C层传下来的内部消息格式转换成符合SIP规范的消息,并对A层传上来的UDP数据包进行词法分析,以生成内部SIP消息格式。B层根据C层的指示,采用指数衰减方式对SIP消息进行重传,以保证SIP消息的可靠性。C层分为Client和Server,分别支持D层的客户方和各种服务器。其状态处理器向本层和D层提供接口,维护SIP消息的状态。C层还负责基于UDP传输时SIP消息的重传管理,包括过滤收到的重传SIP消息和指示B层对发出的SIP消息进行重传。D层包含有用户代理和多种SIP服务器,对SIP请求消息和相应的响应消息进行语义处理。用户代理包括UAC和UAS,完成用户的全双工呼叫功能;代理服务器同时具备客户方和服务器方的能力,负责对用户呼叫的代理;重定向服务器负责对用户呼叫的重定向;注册服务器负责提供用户位置的登记功能。D层向上面的应用层提供灵活、方便的接口。E层为各种应用程序(包括会议电话、基于IP网的VPN业务、接入智能网的点击拨号业务等)利用D层提供的接口来使用SIP服务。E层不属于SIP协议栈的范畴。上述层次结构中,各层之间可并发执行,提供SIP协议栈的第一级并发机制。在两层之间接口不变的情况下,任何一层的修改都不会影响相邻层的软件,有效支持了SIP协议的可扩展性。由于C层和B层屏蔽了底层传输协议的使用情况,D层和E层不需了解具体的传输协议,使SIP协议栈易于使用多种传输协议。此外,D层提供了丰富的接口,作为通信核心,可支持各种不同的应用程序。如上图所示,A、B、C层可以被不同的SIP实体(用户代理,各种服务器)重用,重用颗粒由传统的类重用扩大为软件构件的重用,大大缩小了软件开发周期。

 

SIP协议

 

并发处理机制

由于SIP的各种服务器可能同时收到多个呼叫请求,因此需要并发处理机制以支持多个呼叫的实时处理。为此,我们采用了两级并发机制,如图2所示。第一级并发为层间并发,即A、B、C、D各层的分层处理;第二级并发为层内的多线程并发。第一级的层间并发在前一节中已做讨论,下面以有状态的代理服务器为例,讨论SIP协议栈中多线程对第二级并发的支持。

代理服务器的B、C、D各层分别设置多个负责SIP消息处理的线程。例如,D层可根据用户或应用程序的要求设置多个Proxy Client和Proxy Server线程。每个Proxy Client和Proxy Server线程无限循环地从C→D的响应和请求队列中读取消息并处理。这样,线程的数目是固定的,与处理呼叫个数无关。而且,由于一个线程负责多个呼叫,一个线程出错时,可能影响多个呼叫,软件错误限制区较大。

线程的数目、同步机制以及各线程的优先级都会对整个协议栈的性能造成一定的影响。因此,需对上述各种因素进行调整,使协议栈达到最佳处理性能。另一种一级并发的多线程机制(即一个呼叫由一个线程完整负责),可避免同步问题,如图3所示。软件错误限制区仅限于各呼叫对应的线程,即当一个线程出错时,只影响该线程负责的呼叫,不会影响其他呼叫,提高了系统的可靠性。然而,当呼叫较多时,一级并发机制使整个协议栈的线程个数随呼叫个数相应增加,导致操作系统调度和管理线程的负荷增大,造成协议栈处理能力大幅度下降。

 

SIP协议

 

综上所述,我们认为SIP协议的不同实体可采用不同的多线程并发机制。对于代理服务器、重定向服务器和注册服务器,由于处理的呼叫多,实时性要求高,宜采用二级并发机制。用户代理,由于面向终端用户,处理呼叫较少,宜采用一级并发机制。

 

同步机制

一个呼叫由多个请求消息和响应消息组成,每个消息由隶属于不同层的多个线程负责,而且在同一层中,同一呼叫的不同消息也可能由不同的线程负责处理。因此协议栈还需要支持不同层间的同步(称为第一级同步)以及同一层的不同线程间的同步(称为第二级同步)。

第一级层间并发的临界资源为层间传递的消息,因此,第一级同步需要解决的是消息在各层间的同步传递。在相邻两层之间,在从上至下和从下至上两个方向,分别引入请求和响应消息队列来传递SIP消息。以C、D层为例,设置了C→D请求队列、C→D响应队列、D→C请求队列和D→C响应队列。每个队列都有自己的生产者和消费者,生产者负责将自己处理过的消息送进消息队列,而消费者负责从消息队列中取出消息并进行处理。B、C、D各层的软件构件具有双重身份,既是消费者接收消息,又是生产者发送消息。

为避免消息队列的生产者和消费者之间出现资源冲突,各生产者、消费者被创建后通常处于睡眠状态,当有消息发向它时,再将其激活,转为活跃状态。

二级并发机制使得各层中的线程处理多个消息或同一呼叫的不同消息。因此,第二级并发的临界资源为呼叫状态信息,第二级同步需要解决同一层各线程对呼叫状态信息的同步共享。为此设置了SIP呼叫状态管理器,提供对整个SIP协议栈的呼叫状态信息的管理,以此保持整个协议栈的数据一致性。

上一条:人人网社交网络模型商业模式分析与设计
下一条:android开发教程-Android系统简介