**********.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)用户代理已经成功连接,但某些会话描述如媒体类型、带宽或地址风格不能接受。
该响应表示用户希望建立通信,但不能充分支持请求所描述的会话。