




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SIP用户代理软件的设计第五章程序介绍 目录 HYPERLINK摘要 IVHYPERLINKABSTRACT 6HYPERLINK第一章绪论 7HYPERLINK1.1选题的背景 7HYPERLINK1.2基于SIP协议用户代理软件的国内外研究现状 9HYPERLINK1.3论文内容和结构安排 10HYPERLINK第二章SIP协议及H.323协议簇的简介 12HYPERLINK2.1SIP系统的组成 16HYPERLINK图2.1SIP系统的组成 16HYPERLINK2.2SIP功能概要 17HYPERLINK2.2.1用户定位 18HYPERLINK2.2.2会话能力的协商 18HYPERLINK2.2.3呼叫参与者管理 18HYPERLINK2.2.4呼叫建立 19HYPERLINK2.2.5呼叫处理 19HYPERLINK2.2.6SIP注册服务 19HYPERLINK2.3SIP的呼叫过程 20HYPERLINK2.4协议的优点 23HYPERLINK2.4.1基本呼叫的建立和拆除 23HYPERLINK2.4.2呼叫控制业务 24HYPERLINK2.4.3SIP的第三方控制 24HYPERLINK2.4.4服务质量 25HYPERLINK2.4.5实现的难易性 25HYPERLINK2.5SIP协议和H.323协议的比较 26HYPERLINK2.6本章小结 28HYPERLINK第三章SIP实现中VC的应用 29HYPERLINK3.1对话框控件访问的七种方式 29HYPERLINK3.2窗口 29HYPERLINK3.3网络编程Socket 30HYPERLINK3.3.1计算机网络 30HYPERLINK3.3.2IP地址 31HYPERLINK3.3.3协议 31HYPERLINK3.3.4ISO/OSI七层参考模型 31HYPERLINK3.3.5TCP/IP模型 33HYPERLINK3.3.6端口 34HYPERLINK3.3.7套接字 34HYPERLINK3.3.8客户机/服务器模式 35HYPERLINK3.3.9WindowsSockets的实现 36HYPERLINK3.4线程同步与异步套接字编程 38HYPERLINK3.5本章小结 39HYPERLINK第四章基于SIP协议代理服务器的设计与实现 39HYPERLINK4.1用户代理的功能介绍 39HYPERLINK4.1.1处理SIP消息 39HYPERLINK4.1.2提供与上层应用程序的接口 40HYPERLINK4.1.3定时功能 40HYPERLINK4.1.4其他功能 40HYPERLINK4.2SIPUserAgent的行为 41HYPERLINK4.2.1主叫发出初始邀请请求 41HYPERLINK4.2.2被叫发出的响应 41HYPERLINK4.2.3主叫接收并响应初始化的请求 42HYPERLINK4.2.4主叫或者被叫产生二级并发请求 42HYPERLINK4.2.5接收的并发请求 42HYPERLINK4.3SIP消息机制 43HYPERLINK4.3.1SIPURL结构 43HYPERLINK4.3.2SIP消息结构 44HYPERLINK4.4程序设计思想简介 46HYPERLINK4.5程序主要功能介绍 48HYPERLINK4.6程序运行过程介绍 49HYPERLINK4.6.1程序启动 49HYPERLINK4.6.2用户注册 49HYPERLINK4.6.3用户登录 50HYPERLINK4.6.4用户邀请 51HYPERLINK4.7本章小结 52HYPERLINK第五章总结与展望 53摘要通信提供商及其合作伙伴和用户越来越渴求新一代基于IP的服务。现在有了SIP协议(会话启动协议),一解燃眉之急。SIP协议是不到十年前在计算机科学实验室诞生的一个想法。它是第一个适合各种媒体内容而实现多用户会话的协议,现在已成了Internet工程任务组(IETF)的规范。今天,越来越多的运营商、CLEC(竞争本地运营商)和ITSP(IP电话服务商)都在提供基于SIP协议的服务,如市话和长途电话技术、在线信息和即时消息、IPCentrex/HostedPBX、语音短信、push-to-talk(按键通话)、多媒体会议等等。独立软件供应商(ISV)正在开发新的开发工具,用来为运营商网络构建基于SIP协议的应用程序以及SIP协议软件。网络设备供应商(NEV)正在开发支持SIP协议信令和服务的硬件。现在,有众多IP电话、用户代理、网络代理服务器、VOIP网关、媒体服务器和应用服务器都在使用SIP协议。SIP将终端用户称为用户代理,请求方称为用户代理客户,被请求方称为用户代理服务器。UAC负责发起SIP呼叫请求,UAS接收UAC的请求并负责对其做出响应(接受、拒绝或重定向)。本文首先对SIP产生背景、国内外研究动态、应用领域及其优点进行简单介绍,并详细介绍了SIP的基本呼叫流程。最后利用VC++6.0开发一个简单的服务器,在Windows环境下自行设计实现了一个SIP用户代理服务器。通过代理服务器分别实现用户的登陆、注册以及PC到PC之间的通信。关键字:SIP,服务器,VC,用户代理ABSTRACTcommunicationsprovideranditspartnersandusersmoreandthirstforanewgenerationofbasedonIPservices.NowhaveanIPprotocol(sessionstartagreement),asolutionoffinancialdifficulty.SIPislessthanadecadeagoincomputersciencelaboratoryofthebirthofanidea.Itisthefirstsuitableforallkindsofmediacontentandachievemoreusersessionoftheagreement,nowhasbecometheInternetengineeringtaskforce(IETF)standard.Today,moreandmoreoperators,CLEC(competitivelocaloperators)andITSP(IPphoneserviceprovider)areprovidedbasedonSIPservices,suchaswirelessandlongdistancetelephonetechnology,onlineinformationandinstantmessaging,IPCentrex/HostedPBX,voicemessaging,push-to-talk(buttonsonphone),multimediaconference,etc.Independentsoftwarevendors(ISV)isdevelopingnewdevelopmenttoolsusedtonetworkoperatorsbasedonSIPapplicationsandSIPsoftware.Thenetworkequipmentsuppliers(NEV)aredevelopmentsupportSIPsignalingandservicehardware.Now,therearenumerousIPtelephone,useragent,networkproxyservers,VOIP,gateway,andmediaserverandapplicationserverareusingSIP.SIPwillendusercalleduseragent,therequestingpartycalleduseragentcustomers,therequestingpartycalleduseragentserver.UACisresponsibleforlaunchSIPcallrequested,receivingtherequestoftheUACUASandisresponsibleforitsresponse(accept,refuseorredirect).ThispaperfirsttoSIPbackground,researchdynamic,applicationfieldandadvantagesofsimpleintroduction,andintroducesthebasicprocessofSIPcall.Finally,usingthevc++6.0,thedevelopmentofasimpleclient,theWindowsenvironmenttodesignandrealizeaSIPuseragentserver.Throughtheproxyserverrealizedrespectivelyuserslogon,registeredandPCtothecommunicationbetweenthePC.第一章绪论1.1选题的背景SIP出现于二十世纪九十年代中期,源于哥伦比亚大学计算机系副教授HenningSchulzrinne及其研究小组的研究。Schulzrinne教授除与人共同提出通过Internet传输实时数据的实时传输协议(RTP)外,还与人合作编写了实时流传输协议(RTSP)标准提案,用于控制音频视频内容在Web上的流传输。Schulzrinne本来打算编写多方多媒体会话控制(MMUSIC)标准。1996年,他向IETF提交了一个草案,其中包含了SIP的重要内容。1999年,Schulzrinne在提交的新标准中删除了有关媒体内容方面的无关内容。随后,IETF发布了第一个SIP规范,即RFC2543。虽然一些供应商表示了担忧,认为H.323和MGCP协议可能会大大危及他们在SIP服务方面的投资,IETF继续进行这项工作,于2001年发布了SIP规范RFC3261。RFC3261的发布标志着SIP的基础已经确立。从那时起,已发布了几个RFC增补版本,充实了安全性和身份验证等领域的内容。例如,RFC3262对临时响应的可靠性作了规定。RFC3263确立了SIP代理服务器的定位规则。RFC3264提供了提议/应答模型,RFC3265确定了具体的事件通知。早在2001年,供应商就已开始推出基于SIP的服务。今天,人们对该协议的热情不断高涨。SunMicrosystems的JavaCommunityProcess等组织正在使用通用的Java编程语言定义应用编程接口(API),以便开发商能够为服务提供商和企业构建SIP组件和应用程序。最重要的是,越来越多的竞争者正在借助前途光明的新服务进入SIP市场。SIP正在成为自HTTP和SMTP以来最为重要的协议之一。不过,SIP不是万能的。它既不是会话描述协议,也不提供会议控制功能。为了描述消息内容的负载情况和特点,SIP使用Internet的会话描述协议(SDP)来描述终端设备的特点。SIP自身也不提供服务质量(QoS),它与负责语音质量的资源保留设置协议(RSVP)互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务(RADIUS)以及负责实时传输的RTP等多个协议。SIP规定了以下基本的通信要求:1、用户定位服务;2、会话建立;3、会话参与方管理;4、特点的有限确定。SIP是由IETF制定的用于会话管理的应用层协议,目前最新的提议标准为RFC3261。通过SIP,人们可以方便地在IP网络上创建、修改和终止由一个或多个参与者参与的会话。任何具有会话管理特征的应用,比如电话、会议、即时消息、游戏等,都可以使用SIP对会话进行管理。SIP(会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务。因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系列协议中重要的一员。SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的。它用来建立,改变和终止基于IP网络的用户间的呼叫。为了提供电话业务它还需要结合不同的标准和协议:特别是需要确保传输(RTP),与当前电话网络的信令互连,能够确保语音质量(RSVP),能够提供目录(LDAP),能够鉴权用户(RADIUS)等等。SIP被描述为用来生成,修改和终结一个或多个参与者之间的会话。这些会话包括因特网多媒体会议,因特网(或任何IP网络)电话呼叫和多媒体发布。会话中的成员能够通过多播或单播联系的网络来通信。SIP支持会话描述,它允许参与者在一组兼容媒体类型上达成一致。它同时通过代理和重定向请求到用户当前位置来支持用户移动性。SIP不与任何特定的会议控制协议捆绑。1.2基于SIP协议用户代理软件的国内外研究现状作为一个IMTF提出的标准,SIP协议在很大程度上借鉴了其他各种广泛存在的Internet协议,如HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等,和这些协议一样SIP也采用的基于文本的编码方式,这也是SIP协议同视频通讯领域其他现有标准相比最大的特点之一。SIP协议的提出和发展,是伴随着Internet的发展而发展的,到目前为止它走过了以下几个阶段:1996年首先出现了SIP的概念,这时SIP的主要应用是针对Internet上的各种文本应用,如电子邮件、文字聊天等;1999年3月,ITEF的多方多媒体会话控制工作组提出了RFC2543建议,供各厂商和机构讨论;1999年9月,SIP工作组从MMUSIC中分离并独立出来,成立了SIP工作组,并与2000年7月发表了SIP的草案;2002年6月,ITEF的SIP工作组又发表了RFC3261建议,以取代RFC2543。由于网络环境以及相关多媒体技术的不足,在SIP协议首次提出的时候,仅仅针对各种文本应用,随着技术的发展,并通过和IETF中IP电话工作组(IPTEL),IP网中电话选路(TRIP)工作组等工作组配合工作,在SIP协议中大大加强了对多媒体通讯的支持。由于Internet的飞速发展,在最近的两年时间内,SIP已经开始被ITU-TSGl6,ETSITIPON(欧洲标准化组织),IMTE等各种标准化组织所接受,并在这些组织中成立了与SIP相关的工作组。特别是作为ITU-TSGl6主要成员,在多年发展H.323应用的基础上,针对SIP应用在视频领域的特点,提出了SIP的应用指导,并推出了相应的SIP协议栈,使得ITL的成员实现了这两种协议之间的互通性。1.3论文内容和结构安排本文主要是研究基于SIP协议的用户代理软件的设计,首先对SIP产生背景、国内外研究动态、应用领域及其优点进行简单介绍,并详细介绍了SIP的框架层次结构、报文和基本呼叫流程。然后利用VC++6.0开发一个简单的服务器,在Windows环境下自行设计实现了一个SIP用户代理。通过代理服务器分别实现用户的登陆、用户注册以及PC到PC之间的通信的转接。第二章SIP协议及H.323协议簇的简介会话初始化协议,或称SIP,是一个通讯协议,它使用户的通讯系统更为开放、更好地连接、更方便使用、更多选择和更为个性化。它是正在由互联网协议(IP)和HTTP背后的全球非赢利机构——国际互联网标准制定组织(IETF)进行升级的标准。IETF从1996年开始对SIP进行标准化,以支持多点传送的应用。因为SIP使用简便,功能强大,分布广泛,它在整个IETF内的使用者中迅速得到了认同。SIP是文本格式的客户一服务器协议,客户机发起请求,服务器进行响应,它非常类似于SMTP和HTTP协议。SIP沿用了一些HTTP的语法规则和定义,其中包括响应编码结构,一些消息头和它的整个运作机制,与HTTP或SMTP不同的是,SIP既可用TCP也可以UDP来传送。SIP(SessionInitiationProtocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。使用SIP,服务提供商可以随意选择标准组件。不论媒体内容和参与方数量,用户都可以查找和联系对方。SIP对会话进行协商,以便所有参与方都能够就会话功能达成一致以及进行修改。它甚至可以添加、删除或转移用户。SIP它既不是会话描述协议,也不提供会议控制功能。为了描述消息内容的负载情况和特点,SIP使用Internet的会话描述协议(SDP)来描述终端设备的特点。SIP自身也不提供服务质量(QoS),它与负责语音质量的资源预留协议(RSVP)互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务(RADIUS)以及负责实时传输的RTP等多个协议。SIP的一个重要特点是它不定义要建立的会话的类型,而只定义应该如何管理会话。有了这种灵活性,也就意味着SIP可以用于众多应用和服务中,包括交互式游戏、音乐和视频点播以及语音、视频和Web会议。SIP消息是基于文本的,因而易于读取和调试。新服务的编程更加简单,对于设计人员而言更加直观。SIP如同电子邮件客户机一样重用MIME类型描述,因此与会话相关的应用程序可以自动启动。SIP重用几个现有的比较成熟的Internet服务和协议,如DNS、RTP、RSVP等。不必再引入新服务对SIP基础设施提供支持,因为该基础设施很多部分已经到位或现成可用。对SIP的扩充易于定义,可由服务提供商在新的应用中添加,不会损坏网络。网络中基于SIP的旧设备不会妨碍基于SIP的新服务。例如,如果旧SIP实施不支持新的SIP应用所用的方法/标头,则会将其忽略。SIP独立于传输层。因此,底层传输可以是采用ATM的IP。SIP使用用户数据报协议(UDP)以及传输控制协议(TCP),将独立于底层基础设施的用户灵活地连接起来。SIP支持多设备功能调整和协商。如果服务或会话启动了视频和语音,则仍然可以将语音传输到不支持视频的设备,也可以使用其他设备功能,如单向视频流传输功能。通信提供商及其合作伙伴和用户越来越渴求新一代基于IP的服务。现在有了SIP(TheSessionInitiationProtocol会话启动协议),一解燃眉之急。SIP是不到十年前在计算机科学实验室诞生的一个想法。它是第一个适合各种媒体内容而实现多用户会话的协议,现在已成了Internet工程任务组(IETF)的规范。今天,越来越多的运营商、CLEC(竞争本地运营商)和ITSP(IP电话服务商)都在提供基于SIP的服务,如市话和长途电话技术、在线信息和即时消息、IPCentrex/HostedPBX、语音短信、push-to-talk(按键通话)、多媒体会议等等。独立软件供应商(ISV)正在开发新的开发工具,用来为运营商网络构建基于SIP的应用程序以及SIP软件。网络设备供应商(NEV)正在开发支持SIP信令和服务的硬件。现在,有众多IP电话、用户代理、网络代理服务器、VOIP网关、媒体服务器和应用服务器都在使用SIP。SIP从类似的权威协议--如Web超文本传输协议(HTTP)格式化协议以及简单邮件传输协议(SMTP)电子邮件协议--演变而来并且发展成为一个功能强大的新标准。但是,尽管SIP使用自己独特的用户代理和服务器,它并非自成一体地封闭工作。SIP支持提供融合的多媒体服务,与众多负责身份验证、位置信息、语音质量等的现有协议协同工作。本白皮书对SIP及其作用进行了概括性的介绍。它还介绍了SIP从实验室开发到面向市场的过程。本白皮书说明SIP提供哪些服务以及正在实施哪些促进发展的方案。它还详细介绍了SIP与各种协议不同的重要特点并说明如何建立SIP会话。SIP较为灵活,可扩展,而且是开放的。它激发了Internet以及固定和移动IP网络推出新一代服务的威力。SIP能够在多台PC和电话上完成网络消息,模拟Internet建立会话。与存在已久的国际电信联盟(ITU)SS7标准(用于呼叫建立)和ITUH.323视频协议组合标准不同,SIP独立工作于底层网络传输协议和媒体。它规定一个或多个参与方的终端设备如何能够建立、修改和中断连接,而不论是语音、视频、数据或基于Web的内容。SIP大大优于现有的一些协议,如将PSTN音频信号转换为IP数据包的媒体网关控制协议(MGCP)。因为MGCP是封闭的纯语音标准,所以通过信令功能对其进行增强比较复杂,有时会导致消息被破坏或丢弃,从而妨碍提供商增加新的服务。而使用SIP,编程人员可以在不影响连接的情况下在消息中增加少量新信息。例如,SIP服务提供商可以建立包含语音、视频和聊天内容的全新媒体。如果使用MGCP、H.323或SS7标准,则提供商必须等待可以支持这种新媒体的协议新版本。而如果使用SIP,尽管网关和设备可能无法识别该媒体,但在两个大陆上设有分支机构的公司可以实现媒体传输。而且,因为SIP的消息构建方式类似于HTTP,开发人员能够更加方便便捷地使用通用的编程语言(如Java)来创建应用程序。对于等待了数年希望使用SS7和高级智能网络(AIN)部署呼叫等待、主叫号码识别以及其他服务的运营商,现在如果使用SIP,只需数月时间即可实现高级通信服务的部署。这种可扩展性已经在越来越多基于SIP的服务中取得重大成功。Vonage是针对用户和小企业用户的服务提供商。它使用SIP向用户提供20,000多条数字市话、长话及语音邮件线路。Deltathree为服务提供商提供Internet电话技术产品、服务和基础设施。它提供了基于SIP的PC至电话解决方案,使PC用户能够呼叫全球任何一部电话。DenwaCommunications在全球范围内批发语音服务。它使用SIP提供PC至PC及电话至PC的主叫号码识别、语音邮件,以及电话会议、统一通信、客户管理、自配置和基于Web的个性化服务。某些权威人士预计,SIP与IP的关系将发展成为类似SMTP和HTTP与Internet的关系,但也有人说它可能标志着AIN的终结。迄今为止,3G界已经选择SIP作为下一代移动网络的会话控制机制。Microsoft已经选择SIP作为其实时通信策略并在MicrosoftXP、PocketPC和MSNMessenger中进行了部署。Microsoft同时宣布CEdotnet的下一个版本将使用基于SIP的VoIP应用接口层,并承诺向用户PC提供基于SIP的语音和视频呼叫。另外,MCI正在使用SIP向IP通信用户部署高级电话技术服务。用户将能够通知主叫方自己是否有空以及首选的通信方式,如电子邮件、电话或即时消息。利用在线信息,用户还能够即时建立聊天会话和召开音频会议。使用SIP将不断地实现各种功能。2.1SIP系统的组成LSLSRSRSSIPComponentsPSPSUAGatewayPSTN图2.1SIP系统的组成一个SIP系统(图2.1)主要由两部分组成:用户代理和网络服务器。用户代理有用户代理客户机(UAC)和用户代理服务器(UAS),其中用户代理客户机用于发起呼叫,而用户代理服务器则用于响应呼叫。另外,图中LS(LocationServers)为位置服务器,PS(ProxyServer)为代理服务器,UA(UserAgent)为用户代理。用户代理客户机和用户代理服务器构成了用户端必备的应用程序,由这两个应用程序完成呼叫的发起和接收。网络服务器也有两类,它们是代理服务器和重定位服务器。代理服务器类似于HTTP的代理服务器和SMTP的MTA,它本身并不对用户请求进行响应,只是转发用户请求的中继器,然后将自身地址加入该消息的路径头部分,以保证将响应按原路返回并防止环路的发生。重定位服务器非常类似于DNS,它收到用户的请求后,若判定自身不是目的地址,则向用户响应下一个应访问服务器的地址,而不是转发请求报文。另外,还经常用到注册服务器,它是和代理服务器或重定向服务器绑定在一起的,用来接收客户的注册请求,并完成用户地址的注册。定位服务器本身不属于SIP实体,它位于被叫域中,是Internet中的公共服务器,可以是LDAP服务器、专用企业网数据库、本地文件或通过Internet目录查询finger命令得到的结果,具体形式取决于本地配置,代理服务器和重定向服务器在确定下一跳服务器时都可能向它发出查询请求。2.2SIP功能概要SIP主要支持以下五个方面的功能:①用户定位,确定通信所用的端系统位置;②用户能力交换,确定所用媒体类型和媒体参数;③用户可用性判定,确定被叫方是否空闲和是否愿意加入通信;④呼叫建立,邀请和提示被叫,在主被叫之间传递参数;⑤呼叫处理,包括呼叫终结和呼叫转移等。2.2.1用户定位SIP协议通过INVITE请求、ACK请求以及响应,可以确定哪个终端系统参加通信,完成用户的定位。SIP协议采用SIPURL来描述一个SIP用户的地址,支持如TELURL传统电话的一致资源定位器的描述,它的Contact、To、From头域可以包含各种URL地址描述。最基本的URL描述是SIPURL,包括user@IP-Addr;user@host;user@domain,支持如phone—number@gateway的与PSTN网关地址格式,支持Tel样的电话URL描述和寻址,支持直接“点击呼叫”。SIP协议本身含有向SIP服务器登录的功能,所以它可以支持用户地址重定向功能、名录服务。SIP协议也可以利用其它定位服务器如DNS、LDAP等提供的定位服务来增强它的定位功能。2.2.2会话能力的协商会话能力协商通过SIP协议的OPTION请求和606应答消息等SIP交互对会话的媒体编码类型、参数,会话带宽要求以及组播和单播方式等会话属性进行协商。通过SIP协议,再次进行一轮Call-ID不变的INVITE邀请,SIP交互可以在会话期间对一个正在进行的会话的属性如媒体的编码类型和格式,会话占用带宽等等作调整和修改。2.2.3呼叫参与者管理基于SIP协议,任何一个SIP用户可以为自己或他人向被叫发起呼叫;任何一个会话参与者或会话外SIP用户(会话控制者)都可以在会话期间把一个或多个其它用户加至一个正在进行的会话;任何一个会话成员或会话外SIP用户(会话控制者)都可以中止一个正在进行的会话。2.2.4呼叫建立通过代理服务器完成振铃操作,通过消息的传送来完成主叫方和被叫方的连接和参数的建立。2.2.5呼叫处理呼叫处理通过SIP协议的重定向功能对呼叫进行前转:通过含有Contact头域的BYE请求消息进行呼叫转移。用户还可以通过组播呼叫或使用带有Also头域的INVITE请求消息进行群呼。SIP不是一个独立的通信系统,而是利用了其他的IETF协议来建立一个完整的多媒体体系框架结构。如利用了RTP协议,RTSP协议来控制媒体传输,媒体网关控制来控制PSTN的网关,SDP协议(RFC2327)来描述多媒体会话。然而,SIP的基本功能和操作不依赖任何其他协议。SIP提供一些安全服务,包括拒绝服务保护,认证,完整性保护,加密和保密服务等。2.2.6SIP注册服务用户在发起会话前,首先应到注册服务器注册。注册使用REGISTER方法。注册服务器通常将用户注册的地址信息保存在位置服务器,这样使代理服务器或者重定向服务器就知道那些地址是可以到达的。注册信息是随时刷新的(默认周期是1h),所以用户每隔一段时间都应主动注册。注册服务一般伴随其他功能,如提供用户鉴权功能,或者通过注册服务安装呼叫处理程序或第三方应用。SIP注册服务的目的是使SIP客户机能够使用SIP服务器提供的服务,或使之失效。在注册请求中,客户机将提供包含在Contact域中的一个或几个地址给注册服务器。这样代理服务器就可以使用注册信息进行IP电话的路由。同时,注册也可以提供鉴权服务。如果不提供鉴权服务,冒名顶替者就可以截听任何人的电话。2.3SIP的呼叫过程SIP使用六种信令。INVITE和ACK用于建立呼叫,完成三次握手,或者用于建立以后改变会话属性;BYE用以结束会话;OPTIONS用于查询服务器力;CANCEL用于取消已经发出但未最终结束的请求;REGISTER用于客户向注册服务器注册用户位置等消息。一个SIP的呼叫可以有多种方式,可以有两个用户代理之间的直接呼叫,也可以经过一个或者多个代理服务器的而完成一次呼叫,如果一方不是SIP用户代理,则要经过SIP网关来进行呼叫。图2.2是一个正常的简单的通过一个代理服务器实现的呼叫过程。图2.2通过一个代理服务器的呼叫实现过程BYEBYEUAUA代理服务器媒体流通信ACK200OKINVITE180RING200OKINVITE180RING200OK因为SIP消息是基于文本编码的协议,所以这使得SIP消息看起来像UDP数据报在以太网上传输那样的在线传输。INVITE消息中列出来的区域被称为头部区域。它们都有着这样的形式:头标记:CRLF。第一行被称为开始行,该行标记了一种称为INVITE的方法,后面跟着的是请求的URI(Request-URI),最后是SIP版本号码2,它们之间使用空格来加以区分。SIP消息的每一行都用过CRLF来终结。请求的URI是SIPURI的一种特殊形式,它指明了请求要被发送到的资源,它也被称作请求目标。SIPURI将会在后面部分进行更多更细讨论。紧随其后的第二行的第一个字段是Via,每一个SIP设备产生或者转发一条SIP消息的时候都会在Via字段里面加上自己的地址,一般都是可以通过DNS解析的IP地址。Via字段包含了SIP版本2.0,紧跟一个“/”,之后的UDP表示通过UDP进行传输,然后接着一个空格,接着是主机名或者IP地址,接着分号,最后是端口值。在上面的这个例子中是通用的SIP端口号5060。SIP的传输采用TCP、UDP、TLS和SCTP。端口号将在章节后面些的内容进行描述。Branch参数是一个传输标记符。针对这条SIP信息的后续响应可以被相互关联上就是因为它们包含一样的传输标记。下一行的头标记是Max-Forwards,它被初始化为一个整数值,每个SIP服务器在接受和转发这个请求的过程中都会增加这个值,这个将简化环回检测。下一行就是To和From行了,它们标识了SIP请求的发起者和目标。如同本例一样,在名字标签被使用的情况下,SIPURI就被放在了括弧内,它将被使用来路由请求。在提醒过程中,名字标签将会被使用,但是却不会被协议本身所使用。Call-ID行是用来保持对特定SIP会话进行记录的标识符。SIP请求的发起者创建了本地唯一的字符串,然后通常会添加@和它的IP地址以便让该标识全球唯一。针对Call-ID,会话中的每一方都会贡献一个随机的标识符。这些标识符在每一次呼叫中都不一样。这些标识符被称为标签,在每一个会话建立之后,这些标签会被包含在To和From字段。最初的INVITE中包含了一个From标签,但是在To中没有标签。用户代理产生一条INVITE来建立会话,同时也产生了唯一的Call-ID和From标签。回应这个INVITE的用户代理也将产生一个标签求。最终本地标签(包含在From)、远程标签(包含在To)以及Call-ID三个合在一起来唯一地标识建立起的会话,也被称作“对话”,对话的标识符被参与会话的双方用来识别特定会话,因为在同一时间,在它们之间可能会建立很多的会话。在该建立好的会话之后的后续请求也将使用这个会话标示符。它们将会在下面的实例中展示。下一行的头标记是CSeq,或者是命令队列,它包含有一个数字,以及一个方法。在本例中是INVITE。在每一个新的请求被发送的时候,这个数字就会被增加。在本例中,它被初始化为1,但是也有可能从一个其它整数开始。Via、Max-Forwards、To、From、Call-ID和CSeq构成了任何一条SIP请求语句里面的最小组成部分。其它的部分就可以作为可选附加信息或者针对于特别请求的必要信息。在这条INVITE消息里面,头标记Contact也是需要的,因为它包含了Tesla的通讯设备的SIPURI,也称作用户代理,这个URI可以被使用来直接路由信息到Tesla。可选的头标记Subject(主题)也出现在这个例子里,它没有被协议所使用,但是却可以在振铃被叫方的时候显示出来以帮助被叫方决定是否接受这个呼叫。这点有点类似于电子邮件里面的From(发件人)和Subject(主题)。其它出现在这条INVITE消息内的头标记则包含了建立呼叫所必须的媒体信息。Content-Type和Content-Length头标记字段标识了消息体是SDP,并且包含了158个字节的数据。2.4协议的优点SIP协议具有简单、扩展性好以及和现有的Internet应用紧密的特点。SIP协议的出发点是想以现有的Internet为基础来构架IP电话业务网。2.4.1基本呼叫的建立和拆除H.323第二版的呼叫建立是基于可靠的传输协议,所以呼叫建立需要两个连接阶段:TCP连接和呼叫连接。而在H.323第三版,支持TCP和UDP,它简化了呼叫建立过程。SIP的呼叫建立类似H.323第三版的处理过程,用INVITE信息包(可建立在UDP上)。呼叫拆除的过程与呼叫建立相反,主叫和被叫都能通过RELEASE[COMPLETE](H.323中用)或BYE(SIP中用)。2.4.2呼叫控制业务SIP和H.323都支持呼叫保持、呼叫转移、呼叫前转、呼叫等待、电话会议和其他补充业务。以呼叫保持为例:H.323定义了近点呼叫保持和远点呼叫保持两种保持业务的场景,两者都可带网守或不带。网守仅仅透明地传送SS-HOLD。而SIP实现同样的功能,只要向需要呼叫保持的一方发送一个更改了SDP描述的INVITE命令即可。更改的SDP描述段仅将媒体发送的目的地址变为空<>,而其他的内容不变。收到该用户的UA,让呼叫保持,直到有新的INVITE到来为止。2.4.3SIP的第三方控制第三方控制是指不参与会话的第三者具有建立呼叫的能力,这个业务特征目前只有SIP具有,由于SIP的这一特性,ITU-T和IETF在实现PINT(IN和因特网互通)业务时都采用了SIP协议。能力交换的就是彼此交流各自对媒体流的处理能力,确定双方共有的能力,从而确保多媒体信号被双方接受。H.323采用H.245协议进行能力交换。SIP使用SDP来进行能力交换,主叫方使用一个OPTION需求去找出被叫,当前,SIP还不如H.245有完整灵活的协商能力,因为受制于SDP的表达方式。2.4.4服务质量服务质量包含很多不同方面的指标,一个和多媒体流相关的QoS参数包括带宽、最大时延、时延抖动和包丢失率等。本文仅从考察呼叫建立时延和环路检测进行比较。1、呼叫建立时延H.323第一版在呼叫建立时时延很大。第二版大大改进,而第三版则更好。SIP在呼叫建立时非常类似于H.323第三版,然而,如果UDP呼叫建立失败,则H.323第三版要好于SIP,H.323第三版几乎同时建立一个UDP的连接和一个TCP连接,它提供一个有效的机制,如果UDP连接成功则关闭TCP连接;否则,立刻启用TCP。SIP是顺序地操作UDP和TCP,如果UDP失败,则会增加呼叫建立时延。对于H.323如果网络质量比较好的情况下,TCP连接就浪费了。2、环路检测为防止环路,H.323定义PV域来指出信令信息在丢弃前可达到的最大数目。问题是定义一个适用的值很关键。其次,网络变化后,这个值也要改。SIP采用了Via头字段,检查其内容,如果新端点已出现在Via列表中,则表示有环路了。SIP的方法好于H.323。但是Via要占用很多空间。2.4.5实现的难易性H.323信令信息是符合ASN.1的二进制编码。需要特殊的编解码器。SIP信息是基于文本的,采用ISO10646以UTF-8编码。基于文本的编码很容易用Java、TCL和Perl等语言来实现,调试方便。2.5SIP协议和H.323协议的比较SIP是一个模块层次化的结构,SIP协议具有良好的可扩展特性,可以方便地增加定义,嵌入各种用户终端并迅速实现新功能,采用SIP的优势主要包括:参照HTTP协议定义的,适用基于IP的网络;采用了URI、DNS和MIME并与其它IP应用兼容;强调支持多方会议,包括IP多播和请求加入的功能;采用了DNS系统,在寻址方面可以匹配现有体系;作为端到端的协议,用户代理只需呼叫其SIP地址或采用DNS即可与另外一个用户通话,同时也支持普通的电话号码格式。系统可通过增加SIP服务和提供更大的灵活性来实现负载均衡,有效提高自身性能。H.323和SIP分别是通信领域与因特网两大阵营推出的建议。H.323企图把IP电话当作是众所周知的传统电话,只是传输方式发生了改变,由电路交换变成了分组交换。而SIP协议侧重于将IP电话作为因特网上的一个应用,较其它应用(如FTP,E-mail等)增加了信令和QoS的要求,它们支持的业务基本相同,也都利用RTP作为媒体传输的协议。但H.323是一个相对复杂的协议。H.323采用基于ASN.1和压缩编码规则的二进制方法表示其消息。ASN.1通常需要特殊的代码生成器来进行词法和语法分析。而SIP的基于文本的协议,类似于HTTP。基于文本的编码意味着头域的含义是一目了然的,如From、To、Subject等域名。这种分布式、几乎不需要复杂的文档说明的标准规范风格,其优越性已在过去的实践中得到了充分的证明(现在广为流行的邮件协议SMTP就是这样的一个例子)。SIP的消息体部份采用SDP进行描述,SDP中的每一项格式唯一,也比较简单。在支持会议电话方面,H.323由于由多点控制单元(MCU)集中执行会议控制功能,所有参加会议终端都向MCU发送控制消息,MCU可能会成为瓶颈,特别是对于具有附加特性的大型会议;并且H.323不支持信令的组播功能,其单功能限制了可扩展性,降低了可靠性。而SIP设计上就为分布式的呼叫模型,具有分布式的组播功能,其组播功能不仅便于会议控制,而且简化了用户定位、群组邀请等,并且能节约带宽。但是H.323的集中控制便于计费,对带宽的管理也比较简单、有效。H.323中定义了专门的协议用于补充业务,如H.450.1、H.450.2和H.450.3等。SIP并未专门定义的协议用于此目的,但它很方便地支持补充业务或智能业务。只要充分利用SIP已定义的头域(如Contact头域),并对SIP进行简单的扩展(如增加几个域),就可以实现这些业务。例如对于呼叫转移,只要在BYE请求消息中添加Contact头域,加入意欲转至的第三方地址就可以实现此业务。对于通过扩展头域较难实现的一些智能业务,可在体系结构中增加业务代理,提供一些补充服务或与智能网设备的接口。在H.323中,呼叫建立过程涉及到第三条信令信致到:RAS信令信道、呼叫信令信到和H.245控制信道。通过这三条信道的协调才使得H.323的呼叫得以进行,呼叫建立时间很长。在SIP中,会话请求过程和媒体协商过程等一起进行。尽管H.323v2已对呼叫建立过程作了改进,但较之SIP只需要1.5个回路时延来建立呼叫,仍是无法相比。H.323的呼叫信令通道和H.245控制信道需要可靠的传输协议。而SIP独立于低层协议,一般使用UDP等无法连接的协议,用自己信用层的可靠性机制来保证消息的可靠传输。SIP借鉴了HTTP和SMTP的成功经验,建立了一系列具有高扩展性和兼容性的功能。用户代理可以利用Require头部明确指出所需的状态集合。当这样的请求到达服务器时,服务器将检查是否支持Require里的状态。如果有一个或几个是不能支持,服务器将返回状态消息,说明它不能支持的那些状态。根据反馈,用户代理将简化操作要求。而且通过LANA,可以注册新状态。因此,任何开发SIP协议在IP电话中的应用研究和实现商都能创建自己所需的新状态。可以看出,这种机制保证了不同业务流之恻的良好兼容性。为了更好的支持扩展性,SIP的数字错误代码采用了梯度空间的组织形式。协议规定了6个基本类型,用代码的百位数字表示。错误类型决定了协议栈要执行的操作,终端只需了解错误类型,而不必知晓具体的错误原因。因此,通过添加新的错误代码的语法定义就能够获得新的属性,而且不影响系统的兼容性。由于SIP沿用了HTTP的体系结构,所以许多开发HTTP的扩展性的机制页同样适用于SIP。PEP(ProtocolExtensionsProtoc01)就是一个例子。首先进行类比的是,SIP的UA等价于一个H.323的终端(或者包交换网络侧的网关),SIP服务器则等价于H.323的网守。另外,SIP类似H.323中的RAS和Q.931协议,而SDP则相当于H.245。在IETF的SIP体系结构中,媒体流的承载采用了RTP协议,这是和H.323一样的。所以,H.323与IETF的SIP主要的不同在于呼叫信令和控制是如何实现的。2.6本章小结本章主要介绍SIP协议栈及其相关协议的概念、功能、格式等内容。包括SIP协议的功能,SIP协议在网络层次结构中的位置,SIP消息的具体格式以及SIP各种应用实体和实体间的简单交互操作等,以及和H.323的比较。第三章SIP实现中VC的应用3.1对话框控件访问的七种方式GetDlgItem()->Get(Set)WindowText()GetDlgItemText()/SetDlgItemText()GetDlgItemInt()/SetDlgItemInt()将控件和整型变量相关联将控件和控件变量相关联SendMessage()SendDlgItemMessage()3.2窗口兄弟窗口共享同一个父窗口的多个子窗口叫兄弟窗口。活动窗口活动窗口是应用程序的顶层窗口,也就是当前使用的窗口。只有一个顶层窗口可以是活动窗口,如果用户使用的是一个子窗口,Windows系统就激活与这个子窗口相应的顶层窗口。任何时候系统中只能有一个顶层窗口是活动的。用户通过单击窗口(或其中的一个子窗口)、使用ALT+TAB或ALT+ESC组合键来激活一个顶层窗口,应用程序则调用函数SetActiveWindow来激活一个顶层窗口。前台窗口和后台窗口在Windows系统中,每一个进程可运行多个线程,每个线程都能创建窗口。创建正在使用窗口的线程称之为前台线程,这个窗口就称之为前台窗口。所有其它的线程都是后台线程,由后台线程所创建的窗口叫后台窗口。用户通过单击一个窗口、使用ALT+TAB或ALT+ESC组合键来设置前台窗口,应用程序则用函数SetForegroundWindow设置前台窗口。如果新的前台窗口是一个顶层窗口,那么Windows系统就激活它,换句话说,Windows系统激活相应的顶层窗口。Z-order窗口的Z次序表明了重叠窗口堆中窗口的位置,这个窗口堆是按一个假想的轴定位的,这个轴就是从屏幕向外伸展的Z轴。Z次序最上面的窗口覆盖所有其它的窗口,Z次序最底层的窗口被所有其它的窗口覆盖。应用程序设置窗口在Z次序中的位置是通过把它放在一个给定窗口的后面,或是放在窗口堆的顶部或底部。Windows系统管理三个独立的Z次序——一个用于顶层窗口、一个用于兄弟窗口,还有一个是用于最顶层窗口。最顶层窗口覆盖所有其它非最顶层窗口,而不管它是不是活动窗口或是前台窗口。应用程序通过设置WS_EX_TOPMOST风格创建最顶层窗口。一般情况下,Windows系统把刚刚创建的窗口放在Z次序的顶部,用户可通过激活另外一个窗口来改变Z次序;Windows系统总是把活动的窗口放在Z次序的顶部,应用程序可用函数BringWindowToTop把一个窗口放置到Z次序的顶部。函数SetWindowPos和DeferWindowPos用来重排Z次序。3.3网络编程Socket3.3.1计算机网络计算机网络是相互连接的独立自主的计算机的集合,最简单的网络形式由两台计算机组成。两台计算机通过网络进行通信3.2.1计算机网络3.3.2IP地址IP网络中每台主机都必须有一个唯一的IP地址,IP地址是一个逻辑地址,因特网上的IP地址具有全球唯一性,IP地址由32,四个字节组成,常用点分十进制的格式表示,例如0。3.3.3协议协议是为进行网络中的数据交换(通信)而建立的规则、标准或约定(=语义+语法+规则)。不同层具有各自不同的协议。3.3.4ISO/OSI七层参考模型OSI(OpenSystemInterconnection)参考模型将网络的不同功能划分为7层。应用层表示层会话层传输层网络层数据链路层物理层 软件应用 数据表示 主机间通信端到端的连接寻址和最短路径介质访问(接入)二进制传输3.3.4OSI/ISO7层参考模型ISO/OSI七层参考模型通信实体的对等层之间不允许直接通信,各层之间是严格的单向依赖,上层使用下层提供的服务—Serviceuser,下层向上层提供服务—Serviceprovider。OSI各层分别使用不同的协议。应用层:远程登录协议Telnet、文件传输协议FTP、超文本传输协议、域名服务DNS、简单邮件传输协议SMTP、邮局协议POP3等。传输层:传输控制协议TCP、用户数据报协议UDP。网络层:网络协议IP、Internet互联网控制报文协议ICMP、Internet组管理协议IGMP。数据传输必须经过数据封装,所谓封装即数据打包过程,也就是在数据前面加上特定的协议头部。数据协议头数据OSI参考模型中,对等层协议之间交换的信息单元统称为协议数据单元(PDU,ProtocolDataUnit),OSI参考模型中每一层都要依靠下一层提供的服务。为了提供服务,下层把上层的PDU作为本层的数据封装,然后加入本层的头部(和尾部)。头部中含有完成数据传输所需的控制信息。这样,数据自上而下递交的过程实际上就是不断封装的过程。到达目的地后自下而上递交的过程就是不断拆封的过程。由此可知,在物理线路上传输的数据,其外面实际上被包封了多层“信封”。但是,某一层只能识别由对等层封装的“信封”,而对于被封装在“信封”内部的数据仅仅是拆封后将其提交给上层,本层不作任何处理。3.3.5TCP/IP模型TCP/IP起源于美国国防部高级研究规划署(DARPA)的一项研究计划——实现若干台主机的相互通信,现在TCP/IP已成为Internet上通信的工业标准。TCP/IP模型包括4个层次:应用层、传输层、网络层以及网络接口。下面是TCP/IP与OSI参考模型的对应关系:应用层应用层表示层会话层传输层传输层网络层网络层数据链路层网络接口物理层3.3.6端口按照OSI七层模型的描述,传输层提供进程(应用程序)通信的能力。为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口(protocolport,简称端口)的概念。端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立。端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。例如:http使用80端口。3.3.7套接字为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统,成为开发网络应用程序的非常有效快捷的工具。套接字存在于通信区域中。通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。套接字通常只与同一区域的套接字交换数据(也有可能跨区域通信,但这只在执行了某种转换进程后才能实现)。WindowsSockets只支持一个通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低位先存),有的机器在起始地址存放高位字节(高位先存)。基于Intel的CPU,即我们常用的PC机采用的是低位先存。为保证数据的正确性,在网络协议中需要指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高位先存格式。3.3.8客户机/服务器模式在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式(client/server),即客户向服务器提出请求,服务器接收到请求后,提供相应的服务。客户机/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户机/服务器模式的TCP/IP。客户机/服务器模式在操作过程中采取的是主动请求的方式。首先服务器方要先启动,并根据请求提供相应的服务:①打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。②等待客户请求到达该端口。③接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新的进程(或线程)来处理这个客户请求。新进程(或线程)处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。④返回第二步,等待另一客户请求。⑤关闭服务器。客户方:①打开一个通信通道,并连接到服务器所在主机的特定端口。②向服务器发服务请求报文,等待并接收应答;继续提出请求。③请求结束后关闭通信通道并终止。3.3.9WindowsSockets的实现WindowsSockets是MicrosoftWindows的网络程序设计接口,它是从BerkeleySockets扩展而来的,以动态链接库的形式提供给我们使用。WindowsSockets在继承了BerkeleySockets主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络事件异步选择机制。WindowsSockets1.1和BerkeleySockets都是基于TCP/IP协议的;WindowsSockets2从WindowsSockets1.1发展而来,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。套接字分了3三种类型:流式套接字(SOCK_STREAM) 提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。2.数据报式套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。3.原始套接字(SOCK_RAW)基于TCP(面向连接)的socket编程服务器端程序:1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和端口上(bind)。3、将套接字设为监听模式,准备接收客户请求(listen)。4、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。5、用返回的套接字和客户端进行通信(send/recv)。6、返回,等待另一客户请求。7、关闭套接字。客户端程序:1、创建套接字(socket)。 2、向服务器发出连接请求(connect)。3、和服务器端进行通信(send/recv)。4、关闭套接字。基于UDP(面向无连接)的socket编程服务器端(接收端)程序:1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和端口上(bind)。3、等待接收数据(recvfrom)。4、关闭套接字。客户端(发送端)程序:1、创建套接字(socket)。 2、向服务器发送数据(sendto)。3、关闭套接字。3.4线程同步与异步套接字编程编程时需要知道事件与对象,事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权,关键代码段(临界区)工作在用户方式下。对象中互斥对象、事件对象与关键代码段的比较,互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢,但利用互斥对象和事件对象这样的内核对象,可以在多个进程中的各个线程间进行同步。关键代码段是工作在用户方式下,同步速度较快,但在使用关键代码段时,很容易进入死锁状态,因为在等待进入关键代码段时无法设定超时值。Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非阻塞模式下,Winsock函数无论如何都会立即返回。WindowsSockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,它对网络事件采用了基于消息的异步存取策略。WindowsSockets的异步选择函数WSAAsyncSelect()提供了消息机制的网络事件选择,当使用它登记的网络事件发生时,Windows应用程序相应的窗口函数将收到一个消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。这就是基于消息的异步套接字。3.5本章小结本章主要介绍了使用VC进行SIP代理服务器编程时所需了解的相关编程知识。通过对相关知识的学习,才能进一步进行程序的编程与实现。第四章基于SIP协议代理服务器的设计与实现4.1用户代理的功能介绍4.1.1处理SIP消息一个用户代理需要根据用户的各种控制命令进行连接等操作,而这些控制命令是由SIP消息来承载的,所以用户代理必须能够生成SIP协议中所规定的各种消息,并根据具体的情况来设置消息中的各种参数。另一方面,用户代理也必须能够接收并分析其他用户代理所发送来的SIP消息,根据不同的SIP消息进行不同的处理和操作。所有这些对SIP消息的生成、设置、接收、解析的操作,是用户代理一个最基本的功能。4.1.2提供与上层应用程序的接口可以说,用户代理是SIP协议中一个相对独立的逻辑模块。一方面,它从上层的应用程序中得到用户的各种操作和命令,并以次为依据产生各种SIP消息,然后交给下层的传输层去发送到指定的地址;而另一方面,它又通过传输层接收其他地方的用户代理发送来的SIP消息,以作出各种响应并将得到的信息交给上层的应用程序去处理。可以说,用户代理是连接传输层和应用程序的一个桥梁。4.1.3定时功能从前面对用户代理的业务描述可以看出,用户代理有可能会频繁地进行消息重发和超时判断等操作,而这些都必须要引入定时功能来实现。这就表示,用户代理必须能够识别规定时段的开始和结束,并作出各种响应。4.1.4其他功能从用户代理的结构设计这个角度来说,上面三个功能是它的最基本的功能,只要代码能够从结构上实现这三个功能,就基本能承担一个用户代理在整个SIP协议栈中的作用了。但是,为了实现这三个基本功能,又会引出其他需要实现的功能,例如,为了实现对SIP消息的解析,正确地识别其中携带的信息的含义,用户代理必须要记录与其他客户端建立的所有连接的信息,同时为了正确地生成并发送合适的SIP消息,也要记录本身所处的状态等。在这里,对这些非基本的功能不再一一介绍,本文将在后面的设计中将它们体现出来。4.2SIPUserAgent的行为这个部分描述UAC和UAS产生请求和响应的规则。4.2.1主叫发出初始邀请请求当UAC希望初始化一个呼叫,就发出一个INVITE请求。请求中的To域包含被叫的地址。Request_URI包含同一个地址。From域包含主叫的地址。如果From地址可以出现在请求中,并在同一个呼叫中,由其他Useragentclient产生,主叫必须插入tag出参数到From域中。UAC应该可选的增加一个ContactHeader包含一个可以联系的地址,返回被叫到主叫的事务。4.2.2被叫发出的响应被叫接收到初始的INVITE请求,被叫可以接受,重定向,或者拒绝呼叫。在所有的这些情况中,都要返回一个响应。响应的信息必须从请求域中拷贝下面的域:To,From,Call-ID,Cseq和Via域。另外,如果在请求中包含一个或者多个Via头域,必须在To域的响应中增加tag参数。因为一个从UAC的请求应该Fork(分叉)并到达多个主机,UAC将根据tag区分来自不同UAS’s的响应。UAS可以在响应中增加一个Contactheader域。这里包含一个被叫希望连接的被叫地址,包括目前INVITE请求的ACK。UAS保存TO和FROM的值,包括任何Tags。这些分别变成本地或者远端CallLeg地址。4.2.3主叫接收并响应初始化的请求因为Forkingproxy,单个INVITE请求,多个响应可以到达UAC。每个响应通过To头域中的“tag”参数区别。主叫应该通过每次响应的UAS,选择识别或者结束呼叫。为了识别,它发送一个ACK请求,为了结束,发送一个BYE请求。在ACK或者BYE的To头域中,包括任何类型的tag,From头域,必须与200响应的To域一致。缺省时,ACK或者BYE的Request-URI被设置成在200响应中的地址。相反的,UAC可以从To头域拷贝地址到Request-URI。在每个响应中,UAC也会注意到To和From的值。对于每个呼叫历程(CallLeg),To头域变成远端地址,而From头域变成本地地址。4.2.4主叫或者被叫产生二级并发请求一旦呼叫已经建立,主叫或者被叫可以产生Invite或者Bye请求,来改变或者结束呼叫。不管是主叫还是被叫产生新的请求,在请求中的头域如下设置。对于期望的CallLeg,To头域设置为远端地址,From头域设置为本地地址(两者包含任何tags)。联系头域与先前响应或者请求的Contact域不同。Request-URI应该设置成联系头域的值,这个联系头域被先前的从远端发送过来的请求或者响应接收,或者设置成远端地址。4.2.5接收的并发请求当请求后来被接收,将进行下面的检查:1、如果Call-ID是新的,不管是否是To和From头域的值,认为请求是一个新的呼叫。2、如果Call-ID已经存在,那么请求是对于一个存在的呼叫。如果To,From,Call-ID和Cseq值与先前接收的一致,则这个请求是一个重传请求。3、如果上面两步没有匹配到,To和From域比较存在的CallLeg和本地及远端的地址。如果这里匹配,在请求中的Cseq比上一个Cseq值,这样对于存在的CallLeg,这个请求是一个新的事务。4.3SIP消息机制4.3.1SIPURL结构SIPURLs使用于SIP消息的头部,表示发起者(From),当前地址(Request—URI),重定向地址(Contact),请求的最终接受者(To)。SIP协议采用的URI的一般结构是:SIP:用户名:口令@主机:端口;传送参数;用户参数;方法参数;生存期参数;服务器地址参数;头部名=头部值这里未采用严格的BNF形式化表示形式。其中“SIP”表示需采用SIP协议和所指示的端系统通信。用户名可由任意字符组成,一般可取类似于E-mail用户名的形式。SIPURL的一个特定功能是允许主机类型为IP电话网关,此时的用户名可为一般的电话号码。由于BNF语法表示不能区分电话号码和一般的用户名,因此在域名后面增加了“用户参数”字段,该字段有两个可选值:IP和phone,当其设定为“phone”时,表示用户名为电话号码,对应的端系统为IP电话网关。“主机”可为主机域名或IPv4地址。“端口”表示请求消息送往的端口号,其缺省值为5060,即公开SIP端口号。口令可以置于SIPURL中,但一般不这样做,因为其安全性是值得考虑的。“传送参数”指示采用TCP还是UDP传送,缺省值为UDP。“服务器地址参数”指示和该用户通信的服务器地址,通常为多播地址。“生存期参数”指示UDP多播数据包的寿命,仅当传送参数为UDP且服务器地址参数为多播地址时才能使用。4.3.2SIP消息结构SIP消息的一般格式,用ABNF范式形式化表示:SIP-message=Request/ResponseGeneric-message=start-line*message-headerCRLF[message-body]Start-line=Request-line/Status-1inemessage-header=(general-header/request—header/response-header/entity-header)Request-line=MethodSPRequest-URISPSIP—VersionCRLFStatus-line=SIP—VersionSPStatus-CodeSPReason—PhraseCRLFSIP—Version=“SIP/2.0”1、请求方法INVITE:邀请用户加入某会话,会话包含于消息体中。ACK:对于INVITE请求的最终响应的证实。成功的响应由发出INVITE请求的UAC给予响应,不成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- LY/T 3407-2024生物质成型燃料用竹基粘结剂
- 统编版三年级语文下册期末达标测试卷(全真演练二)(含答案)
- 2019-2025年消防设施操作员之消防设备基础知识模拟考试试卷B卷含答案
- 2019-2025年军队文职人员招聘之军队文职管理学全真模拟考试试卷A卷含答案
- 2019-2025年消防设施操作员之消防设备基础知识提升训练试卷A卷附答案
- 2025年消防设施操作员之消防设备高级技能押题练习试卷A卷附答案
- 管理学原理b试题及答案
- 遗产继承房产分割合同
- 高等教育自学考试《00065国民经济统计概论》模拟试卷二
- 2024年新疆公务员《行政职业能力测验》试题真题及答案
- 北京服装学院招聘考试题库2024
- 金融科技概论-课件 第十五章 金融科技监管与监管科技
- 2024年江苏省南京市中考数学试卷真题(含答案解析)
- 物资装卸培训课件
- DB5101-T 71-2020 成都市电动汽车充电设施 安全管理规范
- 2025年北京电子科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年乌兰察布医学高等专科学校高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年二级建造师之二建机电工程实务考试题库含完整答案
- 高教版2023年中职教科书《语文》(基础模块)下册教案全册
- 《社群运营》全套教学课件
- 2024入团知识题库(含答案)
评论
0/150
提交评论