北邮研究生计算机网络VOIPSIP实验报告Word文件下载.docx
- 文档编号:19522995
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:28
- 大小:130.12KB
北邮研究生计算机网络VOIPSIP实验报告Word文件下载.docx
《北邮研究生计算机网络VOIPSIP实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《北邮研究生计算机网络VOIPSIP实验报告Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
传输过程中的代价,语间包通常由60120或240ms的语音数据组成数字化可以使用各种语音编码方案来实现,目前采用的语音编码标准主要有ITU-TG.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分组的解包和数字语音还
原到模拟信号等过程。
2)SIP技术
会话发起协议(SessionInitiationProtocol,缩写SIP)是一个由IETFMMUSIC工作组开发的协议,作为标准被提议用于建立,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话2000年11月,SIP被正式批准成为3GPP
信号协议之一,并成为IMS体系结构的一个永久单元SIP与H.323—样,是用于VoIP最主
要的信令协议之一
3)协议设计
SIP最早由HenningSchulzrinne和MarkHandley於1996年所设计.SIP的设计目标之一是提供类似公用交换电话网(PSTN)中呼叫处理功能的扩展集在这个扩展集中,实现类似日常电话的操作:
拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同
SIP也实现了许多七号信令系统(SS7中更高级的呼叫处理功能,尽管这两个协议相差很远SS7是一个高度集中处理的协议,其特点表现为高复杂度的中心网络结构和无智能的哑终端(传统的电话机)SIP则是一个点对点协议,所以它只需要一个相对简单的(因此也
高度可扩展的)核心网络,而将处理工作下放给连接在网络边缘的智能端点(装有硬件或软
件的终端设备)SIP的许多功能在端点中实现,这与传统的SS7将其在网络核心设备实现的
作法大异其趣
尽管有许多其它的VoIP信号协议存在,SIP的特点在于它的支持者植根于IP团体而不是电信產业SIP最初由IETF标准化和管理,而H.323VoIP协议则从传统上与ITU有着更多的联系尽管如此,这两个组织对两个协议在某些方面都相互认可
SIP与许多其它的协议协同工作,仅仅涉及通信会话的信令部分(controlmessageSIP
报文内容传送会话描述协议(SDP),SDP协议描述了会话所使用流媒体细节,如:
使用哪个IP端口,采用哪种编解码器等等SIP的一个典型用途是:
SIP会话传输一些简单的经过封包的实时传输协议流RTP本身才是语音或视频的载体
第一个被提议的标准版本(SIP2.0)在RFC2543中定义在RFC3261中对这个协议有更深入的解释,尽管目前许多装置仍然是参考以前的过渡版本而实现的注意现在的版本还是
2.0
SIP同HTTP相似并采用了后者的一些设计原则:
SIP报文是人类可读的,并且也是採
取请求-应答的流程SIP的倡导者宣称它比H.323简单但是,有些人则保留地认为尽管SIP
的原始目标很简单,现在它已经演变得跟H.323—样复杂了SIP借用了许多HTTP状态码,
如常见的’404notfound'
的发起者说:
曾经在网络上出现的急速革新和应用发展的歷史
将同样发生在电话產业上SIP和H.323对语音通信毫无限制,能够传输从语音到视频的任何
通信会话,甚至未来还没有设想的应用
4)SIP网络单元
1用户代理(UserAgent)SIP用户代理是一个SIP逻辑网络端点,用于创建发送接收SIP消息并管理一个SIP会话SIP用户代理又可分为用户代理客户端UAC(UserAgentClient)和用户代理服务端UAS(UserAgentServe)UAC创建并发送SIP请求,UAS接收处理SIP请求,发送SIP响应
2代理服务器(Proxy)SIP代理服务器(PROXY)在网络上位于SIPUAC和UAS之间,用于帮助UAC和UAS间的消息路由PROXY也可以执行路由策略控制(比如,检查SIP消息的合法性,确认消息是否允许被路由)PROXY在转发SIP消息时,可能根据需要修改SIP消息的某些部分
3•注册服务器(Register)SIP注册服务器用于接收SIP注册请求,并保存发送注册请求的UA的位置信息
5)2.2.3商业应用
用于搭载媒体流的实时传输协议(RTP)并不能简单的穿越NAT路由器大部分SIP客
户端可以通过STUN的协助穿越fullcone,restrictedcone和portrestrictedcone的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)和北电网络(NortelNetworks))现在都在集中开发基于SIP架构模型
和扩展的系统,如3GPP的IP多媒体子系统(IMS)
一些VoIP电话公司,女口BroadVoice,允许用户使用它们自己的SIP设备,包括兼容SIP
的电话机,AsteriskPBX,或者软电话新的消费SIP设备市场正在继续膨胀
OpenSource团体开始提供越来越多的建立终端,代理和注册服务器所需的技术,既让这些技术走进了人们的日常生活,又加速了其向全球推广SIPfoundry已经开发了多种SIP协
议栈,客户端应用程序和SDK,还有一整套可以与市场上大部分由厂商销售的IPPBX实现
相竞争的IPPBX解决方案
32阅读pjsip开发文档,了解PJSI两发过程
1)PJSIP简介
PJSIP的实现是为了能在嵌入式设备上高效实现SIP/VOIP.其主要特征包括:
1)•极具移植性.(Extremelyportable)
当前可支持平台包括:
*Win32/x86(Win95/98/ME,NT/2000/XP/2003,mingw).
*arm,WinCEandWindowsMobile.
*Linux/x86,(usermodeandaskernelmodule⑴).
*Linux/alpha
*Solaris/ultra.
*MacOSX/powerpc
*RTEMS(x86andpowerpc).
2).非常小的足印.(Verysmallfootprint)
官方宣称编译后的库<150Kb,我在PC上编译后加上strip后大概173Kb
3).高性能.(Highperformanee)
这点我们后面可以看看是否如作者宣称的:
)
4).支持众多的特征.(Manyfeatures)
5)充足的SIP文档.(ExtensiveSIPdocumentation)
TableOfContents
PJSUA2Documentation
PJSUA2Oocumentation
1Indicesandtables
Contents:
Nexttopic
•1.Introduction
1.Introduction
oGettingStartedwithPJSIP
ThisPage
oPJSJPinfoandOocumentation
•2.[developmentGuidelinesandConsiderations
ShowSource
oDevelopmentGuidelines
Quicksearch
oPlatformConsiderationIoWhichAPItoUse
■1』
oNetworkandInfrastructureConsiderationsoSoundDevice
*3.PJSUA2-HighLevelAPI
Entersearchtermsoramodule.
clas5orfunctionnameP
oPJSUA2MainClasses
oGeneralConcepts
oBuildingPJSUA2
oBuildingPythonandJavaSWIGModules
oUsinginC++Application
cUsinginPythonApplication
oUsingin」avaApplication
・4.Endpoint
oInstantiatingtheEndpoint
qCreatingtheLibrary
oInitializingtheLibraryandConfiguringtheSettings
oCreatingOneorMore1ransports
oStartingtheLibrary
oShuttingDowntheLibrary
oClassReference
图1:
PJSIP官方开发文档
2)PJSIP的组成.
PJSIP实际上是几个部分组成的.
1).PJSIP-OpenSourceSIPStaci开源的SIP协议栈]
2).PJMEDIA-OpenSourceMediaStack[开源的媒体栈]
3).PJNATH-OpenSourceNATTraversalHelperLibrary[开源的NAT-T辅助库]
4).PJLIB-UTIL-AuxiliaryLibrary[辅助工具库]
5).PJLIB-UltraPortableBaseFrameworkLibrary[基础框架库]
而在最上层库的目录分为:
何以使用tree-d-L1查看)
$TOP/build
[包含Makefile]
$TOP/build.symbian[针对symbian的Makefile]
$TOP/pjlib
[参考上面]
$TOP/pjlib-util
$TOP/pjnath
$TOP/pjmedia
$TOP/pjsip
$TOP/pjsip-apps
$TOP/third_party
而在每个子目录,可以看到分为:
bin
[编译后产生的二进制文件]
build
[Makefile]
build/output
build/wince-evc4
docs
[doxygen的文档,用doxygendocs/doxygen.cfg产生]
include
[头文件]
lib
[编译后产生的库]
src
[源代码]
灯►►tao>
pjsip1
>
pjproject-2n4n5v
0®
^'
pjproject-2,4,5-
修改日期
大小
Backup
2015/10/51tt57
文件买
2015/10/510:
55
文件夹
biiiild.^ymbidn
文傑
doc
»
lib
2015/10/511:
03
文怦
pjlib
文帳
i.吋lib-util
文展
pjmedia
2015/10/51055
Rjriath
Rl'
sip
pjsip^pps
文彳核
tests
third_party
_^configure
2015/8/617:
15
文件
270KB
jconfigure.ac
AC文件
56KB
-勾bb10-config.mak
2013/4/2313:
39
Makefile
2KB
build.mak.in
2015/5/520:
09
IN文伴
11KS
-一討c4-4--bLiild.[Tiak
2007/5/2923:
33
1KB
config.guess
2013/3/1114^32
GUESS文件
44KB
亦config.sub
2015/7/2910:
31
SUB文件
35KB
图2:
PJSIP包文件结构
3)PJLIB简介
要理解好PJSIP,就不得不先说说PJLIB,PJLIB算的上是这个库中最基础的库,正是这个库的优美实现,才让PJSIP变得如此优越。
PJLIB提供了一系列特征,这是我们下面分析的重点,涉及到:
1)•非动态内存分配[NoDynamicMemoryAllocations]
实现了内存池,获取内存是从与分配的内存池中获取,高性能程序多会自己构造内
存池,后面我们会解释该内存池的使用以及基本的原理。
根据作者的比较,是常规的malloc()/free()函数的30倍。
2).OS抽象[OperatingSystemAbstraction]
实现OS抽象的根本原因在与可移植性,毋庸置疑:
)涉及到:
a)线程[Threads.]
b).线程本地存储[ThreadLocalStorage.]
c).互斥[Mutexes.]
d).信号灯[Semaphores.]
e)原子变量[AtomicVariables.]
f).临届区[Criticalsections.]
g).锁对象[LockObjects.]
h).事件对象[EventObject.]
i).时间管理[TimeDataTypeandManipulation.]
j).高解析的时间戳[HighResolutionTimestamp.]
3).低层的网络相关IO[Low-LevelNetworkI/O]
这涉及到:
a).Socket抽象[SocketAbstraction.]
b).网络地址解析[NetworkAddressResolution.]
c).实现针对Socket的selectAPI[Socketselect()API.]
4).时间管理[TimerManagement]
这主要涉及到两个部分,一个时定时器的管理,还有就是时间解析的精度(举例说
来,就是能精确到哪个时间等级,比如POSIXsleep(),就只能以秒为单位,而使用select(则
可以实现毫秒级别的计时)
5).各种数据结构[VariousDataStructures]
主要有:
a)针对字符串的操作[StringOperations]
b).数组辅助[Arrayhelper]
c).Hash表[HashTabl]
d).链表[LinkedList]
e)红黑平衡树[Red/BlackBalaneedTree]
6).异常处理[ExceptionConstruct]
使用的是TRY/CATCH
7).LOG机制[LoggingFacility]
8).随机数以及GUID的产生[RandomandGUIDGeneration]
GUID指的是"
globallyuniqueidentifier"
,只是一个标识而已
4)PJLIB的使用以及原理
快速内存池[FastMemoryPool]
前面说过,使用内存池的原因在于性能的考虑,原因是C风格的malloc()以及C++风
格的new操作在高性能或实时条件下表现并不太好,原因在于性能的瓶颈在于内存碎片问题
下面列举其优点与需要主要的问题:
优点:
a)不像其它内存池,允许分配不同尺寸的chunks.
b).快速.内存chunks拥有0
(1)的复杂度,并且操作仅仅是指针的算术运算,其间不需
要使用锁住任何互斥量.
c).有效使用内存.除了可能因为内存对齐的原因会浪费很少的内存外,内存的使用
效率非常高.
d).可预防内存泄漏.在C/C++程序中如果出现内存泄漏问题,其查找过程哪个艰辛,
不足为外人道也:
([曾经有次用别人的Code出现了内存泄漏,在开发板上查找N天,又没工具
可在开发板上使用,哪个痛苦,想自杀:
(]原因很简单,你的内存都是从内存池中获取的,就算你
没有释放你获取的内存,只要你记得把内存池destroy那么内存还是会还给系统.还有设计带来的一些其它益处比如可用性和灵活性.
e)内存泄漏更容易被跟踪.这是因为你的内存是在指定的内存池中分配的,只要能很
快定位到内存池,内存泄漏的侦测就方便多了.
f).设计上从内存池中获取内存这一操作是非线程安全的.原因是设计者认为内存池
被上层对象所拥有,线程安全应该由上层对象去保证,这样的话,没有锁的问题会让内存分配
变得非常的快.
g).内存池的行为像C++中的new的行为,当内存池获取内存chunks会抛出
PJ_NO_MEMORY_EXCEPTION异常,当然,因为支持异常处理,也可以使用其它方式让上层程序灵活的定义异常的处理.[这是异常处理的基本出发点,但是这有大量的争论,原因是这改变了程序的正常流程,谁能去保证这种流程是用户所需要的呢,因此C++中的异常处理饱受争
议,请酌情使用]
h).可以在后端使用任何的内存分配器.默认情况下是使用malloc/free管理内存池的
块,但是应用程序也可以指定自己的策略(strategy)例如从一个全局存储空间分配内存.
内存池的使用[UsingMemoryPool]
a).创建内存池工厂[CreatePoolFactory]上面不是提及内存池的内部分配策略以及异常处理方式么,其实这就是指定这个的:
)当然,不需要你每个内存池都自己取指定策略和异常处理方式,PJLIB已经有了一个默认的实现:
CachingPoolFactory这个内存池工厂的初始化使用函数pj_caching_pool_init()
b).创建内存池[CreateThePool]使用pj_pool_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 研究生 计算机网络 VOIPSIP 实验 报告