RFC 3261 SIP协议----UAS行为

来源:互联网 发布:什么牌子油烟机好 知乎 编辑:程序博客网 时间:2024/05/21 10:34

当UAS收到一个request的时候,它要安装如下的顺序进行处理这个request:


Method Inspection:

当一个已经鉴权的方法发送到UAS的时候,它首先要检查这个request的方法,如果方法不支持,则返回405应答。在这个返回的405应答中,UAS添加了一个allow头域,包含了UAS支持的方法。

如果UAS支持接受到的request的方法,处理继续进行。。。。


Header Inspection:

当UAS对接收到的request进行头域检查的时候,如果发现不支持的或者是有缺陷的头域只要是不应该UAS的正常处理流程,那么这些错误可以忽略掉。

处理继续中。。。。


To and Request-URI

To头域标明了request的最终接受者,如果UAS不是这个To头域指明的最终接受者,那么UAS可以选择转发或则是拒绝这个request,如果拒绝那么发送403应答。

但是,如果To的request-uri,UAS不支持无法解析,那么就必须拒绝这个request,并返回416应答。


Merged Requests


Require

如果之前的检查全部通过,那么UAS就会检查require头域,require头域是用来说明UAS用什么方式来扩展这个request的。


Content processing

UAS还需要检查头域描述的消息体部分,如果UAS并不支持消息部分的类型(Content-Type),语言(Content-language),编码(Content-Encoding)等,那么UAS必须回应一个415应答,并且携带响应的支持的类型列表。


Applying Extensions


Processing the Request

需要出的Request包括invite、register、cancel、以及bye等。后续会接着说明。


generating the response

产生一个临时应答:在很多情况下,非invite的request是不需要产生应答的,如果服务器作为路由功能对invite方法要产生一个100trying的应答。产生了一个100Trying的应答后,任何时间戳相关的头域都要复制到100Trying这个应答中,时间戳头域的域值要与之前的域值存在着一定的时间差,不能相同,时间戳的计时单位是秒。

头域与tag:From、Call-ID、Cseq、Via(顺序必须相同)这些request的头域值要全部拷贝到UAS的response中,需要注意的是To头域,如果To头域存在一个tag,那么UAS的应答消息中,To头域也应该带有一个tag,而且这个tag的值要与request的相同。如果To头域不存在tag,那么在UAS的应答消息中,To由于要添加上这个新的tag值(100Trying消息除外),对于同一个请求来说,所有应答与请求必须具有同一个tag。(tag的细节问题之后会有讨论)。


Stateless UAS Behavior

无状态sip服务器指的是:服务器可以正常转发和接收request,一旦处理完成后不保存任何这个request的相关状态。例如,无状态sip服务器接收了一个重发的request请求,无状态服务器会当成一个新的请求来处理,在重新发送一个应答给UAC。

相同的请求,两次都会产生两个相同的应答,这个就是无状态服务器的特点。








0 0
原创粉丝点击