北邮研究生计算机网络VOIPSIP实验报告.docx

上传人:b****5 文档编号:6509223 上传时间:2023-01-07 格式:DOCX 页数:28 大小:130.12KB
下载 相关 举报
北邮研究生计算机网络VOIPSIP实验报告.docx_第1页
第1页 / 共28页
北邮研究生计算机网络VOIPSIP实验报告.docx_第2页
第2页 / 共28页
北邮研究生计算机网络VOIPSIP实验报告.docx_第3页
第3页 / 共28页
北邮研究生计算机网络VOIPSIP实验报告.docx_第4页
第4页 / 共28页
北邮研究生计算机网络VOIPSIP实验报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

北邮研究生计算机网络VOIPSIP实验报告.docx

《北邮研究生计算机网络VOIPSIP实验报告.docx》由会员分享,可在线阅读,更多相关《北邮研究生计算机网络VOIPSIP实验报告.docx(28页珍藏版)》请在冰豆网上搜索。

北邮研究生计算机网络VOIPSIP实验报告.docx

北邮研究生计算机网络VOIPSIP实验报告

计算机网络实验课程报告

课题:

SIP客户端的开源实现

姓名张涛

学院网络技术研究院

班级

学号

注册组号

2015年11月21日

1.小组信息

小组成员

学号

学院

张涛

网络技术研究院

2.实验目的

1)理解VOIP,SIP技术,用开源代码实现一个SIP客户端(PJSIP

2)用实现的客户端完成在SIP呼叫中心上的注册和测试

3.实验背景知识

3.1.阅读VOIP,SIP技术相关内容,加深对VOIP技术原理的理解。

1)VOIP技术原理

在现在的网络通信中,Email服务已经不是现在首选的通信方式了更多的即时通信,语

音服务等,在网络上面层出不穷VoIP传统的电话网是以电路交换方式传输语音,所要求的

传输宽带为64kbit/s而所谓的VoIP是以IP分组交换网络为传输平台,对模拟的语音信号进

行压缩打包等一系列的特殊处理,使之可以采用无连接的UDP协议进行传输为了在一个IP

网络上传输语音信号,要求几个元素和功能最简单形式的网络由两个或多个具有VoIP功能

的设备组成,这一设备通过一个IP网络连接VoIP设备是如何把语音信号转换为IP数据流,

并把这些数据流转发到IP目的地,IP目的地又把它们转换回到语音信号两者之音的网络必须支持IP传输,且可以是IP路由器和网络链路的任意组合因此可以简单地将VoIP的传输

过程分为下列几个阶段语音-数据转换语音信号是模拟波形,通过IP方式来传输语音,不管

是实时应用业务还是非实时应用业务,首先要对语音信号进行模拟数据转换,也就是对模拟

语音信号进行8位或6位的量化,然后送入到缓冲存储区中,缓冲器的大小可以根据延迟和

编码的要求选择许多低比特率的编码器是采取以帧为单位进行编码典型帧长为1030ms考虑

传输过程中的代价,语间包通常由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

文件买

build

2015/10/510:

55

文件夹

biiiild.^ymbidn

2015/10/510:

55

文傑

doc

2015/10/510:

55

»lib

2015/10/511:

03

文怦

pjlib

2015/10/510:

55

文帳

i.吋lib-util

2015/10/510:

55

文展

pjmedia

2015/10/51055

Rjriath

2015/10/51055

Rl'sip

2015/10/510:

55

pjsip^pps

2015/10/510:

55

文彳核

tests

2015/10/51055

文件夹

third_party

2015/10/510:

55

文件夹

_^configure

2015/8/617:

15

文件

270KB

jconfigure.ac

2015/8/617:

15

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

Makefile

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

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

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