RFC3261(5 协议结构)

 SIP是一个分层的协议,也就是说SIP协议由一组相对无关的处理层次组成,这些层次之间只有松散的耦合。协议分成不同层次来描述是为了能够更清晰的表达,在同一个小节里对功能的公共要素进行交叉描述。本协议并没有规定一个具体的实现。当我们说一个要素”包含”某一个层,我们的意思是这个要素符合这个层定义的规则。

不是SIP的每一个要素都包含所有层。此外,SIP定义的元素是逻辑上的,而非物理元素。一个物理的实现可以实现不同的逻辑元素,甚至是针对每个事务。

SIP最底层是它的语法和编码层。编码方式是采用扩展的Backus-Naur Form grammar(BNF范式)。完整的BNF描述在25节; 第7节有简要的SIP消息结构描述。

    第二层是传输层。它定义了一个客户端如何发送请求和接收应答,以及一个服务器如何接收请求和发送应答。所有的SIP要素都包含传输层。第18节有传输层的描述。

    第三层是事务层。事务是SIP的基本组成部分。事务是客户端事务向服务端事务发送的一个请求(通过传输层),以及服务器事务向客户端事务的所有针对该请求的应答。事务层处理应用层的重发,匹配请求的应答,以及应用层的超时。用户代理客户端(UAC)完成的任何任务都是由一组事务构成的。有关事务的讨论在第17节有描述。用户代理包含一个事务层,来实现有状态的代理服务器。无状态的代理服务器并不包含事务层。事务层包含一个客户组件(可以认为是一个客户事务)和一个服务器组件(可以认为是一个服务器事务),他们都可以用一个有限状态机来处理特定的请求。

    在事务层之上是事务用户(TU)。每一个SIP实体,除了无状态代理,都是一个事务用户。当一个TU发出一个请求,它首先创建一个客户事务实例,并且通过它发送请求,这包括了目标IP地址、端口号、以及发送请求的设备。TU可以创建客户事务,也可以取消客户事务。当客户取消一个事务,它请求服务器终止正在处理的事务,并且回滚状态到该事务开始前的状态,并且产生指定的该事务的错误报告。这是由CANCEL请求完成的,这个请求构成了自己的事务,但是参考了被取消的事务(第9节)。

    SIP要素,用户代理客户端和服务器、无状态和有状态代理服务器和注册服务器,包含一个可以互相区别的核心。这个核心,除了无状态代理服务器,都是事务用户。尽管UAC(用户代理客户端)和UAS(用户代理服务端)的核心的行为依赖于Method,对所有的Method来说,有几个公共的原则(第8节)。对UAC来说,这些规则约束请求的建立;对UAS来说,这些规则约束请求的处理和应答。由于注册服务在SIP中是一个重要的角色,所以UAS处理REGISTER请求有一个特别的名字:注册服务器。第10节描述了UAC和UAS对REGISTER实现的核心行为。第11节描述了UAC和UAS对OPTIONS的核心行为,这个OPTIONS用来决定UA的处理能力。

    在对话中,有其他的请求会被发送。一个对话是一个持续一定时间的两个用户之间的端到端的SIP关系。对话使得两个用户代理之间的信息有序,而且请求被正确的路由。在这个规范中,只有INVITE请求可以用来建立对话。当一个UAC在一个对话中发出请求的时候,它不仅遵循第8节描述的一般UAC规则而且也遵循对话中(mid-dialog)的请求规则。第12节讲述了对话并且讨论了对话的创建和维持,以及在对话中(mid-dialog)创建一个请求。

 

    SIP中最重要的方法就是INVITE方法,它用来在不同的参与者中创建会话。一个会话由一组参与者,以及他们之间用于通信的媒体流组成。第13节讲述了这些会话的创建初始化过程,以及创建一个或一组对话。第14节讲述了在对话中使用INVITE请求来改变会话的属性。最后,第15节,讲述了如何终止会话。

    第8、10、11、12、13、14、15节讲述了完整的UA核心(第9节描述了取消,在UA核心和代理核心中使用)。第16节讲数了代理服务器,代理服务器用于在两个UA之间做消息路由使用。

posted @ 2012-10-22 22:48  坐看风起云涌  阅读(412)  评论(0编辑  收藏  举报