下载

3下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 SIP协议详解(中文)

SIP协议详解(中文).doc

SIP协议详解(中文)

itasklcq_152
2010-11-29 0人阅读 举报 0 0 暂无简介

简介:本文档为《SIP协议详解(中文)doc》,可适用于IT/计算机领域

、SIP协议介绍Internet的许多应用都需要建立和管理一个会话会话在这里的含义是在参与者之间的数据的交换。由于考虑到参与者的实际情况这些应用的实现往往是很复杂的:参与者可能是在代理间移动他们可能可以有多个名字他们中间的通讯可能是基于不同的媒介(比如文本多媒体视频音频等)-有时候是多种媒介一起交互。人们创造了无数种通讯协议应用于实时的多媒体会话数据比如声音影像或者文本。本SIP(会话初始协议)和这些协议一样同样允许使用Internet端点(用户代理)来寻找参与者并且允许建立一个可共享的会话描述。为了能够定位精确的会话参与者并且也为了其他的目的SIP允许创建基础的networkhosts(叫做代理服务器)并且允许终端用户注册上去发出会话邀请或者发出其他请求。SIP是一个轻形的多用途的工具可以用来创建修改和终止会话它独立运作于通讯协议之下并且不依赖建立的会话类型。、SIP协议功能概况SIP是一个应用层的控制协议可以用来建立、修改、和终止多媒体会话(或者会议)例如Internet电话。SIP也可以邀请参与者参加已经存在的会话比如多方会议。媒体可以在一个已经存在的会话中方便的增加(或者删除)。SIP显示的支持名字映射和重定向服务这个用于支持个人移动业务-用户可以使用一个唯一的外部标志而不用关系他们的实际网络地点。SIP在建立和维持终止多媒体会话协议上支持个方面:​ 用户定位:检查终端用户的位置用于通讯。​ 用户有效性:检查用户参与会话的意愿程度。​ 用户能力:检查媒体和媒体的参数。​ 建立会话:”ringing”,建立会话参数在呼叫方和被叫方。​ 会话管理:包括发送和终止会话修改会话参数激活服务等等。SIP不是一个垂直集成的通讯系统。SIP可能叫做是一个部件更合适它可以用作其他IETF协议的一个部分用来构造完整的多媒体架构。比如这些架构将会包含实时数据传输协议(RTP)(RFC)用来传输实时的数据并且提供QoS反馈实时流协议(RSTP)(RFC)用于控制流媒体的的传输媒体网关控制协议(MEGACO)(RFC)用来控制到公共电话交换网(PSTN)的网关还有会话描述协议(SDP)(RFC)用于描述多媒体会话。因此SIP应该和其他的协议一起工作才能提供完整的对终端用户的服务。虽然基本的SIP协议的功能组件并不依赖于这些协议。SIP本身并不提供服务。但是SIP提供了一个基础可以用来实现不同的服务。比如SIP可以定位用户和传输一个封装好的对象到对方的当前位置。并且如果我们利用这点来通过SDP传输会话的描述立刻对方的用户代理可以得到这个会话的参数。如果我们用这个像传输会话描述(SESSIONDESCRIPTIONSD)一样呼叫方的照片一个”呼叫ID”服务很容易就建立了。这个简单的例子说明了SIP作为一个基础可以在其上提供很多不同的服务。SIP并不提供会议控制服务(比如议席控制或者投票系统)并且并没有建议会议应该则那样管理。可以通过在SIP上建立其他的会议控制协议来发起一个会议。由于SIP可以管理参与会议的各方的会话所以会议可以跨异构的网络SIP并不能也不打算提供任何形式的网络资源预留管理。安全对于提供的服务来说特别重要。要达到理想的安全程度SIP提供了一套安全服务包括防止拒绝服务认证服务(用户到用户代理到用户)完整性保证加密和隐私服务。SIP可以基于IPV也可以基于IPV、术语在这个文档中关键词”必须”,”不允许”,”要求”,”可以”,”不可以”,”应该”,”不应该”,”建议”,”不建议”,”可能”,”可选”是根据BCP,RFC的规范描述SIP实现需要的不同层次、实施概览这节通过简单的示例介绍了SIP的基本实现。本节是通过自然的而非正则的示例来介绍的。第一个例子说明了SIP的基本功能:定位一个断点发出通讯请求通过协商会话参数建立会话拆卸刚才建立的会话。图一表示一个典型的Alice和Bob两个用户间的SIP消息交易交换例子(每一个消息采用字母”F”和一个用来指向正文的一个数字做标记)在这个例子里Alice在她的PC上使用一个SIP的应用程序(比如说一个软的电话)呼叫Bob在Internet上的一个SIP电话。这个例子也掩饰了两个SIP代理之间怎样为Alice和Bob建立会话连接。Thistypicalarrangementisoftenreferredtoasthe"SIPtrapezoid"asshownbythegeometricshapeofthedottedlinesinFigureAlice通过Bob的SIP标志“呼叫”Bob这个SIP标志是统一分配的资源(UniformResourceIdentifierURI)称作SIPURI。SIPURI在节中定义。它很像一个email地址典型的SIPURI包括一个用户名和一个主机名。在这个范例中SIPURI是sip:bobbiloxicom,biloxicom是Bob的SIP服务提供商。Alice有一个SIPURI:sip:aliceatlantacom。Alice可以输入Bob的URI也可以直接在地址本的一个超级链接上点击一下Bob的URI。SIP也提供保密URI称作SIPSURI。例如:sips:bobbiloxicom。一个基于SIPSURI的通话保证这个通话是安全的并且对呼叫者和被叫的所有的SIP消息是加密传输的(叫做TLS)。在TLS中请求是通过加密方式传输给被叫方但是这个加密机制是基于被叫方宿主服务器的实现的。SIP是基于一个类似HTTP协议的请求应答的通讯模式。每一个通讯都包含对某个功能的请求并且起码需要一个应答。在这个应答中Alice的软电话发送一个含有Bbo的SIPURI抵制的INVITE通讯请求。INVITE是一个SIP请求的例子表示请求方(Alice)希望服务方(Bob)应答。INVTE请求包含一系列的包头域(Headerfields)。包头中包含很多属性并且包含了传输消息的附加信息。在INVITE中有如下的字段:呼叫的唯一标志目的抵制Alice的地址Alice和Bob建立会话的类型。INVITE请求(图中的F)可能看起来像这样的:INVITEsip:bobbiloxicomSIPVia:SIPUDPpcatlantacombranch=zhGbKasdhdsMaxForwards:To:Bob<sip:bobbiloxicom>From:Alice<sip:aliceatlantacom>tag=CallID:abcepcatlantacomCSeq:INVITEContact:<sip:alicepcatlantacom>ContentType:applicationsdpContentLength:(Alice’sSDPnotshown)atlantacombiloxicomproxyproxyAlice’sBob’ssoftphoneSIPPhone|||||INVITEF||||>|INVITEF|||TryingF|>|INVITEF||<|TryingF|>|||<|RingingF|||RingingF|<||RingingF|<|OKF||<|OKF|<||OKF|<|||<||||ACKF||>||MediaSession||<================================================>||BYEF||<||OKF||>|||图一:SIP矩形表达的SIP会话建立例子。在文本消息的第一行包含了请求的类型(INVITE)。在这行之后的是这个请求的头域。这个例子中包含了最少需要的头域集合。简单介绍一下:VIA域包含了Alice接收发送请求的服务器地址(pcatlantacom)。同样这个包含了一个分支参数来标志Alice和这个服务器的会话事务。TO域包含了显示姓名(Bob)和一个SIP或者SIPSURI(sip:bobbiloxicom)请求将首先传输到这个URI中。显示姓名(Displaynames)在RFC中描述。From域也同样包含一个显示姓名(Alice)和一个SIP或者SIPSURI(sip:aliceatlantacom)这个URI用来标志请求的原始发起者。这个域也包含了一个TAG参数这个TAG参数是一个随机字串()是软电话(softphone)在URI上增加的一个随机串。用来做标志用途的。CallID包含一个全局的唯一标志用来唯一标志这个呼叫通过随机字串和softphone的自己名字或者IP抵制混和产生的。通过TOTAG,FROMTAG和CALLID完整定义了Alice和Bob之间的端到端的SIP关系并且表示这个是一个对话性质的关系。CSEQ或者CommandSequence包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。每当对话中发起一个新的请求都会引起这个数字的顺序递增。Contact域包含一个SIP或者SIPSURI用来表示访问Alice的直接方式通常由用户名和一个主机的全名(FullyQualifiedDomainNameFQDN)组成。当FQDN作为首选的时候许多终端用户由于不会由名字登记(而导致不能访问Alice的主机)所以IP地址是可选的。VIA域告诉大家本请求发送到哪里并且应答到哪里Contract域告诉大家将来的请求将发送到哪里(奇怪…不是Alice发起的么将来的请求应该是Bob才对啊)。MaxForwards:最大转发数量限制了通讯中转发的数量。它是由一个整数组成每转发一次整数减一。Content-type包含了消息正文的描述(消息正文在本范例中没有列出)Contentlength:包含消息正文的长度(字节数)完整的SIP包头域的定义在节。会话的细节比如媒体的类型codec或者采样速率没有通过SIP来描述。这个可以通过SIP的消息正文来描述可以通过其他定义的协议在正文中进行描述。有一种是会话描述协议(SessionDescripotionProtocolSDP)(RFC)。这个SDP消息(没有在例子中列出)通过SIP的消息中传送就像通过附件发送EMAIL一样或者说通过HTTP传输的网页一样。由于softphone并不知道bob或者bob的sip服务器biloxicom在哪里所以softphone发送INVITE请求到Alice的sip服务器,atlantacom。这个atlantacomSIP服务器应该已经在Alice的softphone中配置了或者可以通过DHCP获得。atlantacomSIP服务器是一台代理服务器。代理服务器接收SIP请求并且根据请求转发。在这个例子中代理服务器接收到INVITE请求并且回送一个(Trying)应答给Alice的softphone。(Trying)应答表示INVITE请求已经收到并且代理服务器正在转发INVITE请求。SIP的应答是通过一个三位数的数字表示的。SIP应答同样包含TO、FROM、CallIDCSEQ和在VIA中的分支参数这个参数使得Alice的softphone可以把请求和应答关联起来。atlantacom代理服务器收到INVITE请求之后就去找biloxicom可能通过DNS服务来找提供这个biloxicom的SIP服务器。这在中有描述。最后转发INVITE请求到biloxicom或者能到达biloxicom的代理服务器。在转发请求之前atlantacom代理服务器会在via头上增加一个一段包含自己抵制的值(INVITE已经包含了Alice的的地址VIA域)。biloxicom代理服务器收到这个INVITE请求并且返回一个(Trying)应答给atlantacom代理服务器标志这它已经收到这个请求并且正在处理这个请求。这个代理服务器通过查询数据库通常叫做地址服务这个服务中包含了bob的当前ip地址。(我们在下一节可以看到这个数据库是怎么回事)biloxicom代理服务增加另一段包含自己地址的VIA头域并且发送它到bob的sip电话。Bob的SIP电话接收到INVITE请求并且提醒bob有一个从Alice的呼入这样bob可以决定是否响应这个呼入。这个意思就是:bob的电话响了。bob的sip电话发送一个(Ringing)回应这个回应将通过两个代理服务器原路返回给Alice。每一个代理服务器通过via头域决定该把这个应答发送给哪里并且在发送之前把自己的地址从头上拿走。虽然DNS和定位服务在路由最初的INVITE请求(ringing)响应可以简单返回给发起者而不需要查找发起者在哪里并且不需要在代理服务器保留状态同时每一个转发INVITE的代理也可以得到INVITE的每一个应答这样的特性也非常有用。当Alice的softphone收到(Ringing)应答的时候它提示Alice,可能是通过一个回铃音或者屏幕上的一个消息提示。在这个例子中Bob决定响应这个呼叫。当他拿起电话他的SIP电话发送(OK)回应给发送者表示这个电话已经接起来了。这个(OK)包含了一个消息体这个消息体包含SDP媒体描述这个媒体描述包含Bob希望和Alice建立何种媒体连接。同样SDP消息也是两段交换:Alice发送一个给BobBob发送一个回给Alice。这个两段的交换提供基本的兼容性协商并且基于简单的SDP提出应答交换模型。如果Bob不想响应这个呼叫或者正在响应别的呼叫一个错误的响应会代替正常的(OK)回送出去这样就不会有连接建立。SIP完整的返回代码在节有介绍。Bob发出的(OK)(图一的F消息)可能长得像这样的:SIPOKVia:SIPUDPserverbiloxicombranch=zhGbKnashdsreceived=Via:SIPUDPbigboxsiteatlantacombranch=zhGbKefcreceived=Via:SIPUDPpcatlantacombranch=zhGbKasdhdsreceived=To:Bob<sip:bobbiloxicom>tag=accfFrom:Alice<sip:aliceatlantacom>tag=CallID:abcepcatlantacomCSeq:INVITEContact:<sip:bob>ContentType:applicationsdpContentLength:(Bob’sSDPnotshown)应答的第一行包含了应答代码()和原因(ok)。剩下的行包含了包头域。VIA,TO,FROM,CALLID,Cseq包头域是从INVITE请求包中直接拷贝过来的。(有三个VIA域值-一个是AliceSIP电话增加的一个是atlantacom代理加的一个是biloxicom代理加的)。Bob的SIP电话增加了一个TAG参数。这个TAG参数会被参与对话的各方所使用并且在以后的对话中被使用。Contract域包含了一个能直接联系到Bob的URI。Content-type和ContentLength域包含了消息体(没有在例子中体现)这个消息体里边是Bob的SDP媒体信息。除了DNS和位置服务之外代理服务器可以自主决定路由也就是说自己决定应该向哪里转发请求。比如如果Bob的SIP电话返回一个(电话正忙)信号biloxicom这个代理服务器可以转发这个INVITE请求到Bob的语音邮箱服务器。一个代理服务器可以同时向N个地方发送INVITE请求。这种并发寻找就是传说中的分流(forking)。在这个例子中(OK)应答通过两个代理并且发送到Alice的softphone上Alice的softphone收到这个应答停止振铃并且标志电话Bob已经接听。最后Alice的电话发送一个确认消息ACK到Bob的SIP电话来确认接收到了这个最后的(o’k)应答。在这个例子中ACK信号是直接由Alice的softphone发送到Bob的SIPphone上跨过了两个代理服务器。这是因为两个端点(Alice和Bob)通过INVITE(OK)的请求应答包中的Contact包头域都知道互相之间的地址了这个地址是最开始发起INVITE请求的时候所不知道的。所以不需要两个代理服务器再查找对方的地址了所以代理服务器不参与接下来的通话流了。这就完成了一个完整的使用INVITEACK三方握手来建立SIP会话的过程。会话建立过程中的细节描述再节由描述。现在Alice和Bob的媒体会话开始了他们通过发送刚才建立会话所交换的SDP包中约定的互相明白的媒体包来进行会话。一般情况下端到端的媒体包和SIP信号控制包通过不同的通讯路径来发送。在会话中Alice或者Bob都可以改变他们自己的媒体会话属性。这个可以通过发送一个包含新媒体属性描述的reINVITE请求来完成。这个reINVITE是捆绑在一个现有的会话的这样参与会话的对方可以明白这是要改变现有的会话属性而不是新建立一个会话。对方收到这个reINVITE请求后会发送一个(OK)应答表示接受这个改变。请求方通过一个ACK来表示接受了对方的这个(OK)应答。如果对方不同意这个媒体属性变化他会发送一个错误的应答比如(暂时不能进行)这个也会收到发起者的一个ACK响应。不管怎样就是是reINVITE的失败也不会影响到现有的会话-原有的会话还可以用上次的媒体会话属性继续。可以在节找到会话属性更改的细节说明。在通话结束的时候Bob首先断开(挂机hangsup)并且发送一个BYE的消息。这个BYE的消息将直接送到Alice的softphone同样是跳过代理的。Alice通过发送(OK)应答来确认收到了这个BYE消息这个消息终止了会话并且应答了BYE的请求。ACK在这里不需要发送-一个ACK信号只在响应一个INVITE的响应的时候被发送。我们稍晚一点会讨论这个INVITE的特别处理但是基于SIP的可靠性的机制一个通话的时间可以认为包含电话振铃和挂机的时间(butrelatetothereliabilitymechanismsinSIP,thelengthoftimeitcantakeforaringingphonetobeanswered,andforking)基于这样的原因SIP请求的处理通常根据是否INVITE请求进行分类INVITE类和非INVITE类请求分开处理。结束会话的细节可以在节查到。节描述了图中使用的全部消息详细解释。在某些情况下所有会话中的包都继续通过代理转发会很有用。比如如果biloxicom代理服务器希望在INVITE之后继续保持SIP消息流他会在INVITE中增加一个头域(RecordRoute)包含一个URI指向这个代理服务器的hostname或者IP地址。这个消息会被Bob的SIP电话和Alice的softphone所接到(因为RecordRoute头域将在(OK)应答中被送回)并且在会话中一直保存。那么biloxicom代理服务器就可以继续接收和转发ACK,BYE,给BYE的(OK)应答。每一个代理都可以单独决定是否接收INVITE以后的后续消息并且这些后续消息都可以被发送到那些决定接收后续消息的代理服务器。这种情况通常发生在提供midcall业务的代理服务器上。登记服务是另一个常用的SIP操作。登记服务是biloxicom代理服务器知道Bob当前地址的一个方法。在初始化的时候或者每隔一段时间Bob的SIP电话发送REGISTER消息给biloxicom的一个注册服务器。REGISTER消息包含了Bob当前登陆服务器的SIP或者SIPS的URI(sip:bobbiloxicom)(转换成为Contact域中的SIP或者SIPSURI)。登记服务器登记这个映射这个叫做绑定(binding)写到一个数据库里边叫做定位服务(locationservice)这个数据库可以被biloxicom的代理服务器使用。通常登记服务器和代理服务器是做在一起的。一个很重要的概念就是SIP服务器的差别在逻辑上并非在物理上的差别。Bob并没有限定非得在一个单个设备上发起注册。比如他家里的SIP电话和公司的SIP电话都可以注册。这些消息在定位服务(locationservice)中保存并且允许代理服务器通过不同的手段查找Bob。同样的不同的用户也可以在同一个设备上同时注册。定位服务(locationservice)是一个逻辑概念。他是让代理服务通过输入一个URI来查询到底应该向哪里转发请求。可以简单通过用户注册来建立这个定位服务所需要的资料也可以通过其他方法。可以通过其他任意的地址映射方式来实现定位服务。最后在SIP中需要注意的是注册服务只是用来提供路由收到的SIP请求的它并不做请求的身份认证的判定。在SIP中授权和认证可以通过建立在基于请求应答的模式上的上下文相关的请求来实现也可以使用更底层的方式来实现(具体在节有描述)。完整的注册SIP消息描述例子在节。其他SIP的操作比如检查SIP服务器的负载或者使用客户端使用可选项(OPTIONS)或者用CANCEL取消一个未决的请求在后续的章节中会介绍。、协议的结构SIP是一个分层的协议意思是说SIP协议由一组相当无关的处理层次组成这些层次之间只有松散的关系。协议分成不同层次来描述是为了能够更清晰的表达在同一个小节里有功能的公共要素的交叉描述。本协议并没有规定一个具体的实现。当我们说一个要素”包含”某一个层我们的意思是这个要素复核这个层定义的规则。不是SIP每一个要素都一定包含每一个层。此外SIP定义的要素是逻辑上的要素不是物理要素。一个物理的实现可以实现不同的逻辑要素或许甚至是基于串行事务处理原理。SIP最底层的是它的语法和编码层。编码方式是采用扩展的BackusNaurFormgrammar(BNF范式)。完整的BNF描述在节第节有简要的SIP消息结构描述。第二层是传输层。它定义了一个客户端如何发送请求和接收应答以及一个服务器如何接收请求和发送应答。所有的SIP要素都包含一个通讯层。第节有通讯层的描述。第三层是事务层。事务是SIP的基本组成部分。一个事务是客户发送的一个请求事务(通过通讯层)发送到一个服务器事务连同服务器事务的所有的该请求的应答发送回客户端事务。事务层处理应用服务层的重发匹配请求的应答以及应用服务层的超时。任何一个用户代理客户端(useragentclientUAC)完成的事情都是由一组事务构成的。有关事务的讨论在第节有描述。用户代理包含一个事务层来实现有状态的代理服务器。无状态的代理服务器并不包含事务层。事务层包含一个客户元素(可以认为是一个客户事务)和一个服务器元素(可以认为是一个服务器事务)他们都可以用一个有限状态机来处理特定的请求。在事务层之上是事务用户(TU)。每一个SIP实体除了无状态代理都是一个事务用户。当一个TU发出一个请求它首先创建一个客户事务实例(clienttransactioninstance)并且和请求一起发送这包括了目标IP地址、端口号、以及发送请求的设备。TU可以创建客户事务也可以取消客户事务。当客户取消一个事务它请求服务器终止正在处理的事务并且回滚状态到该事务开始前的状态并且产生指定的该事务的错误报告。这是由CANCEL请求完成的这个请求有自己的事务并且包含一个被取消的事务(第节)。SIP要素包含用户代理客户端和服务器无状态和有状态代理服务器和注册服务器包含一个可以互相区别的核心(Cores)。Cores除了无状态代理服务器都是事务用户。UAC(用户代理客户端)和UAS(用户代理服务端)的cores的行为依赖于实现对所有的实现来说有几个公共的原则(第节)。对UAC来说这些规则约束请求的建立对UAS来说这些规则约束请求的处理和应答。由于注册服务在SIP中是一个重要的角色所以UAS处理REGISTER请求有一个特别的名字:登记员(registrar登记服务器)。第节描述了UAC和UAS的对REGISTER实现的core(核心)行为。第节描述了OPTIONS的UAC和UAS的core实现这个OPTIONS用来检测UA的处理能力的(UAuseragent)。小虎:在对话中有其他的相关会被发送。一个对话是一个持续一定时间的两个用户之间的端到端的SIP关系。对话过程要求两个用户代理之间的信息是有序的而且请求被正确路由传输的。在这个规范中只有INVITE请求可以用来建立会话。当一个UAC在一个对话中发出请求的时候它不仅遵循第节描述的一般UAC规则而且也遵循对话中的请求规则。第节讲述了对话并且讨论了对话的创建和维持以及在对话中创建一个请求。SIP中最重要的方法就是INVITE方法它用来在不同的参与者中创建会话使用。一个会话由一组参与者他们之间用于交流的媒体流组成。第节讲述了这些会话的创建初始化过程以及创建一个或一组对话。第节讲述了在对话中使用INVITE请求来改变会话的属性。最后第节讲述了如何终止会话。第、、、、、、节讲述了完整的UA核心(第节描述了取消在UA核心和代理核心中使用)。第节讲数了代理服务器代理服务器用于在两个UA之间做消息路由使用。、协议的定义以下讲述的名次对SIP有着额外的意义:AddressofRecord:记录地址。一个addressofrecord(AOR)是一个SIP或者SIPSURI它指向了一个具有定位服务的主机这个主机可以把URI映射成为用户真正物理位置的URI。通常情况下定位服务器是通过登记服务来建立的。一个AOR经常被认为是一个用户的”公共地址”BacktoBackUserAgent:背对背的用户代理(BBUA)是一个逻辑实体它就像用户代理服务器(UAS)一样接收和处理请求。为了决定该如何应答一个请求BBUA就像UAC一样工作并且发出请求。但是它不像代理服务器(proxy)它维持对话状态并且参与已经建立的对话中的每一个请求。由于它是直接的UAC和UAS的串连所以不需要对他有额外的定义。Call:呼叫一个呼叫是一个非正式的术语它是指在端点之间一个一些通讯行为通常用于建立多媒体对话。CallLeg:对话的别名在本规范中没有使用。CallStateful:如果一个代理服务器(proxy)保存一个对话的状态(从最开始的INVITE到对话终结的BYE)那么这个代理服务器就是请求有状态的。一个请求有状态(callstateful)的代理服务器也一定是事务有状态的但是事务有状态的不一定是请求有状态的。Client:客户端。一个客户端是一个任意的网络元素它发出SIP请求和接收SIP应答。客户端可能会也可能不会和人交互。用户代理客户端(UAC)和代理服务器都是客户端。Conference:一个包含多个参与方的多媒体会话(见后)。Core:核心。核心定义了SIP实体的特定类别。比如定义了一个有状态和无状态的代理服务器一个用户代理或者注册服务器(registrar)。所有的核心除了无状态代理服务器都是事务用户。Dialog:对话一个对话是持续一段时间的两个UA之间的端到端的SIP关系。一个对话由SIP消息建立就像用xx响应INVITE请求。我们用Callidentifierlocaltag(本地tag)remotetag(对方tag)来标志一个对话一个对话在RFC中被正式叫做CALLLEGDownstream:它是事务中的消息传递方向。它特指从UAC到UAS的请求流的方向FinalResponse:终结响应。一个响应终端SIP事务的应答和事务中间的临时响应相反。所有的xxxxxxxxxx响应都是终结响应。Header:头。头域是在SIP消息头部用来描述这个SIP消息信息的部分。它由一堆头域字段组成。HeaderField:头域字段。头域字段是在SIP消息头域的字段。一个头域字段可以由多个头域字段行组成。一个头域字段由一个头域名和(零个或多个)头域值组成。多个头域值用’,’分割。某些头域字段只能有单个值比如结果域(result)就只能有一个值。HeaderFieldValue:头域值。一个头域值是一个单个的值一个头域字段可以有个或者多个头域值。HomeDomain:宿主机。一个提供SIP服务的主机。一般指的是在登记服务中指明的记录地址中的URI的主机。InformationalResponse:提示应答。和临时应答一样。Initiator,CallingParty,Caller:用INVITE初始一个会话(和对话)的那方。一个caller从发出INVITE请求建立对话开始到对话终止都一直是这个角色。Invitation:一个INVITE请求。Invitee,InvitedUser,CalledParty,Callee:被叫方。收到INVITE请求并且建立会话的那方。一个被叫方从收到INVITE请求起到终止INVITE建立的对话结束都称作被叫方。LocationService:定位服务。定位服务是用来给SIP转发或者代理服务器确定被叫方可能的位置使用的。它包含一张绑定了addressofrecord的表被叫方可能有到多个记录。绑定的记录可以通过多种渠道添加和删除本规范定义了REGISTER方法来更新绑定表。Loop:环路。当请求抵达一个代理服务器代理服务器转发这个请求当这个请求再次来到同一个代理服务器就称之为环路。当第二次抵达的时候Request-URI中包含了上次抵达的资料并且由于并没有什么东西可以改变转发的策略这样就导致这个请求还会再次被转发回来。环路请求是错误的所以处理程序需要检测和防止协议中出现的环路请求。LooseRouting:丢失路由。代理服务器在下述情况下会丢失路由。AproxyissaidtobelooseroutingifitfollowstheproceduresdefinedinthisspecificationforprocessingoftheRouteheaderfieldTheseproceduresseparatethedestinationoftherequest(presentintheRequestURI)fromthesetofproxiesthatneedtobevisitedalongtheway(presentintheRouteheaderfield)AproxycomplianttothesemechanismsisalsoknownasalooserouterMessage:消息。SIP元素之间传送的协议数据就是消息。SIP消息既可以是请求也可以是应答。Method:方法。方法是在服务器请求处理的主要功能。方法是请求消息自身携带的。典型的方法就是INVITE和BYE。OutboundProxy:对外代理服务器。一个代理服务器接收到客户的请求即使它不是由RequestURI所决定的服务器。通常一个UA会手工配置一个对外的代理服务器或者可以通过一个自动配置的协议自动配置一个。ParallelSearch:并行搜索。并行搜索情况下代理服务器会向多个用户可能存在的地方发起请求并且等待应答。同串行搜索不同的地方是并行搜索不会等待上一个请求应答回来之后再发起下一个搜索而是一个接一个的发起搜索请求。ProvisionalResponse:临时应答。服务器用来标志自己正在处理的应答但是本应答并不结束一个SIP事务。xx应答就是临时的其他应答标志着事务的结束。Proxy,ProxyServer:代理、代理服务器。一个中间的实体。它本身即作为客户端也作为服务端为其他客户端提供请求的转发服务。一个代理服务器首先提供的是路由服务也就是说保证请求被发到更加”靠近”目标用户的地方。代理服务器对某些强制政策有用(比如确认一个用户是否允许建立一个呼叫等)。一个代理服务器翻译并且如果有需要的话再转发前会重写请求消息。Recursion:回路、递归。一个客户端在响应请求的时候产生新的到Contract包头域的URI请求的时候会在xx响应中陷入递归。AclientrecursesonaxxresponsewhenitgeneratesanewrequesttooneormoreoftheURIsintheContactheaderfieldintheresponseRedirectServer:重定向服务器。一个重定向服务器是一个产生xx应答的UAS服务器指示客户端连接别的URI。Registrar:登记员。一个登记员(登记服务器)是一个接收REGISTER请求得服务器。他把请求得信息放到定位服务器中这样可以让定位服务器很方便得查找位置信息。RegularTransaction:常规事务。凡不包含INVITE,ACK,或者CANCEL方法得事务就是常规事务。Request:请求。一个由客户端发到服务端得SIP信息用于执行特定得功能。Response:应答。一个由服务端发到客户端得SIP信息。用来标志从客户端发往服务端得请求处理得情况得。Ringback:回铃音。回铃音是一个信号音。是给呼叫方得一个信号表示被叫方正在振铃(Ringing)。RouteSet:路由集。路由集合是一个顺序得SIP或者SIPSURI。这些URI描述了传递一个请求所必须经历得代理列表。一个路由集可以是自适应得因为包头中包含了RecordRoute(记录路由)也可以是依赖配置得到得。Server:服务器。一个server是一个网络元素接收请求并且处理请求并且发送回应给请求方。典型得服务器就是代理服务器(proxies)用户代理服务器(useragentservers)重定向服务器登记服务器。SequentialSearch:顺序查找。在顺序查找中代理服务器顺序尝试联系地址在处理下一个之前必须等待上一个请求已经有一个结束应答。一个xx或者xx系列得最终应答总是结束一个顺序查找。Session:会话。根据SDP得描述:”一个多媒体会话是一个由多媒体发送方和接受方组成得集合并且包括在发送方和接受方之间得数据流。一个多媒体会议是一个典型得多媒体会话。”(RFC)(一个session在SDP订一下可以是一个或者多个RTPsessino)。在定义中一个被叫方可以被多次邀请被不同得呼叫方邀请到同一个会话。在SDP中一个会话可以被SDP用户名sessionid,网络类型地址类型地址元素得一个集合串所规定。SIP事务:一个SIP事务是在客户端和服务端得事件包括了从第一个由客户端发送到服务端得请求到最后一个(非xx)服务端向客户端发出得终结应答。如果请求是一个INVITE请求并且终结应答是一个非xx得应答那么事务还包括一个ACK给服务器做应答。给INVITE请求的xx应答的ACK回应是一个独立的事务。Spiral:回溯。一个回溯是指一个SIP请求路由给一个proxy并且转发但是又被路由回这个proxy但是不同于回路(递归)的是这次路由回来的请求包的包头中包含了不同于原请求的请求包部分使得本次proxy决定的路由转发与上次不同。通常这是说请求的RequestURI不同于上次的RequestURI。一个回溯不是一个错误不同于回路(环路loop)。通常导致这样的现象是呼叫转发(callforwarding)。一个用户呼叫joeexamplecom。examplecom代理服务器转发请求到Joe的PC,并且Joe的pc呼叫转移到bobexamplecom。这个请求被转发回examplecom代理服务器。可是这个并不是一个环路(loop)。因为请求的目的地址变成了另一个用户这就是回溯是一个合法的情况。StatefulProxy:有状态的代理服务器。在逻辑上有状态的代理服务器就是处理一个请求的过程中维持的一个本规范所定义的客户端和服务端的事务状态机。也是一个事务又状态代理服务器(transactionstatefulproxy)。具体的statefulproxy在第节定义。一个(事务)有状态代理服务器和一个callstatefulproxy不是一回事。StatelessProxy:无状态的代理服务器。在逻辑上无状态代理服务器在处理请求中并不维持客户和服务端的事务状态机。一个无状态的代理服务器直接转发每一个接收到的请求和每一个接收到的响应。StrictRouting:严格路由。路由处理规则如果复核RFC协议(andmanypriorworkinprogressversionsofthisRFC)就是一个严格路由。在这个规则下如果在包头中包含Route域那么代理服务器就会删除RequestURI域内容。本文档并不要求一定要有严格路由本文档只要求松散路由就可以了。支持严格路由的代理服务器也叫严格路由器。TargetRefreshRequest:目标刷新请求。一个TargetRefreshRequest是一个在对话中发出的请求用来更改对话目标的请求。TransactionUser(TU):事务用户。在transaction层之上的协议层。TU包括了UAC核心UAScore,和proxycore。Upstream:上行流。一个在事务中的消息流向方向。它是指由用户代理服务器(UAS)发出应答到用户代理客户端(UAC)的消息流向方向。URLencoded:一串根据RFC-节编码的字符。UserAgentClient(UAC):用户代理客户端。用户代理客户端是一个逻辑的概念他创建一个新请求并且用客户事务状态机发送这个请求。UAC角色只在事务中存在。换句话说UAC就是一小段代码初始化一个请求并且在事务中遵循UAC的规则。如果它接下来收到一个请求那么在那个事务中它就是作为UAS来处理请求。UACCore:UAC核心。在transaction和transport层之上得UAC实现的功能集合。UserAgentServer(UAS):用户代理服务器UAS是一个逻辑的实体对SIP请求做响应的。应答接受、拒绝、或者转发对应的请求。UAS角色在事务中存在。换句话说是响应请求的一小段软件在事务中作为UAS存在。如果他发出请求那么他就在事务中作为UAC存在。UASCore:UAS核心。在transaction和transport层智商的UAS实现的功能集合。UserAgent(UA)。一个逻辑实体的概念包含UAC和UAS。UAC和UAS就像代理服务器和转发服务器是在事务by事务的原理(串行事务处理)上定义的。例如当发出一个初始化INVITE请求的时候UA作为UAC初始化一个呼叫动作当从被叫方接收到一个BYE请求的时候UA作为UAS响应。类似的同样的代码可以对一个请求做为proxy服务器处理对另一个请求作为重定向服务器。proxylocationregistrar服务器都是逻辑实体在它们的实现中可能是作为单个应用实现的。、SIP消息:SIP协议是一个基于文本的协议使用字符集(RFC)。一个SIP消息既可以是一个从客户端到服务器端的请求也可以是一个从服务器端到客户端的一个应答。即使在字符集上和语法细节上有所不同请求()还是应答()消息都基于RFC格式的。(SIP允许包头域不是标准的RFC包头域)。这两种消息类型都由一个起始行一个或者多个包头域一个可选的消息中文组成。一般消息=起始行*消息包头CRLF消息正文起始行=请求行状态行起始行、每一个包头行空行、都必须由回车换行组成(CRLF)。即使消息中文没有也必须有一个空行跟随。除了在字符集上的区别以外很多SIP的消息和包头域的格式都同HTTP一样。我们在这里就不重复它的语法和语义了我们用HXY来标志HTTP规范(RFC)的XY节的描述。SIP并非一个HTTP的超集或者扩展。.请求SIP请求是根据起始行中的RequestLine来区分的。一个Requestline包含方法名字Request-URI用单个空格(SP)间隔开的协议版本。RequestLine由CRLF结束。除了用作行结束标志以外不允许CR或者LF出现在其他地方。在其他域中不允许出现线形的空白(linerwhitespaceLWS)RequestLine=MethodSPRequestURISPSIPVERSIONCRLFMethod:这个规范规定了中方法:REGISTER用于登记联系信息INVITEACK,CANCEL用于建立会话BYE用于结束会话OPTIONS用于查询服务器负载。SIP扩展、标准RFC追加可能包含扩展的方法。RequestURI:RequestURI是一个SIP或者SIPSURI他们在节由描述。也可以是一个通用的URI(RFC)。它标志了这个请求所用到的用户或者服务的地址。RequestURI禁止包含空白字符或者控制字符并且禁止用”<>”括上。SIP元素可以支持除了SIP或者SIPS之外所规定的RequestURIs。比如”tel”URI模式(RFC)。SIP元素可以用他们自己的机制来转换nonSIPURIs到SIPURISIPSURI或者其他什么格式的URI。SIPVersion:请求和应答消息都包含当前使用的SIP版本这个遵循H(类似HTTP用SIP替代用SIP替代HTTP)中关于版本的规定版本依赖升级版本号。一个应用发出的SIP消息一定包含了SIPVersion“SIP”。这个SIP版本串是大小写不铭感的但是在实现中必须发送大写。不像HTTP,SIP把版本号当作一个文本串处理。在实现上这个应该不会有区别。.应答SIP应答和SIP请求的区别在于在STARTLINE中是否包含一个STATUSLINE。一个statusline在由数字表达的status-code之前是一个协议的版本串每一个元素之间用一个单个SP(空格)分开。除了最后用作结束标志以外CRLF不允许出现在其他地方。statusline=SIPVERSIONSPSTATUSCODESPReasongPhraseCRLFStatusCode是一个位的数字resultcode用来标志处理请求的一个结果。ReasonPhrase是一个简短的StatusCode的说明。StatusCode是为了能自动处理使用的但是ReasonPhrase是用来给用户看得。一个客户端并不要求一定要显示或者解释这个ReasonPhrase。本文档建议输出这个reasonphrase,实现中可以选择其他文本比如用请求包头中指定的合适语言来显示。status-code的第一个数字表示了应答的类型。接下来两个数字并不作分类使用。基于这个原因任何statuscode在到的可以统称位”xx应答”类似的在到的可以统称位”xx应答”依此类推。SIP允许类应答:xx:临时应答-请求已经接收正在处理这个请求。xx:成功处理-请求已经成功接收并且正确处理了这个请求。xx:重定向-还需要附加的操作才能完成这个请求本请求转发到其他的服务器上处理。xx:客户端错误--请求包含错误的格式或者不能在这个服务器上完成。xx:服务器错误-服务器不能正确的处理这个显然合法的请求。xx:全局错误-请求不能被任何服务器处理。节定义了详细的代码说明。头域SIP头域和HTTP头域在语法和语义上都比较类似。特别的SIP头域遵循H关于消息头的语法的定义并且遵循多行

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/172

SIP协议详解(中文)

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利