开源SIP协议栈简介
2014-07-18 15:43:32 阿炯

SIP协议是一个基于应用层的会话控制协议。它可以创建、修改、终止多媒体会话(会议),也可以邀请参与者加入到一个现有的会话。

会话发起协议(Session Initiation Protocol,缩写SIP)是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于创建,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。2000年11月,SIP被正式批准成为3GPP信号协议之一,并成为IMS体系结构的一个永久单元。SIP与H.323一样,是用于VoIP最主要的信令协议之一。

因为SIP是一个基于应用层的协议,所以它不是一套完整的通讯系统方案,它需要和其它的方案或者协议结合起来实现整套系统。例如,实时传输协议(RTP)(RFC1889)用来传输音视频等实时的流媒体数据。实时流协议(RTSP)(RFC2326)用来控制媒体流的传递。媒体网关控制协议(MEGACO)(RFC3015)用来控制PSTN网关。

由此可见,SIP协议应该用来组合其它协议,从而实现完整的服务,但SIP基础的功能和操作不依赖于其它协议。

SIP的设计目标之一是提供类似公用交换电话网(PSTN)中调用处理功能的扩展集。在这个扩展集中,实现类似日常电话的操作:拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同。

随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进的H.323协议栈展现在普通程序员的眼前,为H.323普及立下了汗马功劳。

而然当在SIP时代,则出现了群雄割据的状况,SIP相对于H.323简单,灵活,于是各种协议栈层出不穷,下面将详细对比最具有代表性的5个开源项目:OPAL,VOCAL,sipX,ReSIProcate,oSIP。

OPAL是Open Phone Abstraction Library,是Openh323的下一个版本,它仍然使用了Openh323的体系结构,并在其基础上进行扩展,同时实现了SIP,H.323,但在音频和视频的编码和传输部分有较大改动。OPAL初衷设计是包含任何电话通信协议,所以其底层进行了高度的抽象化,所以也能够很容易的支持MGCP,PSTN和将来会出现的协议。不过由于Openh323的最后一个版本还在开发中,所以原本6月发布的OPAL也被推迟,现有的OPAL还非常不完善,BUG也非常多,不过相信以Openh323的开发班底,一定能让OPAL十分优秀。
 Language:C++
 VxWorks port:Yes
 Win32 port:Yes
 Linux port:Yes
 Supports RFC 3261:Yes
 Supports RFC 2327:Yes
 Supports RFC 3264:Yes
 Supports RFC 3263:No
 Supports RFC 3515:Yes
 Supports RFC 3262:No
 Supports RFC 3311:No
 TCP:Yes
 UDP:Yes
 SIZE: 8MB
 License:MPL
 Document:None
 Samples:UA,GK

VOCAL是vovida.org开发的SIP系统,VOCAL应该是目前功能最完善,使用者最多的开源SIP协议栈了.它不只包括了协议栈,还包括了h323与sip转换网关,对SIP的各种Server的功能支持也非常完善.不过很可惜,不支持windows平台,而且自从vovida被CISCO收购以后就停止了开发,最后的版本是2003年4月的1.5.0。
 Language:C++
 VxWorks port:No
 Win32 port:Partial
 Linux port:Yes
 Supports RFC 3261:Partial
 Supports RFC 2327:Yes
 Supports RFC 3264 :
Supports RFC 3263:
 Supports RFC 3515:Yes
 Supports RFC 3262:
 Supports RFC 3311:
 TCP:Yes
 UDP:Yes
 SIZE:6MB
 License: Vovida software licencse
 Document:Few
 Samples:UA,GK,GW

sipX是一个SIP系统,由SIPFoundry开发。sipX是从reSIProcate分离出来的,sipX除了包括SIP stack外,还包括了sipXphone,sipXproxy,sipXregistry等等,由它们构成了完整的SIP系统,而且sipx还支持嵌入式系统,各个模块可以按需取舍。不过可惜是几乎没有任何开发文档。
 Language:C++
 VxWorks port:Yes
 Win32 port:Yes
 Linux port:Yes
 Supports RFC 3261:Yes
 Supports RFC 2327:Yes
 Supports RFC 3264:Yes
 Supports RFC 3263:Yes
 Supports RFC 3515:Yes
 Supports RFC 3262:No
 Supports RFC 3311:No
 TCP:Yes
 UDP:Yes
 SIZE:<4 Mb
 License:LGPL
 Document:None
 Samples:UA,GK,GW

ReSIProcate同样也是由SIPFoundry开发,ReSIProcate最开始起源于Vocal,由于Vocal开始只支持rfc3254,为了支持最新的rfc3261,ReSIProcate诞生了,但现在,ReSIProcate已经成为一个独立SIP协议栈了,它十分稳定,并且很多商业程序都在使用。
 Language:C++
 VxWorks port:No
 Win32 port:Yes
 Linux port:Yes
 Supports RFC 3261:Yes
 Supports RFC 2327:Yes
 Supports RFC 3264:Yes
 Supports RFC 3263:Partial
Supports RFC 3515:Yes
 Supports RFC 3262:No
 Supports RFC 3311:No
 TCP:Yes
 UDP:Yes
 SIZE:< 2.5 Mb
 License:Vovida
 Document:Few
 Samples:None

oSIP的开发开始于2000年7月,第一个版本在2001年5月发布,到现在已经发展到2.0.9了。它采用ANSI C编写,而且结构简单小巧,所以速度特别快,它并不提供高层的SIP会话控制API,它主要提供一些解析SIP/SDP消息的API和事务处理的状态机,oSIP的作者还开发了基于oSIP的UA lib:exosip和proxy server lib:partysip.
 Language:C
 VxWorks port:Yes
 Win32 port:Yes
 Linux port:Yes
 Supports RFC 3261:Yes
 Supports RFC 2327:Yes
 Supports RFC 3264:Yes
 Supports RFC 3263:Yes
 Supports RFC 3515:No
 Supports RFC 3262:No
 Supports RFC 3311:Yes
 TCP:Yes
 UDP:Yes
 SIZE:400kb
 License:LGPL
 Samples:UA,GK

综合上述评测,可以看出5种SIP协议栈各有千秋,OPAL有发展潜力,VOCAL比较完善,sipX兼容性好,ReSIProcate教稳定,oSIP小巧而快速。所以要根据应用的不同选择恰当的协议栈进行研究开发。

本文源自:互联网