您好,欢迎访问三七文档
SIP协议一.绪论SIP协议即为会话初始协议。针对我们的Subcentrex2.0系统,对SIP协议的需要进行重点学习的是设备的注册以及呼叫在系统中的流程,其中包括消息的发起,转发,处理以及对消息的回应。二.SIP消息SIP消息主要分为请求和响应两个大分类,invite和response!请求消息为客户机发给服务器端,响应消息为服务器发给客户端,他们都是以RFC2822定义的基本格式进行编码的。请求和响应消息格式如下:SIP消息=起始行*消息头部(1个或多个头部)CRLF(空行)[消息体]起始行=请求行/状态行2.1请求消息请求消息的起始行为请求行(Request-Line)。请求行的格式如下所示,由方法名、请求URL和协议版本组成,各部分之间均用一个空格字符进行分隔。除此之外,请求行必须用回车换行(CRLF)字符表示行终结。Request-Line=Method[]Request-URI[]SIP-VersionCRLF1)Method:本规范共定义了6个方法,INVITE、ACK、CANCEL、OPTIONS、BYE和REGISTER。REGISTER消息用于发送注册请求信息,INVITE、ACK、CANCEL用于建立会话连接,BYE用于终结会话连接,OPTIONS用于查询服务器能力。本协议规定方法名必须使用大写字母。除以上6类主要消息外,SIP协议在其他文档中还定有若干方法实现协议扩展。2)Request-URL:指示被邀请用户的当前地址,本协议规定Request-URL中不允许出现空格或其他控制字符且不能包含于“”符号之内。除使用“sip”和“sips”之外,Request-URI还可以使用“tel”的URI定义机制,有关“tel”的URI定义机制参见RFC2806。SIP实体可使用任何可选方法将非SIPURL翻译成SIPURI、SIPSURI或其他URI定义。3)SIP-Version:用于定义协议的当前版本号,本协议的版本号为SIP/2.0请求示例:INVITEsip:665@218.80.220.50:5060SIP/2.0Via:SIP/2.0/UDP172.16.195.156:5060;branch=z9hG4bk80f97d7468ee9eFrom:NULLsip:664@218.80.220.50;user=phone;tag=AB93CCC237BEBA71D1ATo:sip:665@218.80.220.50;user=phoneCall-ID:30057-BD21-D4AD-F0E0-4A468FCF59D9@172.16.195.156CSeq:1INVITESupported:replaces,timerAllow:INVITE,OPTIONS,BYE,CANCEL,ACK,SUBSCRIBE,NOTIFY,INFO,REFERContact:sip:664@172.16.195.156:5060;transport=udpMax-Forwards:70User-Agent:HP180-SVOIPIPPhoneContent-Type:application/sdpContent-Length:229v=0o=TelogyUnknown000010496991049699INIP4172.16.195.156s=RTPAudioc=INIP4172.16.195.156t=00m=audio2070RTP/AVP18408a=rtpmap:18G729/8000a=rtpmap:4G723/8000a=rtpmap:0PCMU/8000a=rtpmap:8PCMA/80002.2响应:响应消息的起始行为状态行(Status-Line),状态行由协议版本、状态码和与状态码相关的文本描述组成,各个部分之间用一个空格字符进行分隔。状态行的格式如下所示:Status-Line=SIP-Version[]Status-Code[]Reason-PhraseCRLF除状态行的尾部可使用回车换行CRLF字符之外,状态行内不允许出现CRLF字符。1)Status-Code(状态码):该参数为一个3位的十进制整数,用于指示请求消息的执行响应结果。2)Reason-Phrase(原因):该参数用于对Status-Code参数进行简单的文本描述。客户机不必检查或显示Reason-Phrase参数。尽管本规范建议使用特定字符表示Reason-Phrase,具体实现过程中Reason-Phrase仍可使用其他的文本字符。本协议共定义6类状态码,其中状态码的第1位数字用于指示响应类型,后两位数字表示具体响应。本协议规定状态码为“100—199”之间的响应用“1XX”进行标识,“200—299”之间的响应用“2XX”进行标识,依此类推。1)1XX:临时响应,表示请求消息正在被处理。2)2XX:成功响应,表示请求已被成功接收,完全理解并被接受。3)3XX:重定向响应,表示需采取进一步以完成该请求。4)4XX:客户机错误,表示请求消息中包含语法错误信息或服务器无法完成客户机请求。5)5XX:服务器错误,表示服务器无法完成合法请求。6)6XX:全局故障,表示任何服务器无法完成该请求。响应示例:SIP/2.0200OKFrom:NULLsip:664@218.80.220.50;user=phone;tag=AB93CCC237BEBA71D1ATo:sip:665@218.80.220.50;user=phone;tag=32dc50da-13c4-4092d0eb-ac971-788041e3Call-ID:30057-BD21-D4AD-F0E0-4A468FCF59D9@172.16.195.156CSeq:1CANCELVia:SIP/2.0/UDP172.16.195.156:5060;received=218.1.121.106;rport=59573;branch=z9hG4bk80f97d7468ee9eContent-Length:02.3头字段SIP头字段的语法和语义定义与HTTP头字段定义基本相同,有关HTTP头字段的定义和SIP头字段多行扩展的定义规则参见RFC2616。RFC2616中定义的多行扩展可使用隐含的空格和折叠字符(folding),而本规范定义的多行扩展规则只能使用显式空格和折叠字符(folding),且空格和折叠字符(folding)作为消息的组成部分。同样,RFC2616也定义了将具有多个参数值的同一字段扩展为具有相同字段名称的多个字段行的规则。该规则同样适用于本协议,但具体应用时规则会有所不同。SIP协议定义的头字段语法规则如下:header=header-nameHCOLONheader-value*(COMMAheader-value)如上所示,SIP头字段允许一个头字段可以定义多个参数值,且多个参数值之间用“,”字符进行分隔。当属性值不为“*”时,Contact头字段允许属性值之间用“,”字符进行分隔。42.4消息实体本协议规定SIP请求消息可包含消息实体部分,消息实体部分的解释应与消息请求方法相一致。对于SIP响应消息,请求方法和响应状态码可以识别消息实体的类型。本协议规定所有SIP响应消息应包含一个消息实体部分。2.5SIP消息帧SIP协议可以使用UDP或者其他不可靠的报文协议进行承载传送,且每一个报文携带一个请求或响应消息。关于SIP协议以不可靠协议传送有关要求参见本规范第18章。具体实现时,如果SIP消息采用面向流的方式进行传送,则SIP消息起始行前的任何CRLF字符应忽略。“Content-Length”头字段值用于定义一个SIP消息在流中的结束位置。当SIP消息采用面向流的方式进行传送时,该头字段不能被省略。三.设备的注册设备在注册的时候会向SERVER发送Registration消息,服务器接受到请求以后会对注册设备进行相应的鉴权,如果成功将会给设备会200OK的响应;如果失败将会给出4XX错误响应。针对我们的Subcentrex系统,设备注册的流程是,设备向AS发送Registration请求消息,AS会想DBPROXY发送设备鉴权请求,然后DBPROXY向RDBMS发送消息,对设备的DEVICEID等信息进行比对,如果正确AS将收到鉴权成功的消息,并想设备发送200OK的响应;既而设备成功注册。下面将给出一个设备成功注册的示例:注册请求:REGISTERsip:218.80.220.50:5060SIP/2.0Via:SIP/2.0/UDP172.16.195.18:5060;branch=z9hG4bke712404c90e866From:sip:663@218.80.220.50;user=phone;tag=E08D85B12D3AE9BECBATo:sip:663@218.80.220.50;user=phoneCall-ID:4098-BD21-D423-BF4E-FFFFC1878259@172.16.195.18CSeq:72REGISTERUser-Agent:WLAN600-SVOIPIPPhoneContact:sip:663@172.16.195.18:5060;transport=udpExpires:360Content-Length:0注册响应:SIP/2.0200OKFrom:sip:663@218.80.220.50;user=phone;tag=E08D85B12D3AE9BECBATo:sip:663@218.80.220.50;user=phone;tag=32dc50da-13c4-4092d0ee-ad4ae-2785220cCall-ID:4098-BD21-D423-BF4E-FFFFC1878259@172.16.195.18CSeq:72REGISTERDate:Fri,30Apr200414:19:26GMTContact:sip:663@172.16.195.18:5060;expires=360Expires:50Via:SIP/2.0/UDP172.16.195.18:5060;received=218.1.121.106;rport=44619;branch=z9hG4bke712404c90e866Content-Length:0四.对话(Dialog)对话是两个UA之间持续一段时间的点对点的SIP连接,它使UA之间的消息变得有序,同时给出请求消息的正确的路由。对话包括一个解释SIP消息的上下文。有关对话外独立UA处理请求和响应的方法参见本规范第8章。本章将规定如何使用那些请求和响应去建立一个对话,以及在对话过程中如何发送后续的请求和响应。任何UA上的对话都是由对话ID来标识的,这个对话ID包含一个Call-ID,一个本地标签和一个远端标签。对话中的每个UA的对话ID是不同的。另外,一个UA的本地标识符与对端UA的远端标识符相等。标签(tags)在唯一的对话ID的生成过程中是不透明的。对话ID与其To头字段中包含一个标签(tag)的所有响应和请有关。某个消息中的对话ID的计算规则取决于SIP实体是UAC还是UAS。对于UAC,对话ID中的Call-ID由消息的Call-ID头字段设置,远端标签(tag)由To头字段的tag设置,本地标签由于From头字段的tag设置。对于UAS,对话ID中的Call-ID由消息中的Call-ID头字段设置,远端标签由消息From头字段的tag设置,消息To头字段的tag设置;对话中包括一些对话中的后续消息所需的状态,包括:对话ID、本地序列号、远URI、远端URI、远端目的、布尔型标记“secure”和路由集,其中路由集是一个顺序发送一个请求到对端所需遍历的服务器地址。临时的响应被创建时,对话处于“初始状态”,当一个2xx的最终响应到达时转如果是其他响应或无响应到达,“初始状态”终止。4.1会话发起的过
本文标题:05_SIP协议
链接地址:https://www.777doc.com/doc-3118100 .html