Structure of the Protocol

来自SIP协议相关技术中文知识库
跳到导航 跳到搜索

SIP协议结构

SIP 是按照一定的层级结构创建的协议,这表示它的行为是根据一系列各自相对独立的处理流程来实现,每个处理阶段之间是松耦合关系。协议行为描述为多个层级,这样是为了支持呈现的目的,支持标准的函数描述,这些描述涉及了单一环境的多个要素。 它不能通过任何方式来决定部署。当我们说一个要素“包含” 一个层级时,我们的意思是它符合一系列在这个层级所定义的规范规则。

不是每个通过协议设定的要素都包含在每个层级。进一步说,在SIP协议中设定的要素是逻辑要素,不是物理形态的要素。一种物理实现可以选择不同的逻辑要素来执行,也许可以基于依次事务对事务的处理方式进行。

SIP结构的最低层是语法和解码层。解码是通过增强的Backus-Naur Form grammar (BNF)语法来实现的。完整的BNF在Section 25有介绍。整个SIP消息结构的总览在 Section 7介绍。

第二层是传输层。它定义了用户如何发送请求,如何接收响应和服务器如何通过网络接收请求和发送响应。所有SIP要素都包含一个传输层。传输层是在Section 18进行描述。

第三层是事务层。事务是SIP的基础核心模块。事务是一个由用户端事务对服务器端事务发送的请求,用户端使用传输层对服务器端发送事务请求,所有的服务器端事务所携带响应消息返回到客户端。事务层处理应用层的重传,对请求响应的匹配和应用层超时管理。 任何由用户代理(UAC)完成的任务通过使用一系列的事务来触发。具体的关于事务的讨论在 Section 17有讨论。 用户代理包含了一个事务层,就像是一个状态代理。 无状态代理没有包含事务层。事务层有一个用户端模块(称之为用户事务)和一个服务器端事务模块(称之为服务器端模块),每个模块通过各自的有限状态机来呈现,状态机来处理每个特别的请求。

在事务层上面的是事务用户(TU)。每个SIP实体,除了无状态代理都是一个事务用户。当一个TU希望发送一个请求时,它会创建一个用户事务实例,然后把这个实例传递给这个请求,并且携带目的地IP地址,端口和传输请求。一个创建了用户事务的TU也可以取消这个用户事务。当用户取消了一个事务时,它会请求服务器停止进一步的处理,变换到退出的状态,这个状态是这个事务初始化前的退出状态,并且生成对这个事务生成错误响应消息。 这个处理过程是通过一个CANCEL 请求来处理,它构成了属于自己的事务,但是仅针对这个被取消的事务(Section 9)。

SIP 要素也就是用户代理用户侧,服务器,无状态代理,有状态代理和注册。SIP要素包含了一个核心模块,这个核心模块来对各自其要素进行区别处理。在核心要素模块中,除了无状态代理以外,其他的要素都是事务用户。这里,UAC和UAS的核心处理流程越来于method。关于methods支持了多种规则和定义(Section 8)。对于UAS来说,这些规则控制请求的结构;对于UAS来说,这些规则控制请求的流程和生成响应消息。因为,注册在SIP协议中扮演着一个非常重要的角色,一个处理注册的UAS会设定一个特别的名称注册。在Section 10 中描述了UAC和UAS 核心的对REGISTER method的处理方式。Section 11 描述了UAC和UAS核心对OPTIONS method的处理方式,它决定UA的支持能力。

某些其他的请求是在dialog中发送。一个dialog是一个介于用户代理之间的peer-to-peer SIP关系,这种关系存在于一定时间内。 这个dialog支持介于用户代理之间的消息的顺序传递和正确的请求路由。在这个细节规定中,INVITE method 是唯一的方法来创建dialog。当一个UAC在dialog中发送一个请求时,它会遵守一般的UAC规则,这些规则在Section 8 会加以讨论,它也会遵守 mid-dialog 请求时的规则。Section 12 讨论在dialog和表述它们的结构和维护流程。

在SIP协议中,最重要的method是INVITE method,它用来创建参与方之间的会话。一个会话是参与方的汇集和它们之间通信的的媒体流交互。Section 13 讨论了如何实现会话发起,这些导致了一个或者多个SIP dialog生成。 Section 14 讨论了如何在一个dialog中通过INVITE用法来修改会话属性。最后,在section 15 中讨论如何结束一个会话。

章节 8, 10, 11, 12, 13,14,和15的流程完整讨论了UA core(Section 9 描述了取消流程,这个取消流程支持都支持UA core 和 proxy core)。 Section 16 讨论代理的要素,这些要素支持了介于两个用户代理之间的信息路由。