SIP协议主要消息讲解.docx
- 文档编号:28008709
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:17
- 大小:63.19KB
SIP协议主要消息讲解.docx
《SIP协议主要消息讲解.docx》由会员分享,可在线阅读,更多相关《SIP协议主要消息讲解.docx(17页珍藏版)》请在冰豆网上搜索。
SIP协议主要消息讲解
第一章SIP协议主要消息
1.1SIP消息分类
SIP协议是以层协议的形式组成的,就是说它的行为是以一套相对独立的处理阶段来描述的,每个阶段之间的关系不是很密切。
SIP协议将Server和UserAgent之间的通讯的消息分为两类:
请求消息和响应消息。
请求消息:
客户端为了激活特定操作而发给服务器的SIP消息,包括INVITE、ACK、BYE、CANCEL、OPTION和UPDATE消息。
SIP请求的6种方法:
1、邀请(INVITE)——邀请用户加入呼叫
2、确认(ACK)——确认客户机已经接收到对INVITE的最终响应
3、可选项(OPTIONS)——请求关于服务器能力的信息
4、再见(BYE)——终止呼叫上的两个用户之间的呼叫
5、取消(CANCEL)
6、注册(REGISTER)——提供地址解析的映射,让服务器知道其它用户的位置
响应消息:
服务器向客户反馈对应请求的处理结果的SIP消息,包括1xx、2xx、3xx、4xx、5xx、6xx响应
1.2SIP消息结构
请求消息和响应消息都包括SIP消息头字段和SIP消息体字段;
SIP消息头主要用来指明本消息是有由谁发起和由谁接受,经过多少跳转等基本信息;
SIP消息体主要用来描述本次会话具体实现方式;
1.3消息格式
1.3.1请求消息格式
SIP请求消息的格式,由SIP消息头和一组参数行组成,如图3-1所示。
通过换行符区分命令行和每一条参数行。
图1-1SIP请求消息结构
注意:
参数行的顺序不是固定的。
对应的参数解释见6.3。
消息体定义:
Call-ID:
头字段是用来将消息分组的唯一性标识
From:
头字段是指示请求发起方的逻辑标识,它可能是用户的注册地址。
From头字段包含一个URI和一个可选的显示名称
CSeq:
头字段用于标识事务并对事务进行排序。
它由一个请求方法和一个序列号组成,请求方法必须与对应的请求消息类型一致
Max-Fowords:
头字段限定一个请求消息在到达目的地之前允许经过的最大跳数。
它包含一个整数值,每经过一跳,这个值就被减一。
如果在请求消息到达目的地之前该值变为零,那么请求将被拒绝并返回一个483(跳数过多)错误响应消息。
Via:
头字段定义SIP事务的下层(传输层)传输协议,并标识响应消息将要被发送的位置。
只有当到达下一跳所用的传输协议被选定后,才能在请求消息中加入Via头字段值。
expires:
参数指出了该值中包含的URI地址的有效期。
这个参数的值是以秒为单位计算的。
如果没有提供该参数,那么URI地址的有效期由Expires头字段值来确定。
SIP请求消息实例:
INVITEsip:
**********.0.1:
5060;User=phoneSIP/2.0
Call-ID:
***********************.0.1
Via:
SIP/2.0/UDP127.0.0.1:
5061
From:
************.0.1: 5061;User=phone>;tag=29005358336B534F610A000 To: **********.0.1: 5060;User=phone> Contact: sip: ************.0.1: 5061 CSeq: 1INVITE Max-Forwards: 70 Content-Type: application/SDP Content-Length: 168 v=0 o=UserA28908445262890844526INIP4 s=SessionSDP c=INIP4192.0.0.1 t=00 m=audio49172RTP/AVP08 a=rtpmap: 0PCMU/8000 a=rtpmap: 8PCMA/8000 a=sendonly INVITE消息是其中一种SIP请求消息。 第一行由消息头和对端SIP实体的URI(通用资源标识)以及SIP版本号码组成。 SIPURI是电话URI,附在IP地址上,表示对端和端点收发SIP消息的端口的域。 “From”、“To”和“Contact”这三个SIP消息头属于电话URI。 当背靠背用户代理发出呼叫时,“From”消息头中的URI填写在“Via”消息头里。 请求消息类型填写在CSeq消息头里,并且当该SIP端点发送一个请求,号码就相应递增。 SIP协议版本为SIP/2.0。 其中SDP被加入到INVITE消息内容里,在消息头里的Content-Length说明了SDP内容的长度。 INVITE请求消息详解: INVITEsip: *****************SIP/2.0 <=请求方法、请求地址(Request-URI)、SIP版本号(目前都是SIP/2.0) <=请求地址一般就是被叫方地址,跟MSN中好友eMail地址类似 Via: SIP/2.0/UDPlab.high-voltage.org: 5060;branch=z9hG4bKfw19b <=SIP版本号(2.0)、传输类型(UDP)、呼叫地址、 <=branch是一随机码,它被看作传输标识 <=Via字段中地址是消息发送方或代理转发方设备地址,一般由主机地址和端口号组成 <=传输类型可以为UDP、TCP、TLS、SCTP Max-Forwards: 70 <=最大跳跃数,就是经过SIP服务器的跳跃次数,主要是防止循环跳跃 <=每经过代理服务器,该整数减一 To: G.Marconi *****************> From: NikolaTesla ************************>;tag=76341 <=表示请求消息的发送方和目标方 <=如果里面有用户名标签,地址要求用尖括号包起来 <=对于INVITE消息,可以在From字段中包含tag,它也是个随机码 Call-ID: **************************.org <=呼叫ID是由本地设备生成的,全局唯一值。 每次呼叫该值唯一不变 <=对于用户代理发送INVITE消息,本地将生成Fromtag和Call-ID全局唯一码,被叫方代理则生成Totag全局唯一码。 这三个随机码做为整个对话中对话标识(dialogindentifier)在通话双方使用。 CSeq: 1INVITE <=CSeq,又叫命令队列(CommandSeqence),每发送一个新的请求,该数自动加1 *以上几个字段是所有SIP消息体所必须的,其它头字段有些是可选的,有些在特定请求也是必须 Subject: AboutThatPowerOutage... Contact: ************************.org> <=Contact是INVITE消息所必须的,它用来路由到被叫设备地址,也称为用户代理(UA) Content-Type: application/sdp Content-Length: 158 <=最后两位附属字段说明消息体类型以及字段长度 v=0<=SDP版本号,目前都是0 o=Tesla28908445262890844526INIP4lab.high-voltage.org<=主叫源地址,类型等 s=PhoneCall 1.3.2响应消息格式 SIP响应消息的格式,由SIP响应消息头和一组参数行组成,如图3-2所示。 通过换行符区分命令行和每一行参数。 SIP响应消息结构 注意: 参数行的顺序不是固定的。 对应的参数解释见6.3。 SIP响应消息实例: SIP/2.0200OK Content-Type: application/SDP Via: SIP/2.0/UDP127.0.0.1: 5061 Call-ID: 01EF351F*******************.0.1 CSeq: 1INVITE From: ************.0.1: 5061;User=phone>;tag=29005358336B534F610A000 To: **********.0.1: 5060;User=phone>;tag=5358336B534F2900CD1B0000 Contact: **********.0.1: 55061> Content-Length: 156 v=0 o=HuaweiSoftX300010737418241073741824INIP4127.0.0.1 s=SipCall c=INIP4110.111.112.113 t=00 m=audio5060RTP/AVP0 a=rtpmap: 0PCMU/8000 200OK消息是SIP响应消息的一种。 第一行由SIP版本号和200响应消息组成。 SIPURI是电话URI,附在IP地址上,表示对端和端点收发SIP消息的端口的域。 “From”、“To”和“Contact”这三个SIP消息头属于电话URI。 当背靠背用户代理发出呼叫时,“From”消息头中的URI填写在“Via”消息头里。 请求消息类型填写在CSeq消息头里,并且当该SIP端点发送一个请求,号码就相应递增。 SIP协议版本为SIP/2.0。 把SDP加入到INVITE消息内容里,在消息头里说明内容的长度。 第二章SIP协议主要响应码 2.1响应码分类 SIP响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。 不同类的响应消息由状态码来区分,状态码包含三位整数,状态码的第一位用于定义响应类型,另外两位用于进一步对响应进行更加详细的说明。 响应消息的分类如下所示。 1)1XX: 临时响应,表示请求消息正在被处理。 2)2XX: 成功响应,表示请求已被成功接收,完全理解并被接受。 3)3XX: 重定向响应,表示需采取进一步以完成该请求。 4)4XX: 客户机错误,表示请求消息中包含语法错误信息或服务器无法完成客户机请求。 5)5XX: 服务器错误,表示服务器无法完成合法请求。 6)6XX: 全局故障,表示任何服务器无法完成该请求。 上述消息中,临时响应用于指示呼叫正在进行,其余最终响应用于结束请求消息。 2.21xx类消息(临时响应) 1xx消息表示服务器或代理正在进行处理,还未得到确定的响应。 客户应该继续等待服务器的响应。 当服务器预测在200毫秒之内不能得到最终响应时,它应该发送一个1xx响应。 服务器可以发送多个1xx响应。 下面是常见的1xx类消息列表。 表1-1常见的1xx类消息列表 100 试呼(Trying)正在进行与呼叫有关的操作(例如: 访问数据库),但被叫用户还没有定位。 180 被叫振铃(Ringing)被叫用户代理已经得到被叫的位置,正在提醒被叫用户。 该响应也可以再发起一个本地回铃 181 呼叫前转(CallIsBeingForwarded)代理服务器可以用该状态码表示当前呼叫正被转移到其它目的地。 (呼叫正在转发) 182 呼叫排队(Queued)被叫暂时不可访问,当前呼叫被排队而不是被拒绝。 当服务器有效时,可以继续响应该呼叫。 该响应的"reasonphrase"可以进一步给出排队呼叫的信息,例如: “队列中有5个呼叫,期望等待时间为15分钟”。 服务器可以发出多个182响应来更新当前排队呼叫的信息。 183 会话进度(sessionprogress)应答用于提示建立对话的进度信息。 Reason-Phrase(表达原因的句子)、头域或者消息体可以用于提示呼叫进度的更新消息的信息。 2.32xx类消息(成功响应) 2xx消息表示请求已经被接收、处理并被成功接受; 200: OK---请求成功。 2.43xx类消息(重定向响应) 3xx消息表示响应给出有关用户新位置或其它可选服务的信息。 下面表4-3是常见的3xx类消息列表。 表1-2常见的3xx类消息列表 300 多个选择(MultipleChoice)请求中的地址被解析为多个位置,用户可以将请求重定向到一个合适的地址。 该响应应该包含可供用户或用户代理选择的位置和资源列表,并且在Contact头域中,列出可供选择的地址。 (网络协议不兼容: 会话描述中的一个或多个网络协议不可用。 ) 301 永久离开(MovedPermanently)在请求中Request-URI所指的地址找不到用户,客户应该尝试Contact头域给出的新地址。 主叫收到该响应后应该更新所有的本地目录,地址簿,用户位置缓存并将以后的请求重定向到新的地址。 (网络地址格式不兼容: 会话描述中的一个或多个地址格式不可用。 ) 302 暂时离开(MovedTemporarily)客户应该用Contact头域给出的新地址尝试呼叫。 响应中Expire头域指出该次重定向的有效期,如果没有给出有效期,那么重定向只对当前呼叫有效。 (传送协议不兼容: 会话描述中的一个或多个传送协议不可用。 ) 303 带宽单位不兼容: 会话描述中的一个或多个带宽度量单位不被理解。 304 媒体类型不可用: 对话描述中的一个或多个媒体类型不可用。 305 使用代理(UseProxy)客户所请求的资源必须通过Contact头域中给出的代理来访问。 Contact头域给出代理的URI。 该响应只能由用户代理服务器发出。 (媒体格式不兼容: 对话描述中的一个或多个媒体格式不可用。 ) 306 媒体特征不被理解: 对话描述中的一个或多个媒体特征不被支持。 307 对话描述参数不被理解: 除上述几种参数之外的参数不被理解。 330 组播不可用: 用户站点不支持组播。 331 单播不可用: 用户站点不支持单播通信(通常是由于防火墙的存在) 370 带宽不足: 对话描述中定义的或者媒体定义的带宽超出可用带宽。 380 使用其它服务(AlternateService)呼叫不成功,但是可选其它的服务(如: 电子邮件,语音信箱)。 该响应的消息体给出可选服务的描述。 399 混合告警: 该告警表示用户存在的任意一种错误,收到该告警的系统不可以采取任何自动的动作 2.54xx类消息(客户机错误) 4xx消息表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理。 下面表4-4是常见的4xx类消息列表。 表1-3常见的4xx类消息列表 400 无效请求(BadRequest)请求语法有误,不能被服务器理解。 401 未授权(Unauthorized)请求需要用户认证。 402 要求付费(PaymentRequired)该响应为将来使用保留。 403 禁止(Forbidden)服务器理解请求,但拒绝完成。 客户不应该再次发请求。 404 未找到用户(NotFound)请求中Request-RUL给出的地址上没有要呼叫的用户。 当Request-RUL给出的地址与服务器管理的域不匹配时,服务器也发送该响应。 405 方法不允许(MethodNotAllowed)请求行中指定的方法不被允许。 该响应必须包含Allow头域,列出服务器支持的方法。 406 不可接受(NotAcceptable)根据请求中的Accpe头域,由请求给出的资源产生的响应实体里面的内容字符不可接受。 407 需要代理认证(ProxyAuthenticationRequired)该响应与401(未授权)类似,但它指示用户必须首先向代理认证自己。 408 请求超时(RequestTimeout)服务器不能在请求的Expire头域指定的时间内产生响应。 客户可以过一段时间重发请求。 409 冲突(Conflict)客户的请求与资源的当前状态冲突,不能完成请求。 当REGISTER请求的action参数与现存的注册冲突时返回该响应。 410 无可用资源(Gone)服务器上没有所请求的资源,也不知道进一步联系的地址。 这种情况被认为是永久的。 如果服务器不能确定该情况是否是永久的,它应该发送404(被叫未找到)响应。 411 需要消息体长度(LengthRequired)服务器拒绝接受没有包含Content-Length头域的请求。 客户何以在加入一个表示消息体长度的Cotent-Length头域后重发请求。 413 请求实体过长(RequestEntityTooLarge)服务器拒绝处理过长的消息实体。 如果这种情况是暂时的,服务器应该在响应中包含Retry-After头域指示客户何时重发请求。 414 Request-URI过长(Request-URITooLong)服务器不能解析过长的Request-URI。 415 媒体类型不支持(UnsupportedMediaType)服务器不支持请求消息体的格式。 服务器应该在响应中用Accept,Accept-Encoding和Accept-Language头域列出它支持的格式。 416 不支持的URI方案(unsupportedurlscheme)服务器由于不支持Request-URI中的URI方案而终止处理这个请求。 420 错误的扩展(BadExtension)服务器不理解请求中Require头域指定的协议扩展。 421 需要扩展支持(extensionrequired)UAS需要特定的扩展来处理这个请求,但是这个扩展并没有在请求的Supported头域中列出。 具有这个应答码的应答必须包含一个Require头域列出所需要的扩展。 UAS不应当使用这个应答除非它真的不能给客户端提供有效的服务。 相反,如果在Support头域中没有列出需要的扩展,服务器应当根据基准的SIP兼容的方法和客户端支持的扩展来进行处理。 423 间隔太短(intervaltoobrief)服务器因为在请求中设置的资源刷新时间(或者有效时间)过短而拒绝请求。 这个应答可以用于注册服务器来拒绝那些Contact头域有效期过短的注册请求。 480 暂时不可访问(TemporarilyUnavailable)被叫的终端系统已经成功连接,但用户暂时不可访问(例如: 用户未登录,或登录为免打扰)。 服务器可以在Retry-After头域中另外指定一个访问时间。 481 呼叫支路/事务不存在(Callleg/TransactionDoesNotExist)在两种情况下服务器返回该响应: 服务器收到一个BYE请求但找不到匹配的呼叫支路;或是收到一个CANCEL请求但找不到匹配的事务;或是收到与原来TAG标志不一样的INVITE请求。 (对于无匹配的ACK请求,服务器直接将它丢弃,不响应)。 482 检测到循环呼叫(LoopDetected)请求消息的Via头域中包含接收服务器自身的地址。 483 跳数过多(TooManyHop)请求的Via头域包含的条目数(跳数)超过Max-Forwards头域指定的值。 484 地址不全(AddressIncomplete)请求的To或Request-RUL所指的地址不全。 485 地址不明确(Ambiguous)请求中提供的被叫地址不明确。 该响应可以在Contact头域中列出不明确的地址。 486 被叫忙(BusyHere)被叫的终端系统已经成功连接,但用户暂时不愿意或不能够接收更多的呼叫。 服务器可以在响应的Retry-After头域中另外指定一个访问时间。 客户也可能通过其它方式访问,如: 语音邮箱,因此该响应并不终止一个查询。 如果我们知道没有其他终端系统能够接听这个呼叫,那么应当返回一个状态码600(BusyEverywhere)。 487 请求被拒绝(RequestCancelled)原来的请求消息被一个CANCEL请求所取消。 488 此处请求不接受(notacceptablehere)这个应答和606(NotAcceptable)有相同的含义,但是只是应用于Request-URI所指出的特定资源不能接受,在其他地方请求可能可以接受。 包含了媒体兼容性描述的消息体可以出现在应答中,并且根据INVITE请求中的Accept头域进行规格化(如果没有Accept头域,那么就是application/sdp)。 这个应答就像给OPTIONS请求的200(OK)应答的消息体一样。 491 未决请求(requestpending)在同一个对话中,UAS接收到的请求有一个依赖的请求正在处理。 493 无法解密(undecipherable)不可辨识,UAS接收到了一个请求,包含了一个加密的MIME,并且不知道或者没有提供合适的解密密钥。 这个应答可以包含单个包体,这个包体包含了合适的公钥,这个公钥用于给这个UAS通讯中加密包体使用的。 2.65xx类消息(服务器错误) 5xx消息表示SIP服务器故障不能完成对正确消息的处理。 下面表4-5是常见的5xx类消息列表。 表1-4常见的5xx类消息列表 500 服务器内部错误(ServerInternalError)服务器出现异常情况,不能处理请求。 501 功能未实现(NotImplemented不可执行)服务器不支持完成请求所必需的功能。 502 网关错误(BadGateway)作为网关或代理的服务器在处理请求时从其它服务器接收到一个无效响应。 503 服务不可用(SeviceUnavailable)由于临时超载或正在维护,服务器当前不能处理请求。 504 网关超时(GatewayTimeout/serviceTime-out服务器超时)作为网关的服务器在处理呼叫的过程中没有及时收到其它服务器(例如: 定位服务器)的响应。 505 版本不支持(VersionNotSupported)服务器不能或拒绝支持请求消息所用的版本。 513 消息过大(messagetoolarge) 2.76xx类消息(全局错误) 6xx消息表示请求不能在任何SIP服务器上实现。 下面表4-6是常见的5xx类消息列表。 表1-5常见的5xx类消息列表 600 全忙(BusyEverywhere)被叫的终端系统已经成功连接,但用户正忙,不愿够接受当前呼叫。 服务器可以在响应的Retry-After头域中另外指定一个访问时间。 该响应仅用于客户不能通过其它方式(如: 语音邮箱)访问的情况。 如果用户可通过其它方式访问,则应返回486(BusyHere)响应。 603 拒绝(Decline)被叫的终端系统已经成功连接,但用户明确不愿接受当前呼叫。 服务器可以在响应的Retry-After头域中另外指定一个访问时间。 604 被叫不存在(DoesNotExistAnywhere)请求的To头域指定的用户不存在。 606 不可接受(NotAcceptable)用户代理已经成功连接,但某些会话描述如媒体类型、带宽或地址风格不能接受。 该响应表示用户希望建立通信,但不能充分支持请求所描述的会话。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SIP 协议 主要 消息 讲解