5. 协议结构 (Structure of the Protocol)
SIP被构造为分层协议 (Layered Protocol), 这意味着其行为被描述为一组相当独立的处理阶段, 每个阶段之间只有松散耦合。协议行为被描述为层是为了展示目的, 允许在单个部分中描述跨元素的公共功能。它不以任何方式规定实现。当我们说一个元素"包含"一个层时, 我们的意思是它符合该层定义的规则集。
并非协议指定的每个元素都包含每一层。此外, SIP指定的元素是逻辑元素, 而不是物理元素。物理实现可以选择充当不同的逻辑元素, 甚至可能在逐个事务的基础上。
5.1 语法和编码层 (Syntax and Encoding Layer)
SIP的最底层是其语法和编码 (Syntax and Encoding)。其编码使用增强的巴科斯-诺尔范式 (Augmented Backus-Naur Form, BNF) 语法指定。完整的BNF在第25节中指定; SIP消息结构的概述可以在第7节中找到。
5.2 传输层 (Transport Layer)
第二层是传输层 (Transport Layer)。它定义了客户端如何通过网络发送请求和接收响应, 以及服务器如何接收请求和发送响应。所有SIP元素都包含传输层。传输层在第18节中描述。
5.3 事务层 (Transaction Layer)
第三层是事务层 (Transaction Layer)。事务是SIP的基本组件。事务是由客户端事务 (使用传输层) 发送给服务器事务的请求, 以及从服务器事务发送回客户端的对该请求的所有响应。事务层处理应用层重传、响应与请求的匹配以及应用层超时。用户代理客户端 (UAC) 完成的任何任务都是使用一系列事务进行的。有关事务的讨论可以在第17节中找到。
用户代理包含事务层, 有状态代理 (Stateful Proxy) 也包含事务层。无状态代理 (Stateless Proxy) 不包含事务层。事务层具有客户端组件 (称为客户端事务, Client Transaction) 和服务器组件 (称为服务器事务, Server Transaction), 每个组件都由构造用于处理特定请求的有限状态机 (Finite State Machine) 表示。
5.4 事务用户层 (Transaction User Layer)
事务层之上的层称为事务用户 (Transaction User, TU)。除了无状态代理之外, 每个SIP实体都是事务用户。当TU希望发送请求时, 它会创建一个客户端事务实例, 并将请求以及要将请求发送到的目标IP地址、端口和传输协议传递给它。创建客户端事务的TU也可以取消它。当客户端取消事务时, 它请求服务器停止进一步处理, 恢复到事务启动之前存在的状态, 并生成对该事务的特定错误响应。这是通过CANCEL请求完成的, 该请求构成其自己的事务, 但引用要取消的事务 (第9节)。
5.5 核心层 (Core Layer)
SIP元素, 即用户代理客户端和服务器、无状态和有状态代理以及注册器 (Registrar), 包含将它们彼此区分开来的核心 (Core)。除了无状态代理之外, 核心都是事务用户。虽然UAC和UAS核心的行为取决于方法, 但所有方法都有一些通用规则 (第8节)。对于UAC, 这些规则管理请求的构造; 对于UAS, 它们管理请求的处理和响应的生成。由于注册在SIP中起着重要作用, 处理REGISTER的UAS被赋予特殊名称注册器 (Registrar)。
- 第10节描述了REGISTER方法的UAC和UAS核心行为。
- 第11节描述了OPTIONS方法的UAC和UAS核心行为, 用于确定UA的能力。
5.6 对话 (Dialog)
某些其他请求在对话 (Dialog) 内发送。对话是两个用户代理之间持续一段时间的对等SIP关系。对话促进消息的排序和用户代理之间请求的正确路由。INVITE方法是本规范中定义的建立对话的唯一方法。当UAC发送在对话上下文中的请求时, 它遵循第8节中讨论的通用UAC规则, 但也遵循对话中请求 (Mid-Dialog Request) 的规则。第12节讨论对话并介绍其构造和维护的过程, 以及在对话中构造请求的过程。
5.7 会话和INVITE方法 (Session and INVITE Method)
SIP中最重要的方法是INVITE方法, 用于在参与者之间建立会话 (Session)。会话是参与者的集合, 以及它们之间的媒体流, 用于通信目的。
- 第13节讨论如何启动会话, 导致一个或多个SIP对话。
- 第14节讨论如何通过对话中的INVITE请求修改该会话的特征。
- 第15节讨论如何终止会话。
5.8 各节内容分布 (Distribution of Content)
第8、10、11、12、13、14和15节的过程完全处理UA核心 (第9节描述取消, 适用于UA核心和代理核心)。第16节讨论代理元素, 它促进用户代理之间消息的路由。
协议层次结构总结:
+----------------------------------+
| 事务用户 (TU) |
| UAC核心 / UAS核心 / 代理核心 |
+----------------------------------+
| 事务层 (Transaction) |
| 客户端事务 / 服务器事务 |
+----------------------------------+
| 传输层 (Transport) |
+----------------------------------+
| 语法和编码层 (Syntax) |
+----------------------------------+