作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591
Beijing Universityof PostsandTelecommunications
___________________________________________
计算机网络实验报告
——SIP客户端的开源实现
___________________________________
小组成员:
姓名 | 学号 | 学院 |
许金良 | 2014111469 | 网络技术研究院 |
崔煜喆 | 2014111464 | 网络技术研究院 |
种艳伟 | 2014111479 | 网络技术研究院 |
叶青 | 2014111465 | 网络技术研究院 |
姓名 | 学号 | 学院 |
许金良 | 2014111469 | 网络技术研究院 |
崔煜喆 | 2014111464 | 网络技术研究院 |
种艳伟 | 2014111479 | 网络技术研究院 |
叶青 | 2014111465 | 网络技术研究院 |
小组编号 | 密码 |
3410 | 1234 |
在现在的网络通信中,Email服务已经不是现在首选的通信方式了更多的即时通信,语音服务等,在网络上面层出不穷VoIP传统的电话网是以电路交换方式传输语音,所要求的传输宽带为64kbit/s而所谓的VoIP是以IP分组交换网络为传输平台,对模拟的语音信号进行压缩打包等一系列的特殊处理,使之可以采用无连接的UDP协议进行传输为了在一个IP网络上传输语音信号,要求几个元素和功能最简单形式的网络由两个或多个具有VoIP功能的设备组成,这一设备通过一个IP网络连接VoIP设备是如何把语音信号转换为IP数据流,并把这些数据流转发到IP目的地,IP目的地又把它们转换回到语音信号两者之音的网络必须支持IP传输,且可以是IP路由器和网络链路的任意组合因此可以简单地将VoIP的传输过程分为下列几个阶段语音-数据转换语音信号是模拟波形,通过IP方式来传输语音,不管是实时应用业务还是非实时应用业务,首先要对语音信号进行模拟数据转换,也就是对模拟语音信号进行8位或6位的量化,然后送入到缓冲存储区中,缓冲器的大小可以根据延迟和编码的要求选择许多低比特率的编码器是采取以帧为单位进行编码典型帧长为10 30ms考虑传输过程中的代价,语间包通常由60120或240ms的语音数据组成数字化可以使用各种语音编码方案来实现,目前采用的语音编码标准主要有ITU-T G.711源和目的地的语音编码器必须实现相同的算法,这样目的地的语音设备帮可以还原模拟语音信号原数据到IP转换一旦语音信号进行数字编码,下一步就是对语音包以特定的帧长进行压缩编码大部份的编码器都有特定的帧长,若一个编码器使用15ms的帧,则把从第一来的60ms的包分成4帧,并按顺序进行编码每个帧合120个语音样点(抽样率为8kHz)编码后,将4个压缩的帧合成一个压缩的语音包送入网络处理器网络处理器为语音添加包头时标和其它信息后通过网络传送到另一端点语音网络简单地建立通信端点之间的物理连接(一条线路),并在端点之间传输编码的信号IP网络不像电路交换网络,它不形成连接,它要求把数据放在可变长的数据报或分组中,然后给每个数据报附带寻址和控制信息,并通过网络发送,一站一站地转发到目的地传送在这个通道中,全部网络被看成一个从输入端接收语音包,然后在一定时间(t)内将其传送到网络输出端t可以在某全范围内变化,反映了网络传输中的抖动网络中的同间节点检查每个IP数据附带的寻址信息,并使用这个信息把该数据报转发到目的地路径上的下一站网络链路可以是支持IP数据流的任何拓结构或访问方法IP包-数据的转换目的地VoIP设备接收这个IP数据并开始处理网络级提供一个可变长度的缓冲器,用来调节网络产生的抖动该缓冲器可容纳许多语音包,用户可以选择缓冲器的大小小的缓冲器产生延迟较小,但不能调节大的抖动其次,解码器将经编码的语音包解压缩后产生新的语音包,这个模块也可以按帧进行操作,完全和解码器的长度相同若帧长度为15ms,,是60ms的语音包被分成4帧,然后它们被解码还原成60ms的语音数据流送入解码缓冲器在数据报的处理过程中,去掉寻址和控制信息,保留原始的原数据,然后把这个原数据提供给解码器数字语音转换为模拟语音播放驱动器将缓冲器中的语音样点(480个)取出送入声卡,通过扬声器按预定的频率(例如8kHz)播出简而言之,语音信号在IP网络上的传送要经过从模拟信号到数字信号的转换数字语音封装成IP分组IP分组通过网络的传送 IP分组的解包和数字语音还原到模拟信号等过程
会话发起协议(Session Initiation Protocol,缩写SIP)是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于建立,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话2000年11月,SIP被正式批准成为3GPP信号协议之一,并成为IMS体系结构的一个永久单元SIP与H.323一样,是用于VoIP最主要的信令协议之一
SIP最早由Henning Schulzrinne和Mark Handley於1996年所设计. SIP的设计目标之一是提供类似公用交换电话网(PSTN)中呼叫处理功能的扩展集在这个扩展集中,实现类似日常电话的操作:拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同
SIP也实现了许多七号信令系统(SS7)中更高级的呼叫处理功能,尽管这两个协议相差很远SS7是一个高度集中处理的协议,其特点表现为高复杂度的中心网络结构和无智能的哑终端(传统的电话机)SIP则是一个点对点协议,所以它只需要一个相对简单的(因此也高度可扩展的)核心网络,而将处理工作下放给连接在网络边缘的智能端点(装有硬件或软件的终端设备)SIP的许多功能在端点中实现,这与传统的SS7将其在网络核心设备实现的作法大异其趣
尽管有许多其它的VoIP信号协议存在,SIP的特点在于它的支持者植根于IP团体而不是电信產业SIP最初由IETF标准化和管理,而H.323VoIP协议则从传统上与ITU有着更多的联系尽管如此,这两个组织对两个协议在某些方面都相互认可
SIP与许多其它的协议协同工作,仅仅涉及通信会话的信令部分(control message)SIP报文内容传送会话描述协议(SDP),SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等SIP的一个典型用途是:SIP会话传输一些简单的经过封包的实时传输协议流RTP本身才是语音或视频的载体
第一个被提议的标准版本(SIP 2.0)在RFC 2543中定义在RFC 3261中对这个协议有更深入的解释,尽管目前许多装置仍然是参考以前的过渡版本而实现的注意现在的版本还是2.0
SIP同HTTP相似并采用了后者的一些设计原则:SIP报文是人类可读的,并且也是採取请求-应答的流程SIP的倡导者宣称它比H.323简单但是,有些人则保留地认为尽管SIP的原始目标很简单,现在它已经演变得跟H.323一样复杂了SIP借用了许多HTTP状态码,如常见的’404not found’SIP的发起者说:曾经在网络上出现的急速革新和应用发展的歷史将同样发生在电话產业上SIP和H.323对语音通信毫无限制,能够传输从语音到视频的任何通信会话,甚至未来还没有设想的应用
用于搭载媒体流的实时传输协议(RTP)并不能简单的穿越NAT路由器大部分SIP客户端可以通过STUN的协助穿越full cone,restricted cone 和port restricted cone 的NAT但对于对称的(symmetric)NAT还是有问题一些较新的带ALG功能的路由器,现在可以识别SIP通信并让其通过RTP代理服务器,一种在上世纪九十年代普遍使用的类似于HTTP代理服务器的专用于SIP的线速处理器,可以启用CALEA并穿越老式的无法识别SIP的NAT设备
正如它的发明者所预见的,SIP的点对点特性无法使用一些网络本身提供的服务例如,网络不能很容易的支持合法的呼叫侦听(在美国由法律控制的窃听,CALEA)紧急呼叫(在美国呼叫E911)难以路由因为IP终端本身具有移动性,网络并没有任何定位的能力,要确定正确的公共服务应答点PSAP很困难然而,当商业SIP服务商们正准备放弃时,一些实用的解决方案却在进行试验由3GPP和3GPP2等公司开发的标准定义了基本SIP模型的一些应用,这些应用推动了商业化并支持了网络中心的能力,如CALEA
Vonage和SIPphone等公司是消费SIP的先锋,他们拥有一个快速增长的用户基础一些较大的公司,如AT&T和Level(3)也不甘示弱传统的电信工业(包括朗讯科技(LucentTechnologies)和北电网络(Nortel Networks))现在都在集中开发基于SIP架构模型和扩展的系统,如3GPP的IP多媒体子系统(IMS)
一些VoIP电话公司,如BroadVoice,允许用户使用它们自己的SIP设备,包括兼容SIP的电话机,AsteriskPBX,或者软电话新的消费SIP设备市场正在继续膨胀
Open Source团体开始提供越来越多的建立终端,代理和注册服务器所需的技术,既让这些技术走进了人们的日常生活,又加速了其向全球推广SIPfoundry已经开发了多种SIP协议栈,客户端应用程序和SDK,还有一整套可以与市场上大部分由厂商销售的IP PBX实现相竞争的IPPBX解决方案
Wireshark(前称Ethereal)是一个网路封包分析软件网路封包分析软件的功能是截取网路封包,并尽可能显示出最為详细的网路封包资料
在过去,网路封包分析软件是非常昂贵,或是专门属於营利用的软件,Wireshark的出现改变了这一切在GNU通用公共许可证的保障范围底下,使用者可以以免费的代价取得软件与其程式码,并拥有针对其原始码修改及客製化的权利Wireshark是目前全世界最广泛的网路封包分析软件之一
以下是一些使用Wireshark目的的例子:网络管理员使用Wireshark来检CE网络问题网络安全工程师使用Wireshark来检查信息安全相关问题开发者使用Wireshark来为新的通讯协议除错普通用户使用Wireshark来学习网络协议的相关知识
1.2.3.4. Wireshark不是入侵检CE软件(Intrusion Detection Software, IDS)对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示然而,仔细分析Wireshark撷取的封包能够帮助用户对于网络行为有更清楚的了解Wireshark不会对网络封包产生内容的修改-它只会反映出目前流通的封包信息Wireshark本身也不会送出封包至网络上
PJSIP 是一套免费的开源多媒体通信库,它实现了相关的标准的基础协议如SIP, SDP, RTP,STUN, TURN, 和ICE协议它把信号处理协议SIP与多媒体框架和NAT穿越功能结合在一起,集成到高层的多媒体通信API,它是便携式的,并且适用于从桌面系统嵌入式系统到移动终端几乎所有的系统
PJSIP由Teluu Ltd公司开发并维护,同时得到了分布全球的因特网开发者的帮助Teluu在2006年底在英国成立,最初叫做PJSIP LLP,公司发起人是Benny Prijono 和PerryIsmangil,很快Nanang Izzuddin,然后是Sauw Ming 开发者加入进来最新加入的成员是RizaSulistyo
下载pjproject-2.3去官网http://www.pjsip.org/下载最新版本的pjproject,这里下载的版本是pjproject-2.3,下载完成后得到压缩文件pjproject-2.3.zip将pjproject-2.3导入到VS2012首先安装VS2012然后解压下载的压缩文件pjproject-2.3.zip解压后进入根目录,找到pjproject-vs8.sln并双击,系统将自动用VS2012打开pjproject-2.3工程文件注意系统会提示对工程文件进行单向升级,如图2所示,直接点击确定即可接下来的对话框要打勾点击确定,然后系统升级,可能要几分钟的时间
操作方法:项目→属性→配置属性→链接器→常规→附加库目录→编辑,在弹出的对话框可以把库文件夹依次引入该过程如图4,5所示
操作步骤:项目→属性→配置属性→连接器→输入→附加依赖项,其余与上一步相同编译工程操作步骤:生成→生成解决方案,开始编译,大约需要1分钟编译结束编译成功的截图(图6)
需要提到的一点是,用PJSP通话过程中,传输数据前必须键入符号“*”,然后系统做好接受用户数据的准备,并在客户端允许用户输出数据如图8所示冒号后允许用户输入数据,数据只能是数字大写的英文字母*和#
首先启动客户端pjsua-i386-Win32-vc8-Debug.exe,直接在文件夹中双击即可启动程序,界面如图9所示,可以看到界面上给出了许多命令,方便了用户的使用
按照提示输入开始呼叫IVR,输入m开始呼叫,然后输入IVR的SIP地址sip:[email protected](注意,这里的IP地址要根据实际的IP地址作相应的修改)该过程的截图如图10所示
首先根据语音提示进行1注册,在嘀声后把本组同学的学号依次输入,学号之间用*号分开,最后用#结束
我们小组四个同学的学号依次是201411146920141114642014111479和2014111465,所以应该输入“2014111469*2014111464*2014111479*2014111465#”输入完成后IVR会提示你的组号(组号是IVR自动生成的)然后IVR会提示嘀声后输入本组的密码
最后IVR会提示注册成功然后挂机
注册过程如图11所示
打开Wireshark软件,进入程序界面,首先选定抓取数据的网络来源,这里选定本地连接,然后点击Start按钮,开始抓包该过程如图16
如果你的电脑正在与互联网连接,你可以看到Wireshark界面上不断更新的发送或接收到的包的信息,包括时间所用的协议状态等等如图17所示
为了过滤出我们需要分析的包(即与VOIP会话相关的包),我们需要用协议对包进行过滤Wireshark界面左上方有个Filter(过滤)输入框,我们输入SIP,回车,发现刚才不断跳动的内容不见了,都给过滤掉了如图18所示
当启动一个SIP会话后,可以发现Wireshark界面显示了发送和接收的网络包的信息,如图19所示
呼叫IVR分析如图20
注册分析如图21
由于分析得到的交互图比较复杂,而且与前面的过程得到的图类似,所以不再贴出
[1] Wizlu,VS2010中如何添加“依赖”“库目录”“包含目录”,http://blog.sina.com.cn/s/blog_63f6ddae01017w75.html, 03/21 2013.
[2] pj,Getting Started: Building for Microsoft Windows, https://trac.pjsip.org/repos/wiki/Getting-Started/Windows.
[3] l00210137,IP电话的VoIP技术原理,http://huawei.com/ecommunity/bbs/10146503.html?auther=1&buildingowner=10016085,11/06 2012.
[4] 维基百科,会 话发起协议,http://zh.wikipedia.org/wiki/%E4%BC%9A%E8%AF%9D%E5%8F%91%E8%B5%B7%E5%8D%8F%E8%AE%AE.
[5] 维基百科,Wireshark,http://zh.wikipedia.org/wiki/Wireshark.