ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:765.85KB ,
资源ID:17094630      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17094630.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮研究生计算机网络VOIPSIP实验报告Word文件下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮研究生计算机网络VOIPSIP实验报告Word文件下载.docx

1、2)用实现的客户端完成在SIP呼叫中心上的注册和测试3.实验背景知识3.1.阅读VOIP,SIP技术相关内容,加深对VOIP技术原理的理解。1)VOIP技术原理在现在的网络通信中,Email效劳已经不是现在首选的通信方式了更多的即时通信,语音效劳等,在网络上面层出不穷VoIP传统的 网是以电路交换方式传输语音,所要求的传输宽带为64kbit/s而所谓的VoIP是以IP分组交换网络为传输平台,对模拟的语音信号进行压缩打包等一系列的特殊处理,使之可以采用无连接的UDP协议进行传输为了在一个IP网络上传输语音信号,要求几个元素和功能最简单形式的网络由两个或多个具有VoIP功能的设备组成,这一设备通过

2、一个IP网络连接VoIP设备是如何把语音信号转换为IP数据流,并把这些数据流转发到IP目的地,IP目的地又把它们转换回到语音信号两者之音的网络必须支持IP传输,且可以是IP路由器和网络链路的任意组合因此可以简单地将VoIP的传输过程分为以下几个阶段语音-数据转换语音信号是模拟波形,通过IP方式来传输语音,不管是实时应用业务还是非实时应用业务,首先要对语音信号进行模拟数据转换,也就是对模拟语音信号进行8位或6位的量化,然后送入到缓冲存储区中,缓冲器的大小可以根据延迟和编码的要求选择许多低比特率的编码器是采取以帧为单位进行编码典型帧长为10 30ms考虑传输过程中的代价,语间包通常由60120或2

3、40ms的语音数据组成数字化可以使用各种语音编码方案来实现,目前采用的语音编码标准主要有ITU-T G.711源和目的地的语音编码器必须实现相同的算法,这样目的地的语音设备帮可以复原模拟语音信号原数据到IP转换一旦语音信号进行数字编码,下一步就是对语音包以特定的帧长进行压缩编码大部份的编码器都有特定的帧长,假设一个编码器使用15ms的帧,那么把从第一来的60ms的包分成4帧,并按顺序进行编码每个帧合120个语音样点抽样率为8kHz编码后,将4个压缩的帧合成一个压缩的语音包送入网络处理器网络处理器为语音添加包头时标和其它信息后通过网络传送到另一端点语音网络简单地建立通信端点之间的物理连接一条线路

4、,并在端点之间传输编码的信号IP网络不像电路交换网络,它不形成连接,它要求把数据放在可变长的数据报或分组中,然后给每个数据报附带寻址和控制信息,并通过网络发送,一站一站地转发到目的地传送在这个通道中,全部网络被看成一个从输入端接收语音包,然后在一定时间t内将其传送到网络输出端t可以在某全范围内变化,反映了网络传输中的抖动网络中的同间节点检查每个IP数据附带的寻址信息,并使用这个信息把该数据报转发到目的地路径上的下一站网络链路可以是支持IP数据流的任何拓结构或访问方法IP包-数据的转换目的地VoIP设备接收这个IP数据并开始处理网络级提供一个可变长度的缓冲器,用来调节网络产生的抖动该缓冲器可容纳

5、许多语音包,用户可以选择缓冲器的大小小的缓冲器产生延迟较小,但不能调节大的抖动其次,解码器将经编码的语音包解压缩后产生新的语音包,这个模块也可以按帧进行操作,完全和解码器的长度相同假设帧长度为15ms,是60ms的语音包被分成4帧,然后它们被解码复原成60ms的语音数据流送入解码缓冲器在数据报的处理过程中,去掉寻址和控制信息,保存原始的原数据,然后把这个原数据提供应解码器数字语音转换为模拟语音播放驱动器将缓冲器中的语音样点480个取出送入声卡,通过扬声器按预定的频率例如8kHz播出简而言之,语音信号在IP网络上的传送要经过从模拟信号到数字信号的转换数字语音封装成IP分组IP分组通过网络的传送

6、IP分组的解包和数字语音复原到模拟信号等过程。2)SIP技术会话发起协议Session Initiation Protocol,缩写SIP是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于建立,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话2000年11月,SIP被正式批准成为3GPP信号协议之一,并成为IMS体系结构的一个永久单元SIP与H.323一样,是用于VoIP最主要的信令协议之一3) 协议设计SIP最早由Henning Schulzrinne和Mark Handley於1996年所设计. SIP的设计目标之一是提供类似公用交

7、换 网PSTN中呼叫处理功能的扩展集在这个扩展集中,实现类似日常 的操作:拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同SIP也实现了许多七号信令系统SS7中更高级的呼叫处理功能,尽管这两个协议相差很远SS7是一个高度集中处理的协议,其特点表现为高复杂度的中心网络结构和无智能的哑终端传统的 机SIP那么是一个点对点协议,所以它只需要一个相对简单的因此也高度可扩展的核心网络,而将处理工作下放给连接在网络边缘的智能端点装有硬件或软件的终端设备SIP的许多功能在端点中实现,这与传统的SS7将其在网络核心设备实现的作法大异其趣尽管有许多其它的VoIP信号协议存在,SIP的特点在于它的支持者植根

8、于IP团体而不是电信產业SIP最初由IETF标准化和管理,而H.323VoIP协议那么从传统上与ITU有着更多的联系尽管如此,这两个组织对两个协议在某些方面都相互认可SIP与许多其它的协议协同工作,仅仅涉及通信会话的信令局部control messageSIP报文内容传送会话描述协议SDP,SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等SIP的一个典型用途是:SIP会话传输一些简单的经过封包的实时传输协议流RTP本身才是语音或视频的载体第一个被提议的标准版本SIP 2.0在RFC 2543中定义在RFC 3261中对这个协议有更深入的解释,尽管目前许多装置仍然

9、是参考以前的过渡版本而实现的注意现在的版本还是2.0SIP同HTTP相似并采用了后者的一些设计原那么:SIP报文是人类可读的,并且也是採取请求-应答的流程SIP的倡导者宣称它比H.323简单但是,有些人那么保存地认为尽管SIP的原始目标很简单,现在它已经演变得跟H.323一样复杂了SIP借用了许多HTTP状态码,如常见的404not foundSIP的发起者说:曾经在网络上出现的急速革新和应用开展的歷史将同样发生在 產业上SIP和H.323对语音通信毫无限制,能够传输从语音到视频的任何通信会话,甚至未来还没有设想的应用4) SIP网络单元1.用户代理User AgentSIP用户代理是一个SI

10、P逻辑网络端点,用于创立发送接收SIP消息并管理一个SIP会话SIP用户代理又可分为用户代理客户端UACUser Agent Client和用户代理效劳端UASUser Agent ServerUAC创立并发送SIP请求,UAS接收处理SIP请求,发送SIP响应2.代理效劳器ProxySIP代理效劳器PROXY在网络上位于SIP UAC和UAS之间,用于帮助UAC和UAS间的消息路由PROXY也可以执行路由策略控制比方,检查SIP消息的合法性,确认消息是否允许被路由PROXY在转发SIP消息时,可能根据需要修改SIP消息的某些局部3.注册效劳器RegisterSIP注册效劳器用于接收SIP注册

11、请求,并保存发送注册请求的UA的位置信息5)2.2.3 商业应用用于搭载媒体流的实时传输协议RTP并不能简单的穿越NAT路由器大局部SIP客户端可以通过STUN的协助穿越full cone,restricted cone 和port restricted cone 的NAT但对于对称的symmetricNAT还是有问题一些较新的带ALG功能的路由器,现在可以识别SIP通信并让其通过RTP代理效劳器,一种在上世纪九十年代普遍使用的类似于HTTP代理效劳器的专用于SIP的线速处理器,可以启用CALEA并穿越老式的无法识别SIP的NAT设备正如它的创造者所预见的,SIP的点对点特性无法使用一些网络本

12、身提供的效劳例如,网络不能很容易的支持合法的呼叫侦听在美国由法律控制的窃听,CALEA紧急呼叫在美国呼叫E911难以路由因为IP终端本身具有移动性,网络并没有任何定位的能力,要确定正确的公共效劳应答点PSAP很困难然而,当商业SIP效劳商们正准备放弃时,一些实用的解决方案却在进行试验由3GPP和3GPP2等公司开发的标准定义了根本SIP模型的一些应用,这些应用推动了商业化并支持了网络中心的能力,如CALEAVonage和SIPphone等公司是消费SIP的先锋,他们拥有一个快速增长的用户根底一些较大的公司,如AT&T和Level(3)也不甘示弱传统的电信工业包括朗讯科技LucentTechno

13、logies和北电网络Nortel Networks现在都在集中开发基于SIP架构模型和扩展的系统,如3GPP的IP多媒体子系统IMS一些VoIP 公司,如BroadVoice,允许用户使用它们自己的SIP设备,包括兼容SIP的 机,AsteriskPBX,或者软 新的消费SIP设备市场正在继续膨胀Open Source团体开始提供越来越多的建立终端,代理和注册效劳器所需的技术,既让这些技术走进了人们的日常生活,又加速了其向全球推广SIPfoundry已经开发了多种SIP协议栈,客户端应用程序和SDK,还有一整套可以与市场上大局部由厂商销售的IP PBX实现相竞争的IPPBX解决方案3.2.阅

14、读pjsip开发文档,了解PJSIP开发过程6)PJSIP简介PJSIP的实现是为了能在嵌入式设备上高效实现SIP/VOIP.其主要特征包括:1).极具移植性.(Extremely portable) 当前可支持平台包括: * Win32/x86 (Win95/98/ME, NT/2000/XP/2003, mingw). * arm, WinCE and Windows Mobile. * Linux/x86, (user mode and as kernel module(!). * Linux/alpha * Solaris/ultra. * MacOS X/powerpc * RTEM

15、S (x86 and powerpc).2).非常小的足印.(Very small footprint) 官方宣称编译后的库150Kb,我在PC上编译后加上strip后大概173Kb3).高性能.(High performance) 这点我们后面可以看看是否如作者宣称的:)4).支持众多的特征.(Many features)5).充足的SIP文档.(Extensive SIP documentation)图1:PJSIP官方开发文档7)PJSIP的组成.PJSIP实际上是几个局部组成的.1).PJSIP - Open Source SIP Stack开源的SIP协议栈2).PJMEDIA -

16、Open Source Media Stack开源的媒体栈3).PJNATH - Open Source NAT Traversal Helper Library开源的NAT-T辅助库4).PJLIB-UTIL - Auxiliary Library辅助工具库5).PJLIB - Ultra Portable Base Framework Library根底框架库而在最上层库的目录分为:(可以使用tree -d -L 1 查看) $TOP/build 包含Makefile $TOP/build.symbian 针对symbian的Makefile $TOP/pjlib 参考上面 $TOP/pj

17、lib-util 参考上面 $TOP/pjnath 参考上面 $TOP/pjmedia 参考上面 $TOP/pjsip 参考上面 $TOP/pjsip-apps $TOP/third_party而在每个子目录,可以看到分为: bin 编译后产生的二进制文件 build Makefile build/output build/wince-evc4 docs doxygen的文档,用doxygen docs/doxygen.cfg产生 include 头文件 lib 编译后产生的库 src 源代码图2:PJSIP包文件结构8)PJLIB简介要理解好PJSIP,就不得不先说说PJLIB,PJLIB算

18、的上是这个库中最根底的库,正是这个库的优美实现,才让PJSIP变得如此优越。PJLIB提供了一系列特征,这是我们下面分析的重点,涉及到:1).非动态内存分配No Dynamic Memory Allocations 实现了内存池,获取内存是从与分配的内存池中获取,高性能程序多会自己构造内存池,后面我们会解释该内存池的使用以及根本的原理。根据作者的比拟,是常规的 malloc()/free()函数的30倍。2).OS抽象Operating System Abstraction实现OS抽象的根本原因在与可移植性,毋庸置疑:).涉及到: a).线程Threads. b).线程本地存储Thread L

19、ocal Storage. c).互斥Mutexes. d).信号灯Semaphores. e).原子变量Atomic Variables. f).临届区Critical sections. g).锁对象Lock Objects. h).事件对象Event Object. i).时间管理Time Data Type and Manipulation. j).高解析的时间戳High Resolution Timestamp.3).低层的网络相关IOLow-Level Network I/O 这涉及到: a).Socket抽象Socket Abstraction. b).网络地址解析Network

20、 Address Resolution. c).实现针对Socket的select APISocket select() API.4).时间管理Timer Management 这主要涉及到两个局部,一个时定时器的管理,还有就是时间解析的精度(举例说来,就是能精确到哪个时间等级,比方 POSIX sleep(),就只能以秒为单位,而使用select()那么可以实现毫秒级别的计时) 5).各种数据结构Various Data Structures 主要有: a).针对字符串的操作String Operations b).数组辅助Array helper c).Hash表Hash Tabl d).

21、链表Linked List e).红黑平衡树Red/Black Balanced Tree6).异常处理Exception Construct 使用的是TRY/CATCH7).LOG机制Logging Facility8).随机数以及GUID的产生Random and GUID Generation GUID指的是globally unique identifier,只是一个标识而已9)PJLIB的使用以及原理快速内存池Fast Memory Pool 前面说过,使用内存池的原因在于性能的考虑,原因是C风格的malloc()以及C+风格的new操作在高性能或实时条件下表现并不太好,原因在于性能

22、的瓶颈在于内存碎片问题下面列举其优点与需要主要的问题:优点: a).不像其它内存池,允许分配不同尺寸的chunks. b).快速. 内存chunks拥有O(1)的复杂度,并且操作仅仅是指针的算术运算,其间不需要使用锁住任何互斥量. c).有效使用内存. 除了可能因为内存对齐的原因会浪费很少的内存外,内存的使用效率非常高. d).可预防内存泄漏.在C/C+程序中如果出现内存泄漏问题,其查找过程哪个艰辛,缺乏为外人道也:(曾经有次用别人的Code,出现了内存泄漏,在开发板上查找N天,又没工具可在开发板上使用,哪个痛苦,想自杀:(原因很简单,你的内存都是从内存池中获取的,就算你没有释放你获取的内存,

23、只要你记得把内存池destroy,那么内存还是会还给系统.还有设计带来的一些其它益处,比方可用性和灵活性. e).内存泄漏更容易被跟踪.这是因为你的内存是在指定的内存池中分配的,只要能很快定位到内存池,内存泄漏的侦测就方便多了. f).设计上从内存池中获取内存这一操作是非线程平安的.原因是设计者认为内存池被上层对象所拥有,线程平安应该由上层对象去保证,这样的话,没有锁的问题会让内存分配变得非常的快. g).内存池的行为像C+中的new的行为,当内存池获取内存chunks会抛出PJ_NO_MEMORY_EXCEPTION异常,当然,因为支持异常处理,也可以使用其它方式让上层程序灵活的定义异常的处

24、理.这是异常处理的根本出发点,但是这有大量的争论,原因是这改变了程序的正常流程,谁能去保证这种流程是用户所需要的呢,因此C+中的异常处理饱受争议,请酌情使用 h). 可以在后端使用任何的内存分配器.默认情况下是使用malloc/free管理内存池的块,但是应用程序也可以指定自己的策略(strategy),例如从一个全局存储空间分配内存.内存池的使用Using Memory Pool a).创立内存池工厂Create Pool Factory 上面不是提及内存池的内局部配策略以及异常处理方式么, 其实这就是指定这个的:) 当然,不需要你每个内存池都自己取指定策略和异常处理方式,PJLIB已经有了

25、一个默认的实现:Caching Pool Factory,这个内存池工厂的初始化使用函数pj_caching_pool_init() b).创立内存池Create The Pool 使用pj_pool_create(),其参数分别为内存工厂(Pool Factory),内存池的名字(name),初始时的大小以及增长时的大小. c).根据需要分配内存Allocate Memory as Required 然后,你就可以使用pj_pool_alloc(), pj_pool_calloc(), 或pj_pool_zalloc()从指定的内存池根据需要去获取内存了 d).Destroy内存池Destr

26、oy the Pool 这实际上是把预分配的内存还给系统. e).Destroy内存池工厂Destroy the Pool Factory 这没什么好说的.*/4.实验环境此实验采用的是Win8下Microsoft Visual Stdio 2013工程。使用的开源包是PJSIP version 2.4.55.实验步骤5.1.A在VS2013平台编译pjproject-2.3用VS2013翻开pjsip2.4.5工程图3:VS工程升级提示*设定启动工程在解决方案资源管理器一栏,找到pjsua,右键点击,在菜单中选择设为启动工程,可以看到pjsua字体变粗,表示设置成功具体操作如图4所示 创立“

27、config_site.h创立头文件“pjlib/include/pj/config_site.h,空文件即可,不需要往里面写内容 4. 添加头文件夹(可选)添加下面的库文件夹到工程的搜索路径:pjlib/include pjlib-util/include pjnath/include pjmedia/include pjsip/include 操作方法:工程属性配置属性链接器常规附加库目录编辑,在弹出的对话框可以把库文件夹依次引入该过程如图4,5所示图4:添加头文件15:添加头文件*添加库文件(可选)添加下面的库文件 opjlib/lib/pjlib-i386-Win32-vc8-Debu

28、g.lib opjlib-util/lib/pjlib-util-i386-Win32-vc8-Debug.lib opjnath/lib/pjnath-i386-Win32-vc8-Debug.lib opjmedia/lib/*.lib opjsip/lib/*.lib 操作步骤:工程属性配置属性连接器输入附加依赖项,其余与上一步相同编译工程操作步骤:生成生成解决方案,开始编译,大约需要1分钟编译结束编译成功的截图图6*6:编译成功*可执行文件可执行文件的路径是“pjproject-2.3/pjsip-apps/bin/pjsua-i386-Win32-vc8-Debug.exe,如图7 *7:编译生成的可执行文件5 用PJSIP进行通话需要提到的一点是,用PJSP通话过程中,传输数据前必须键入符号“*,然后系统做好接受用户数据的准备,并在客户端允许用户输出数据如图8所示冒号后允许用户输入数据,数据只能是数字大写的英文字母*和#*

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1