找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于SIP协议的VOIP用户代理研究

[复制链接]
admin 发表于 2013-3-24 17:49:05 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 为了解决传统的VOIP系统组网复杂、灵活性不佳的问题,对目前的SIP技术和STUN技术进行了研究。利用STUN技术解决了内网IP端口到公网IP端口转换问题。以开源Lumisoft  SIP为核心,结合RTP/RTCP相关技术,设计了一种基于SIP协议的VOIP UA用户代理系统模型。实现了通过访问网络上的SIP用户代理或者SIP音乐服务器,为网络用户提供便捷的网络语音、音乐点播等服务。实验表明,基于SIP的VOIP网络结构更简单,更灵活。
关键词: 网络语音通信;会话初始协议;NAT的UDP穿越;信号传输;通信软件开发
       会议初始协议SIP(Session Initiation Protocol)是下一代网络中的重要协议之一,是NGN领域研究的热点。传统的多媒体网络通信基于H.323系列,它详细说明了一系列在Internet上进行多媒体通信的协议和流程,比较成熟,但是组网复杂,灵活性不佳。相比于H.323而言,SIP主要有以下三点优势:(1)从编码格式的角度来看, SIP采用文本编码格式,易于解析和调试,实现起来简单容易。(2)从可扩展性的角度来看,H.323的网关和网守必须在呼叫期间保存呼叫的相关信息,并使用TCP传输,需要保存连接状态,大大地限制了它所支持的网络规模。而SIP协议报文包含了相关操作的必要信息,实体可以无状态地工作,不需要呼叫信息并且SIP支持UDP方式,无需保存连接状态。大规模应用时, H.323会议中的集中式多点控制单元会形成瓶颈,从而影响系统的性能。(3)从移动性的角度来看,SIP同时通过代理和重定向功能来支持用户移动性,而H.323在这方面的性能较欠缺[1]。
     在本实验中,主要与SDP(Session Description Protocol)、RTP(Real-time Transport Protocol)、UDP等协议一起构建了完整的音频通信系统,如图1所示。本地UA端通过访问其他SIP的UA端或者SIP音乐服务器,实现语音通信和网络音乐点播的功能。
    20121107050710926284020.gif
   1 SIP组网模型简介
     SIP网络中有两个要素:SIP用户代理(UA)和SIP网络服务器。UA主要由负责发起SIP请求的用户代理端(UAC)和负责对呼叫请求做出响应的用户代理服务端(UAS)组成。
     SIP网络服务器主要由注册服务器(Register Server)、代理服务器(Proxy Server)、位置服务器(Location Server)和重定向服务器(Redirect Server)组成。Register Server用于保存用户数据,为用户提供注册服务,和代理服务器一起为用户提供定位服务。SIP Proxy Server主要负责提供路由功能,根据被叫用户的网络地址,负责将SIP用户请求和响应转发到响应的下一跳。Location Server可以与SIP网络服务器结合,存储用户注册信息和IP地址映射表,提供地址查询服务。Redirect Server提供解析地址服务,类似于DNS,可以将UA目的地址映射成相应格式的用户名[2]。
2 基于SIP的VOIP UA系统的设计
2.1 系统的整体分析

     要实现一个网络音频通信系统,首先初始化系统的音频输入输出设备;然后建立Call,在得到对方确认后,开始实时语音的采集、处理与播放,并且进行可靠地传送和接收,这样PC之间就可以实现音频通信;最后通话结束,摘除Call。呼叫的建立可以通过SIP协议的信令来实现。音频传输采用RTP协议,因为RTP建立于UDP之上,能自动处理分组丢失和交付失序的问题,从而可以确保音频数据以正确的次序提交给用户。另外,RTP还有一个伴随协议RTCP,这个协议主要为会话提供大量的可供交换的信息和关于会话质量的反馈信息。
     该UA系统主要分为用户界面层、模块接口层、功能实现层以及底层。其中用户界面层基于VS2010C#开发,包含了程序的入口函数,为应用程序提供交互的图形界面,并且确定了应用程序的整体框架结构;模块接口层是由软件中所调用的各个模块的接口函数组成的;主要屏蔽了所有调用下层模块的细节,提供一些简单的类,便于用户界面层的控件的回调函数调用,来完成具体的注册、call或者call incoming等具体功能;功能实现层是由SIP用户代理模块、媒体流处理模块、系统配置模块和网络配置模块构成;底层主要提供媒体处理流处理提供相应的接口。
2.2 UA间的会话过程
     一个成功的SIP UA间的呼叫主要由INVITE和ACK组成。首先利用UA1发送INVITE消息邀请UA2加入会话,同时在请求的末尾包含一条SDP会话的描述,其中包含了音频编码格式等一系列的媒体信息参数。UA2收到该邀请消息后,回复一条Trying消息给UA1,表示其已经收到该请求,并且正在处理这个请求。此时UA2端提醒有一条来自UA1的呼叫(振铃提醒),接着返回给 UA1 Ringing响应。UA1收到Ringing时,可以通过铃声的形式提醒UA1。当UA2确认接通后,向UA1发送OK的响应消息后,停止振铃提醒,在OK的消息体中包含了SDP媒体描述。UA1收到OK的响应后,停止铃声提醒,并且向UA2发送ACK确认消息。在UA2收到ACK消息后,双方开始多媒体对话。通话结束后,假设UA2先摘机,则UA2向UA1发送BYE消息,UA1收到BYE后,向UA2发送OK响应消息,本轮通话结束。UA之间的会话过程如图2所示[3]。
    20121107050710957534021.gif
   2.3 STUN技术和实验分析
     STUN(Simple Traversal of UDP Through NAT)是由IETF研制的一种UDP对NAT的穿越方式。STUN技术可以穿越大部分的NAT,并且无需改变现有的NAT设备。其主要思想就是私网中的PC终端先通过和公网上的STUN服务器通信,利用STUN服务器返回的信息判断其本地NAT的类型,采用相应的NAT穿越方法,最终获得本地端口在公网上的IP地址和端口[4]。
     判断NAT类型在实现STUN的穿越功能时非常重要,STUN_Client首先要判断本地NAT的类型,针对其类型采用相应的映射方法,才能保证UDP数据包可以顺利地到达目的网络地址完成通信。根据NAT对UDP处理的不同实现方式,目前分为四种类型:(1)完全映射:完全映射的NAT是指所有的来自内部网同一个IP地址和端口的请求报文,都被映射到同一个外部网IP和端口。任何一个外部的主机可以发送消息到内部的主机,只要发送到其映射的外部IP和端口即可。(2)限制映射:与完全映射一样,但一个外部主机(IP地址为U)要发送消息包给内部主机,需要该内部主机先发送消息包给IP地址U作为前提。(3)端口限制映射:端口限制映射与限制映射类似,只是限制的内容包括了端口号。(4)对称映射:一个映射的NAT是指来自内部的IP和端口,发送到同一个IP和端口的请求报文,都将被映射到同一个外部的IP地址和端口。如果内部主机的IP地址和端口相同,但是目标地址和端口不同,将会有不同的映射方式,而且只有收到内部网消息的外部主机,才能够发送消息给内部主机。根据NAT类型可以得出STUN可以解决前三种NAT的穿越,对于第四种,如果通信端处于对成型NAT后,将不能实现穿越,需要采取服务器转发等形式才能实现[5]。
     实验中用了Wire Shark抓包,分析其中一个IP端口的STUN协议包如图3所示。通过STUN服务器发送的数据包可以看出本地的IP和端口 是192.168.1.110:21240,STUN服务器的IP地址和端口号是213.192.59.93:3479。通过STUN服务器返回的数据包可以得到本地私网的IP地址以及端口号对应的公网上的IP地址和端口号为117.63.181.58:55012。
    20121107050710988784022.gif
   


   2.4 RTP/RTCP技术和实验数据包分析
     RTP是用于英特网上针对多媒体数据流传输的一种协议,例如音频和视频等具有实施性质的数据提供端到端的传输服务。RTP可以在一对一或者一对多的传输情况下工作。其主要作用是提供时间和流的同步。RTP通常使用UDP传输数据。一个RTP会话将使用两个端口,一个给RTP另一个给RTCP。RTP负责媒体数据的实时传输,RTCP负责反馈控制,传输检测。RTP自身并不提供任何保证及时传输的机制,也不保证其他服务的质量,但是可以依赖底层服务进行。它并不保证网络可靠或者预防无序传输,它依靠RTCP监控数据传输质量,进行自适应调整。RTP中包含了序列号,允许接收者重组数据包[6]。
     在本实验系统中,通过RTP/RTCP实现数据流封包发送给下层,依托UDP传输,保证网络的传输速度,RTP传输的网络数据包如图4所示。通过RTP数据序列号,使接收端根据序列号进行排序,保证数据流有序播放。RTP/RTCP有效地解决了UDP传输的数据包的无序性。在RTP会话期间,参与者周期性地发送RTCP包。RTCP包中含有已经发送的数据包的数量、丢失的数据包的数量等统计资料。因此,RTP和RTCP配合使用,通过有效的反馈和最小的开销,使网络的传输效率最佳化,与UDP配合特别适合传输网络上的实时数据。
    20121107050711020034023.gif
   3 本地UA系统的工作流程和设计
     本地UA系统的工作流程主要分为三块:设备和协议的初始化、呼叫按钮的触发事件以及外来呼叫邀请的Callback事件。
     首先主要是协议初始化和设备初始化,本系统采用Lumisoft SIP开源协议,该协议主要针对C#的编程环境,主要提供了SIP的一些接口函数,可以直接调用,自己可以根据需要组合出相应的SIP协议栈。初始化一个SIP栈类并且绑定相应的套接字端口,然后定义收到SIP消息时要触发的事件以及其相应的处理函数。部分关键代码如下:
     m_pStack = new SIP_Stack();//初始化SIP类
     m_pStack.UserAgent="Lumisoft SIP Stack 1.0";
     m_pStack.BindInfo=new IPBindInfo[]{new IPBindInfo("
     ",BindInfoProtocol.UDP,IPAdress.Any.m_SipPort)}//绑定
     SIP的IP和端口
     m_pStackReceived +=new EventHandler
     <SIP_RequestReceivedEventArgs>(m_pStack_
RequestReceived);//触发事件的声明
     m_pStack.Start();//开启SIP Stack
     呼叫按钮的触发事件是本系统中由用户触发的模块。其主要分为创建RTP会议,提供SDP,绑定本地IP地址和端口,创建SIP消息并发送。消息体中包含了SDP信息,描述了多媒体通信的相关信息。本实验的SIP会话的INVITE消息分析如图5所示。
    20121107050711066904024.gif
       外来呼叫邀请的Callback事件主要修改当前的SIP协议的会话状态(register、invite、ring、ok等)。当状态变化时,触发事件处理函数,产生相应的SIP消息发送。部分关键代码如下:
     Public wfrm_IncomingCall(SIP_ServerTransaction invite)
     {...
     InitUI();//初始化UI界面
     m_pTransaction=invite;
     m_pTransaction,Canceled+=new
     EventHandler(m_pTransaction_canceled);}
//SIP状态变化触发函数的定义
     Private void m_pTransaction_canceled
     (objectsender,EventArgs e){...}//定义SIP消息状态
变化的处理函数,产生SIP代码并发送
4 基于SIP协议的用户代理UA系统的实现
     本系统在Windows平台下,以.NET Framework和LumiSoft为开发工具完成,通过开发设计,最后的系统运行界面如图6所示。本系统将SIP协议、STUN、RTP/RTCP协议等结合到一起,应用界面简洁清楚、使用方便。软件开启,只要输入本地用户名和远端UA用户名,或者SIP服务器名称,点击CALL按钮就可以直接和网络上的SIP的UA端进行语音通话,或者访问特定的SIP音乐服务器,收听音乐。为后续实现基于SIP协议的视频会议研究奠定了良好的基础。通过本实验得到结论:基于SIP的多媒体通信组网构建比H.323灵活,通过简单的SIP信令的对话就可以快速实现多媒体通信,并且SIP协议基于文本格式,相对于H.323更加简单易懂。
    20121107050711098154025.gif
       本文基于SIP协议的音频通信的UA系统的项目研发实践,详细地阐述了基于SIP的VOIP的UA的设计和所涉及的关键技术和难点。对于本系统,提出几点不足及后续研究应该改进的方向:首先没有完善SIP服务器的注册机制;其次STUN技术对于在对称型NAT之后的UA无法实现穿越,需要结合服务器转发等形式加以弥补。随着SIP技术的广泛应用,相信未来基于SIP多媒体会话技术将会有更好的发展和更广泛的市场。
参考文献
[1] 张智云.SIP协议及其应用[M].北京:电子工程出版社,2005:89-93.
[2] 杜吉友,董德存.基于SIP的多媒体通信系统安全技术[J].数据通信,2004,10(2):340-350.
[3] 范文,梁满贵.基于oSlP协议栈的用户代理的设计与实现 [J].微计算机信息,2007,23(21):15-16.
[4] 严军.NGN网络业务穿越NAT探讨[J].世界电信,2003(11):110-130.
[5] ROSENBERG J.J WEINBERGER.STUN-Simple traversal of  user datagram protocol through net work address translators (NATs)[S].RFC3489,2003.
[6] SCHULZRINNE H,CASMER S,FREDERICK R,et al.RTP:a transport protocol for real-time applications[S].RFC3550,2003.
[7] LumiSoft.net.help[EB].http://www.lumisoft.ee/lswww/download/downloads/Net/Help/Index.aspx,2008.
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-26 11:54 , Processed in 0.056635 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表