第二章 SIP协议的结构
SIP是一个分层的协议,位于最低层的是语法和编码层。SIP使用BNF编码。关于BNF编码请参看RFC3261第25节。
第二层是传输层。它定义了一个客户端和服务器分别怎样发送请求和接收应答。传输层详细说明请参看RFC3261第18节。
第三层是事务层。事务是SIP基本的组成部分。事务层有一个客户模块(表示客户事务)和服务器模块(表示服务器事务)。一个客户事务发送一个请求到服务器事务,一直到接收到来自服务器事务所有对这个请求的应答就是一个完整的SIP事务。事务层处理应用层重发,匹配应答是对应哪个请求的,也对应用层超时进行处理。任何用户端代理(UAC)的任务都要通过一系列的事务来完成。用户代理和有状态的代理服务器都有事务层,无状态的代理服务器没有事务层,以后会介绍有状态和无状态代理服务器的概念,也可以参看RFC3261第16节。
事务层上面是事务用户(TU)层。除了无状态代理服务器外其它的SIP实体都是TU。当一个TU要发送一个请求,它先创建一个客户事务实例,告诉它接收者的IP和端口,并进行发送。同时它也可以取消一个客户事务。关于取消一个客户事务更详细的说明,请参看RFC3261第9节。
用户代理客户端(以后称UAC)和用户代理服务器端(以后称UAS),有状态/无状态的代理服务器和注册服务器之间,除了无状态代理服务器外通过事物用户(以后称TU)来相互区分(除了无状态代理服务器)。UAC和UAS的核心的行为依赖于他们的方法(这个方法标识请求类型)。在RFC3261第8节介绍了所有方法的一般规则。对于UAC来说,这些规则说明如何构造请求。对于UAS来说,这些规则说明如何处理请求并构造应答。注册服务器在SIP中扮演一个重要的角色。它是一个被命名为注册服务器的能够处理REGISTER方法的UAS。RFC3261第10节描述了UAC和UAS处理REGISTER方法的核心行为。RFC3261第11节描述了UAC和UAS处理OPTION方法的核心行为。OPTION方法用于探测一个用户代理(以后称UA)的能力。
某些其它的请求在会话内发送。一个会话是两个需要持续通信的UA之间端对端的联系的SIP对象。一个会话使UA间发送的消息有序且有益于路由。INVITE方法是惟一一个可以建立一个会话的方法。当一个UAC在会话里发送请求,它遵循RFC3261第8节中描述的一般的UAC规则,同时也遵循会话中请求的规则。RFC3261第12节讨论会话和构造、维持会话,还有在会话内构造请求的方法。
在SIP中最重要的方法之一就是INVITE方法。它用来在参与者之间建立一个会议(SESSION).一个会议是一个参与者的集合,并且包含他们之间的媒体流。RFC3261第13节讨论一个会议如何初始化,如何建立一个或多个会话。RFC3261第14节讨论如何使用会话内的INVITE请求修改一个会议的属性。最后,RFC3261第15节讨论如何终止一个会议。