Home > 电话会议新闻动态 > 技术文档 > 基于SCTP和DCCP的SIP电话设计与实现

基于SCTP和DCCP的SIP电话设计与实现

2014/06/17 Tang

1 引 言
SIP电话是使用会话初始协议(SIP)作为信令协议在IP网络上实现语音通信的技术。作为下一代网络中的重要应用,SIP电话体现了呼叫控制和承载分离的特性。在SIP电话中,使用SIP进行呼叫控制,使用实时传输协议(RTP) 封装传输语音数据。
SIP信令消息可以使用用户数据报协议(UDP)或传输控制协议(TCP)来传输,但是UDP缺乏分组丢失检测和拥塞控制机制,并不适合SIP消息的可靠传输。TCP虽然能保证传输可靠性并提供拥塞控制,但其严格的按序递交影响了消息的传送。而流控制传输协议(SCTP)提供的多流、多宿和安全的关联建立等特性非常适合SIP消息的传输。
RTP负责实时传输语音数据,通常与UDP结合使用。UDP不提供可靠性保证和拥塞控制机制,容易引起网络的拥塞。数据报拥塞控制协议(DC—CP)既能保证数据的实时传输,又引入了灵活的拥塞控制和可靠的连接建立和拆除管理,这些特性非常适合传输RTP数据包。
鉴于SCTP和DCCP的良好特性,本文提出了一种基于SCTP和DCCP的SIP电话设计方案,分析了这种SIP电话的会话流程,最后给出了具体的实现方法。

2 基于TCP和UDP的SIP电话
基于TCP/UDP的SIP电话协议模型如图1所示。SIP消息使用TCP或UDP来传输,RTP语音数据包通过UDP来传输。

基于TcP/UDP的SIP电话协议模型

2.1 SIP运行在TCP/UDP之上
SIP是用于建立、修改和终止多媒体会话的信令协议。SIP消息要求较高的传输可靠性和较短的传送时延。UDP无需建立连接,没有消息重传机制,所以使用UDP建立SIP会话的时间短。但是,如果网络出现拥塞,缺乏拥塞控制的UDP会抢占大量网络资源,使拥塞更加严重,UDP并不能满足SIP消息的可靠性要求。TCP可以保证SIP消息的传输可靠性,但是,一方面TCP连接建立增大了SIP会话建立的时延,另一方面,TCP严格按序递交容易引起队头阻塞 ,所以TCP也不适合传送SIP消息。

2.2 RTP运行在UDP之上
RTP是为了在Internet上实时传输多媒体数据而制定的一种传输协议。RTP的作用是提供时间信息和实现流同步,并且依靠实时传输控制协议(RTCP)为按序传送的数据包提供可靠的传送机制、流量控制和拥塞控制。RTP本身不具有传输数据的能力,它一般与UDP结合来支持实时传输。使用UDP可以保证会话的实时性,但是UDP不提供拥塞控制,一旦发生网络拥塞,就会影响会话质量,进而影响到网络的整体性能。

3 SCTP和DCCP适用于SIP电话的特性分析
为了改善SIP电话的性能,我们引人了传输层协议SCTP和DCCP,设计了如图2所示的SIP电话协议模型,使用SCTP来传输SIP消息,使用DCCP来传输RTP封装的语音数据。

基于SCTP/DCCP的SIP电话协议模型

3.1 SCTP适用于SIP的特性分析
SCTP协议继承了TCP的流控制和拥塞控制机制,引人了安全的关联建立、多流和多宿等特性,更适合传送SIP消息。
(1)“四次握手”的关联建立
这种关联建立方式要求服务器验证客户端的合法性,只有验证通过才正式为客户端分配资源,能够保护服务器免受DoS攻击 的威胁。在关联建立的第三和第四个块中可以携带数据,所以这种关联建立方式不会显著增加SIP会话建立时延。
(2)多宿(Multi-homing)和多流(Multi-streaming)
建立关联的两个端点可以绑定多个IP地址,通信时选取一对地址作为主路径,同时使用心跳(heartbeat)机制检测地址的可达性,如果一个地址变得不可达,就将通信转移到备用地址上。这种多宿特性提高了SIP消息传送的可靠性,改善了网络容错能力。
多流特性使得流与流之间的数据在传送时互不影响,避免了TCP中经常出现的队头阻塞。当使用SCTP传送SIP消息的时候,不同SIP事务或者不同会话中的消息可以通过不同的流传送 ,这样一个事务或者会话中消息的丢失不会影响别的事务或者会话中消息的递交。在不同的流中,SCTP还可以使用有序或无序的传送方式。无序传送时,到达对端的消息会被立即传送至应用层,无需考虑传送顺序,这种方式也避免了队头阻塞。
(3)消息的分段、捆绑和SACK技术
SCTP提供了路径MTU发现功能,可以将大于MTU的SIP消息在传输层进行分段,也可以将多个小于MTU的SIP消息按块捆绑在一个报文中进行传输,提高了传输效率。同时,SCTP沿用了TCP中使用的SACK技术,可以快速检测到SIP消息的丢失,更快地建立SIP会话。

3.2 DCCP适用于RTP的特性分析
DCCP协议主要是为传输流媒体而设计的,它结合了TCP和UDP的优点,适用于那些无需严格按序和完全可靠的传输,并引人了灵活的拥塞控制机制。
(1)可靠的半连接建立和拆除
DCCP连接由连接属性不同的两个独立半连接 组成,当应用于SIP电话时,可以为RTP数据包的传送灵活地协商连接参数。
(2)灵活可选的拥塞控制机制
DCCP允许上层应用在两个半连接中灵活地选
择拥塞控制机制。DCCP提供两种拥塞控制机制:
TCP—like拥塞控制和TCP友好的速率控制。
(3)部分校验和数据的捆绑
部分校验允许应用来选择校验的覆盖范围,应用可以接收不会影响语音通信性能的部分损坏的RTP数据包。当拥塞出现时,这种特性可以提高网络的性能。同时,多个RTCP包可以捆绑成一个复合包在一个DCCP数据报中传输。

4 基于SCTP和DCCP的SIP电话协议设计
为了支持SCTP和DCCP协议,需要对SIP和会话描述协议SDP的参数进行扩展。在此基础上,我们设计了基于SCTP和DCCP的SIP电话的信令流程。

4.1 SIP协议的扩展
SIP的Via头字段携带有传输协议标示符,RFC3261定义了值“SCTP”表示使用SCTP传送SIP消息。下面是使用SCTP的Via头字段的例子:
Via:SIP/2.0/SCTP lqf.bjtu.edu.cn:5060

4.2 SDP协议的扩展
SDP使用若干文本行来传输会话描述信息。若采用DCCP来传输RTP包,就需要扩展SDP中的m字段和a字段。
SDP使用媒体行(“m=”)来传送终端发送媒体信息时使用的媒体类型、传输协议、传输端口和编码格式。类似于UDP,为DCCP定义了“DCCP”、“DCCP/RTP/AVP”、“DCCP/RTP/SAVP”、“DCCP/RTP/AVPF”和“DCCP/RTP/SAVPF”等传输协议标示符,来表明使用DCCP传输R11P特定的应用。如图3所示,m字段的值表示传输的是视频数据流,端口号是52654,传输协议是DCCP/RTP/AVP,并采用RTP净荷类型值99所对应的编码格式。

SDP扩展示例

SDP使用“a=”字段表示上层应用所对应的服务码。扩展“a:dccp-service-code:”属性来传送服务码的值,“a:setup:”属性来指定哪一端主动发起了DCCP连接,“a=connection:”属性决定是需要重新建立连接还是使用现有的连接。

4.3 基于SCTP和DCCP的SIP电话的信令流程
基于SCTP和DCCP的SIP电话的信令流程如图4所示。

基于SCTP和DCCP的SIP电话的信令流程

(1)注册过程
SIP终端接入网络时,发送REGISTER消息将其联系地址(contact address)和地址记录(address—of—record)在注册服务器中注册,并将绑定关系存储在位置服务器中。这个上层应用触发在UAS(用户代理服务器)和注册服务器之间建立SCTP关联(过程A,1,2)。
(2)会话请求
UAC(用户代理客户端)向UAS发起会话请求,先将INVITE消息发送到本域的代理服务器1,并在它们之间触发建立SCTP关联(过程B,3)。代理服务器1向DNS服务器查询代理服务器2的IP地址,在代理服务器1和2之间建立SCTP关联并转发INVITE消息(过程4,5,C,6)。如果后续消息与前面的消息分属于不同的事务或者会话,可以使用SCTP的多流机制来传送。代理服务器2通过位置服务器查询UAS的地址,并将INVITE消息通过SCTP传送到UAS(过程7,8,D,9)。
(3)会话响应
UAS振铃和摘机后,分别按照传送INVITE的路径返回180Ringing和2000K,完成会话参数的协商。UAC直接向UAS发送ACK消息(过程10,11,12)。
(4)RTP会话建立
发送ACK消息的同时,UAC与UAS之间建立DCCP连接,而后开始使用DCCP传送RTP语音数据包,通话开始(过程E,F)。

5 基于SCTP和DCCP的SIP电话的实现
本实现主要包含两部分,一部分是用户代理对SCTP和DCCP的支持,另一部分是SIP网络服务器对SCTP的支持。

5.1 Linux平台SCTP软件的选择
我们选择了支持SCTP和DCCP的内核linux一2.6.15,并且安装了SCTP应用开发软件lksctp以方便地使用SCTP的诸多特性。lksctp运行在内核空间,提供了类套接口AP1支持,从图5中的架构可以看出,它和TCP/UDP处在同一层次上,所以开发基于SCTP的应用就如同开发基于TCP和UDP的应用一样。

lksctp架构示意图

5.2 SIP用户代理的修改
我们选择的用户代理软件是kphone,它具有会话发起和即时消息等功能,由用户接口模块、SIP功能模块dissipate、编解码模块、RTP/RTCP功能模块、套接口调用模块组成,如图6所示。对用户代理的修改主要包含3部分:

SIP用户代理模块及消息流程

(1)SIP功能模块:参照本文第3节对SIP中的Via等头字段以及SDP的相关字段进行扩展;
(2)用户接口模块:为了使用户可以使用SCTP和DCCP协议,在界面中添加协议选择选项;
(3)套接口调用模块:本模块的修改包含两部分,一部分是使用SC11P的多流和多宿等相关特性来传输SIP消息;另一部分是使用DCCP来传输RTP数据包,最主要的应用特性就是可以灵活选择拥塞控制。

5.3 SIP网络服务器的修改
我们使用的SIP网络服务器软件是partysip,它集成了代理服务器、注册服务器和重定向服务器等功能,并支持多线程,由主函数和多个监听线程组成,如表1所示。

SIP网络服务器线程

当程序启动的时候,其程序流程如图7所示,主线程首先读取配置文件中各插件的配置参数,然后初始化oSIP库(提供基本的SIP功能函数库),并启动表中相关的线程,执行相关的功能,线程之间的通信主要依靠管道和共享内存等机制来完成。最后,用户终止线程执行,程序结束。

SIP网络服务器主函数流程

为了使网络服务器支持SCTP,我们扩展了SIP消息的相关头字段。同时,由于partysip所有的功能都是以插件的形式存在的,需要在软件中添加SCTP插件,为tlp和imp线程提供必需的库函数。主要包含以下几个部分:插件的启动和关闭函数:plugin_init,plugin_start,plugin_release;套接口创建和关闭函数:local_ctx_init,local_ctx_free;消息接收和发送函数:cb_rcv_sctp_message,cb_snd_sctp_mes_sage;消息处理函数:sctp—process—message。

5.4 试验和结果
试验环境如图8所示,3台台式机作为SIP电话终端,安装了修改后的SIP用户代理软件。2台自主研发的R2600高性能双栈路由器作为SIP网络服务器,安装了修改后的SIP网络服务器软件。为了使用SCTP的多宿特性,在两个SIP网络服务器上各多配置了一块无线网卡,这两个网络服务器之间由无线网卡组成的无线链路和由有线网卡组成的有线链路一起来提供多宿支持。

试验环境

基于以上的试验环境,我们对设计进行了测试。两个用户代理客户端分别向用户代理服务器发起呼叫,这两个呼叫都会经过两个网络服务器,所以只要在两个网络服务器之间建立一次SCTP关联,关联两端分别绑定两个地址,并选取有线链路来作为主路径,将这两个会话映射到这个关联的不同的流中。使用NIST工具在网络服务器1上模拟数据的丢失,从测试结果看,一个流中数据的丢失不会阻塞另一个流中数据的递交。当人为地将网络服务器之间的有线链路断开时,通过ethereal工具抓包分析,SIP用户代理客户端会使用DCCP的拥塞控制机制来减少数据的发送速率,同时网络服务器之间的通信也会使用SCTP的多宿机制将通信转移到无线链路上。
以上的试验只是初步测试了SCTP和DCCP的性能,对其新性能的评测以及和现有技术的比较将会作为我们下一步工作的重点。

6 结束语
本文在分析传输协议SCTP和DCCP的特性的基础上,提出了一种基于SCTP和DCCP的SIP电话传输模型,分析了这种SIP电话会话流程,并给出了具体的实现方法。试验结果显示,这种SIP电话能够使用SCTP和DCCP的诸多特性,下一步的主要工作就是对其性能进行测试并与现有的SIP电话进行性能上的比较。目前的SIP电话主要采用TCP和UDP作为传输协议,但是SCTP和DCCP的良好特性,使之有逐步取代UDP和TCP的可能,正在成为下一代网络中的重要协议。

如没特殊注明,文章均为好会通科技原创,转载请注明来自 http://www.meeteasy.com.cn/archives/3324.htm.

copyright 2004-2013     粤ICP备12061155号-1

Sitemap|XML|RSS|隐私政策|EN|