跳到主要内容

5. 协议结构 (Structure of the Protocol)

5 协议结构 (Structure of the Protocol)

SIP 被组织为一种分层协议, 这意味着其行为以一组相当独立的处理阶段来描述, 各阶段之间只有松散耦合. 将协议行为描述为层是为了便于呈现, 使跨元素的共同功能可以在单独章节中说明. 这并不以任何方式规定实现方式. 当我们说某个元素 "contains" 某一层时, 是指它符合该层定义的一组规则.

并非协议指定的每个元素都包含每一层. 此外, SIP 指定的元素是逻辑元素, 而不是物理元素. 一个物理实现可以选择扮演不同的逻辑元素, 甚至可以按每个事务分别决定.

SIP 的最低层是其语法和编码. 其编码使用增强的 Backus-Naur Form grammar (BNF) 指定. 完整 BNF 在 Section 25 中指定; SIP 消息结构概述见 Section 7.

第二层是传输层. 它定义客户端如何通过网络发送请求和接收响应, 以及服务器如何接收请求和发送响应. 所有 SIP 元素都包含传输层. 传输层在 Section 18 中描述.

第三层是事务层 (transaction layer). 事务是 SIP 的基本组成部分. 一个事务是由 client transaction (使用传输层) 发送到 server transaction 的一个请求, 加上 server transaction 返回给该 client 的对该请求的所有响应. 事务层处理应用层重传, 响应与请求的匹配, 以及应用层超时. user agent client (UAC) 执行的任何任务都通过一系列事务完成. 事务的讨论见 Section 17. user agent 包含事务层, 有状态代理也包含事务层. 无状态代理不包含事务层. 事务层有一个客户端组件 (称为 client transaction) 和一个服务器组件 (称为 server transaction), 二者都表示为为处理特定请求而构造的有限状态机.

事务层之上的层称为 transaction user (TU). 除无状态代理外, 每个 SIP 实体都是 transaction user. 当 TU 希望发送请求时, 它创建一个 client transaction 实例, 并将请求以及要发送到的目的 IP 地址, 端口和传输交给该实例. 创建 client transaction 的 TU 也可以取消它. 当客户端取消事务时, 它请求服务器停止进一步处理, 恢复到事务发起前的状态, 并为该事务生成特定的错误响应. 这是通过 CANCEL 请求完成的; CANCEL 构成自己的事务, 但引用要取消的事务 (Section 9).

SIP 元素, 即 user agent client 和 server, 无状态和有状态 proxy, 以及 registrar, 都包含一个使它们相互区别的 core. 除无状态代理外, core 都是 transaction user. 虽然 UAC 和 UAS core 的行为取决于方法, 但所有方法都有一些共同规则 (Section 8). 对 UAC, 这些规则控制请求的构造; 对 UAS, 这些规则控制请求的处理和响应的生成. 由于注册在 SIP 中扮演重要角色, 处理 REGISTER 的 UAS 被赋予特殊名称 registrar. Section 10 描述 REGISTER 方法的 UAC 和 UAS core 行为. Section 11 描述 OPTIONS 方法的 UAC 和 UAS core 行为, 该方法用于确定 UA 的能力.

某些其他请求在 dialog 内发送. dialog 是两个 user agent 之间持续一段时间的 peer-to-peer SIP 关系. dialog 便于消息排序, 并便于在 user agent 之间正确路由请求. INVITE 方法是本规范中定义的唯一用于建立 dialog 的方式. 当 UAC 发送处于 dialog 上下文中的请求时, 它遵循 Section 8 中讨论的通用 UAC 规则, 同时也遵循 dialog 中请求的规则. Section 12 讨论 dialog, 并给出其构造和维护过程, 以及在 dialog 内构造请求的过程.

SIP 中最重要的方法是 INVITE 方法, 用于在参与者之间建立会话. 会话是参与者以及它们之间媒体流的集合, 目的是进行通信. Section 13 讨论如何发起会话, 其结果是一个或多个 SIP dialog. Section 14 讨论如何通过 dialog 内的 INVITE 请求修改该会话的特征. 最后, Section 15 讨论如何终止会话.

Section 8, 10, 11, 12, 13, 14 和 15 的过程完全处理 UA core (Section 9 描述取消, 它同时适用于 UA core 和 proxy core). Section 16 讨论 proxy 元素, 它促进 user agent 之间的消息路由.