SIP 交互流程.doc_第1页
SIP 交互流程.doc_第2页
SIP 交互流程.doc_第3页
SIP 交互流程.doc_第4页
SIP 交互流程.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SIP 交互流程一、 SIP(Session Initiation Protocol)会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。SIP的业务模式是一个点对点协议,其中有两个要素SIP用户代理和SIP网络服务器。用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备。用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS)。客户机元素初始呼叫而服务器元素应答呼叫。这允许点到点的呼叫通过客户机-服务器协议来完成。下图是SIP业务的网络结构和各个参与者的关系。SIP是互联网工程任务组(IETF)多媒体数据和控制体系结构的一个组成部分,因此它与IETF的许多其他协议都有联系,例如RTP(实时传输协议)和SDP协议。SIP与许多其它的协议协同工作,仅仅涉及通信会话的信令部分(control message)。SIP报文内容传送会话描述协议(SDP),SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。SIP的一个典型用途是:SIP“会话”传输一些简单的经过封包的实时传输协议流。RTP本身才是语音或视频的载体二、 业务流程和协议流程这里介绍了注册和呼叫流程,其他场景需要了解,博客地址/gnuhpc/archive/2012/12/10/2812095.html,比较详细。并有场景的抓包截图等。SIP协议也是简单的讲解请求和应答消息种类,和各个头域讲解,详细的SIP协议请查看文档rfc3261。1注册流程:注册流程图如下图,举例用sip客户端在3机器上,以1001号码,向52上的Freeswitch注册。 抓包截图如下图客户端第一次发送的REGISTER包体内容如下图, expries=3600服务器返回的401包体内容如下图客户端带着验证信息项服务器发送REGISTER包体内容如下图服务器给客户端返回注册成功200OK包体内容如下图2注销流程:客户端注销如下图,举例用28上的SIP客户端注销。用户号码是1000。注销抓包截图如下客户端向服务器发送的注销REGISTER包体信息如下图,expries=0;服务器向客户端返回确认消息200OK的包体如下图3 基本呼叫建立过程:呼叫流程如下图,举例3上以1001号码注册到服务器,28上以1000号码注册到服务器上,1001呼叫1000。呼叫过程抓包流程如下图1001发送向服务器发送INVITE请求的包体内容如下INVITE sip:100052 SIP/2.0Via: SIP/2.0/UDP 3;rport;branch=z9hG4bKcgapzrwjMax-Forwards: 70To: From: bob ;tag=necscCall-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 736 INVITEContact: Content-Type: application/sdpAllow: INVITE,ACK,BYE,CANCEL,OPTIONS,PRACK,REFER,NOTIFY,SUBSCRIBE,INFO,MESSAGESupported: replaces,norefersub,100relUser-Agent: Twinkle/1.9.0Content-Length: 305v=0o=twinkle 2061889636 1855002003 IN IP4 3s=-c=IN IP4 3t=0 0m=audio 8000 RTP/AVP 98 97 8 0 3 101a=rtpmap:98 speex/16000a=rtpmap:97 speex/8000a=rtpmap:8 PCMA/8000a=rtpmap:0 PCMU/8000a=rtpmap:3 GSM/8000a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=ptime:20服务器返回给用户1001,100 Trying消息体内容如下SIP/2.0 100 TryingVia: SIP/2.0/UDP 3;rport=5060;branch=z9hG4bKleesztcpFrom: bob ;tag=necscTo: Call-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 737 INVITEUser-Agent: FreeSWITCH-mod_sofia/1.6.1064bitContent-Length: 0服务器向被叫1000转送INVITE请求消息包内容如下INVITE sip:100028:61306;rinstance=ddeb50f2659c14db SIP/2.0Via: SIP/2.0/UDP 52;rport;branch=z9hG4bKD92XXBpSQ5jmcRoute: ;rinstance=ddeb50f2659c14dbMax-Forwards: 69From: Extension 1001 ;tag=Qt95DD4eK4jQFTo: Call-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395929 INVITEContact: User-Agent: FreeSWITCH-mod_sofia/1.6.1064bitAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBESupported: timer, path, replacesAllow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, referContent-Type: application/sdpContent-Disposition: sessionContent-Length: 242X-FS-Support: update_display,send_infoRemote-Party-ID: Extension 1001 ;party=calling;screen=yes;privacy=offv=0o=FreeSWITCH 1477444972 1477444973 IN IP4 52s=FreeSWITCHc=IN IP4 52t=0 0m=audio 19014 RTP/AVP 8 0 101a=rtpmap:8 PCMA/8000a=rtpmap:0 PCMU/8000a=rtpmap:101 telephone-event/8000a=fmtp:101 0-16a=ptime:20被叫1000向服务器发送100 Tring 消息体内容如下SIP/2.0 100 TryingVia: SIP/2.0/UDP 52;rport=5060;branch=z9hG4bKD92XXBpSQ5jmcTo: From: Extension 1001 ;tag=Qt95DD4eK4jQFCall-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395929 INVITEContent-Length: 0被叫1000向服务器发送180 Ringing的消息体内容如下SIP/2.0 180 RingingVia: SIP/2.0/UDP 52;rport=5060;branch=z9hG4bKD92XXBpSQ5jmcContact: To: 1000;tag=d3757b5cFrom: Extension 1001 ;tag=Qt95DD4eK4jQFCall-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395929 INVITEUser-Agent: X-Lite release 4.9.6 stamp 82158Allow-Events: talk, holdContent-Length: 0服务器向主叫1001发送183消息体内容入下,(180不带SDP消息体,183带SDP消息体,可以看到SDP中的地址是52,说明服务器中间做了媒体转发,不是两个客户端点对点发送媒体流)SIP/2.0 183 Session ProgressVia: SIP/2.0/UDP 3;rport=5060;branch=z9hG4bKleesztcpFrom: bob ;tag=necscTo: ;tag=pHgDcjKBpUv4KCall-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 737 INVITEContact: User-Agent: FreeSWITCH-mod_sofia/1.6.1064bitAccept: application/sdpAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBESupported: timer, path, replacesAllow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, referContent-Type: application/sdpContent-Disposition: sessionContent-Length: 218Remote-Party-ID: 1000 ;party=calling;privacy=off;screen=nov=0o=FreeSWITCH 1477432484 1477432485 IN IP4 52s=FreeSWITCHc=IN IP4 52t=0 0m=audio 31502 RTP/AVP 8 101a=rtpmap:8 PCMA/8000a=rtpmap:101 telephone-event/8000a=fmtp:101 0-16a=ptime:20被叫端接通电话,向服务器发送200OK消息的内容如下SIP/2.0 200 OKVia: SIP/2.0/UDP 52;rport=5060;branch=z9hG4bKD92XXBpSQ5jmcContact: To: ;tag=d3757b5cFrom: Extension 1001 ;tag=Qt95DD4eK4jQFCall-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395929 INVITEAllow: SUBSCRIBE, NOTIFY, INVITE, ACK, CANCEL, BYE, REFER, INFO, OPTIONS, MESSAGEContent-Type: application/sdpSupported: replacesUser-Agent: X-Lite release 4.9.6 stamp 82158Content-Length: 201v=0o=- 749980567 3 IN IP4 28s=X-Lite release 4.9.6 stamp 82158c=IN IP4 28t=0 0m=audio 62266 RTP/AVP 8 0 101a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=sendrecv服务器向被叫端发送ACK确认信息,消息体内容如下ACK sip:100028:61306;rinstance=ddeb50f2659c14db SIP/2.0Via: SIP/2.0/UDP 52;rport;branch=z9hG4bKejvpZ66vme96QMax-Forwards: 70From: Extension 1001 ;tag=Qt95DD4eK4jQFTo: ;tag=d3757b5cCall-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395929 ACKContact: Content-Length: 0服务器将200OK转发给主叫,消息体内容如下SIP/2.0 200 OKVia: SIP/2.0/UDP 3;rport=5060;branch=z9hG4bKleesztcpFrom: bob ;tag=necscTo: ;tag=pHgDcjKBpUv4KCall-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 737 INVITEContact: User-Agent: FreeSWITCH-mod_sofia/1.6.1064bitAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBESupported: timer, path, replacesAllow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, referContent-Type: application/sdpContent-Disposition: sessionContent-Length: 218Remote-Party-ID: Outbound Call ;party=calling;privacy=off;screen=nov=0o=FreeSWITCH 1477432484 1477432485 IN IP4 52s=FreeSWITCHc=IN IP4 52t=0 0m=audio 31502 RTP/AVP 8 101a=rtpmap:8 PCMA/8000a=rtpmap:101 telephone-event/8000a=fmtp:101 0-16a=ptime:20通话建立,主叫向服务器发送ACK确认信息,消息体内容如下ACK sip:100052:5060;transport=udp SIP/2.0Via: SIP/2.0/UDP 3;rport;branch=z9hG4bKjcgmjgdkMax-Forwards: 70Proxy-Authorization: Digest username=1001,realm=52,nonce=f622dd44-9b46-11e6-a92f-f3825b0efd4d,uri=sip:100052,response=6a606b2698bf04d915c406872300f4a2,algorithm=MD5,cnonce=4cb8e33f54,qop=auth,nc=00000001To: ;tag=pHgDcjKBpUv4KFrom: bob ;tag=necscCall-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 737 ACKUser-Agent: Twinkle/1.9.0Content-Length: 04 会话更改流程:在双方通话过程中,一方可以更改通话使用的媒体信息,如:收发媒体流的IP和PORT,通话过程所使用的媒体格式等。通过再次发送INVITE或UPDATE消息体,携带新的SDP消息。场景难触发,消息体内容没有什么特殊,在这里就不贴了。5 正常呼叫释放过程:流程图如下图,被叫端先停止通话,举例3上的客户端先停止通话,向服务器发送BYE。抓包如下图;3发送BYE的消息体内容如下BYE sip:100052:5060;transport=udp SIP/2.0Via: SIP/2.0/UDP 3;rport;branch=z9hG4bKtpnwewjkMax-Forwards: 70To: ;tag=pHgDcjKBpUv4KFrom: bob ;tag=necscCall-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 738 BYEUser-Agent: Twinkle/1.9.0Content-Length: 0服务器向3发送200OK确认信息,包体内容如下SIP/2.0 200 OKVia: SIP/2.0/UDP 3;rport=5060;branch=z9hG4bKtpnwewjkFrom: bob ;tag=necscTo: ;tag=pHgDcjKBpUv4KCall-ID: ihvgztnhipwftnizj-B85M-D3HCSeq: 738 BYE(针对什么请求的响应)User-Agent: FreeSWITCH-mod_sofia/1.6.1064bitAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBESupported: timer, path, replacesContent-Length: 0服务器向28转发BYE消息体内容如下BYE sip:100028:61306;rinstance=ddeb50f2659c14db SIP/2.0Via: SIP/2.0/UDP 52;rport;branch=z9hG4bKFUNF11Q0HQZSKMax-Forwards: 70From: Extension 1001 ;tag=Qt95DD4eK4jQFTo: ;tag=d3757b5cCall-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395930 BYEUser-Agent: FreeSWITCH-mod_sofia/1.6.1064bitAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBESupported: timer, path, replacesReason: Q.850;cause=16;text=NORMAL_CLEARINGContent-Length: 028向服务器发送200OK确认消息的消息体内容如下SIP/2.0 200 OKVia: SIP/2.0/UDP 52;rport=5060;branch=z9hG4bKFUNF11Q0HQZSKContact: To: ;tag=d3757b5cFrom: Extension 1001 ;tag=Qt95DD4eK4jQFCall-ID: d37fdc79-15e9-1235-ad86-525400bcb470CSeq: 98395930 BYEUser-Agent: X-Lite release 4.9.6 stamp 82158Content-Length: 06 被叫忙呼叫释放:流程图如下,举例3上用1001注册成功,呼叫正在通话的28上的1000。其他的请求和响应的包体都一样,下面是被叫端返回用户忙包体信息如下SIP/2.0 486 Busy Here(返回码和原因)Via: SIP/2.0/UDP 52;rport=5060;branch=z9hG4bKtyB0mBH7HSm7jTo: ;tag=b7a89e23From: Extension 1001 ;tag=N9ZD3rXrvFF8aCall-ID: 0ffad52d-168c-1235-ad86-525400bcb470CSeq: 98430769 INVITE(回复的请求)User-Agent: X-Lite release 4.9.6 stamp 82158Content-Length: 07被叫无应答流程一:主叫在呼叫被叫过程中,未收到200OK,主叫挂断着同电话,向服务器发送Cancel消息。这里之贴出Cancel消息体和服务器返回的487消息体,内容如下CANCEL sip:10052 SIP/2.0Via: SIP/2.0/UDP 3;rport;branch=z9hG4bKquptluhnMax-Forwards: 70To: From: bob ;tag=alusaCall-ID: xwzhthujzqebpfozj-B85M-D3HCSeq: 87 CANCELUser-Agent: Twinkle/1.9.0Content-Length: 0SIP/2.0 487 Request TerminatedVia: SIP/2.0/UDP 3;rport=5060;branch=z9hG4bKquptluhnFrom: bob ;tag=alusaTo: ;tag=v8gUFpKH8DBBcCall-ID: xwzhthujzqebpfozj-B85M-D3HCSeq: 87 INVITEUser-Agent: FreeSWITCH-mod_sofia/1.6.1064bitAccept: application/sdpAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBESupported: timer, path, replacesAllow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, referContent-Length: 08被叫无应答流程二:主叫呼叫被叫,被叫响铃但不解通电话,过30秒后,返回请求超时。9遇忙呼叫前转:10无应答呼叫前转流程:11呼叫保持:12呼叫等等:三、 SIP消息类型SIP消息采用文本方式编码,分为两类:请求消息和响应消息。1. 请求消息 用于客户端为了激活按特定操作而发给服务器的SIP消息,包括 INVITE, ACK,OPTIONS,BYE,CANCEL和REGISTER消息等,各消息功能如表3-1所示。表3-1 请求消息请求消息消息含义INVITE发起会话请求,邀请用户加入一个会话,会话描述含于消息体中。对于两方呼叫来说,主叫方在会话描述中指示其能够接受的媒体类型及其参数。被叫方必需在成功响应消息的消息体中指明其希望接受哪些媒体,还可以指示其行将发送的媒体。如果收到的是关于参加会议的邀请,被叫方可以根据Call-ID或者会话描述中的标识确定用户已经加入该会议,并返回成功响应消息。ACK证实已收到对于INVITE请求的最终响应。该消息仅和INVITE消息配套使用。BYE结束会话CANCEL取消尚未完成的请求,对于已完成的请求(即已收到最终响应的请求)则没有影响REGISTER注册OPTIONS查询服务器的能力2. 响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。不同类的响应消息由状态码来区分。状态码包含三位整数,状态码的第一位用于定义响应类型,另外两位用于进一步对响应进行更加详细的说明。各响应消息分类和含义如表3-2所示。表3-2 响应消息序号状态码消息功能1xx信息响应(呼叫进展响应)表示已经接收到请求消息,正在对其进行处理100试呼叫180振铃181呼叫正在前转182排队2xx成功响应表示请求已经被成功接受、处理200OK3xx重定向响应表示需要采取进一步动作,以完成该请求300多重选择301永久迁移302临时迁移303见其它305使用代理380代换服务4xx客户出错表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理400错误请求401无权402要求付款403禁止404没有发现405不允许的方法406不接受407要求代理权408请求超时410消失413请求实体太大414请求URI太大415不支持的媒体类型416不支持的URI方案420分机无人接听421要求转机423间隔太短480暂时无人接听481呼叫腿/事务不存在482相环探测483跳频太高484地址不完整485不清楚486线路忙487终止请求488此处不接受491代处理请求493难以辨认5xx服务器出错表示SIP服务器故障不能完成对正确消息的处理500内部服务器错误501没实现的502无效网关503不提供此服务504服务器超时505SIP版本不支持513消息太长6xx全局故障表示请求不能在任何SIP服务器上实现600全忙603拒绝604都不存在606不接受请求消息和响应消息都包括SIP头字段和SIP消息字段。在SIP消息中加入SDP消息正文部分。四、 消息结构1. 请求消息(1) 请求消息结构如图3-3所示是SIP请求命令的格式,由起始行、消息头和消息体组成。通过换行符区分消息头中的每一条参数行。对于不同的请求消息,有些参数可选。图3-3 SIP请求消息结构(2) 请求消息参数下面仅对几个常用的参数字段进行说明。l Call-ID该字段用以唯一标识一个特定的邀请或标识某一客户的所有登记。需要注意的是,一个多媒体会议可能会有多个呼叫,每个呼叫有其自己的Call-ID。例如,某用户可数次邀请某人参加同一历时很长的会议。用户也可能会收到数个参加同一会议或呼叫的邀请,其Call-ID各不相同。用户可以利用会话描述中的标识,例如SDP中的o(源)字段的会话标识和版本号判定这些邀请的重复性。Call-ID的一般格式为:Call-ID:本地标识主机其中,主机应为全局定义域名和全局可选路IP地址,此时,本地标识由在“主机”范围内唯一的URI字符组成。否则,本地标识必须是全局唯一的值,以保证Call-ID的全局唯一性。Call-ID字符需区分大小写。Call-ID示例:Call-Id: call-973636852-401其中,01为主机的IP地址,call-973636852-4为全局唯一的本地标识。l From所有请求和响应必须包含此字段,以指示请求的发起者。服务器将此字段从请求消息复制到响应消息。该字段的一般格式为:From:显示名;tag=xxxx其中,显示名为用户界面上显示的字符,如果系统不予显示,应置显示名为“匿名(Anonymous)”。显示名为任选字段。tag称为标记,为16进制数字串,中间可带连字符“-”。当两个共享同一SIP地址的用户实例用相同的Call-ID发起呼叫邀请时,就需用此标记予以区分。标记值必须全局唯一。用户在整个呼叫期间应保持相同的Call-ID和标记值。From字段的示例:From: ;tag=1c17691l To该字段指明请求的接收者,其格式和From相同,仅第一个关键词代之以To。所有请求和响应消息必须包含此字段。字段中的标记参数可用于区分由同一SIP URL标识的不同的用户实例。由于代理服务器可以并行分发多个请求,同一请求可能到达用户的不同实例(如住宅电话等)。由于每个实例都可能响应,因此需用标记来区分来自不同实例的响应。需要注意的是,To字段中的标记是由每个实例至于响应消息中的。To字段的示例:To: To: ;tag=62beb3ca注意,在SIP中,Call-ID、From和To三个字段标识一个呼叫分支。在代理服务器并行分发请求时,一个呼叫可能会有多个呼叫分支。l CseqCseq称之为命令序号。客户在每个请求中应加入此字段,它由命令名称和一个十进制序号组成,该序号由请求客户选定,在Call-ID范围内唯一确定。序号初值可为任意值,其后具有相同Call-ID值,但不同命令名称、消息体的请求,其Cseq序号应加1。重发请求的序号保持不变。服务器将请求中的Cseq值复制到响应消息中,用于将请求和其触发的响应相关联。ACK和CANCEL请求的Cseq值(十进制序号)和对应的INVITE请求相同,BYE请求的Cseq序号应大于INVITE请求。服务器必须记忆相同Call-ID的INVITE请求的最高序号,收到序号低于此值的INVITE请求应在给出响应后予以丢弃。由代理服务器并行分发的请求,其Cseq值相同。严格来说,Cseq对于任何可由BYE或CANCEL请求取消的请求以及客户可连续发送多个具有相同Call-ID请求的情况都是需要的,其作用是判定响应和请求的对应关系。Cseq字段的示例:Cseq: 1 INVITEl ViaVia字段用以指示请求历经的路径。它可以防止请求消息传送产生环路,并确保响应和请求消息选择同样的路径,以保证通过防火墙或满足其它特定的选路要求。发起请求的客户必须将其自身的主机名或网络地址插入请求的Via字段,如果未采用缺省端口号,还需插入此端口号。在请求前传过程中,每个代理服务器必须将其自身地址作为一个新的Via字段加在已有的Via字段之前。如果代理服务器收到一个请求,发现其自身地址位于Via头部中,则必须回送响应“检测到环路”。当请求消息通过网络地址翻译点(如防火墙)时,请求的源地址和端口号可能被改变,此时Via字段就不能成为响应消息选路的依据。为了防止这一点,代理服务器应校验顶端Via字段,如果发现其值和代理服务器检测到的前站地址不符,则应在该Via字段中加入“receive”参数,如此修改后的字段称为“接收方标记Via头部字段”。例如:Via:SIP/2.0/UDP :5060Via:SIP/2.0/UDP :5060;received=0由点发出的请求消息路径外部地址为0的网络地址翻译点后,到达代理服务器。后者注意到前站发送地址和Via字段地址不符,就把实际发送地址作为接收方标记加在顶端Via字段的末尾,然后再将代理自己的地址作为新加的Via字段置于最上面。若代理服务器向多播地址发送请求,则必须在其Via头部字段中加入“多播地址(maddr)”参数,此参数指明该多播地址。代理服务器或UAC收到Via头部字段时的处理规则是:规则1:第1个Via头部字段应该指示本代理服务器或UAC。如果不是,丢弃该消息,否则,删除该Via字段。规则2:如果没有第2个Via头部字段,则该响应已经到达目的地。否则,继续做如下处理。规则3:如果第2个Via头部字段包含“maddr”参数,则按该参数指示的多播地址发送响应,端口号由“发送方”参数指明,如未指明,就使用端口号5060。响应的生存期应置为“生存期(ttl)”参数指定的值,如未指明,则置为1。规则4:如果第2个Via字段不包含“maddr”参数,但有一个接收方标记字段,则应将该响应发往“received”参数指示的地址。规则5:如果既无“maddr”参数又无标记,就按发送方参数指示的地址发送响应。Via字段的一般格式为:Via:发送协议 发送方;隐藏参数;生存期参数;多播地址参数;接收方标记,分支参数其中,发送协议的格式为:协议名/协议版本/传送层,协议名和传送层的缺省值分别为SIP和UDP。发送方为通常的发送方主机和端口号。隐藏参数就是关键词hidden,如有此参数,表示该字段已由上游代理予以加密,以提供隐私服务。多播地址参数和接收方标记的意义如前所述。生存期参数与多播地址参数配用。分支参数用于代理服务器并行分发请求时标记各个分支,当响应到达时,代理可判定是哪一分支的响应。Via字段的示例:Via:SIP/2.0/UDP16:5061;ttl=16;maddr=0;branch=z9hG4bkbc427dad6l Contact该字段用于INVITE、ACK和REGISTER请求以及成功响应、呼叫进展响应和重定向响应消息,其作用是给出其后和用户直接通信的地址。INVITE和ACK请求中的Contact字段指示该请求发出的位置。它使被叫可以直接将请求(如BYE请求)发往该地址,而不必借助Via字段经由一系列代理服务器返回。对INVITE请求的成功响应消息可包含Contact字段,它使其后SIP请求(如ACK请求)可直接发往该字段给定的地址。该地址一般是被叫主机的地址,如果该主机位于防火墙之后,则为代理服务器地址。对应于INVITE请求的呼叫进展响应消息中包含的Contact字段的含义和成功响应消息相同。但是,CANCEL请求不能直接发往该地址,必须沿原请求发送的路径前传。REGISTER请求中的Contact字段指明用户可达位置。该请求还定义了通配Contact字段“*”,它只能和值为0的“失效”字段配用,表示去除某用户的所有登记。Contact字段也可设定“失效”参数(任选),给定登记的失效时间。如果没有设定该参数,则用“失效”字段值作为其缺省值。如果两者均无,则认为SIP URI的失效时间为1小时。REGISTER请求的成功响应消息中的Contact字段返回该用户当前可达的所有位置。重定向响应消息,如用户临时迁移、永久迁移、地址模糊等消息中的Contact字段给出供重试的其它可选地址,可用于对BYE、INVITE和OPTIONS请求的响应消息。Contact字段的一般格式为:Contact:地址;q参数;动作参数;失效参数;扩展属性其中,地址的表示形式和To,From字段相同。q参数,其取值范围为0,1,指示给定位置的相对优先级。数值越大,优先级越高。动作参数仅用于REGISTER请求。它表明希望服务器对其后至该客户的请求进行代理服务还是重定向服务。如果未含此参数,则执行动作取决于服务器的配置。失效参数指明URI的有效时间,可用秒表示,也可用SIP日期表示。扩展属性就是扩展名。Contact字段的示例为:Contact: ;q=0.7;expires=3600l Max-Forwards该字段用于定义一个请求到达其目的地址所允

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论