根据您的要求,我将继续撰写系列文章的第二篇。本篇将深入讲解 SIP 协议的结构基础、核心实体角色,以及最常用的 SIP 方法集。


VoLTE高清语音技术精要(二):SIP协议基础与核心方法集深度解析

1. 导论:SIP通信模型的基石

在上一篇中,我们宏观地介绍了 IMS(IP Multimedia Subsystem)的架构及其核心信令协议 SIP(Session Initiation Protocol)的定位。SIP 是一个基于文本的、请求-响应式的应用层控制协议,专门用于在 IP 网络上建立、修改和终止多媒体会话。

本章将聚焦于 SIP 协议的基础结构,这是理解后续所有 IMS 流程(如注册、呼叫建立)的前提。我们将剖析 SIP 通信模型中的基本实体角色,理解 SIP 消息的文本结构,并详细介绍 IMS 网络中关键的 SIP 方法集(Method)。

2. 核心实体角色:UA、UAC、UAS 与 B2BUA

SIP 协议的核心交互遵循客户端-服务器模型。然而,SIP 实体通常是灵活的,可以根据消息的流向动态地扮演不同的角色。

2.1 用户代理 (UA)、客户端 (UAC) 和服务器 (UAS)

SIP 通信模型的基础是用户代理(User Agent, UA)。

实体缩略语核心定义SIP 事务中的职责来源
用户代理UA一个逻辑上的端点,包含了 UAC 和 UAS 两个部分,能够创建和处理 SIP 消息。终端设备 (UE) 是最常见的 UA。参与 SIP 通信的整体逻辑实体。
用户代理客户端UAC请求的发起方负责创建并发送 SIP 请求。
用户代理服务器UAS请求的接收方负责处理收到的 SIP 请求,并生成相应的 SIP 响应。

专家解读:角色的动态性

UAC 和 UAS 是逻辑角色,而非固定的设备身份。在 IMS 核心网中,一个网元(如 P-CSCF 或 S-CSCF)在转发请求时充当代理(Proxy),但在处理响应时,它又扮演服务器的角色。例如:

  1. 呼叫建立:UE 发送 INVITE 请求,此时 UE 是 UAC,接收请求的 S-CSCF 是 UAS
  2. 呼叫释放:如果 S-CSCF 因为会话超时主动清理资源,向 UE 发送 BYE 请求,此时 S-CSCF 变为 UAC,UE 变为 UAS

2.2 背靠背用户代理 (B2BUA) 的特殊角色

B2BUA (Back-to-Back User Agent) 是一种特殊的、复合型的 SIP 实体。IMS 核心网中的许多重要网元,如 AS (应用服务器)SBC (会话边界控制器),通常以 B2BUA 模式运行。

B2BUA 的核心特征

  1. 对话终结与重建:它在逻辑上由一个 UAS 和一个 UAC 紧密耦合而成。
  2. 完全独立:它作为 UAS 接收并终止第一个 SIP 对话(对话 A),然后作为 UAC 重新发起第二个全新的 SIP 对话(对话 B)。
  3. 拓扑隐藏:由于它创建了全新的对话,两侧的对话标识(Call-IDFrom-tagTo-tag)通常是不同的。这使得 B2BUA 能够对网络拓扑和会话状态进行控制和隐藏。

在 IMS 中的应用:AS(例如 MMTel AS)在处理主叫业务时,通常扮演 B2BUA 角色,终结来自 S-CSCF 的 INVITE,执行业务逻辑,然后用一个新的 INVITE 请求发回 S-CSCF,以便重新路由到被叫网络。

3. SIP 消息的结构与语法

SIP 协议采用文本编码(UTF-8 字符集),这使得其消息内容具有良好的可读性。SIP 消息的统一格式由三个部分构成:

  1. 起始行(Start-Line)
  2. 消息头域(Message-Header)
  3. 可选的消息体(Message-Body)
消息组成部分SIP 请求消息 (Request)SIP 响应消息 (Response)作用来源
起始行请求行 (Request-Line)状态行 (Status-Line)定义消息类型和处理结果。
消息头域必选:Via, To, From, CSeq, Call-ID, Max-Forwards必选:Via, To, From, CSeq, Call-ID传递会话路由、标识和控制信息。
消息体可选,由 Content-TypeContent-Length 描述可选,由 Content-TypeContent-Length 描述承载会话净荷(最常见的是 SDP)。

3.1 起始行:请求行与状态行

(1)请求行(Request-Line)

用于 SIP 请求消息的起始行。它包含三个元素:方法 (Method)请求 URI (Request-URI)SIP 版本

  • Request-URI:指示请求的初始目标地址,是决定请求路由的第一要素。它可以是 SIP URI、SIPS URI 或 TEL URI。

示例: INVITE sip:[email protected] SIP/2.0

(2)状态行(Status-Line)

用于 SIP 响应消息的起始行。它包含三个元素:SIP 版本状态码 (Status-Code)文字描述 (Reason Phrase)

状态码 (Status Code)范围含义IMS 关键应用来源
1xx100 - 199临时响应,请求正在处理,会话可能尚未建立。100 Trying(已收到请求)、183 Session Progress(媒体协商)。
2xx200 - 299成功响应,请求已被接受和处理。200 OK(呼叫建立成功/注册成功/BYE成功)。
3xx300 - 399重定向响应,请求需要进一步行动。302 Moved Temporarily(用于呼叫前转业务,要求重新发往 Contact URI)。
4xx400 - 499客户端错误,请求无效或无法在该服务器上完成。401 Unauthorized(鉴权挑战),486 Busy Here(被叫忙)。
5xx500 - 599服务器错误,服务器无法完成有效请求。503 Service Unavailable(服务器临时过载)。
6xx600 - 699全局错误,请求在任何服务器上都无法完成。600 Busy Everywhere(所有终端都忙)。

3.2 消息体:SDP 的承载

SIP 消息的消息体是可选的,用于承载会话相关的净荷信息。消息体类型由 Content-Type 头域指定。

在 IMS 网络中,消息体最主要的作用是承载 SDP (Session Description Protocol,会话描述协议)

  • 目的:SDP 用于描述多媒体会话的属性(如媒体类型、编解码器、传输地址和端口)。
  • 机制:SIP 承载 SDP,实现了 提议/应答 (Offer/Answer) 模型
    • 提议 (Offer):由一方发出(通常在 INVITEUPDATE 请求中),描述其支持的媒体能力和接收地址。
    • 应答 (Answer):由另一方回复(通常在 183 Session Progress200 OK 响应中),确定双方都支持的媒体参数和其接收地址。

通过 SDP 协商,通信双方就媒体流的参数达成一致,RTP(实时传输协议)媒体流随后才能建立。

4. URI 格式:IMS 寻址与号码规则

IMS 路由和寻址的核心基于 URI (Uniform Resource Identifier)。SIP 协议要求 IMS 网元能够处理多种 URI 格式。

URI 类型格式/示例核心用途IMS 路由机制要求来源
SIP URIsip:user@host标识用户或网络实体;IMS 域内路由的基础。必须支持。E.164 号码需转换为 SIP URI 进行路由。
SIPS URIsips:user@host与 SIP URI 相同,但强制要求采用安全的传输机制 (如 TLS)。任何支持 TLS 的 IMS 实现都必须支持 SIPS URI。
TEL URItel:+861012345678基于 E.164 编码格式的电话号码表示,遵循 RFC 3966。用于拨叫 E.164 号码,在 S-CSCF 或 I-CSCF 需要查询 ENUM/DNS 转换为 SIP URI。
URNurn:service:sos统一资源名称,用于标识服务而非特定地址。紧急呼叫场景下使用(如 sospolice),由 E-CSCF 处理。

运营商的号码规则与路由转换

在运营商网络中,SIP 路由对 URI 格式有严格要求:

  1. E.164 转换:E.164 格式的公共用户标识(PUI)不用于 IMS 直接路由,必须先转换成 SIP URI 格式。S-CSCF/I-CSCF 会通过查询 ENUM/DNS 服务将 TEL URI 转换为 SIP URI。
  2. 号码携带:如果主叫用户拨叫的被叫号码仅为 E.164 号码,终端(UA)发往网络的被叫号码形式可以是 TEL URI 格式,或者 SIP URI 格式(其中 userinfo 部分是 E.164 号码,host 部分是归属域名,并包含 user=phone 参数)。
    • user=phone 参数:在 SIP URI 中,携带 user=phone 参数可以明确指示 URI 的用户部分是一个电话用户。

5. SIP 核心方法集:IMS 中的信令指令

SIP 方法(Method)定义了请求要执行的操作。在 IMS 核心网中,以下方法最为关键:

5.1 注册与定位方法

方法名核心功能IMS 场景应用关联关键头域来源
REGISTER用户注册和注销。绑定用户逻辑身份(AOR/IMPU)与物理可达地址(Contact URI)。To/From (AOR), Contact (绑定地址), Expires (注册有效期), Path / Service-Route

5.2 会话建立与终止方法

方法名核心功能IMS 场景应用事务特性来源
INVITE发起或修改会话。VoLTE/VoNR 呼叫的起始;携带 SDP Offer。INVITE 事务,必须通过 ACK 确认 2xx 最终响应(三次握手)。
ACK对 INVITE 最终响应的确认确保会话建立的可靠性,完成 INVITE 事务的最后一步。不属于 INVITE 事务本身,但用于确认 INVITE 最终响应。
BYE终止一个已建立的会话。通话中任一方挂机后释放会话资源。非 INVITE 事务,无须 ACK 确认。必须在对话内发送。
CANCEL取消一个未决的请求。主叫在被叫振铃阶段(未收到 2xx)挂断时使用。独立事务,逐跳传输。

注意:BYE 与 CANCEL 的区别

  • BYE:用于终止已建立的对话(已收到 2xx 响应)。
  • CANCEL:用于取消未完成的事务(例如,正在发送 180 Ringing 临时响应时)。

5.3 会话控制与增强方法

方法名核心功能IMS 场景应用关联机制/要求来源
PRACK可靠地确认临时响应 (1xx)。配合 Require: 100rel 标签,用于可靠地传输振铃信息或 SDP Offer/Answer。必须包含 Rseq(响应序列号)头域。
UPDATE会话属性修改和会话刷新。1. 资源预留(Precondition 机制)。2. 会话定时器的心跳刷新。通常用于会话内,可不携带 SDP 消息体(刷新时)。
OPTIONS查询对端能力;链路心跳。IMS 网元之间周期性发送,探测对端网元是否故障。如果 Max-Forwards=0,服务器可响应,作为链路检测。

6. 信令日志实战分析:请求与响应的生命周期

我们将以一个简化的 IMS 呼叫建立事务为例,分析请求行、状态行和核心方法集如何协同工作,完成一次 SIP 事务的生命周期。

场景: 主叫 UE 发起 INVITE 请求,经过 S-CSCF,最终被被叫 UAS 接受。

6.1 INVITE 请求(UAC → UAS)

UE 发起的 INVITE 消息是 请求行 的典型代表。

消息行/头域示例值关键作用分析来源
请求行INVITE sip:[email protected] SIP/2.0方法:INVITE,目标是建立会话。Request-URI:指示请求的初始目标。
ViaSIP/2.0/UDP 6.6.6.6:5060;branch=z9hG4bK...记录 UE 的地址,并生成 branch 参数(标识事务)。
From<sip:[email protected]>;tag=a48s逻辑发起方,tag 参数是对话标识的一半。
To<sip:[email protected]>逻辑接收方,不带 tag(请求在对话外)。
CSeq1 INVITE序列号(1)和方法(INVITE),用于事务和消息排序。
Content-Typeapplication/sdp指示消息体为 SDP,承载 Offer。

6.2 183 临时响应(UAS → UAC)

被叫方 UAS 收到 INVITE 后,在振铃前返回 183 响应,是 状态行可靠临时响应 的体现。

消息行/头域示例值关键作用分析来源
状态行SIP/2.0 183 Session Progress状态码 183:会话正在进展中。
To<sip:[email protected]>;tag=b77tUAS 在响应中添加 tagCall-ID + From-tag + To-tag 共同建立早期对话(Early Dialog)。
RSeq1响应序列号,配合 100rel(可靠临时响应)使用。
Contact<sip:[email protected]>被叫的实际可达地址。

6.3 200 OK 最终响应与 ACK 确认

当被叫摘机后,UAS 发送 200 OK 响应,标志着呼叫成功,并建立最终对话(Confirmed Dialog)。

  • 200 OK(INVITE)

    • 状态行SIP/2.0 200 OK,呼叫成功。
    • To Tag:沿用 183 响应中添加的 tag,确保对话一致性。
    • SDP:携带 SDP Answer,完成媒体协商。
    • 会话定时器:通常会包含 Session-Expiresrefresher 参数,用于协商会话续期机制。
  • ACK(UAC → UAS)

    • 方法ACK,完成 INVITE 事务的可靠握手。
    • CSeq:序号必须与对应的 INVITE 请求一致。
    • 路由:ACK 需遵循 INVITE 响应中 Record-Route 建立的路由集。

7. 本章小结

SIP 协议通过 UAC/UAS 的角色动态转换,以及结构化的起始行、头域和消息体,实现了高效的会话控制。IMS 网络严格依赖 SIP 协议定义的方法(如 INVITE, REGISTER, BYE)来控制会话生命周期,并使用 TEL URI/SIP URI 进行地址寻址和路由转换。尤其需要注意 B2BUA 在 AS/SBC 等网元中的应用,它是实现业务逻辑和拓扑隐藏的关键机制。


工程师进阶思考 (FAQ)

Q1:为什么 IMS 网络要求将 E.164 格式的 PUI 转换成 SIP URI 格式进行路由?

A1: IMS 网络是基于 IP 的多媒体系统,其核心路由机制(如 DNS/ENUM 查询和 Route/Record-Route 处理)是为 SIP URI 设计的。SIP URI 格式 (sip:user@host) 具有明确的域名 (host) 部分,这使得 SIP 代理(如 I-CSCF 和 S-CSCF)可以方便地使用标准的 DNS 协议查询下一跳的 IP 地址或全称域名 (FQDN)。如果直接使用 TEL URI,IMS 网元必须首先将其转换为 SIP URI 或通过其他机制确定归属域,才能进行高效的跨域路由和 S-CSCF 寻址。

Q2:INVITE 事务的 ACK 消息和 BYE 事务的 200 OK 响应,哪个属于 SIP 事务的一部分?

A2: 根据 RFC 3261 对事务的定义:

  1. BYE 事务:BYE 请求和其最终响应(200 OK)构成一个完整的非 INVITE 事务(Regular Transaction)。
  2. INVITE 事务:如果 INVITE 的最终响应是非 2xx 失败响应(如 4xx, 5xx, 6xx),则 ACK 属于该事务的一部分。但是,如果 INVITE 的最终响应是 2xx 成功响应(如 200 OK),则用于确认 2xx 的 ACK 请求被视为一个独立的事务,不属于 INVITE 事务本身。

Q3:在 IMS 注册流程中,REGISTER 消息的 Request-URI、From 头域和 Contact 头域各扮演什么角色?

A3: 这三个字段在 REGISTER 流程中分工明确:

  • Request-URI:指示请求的目标服务器,即归属网络的域名(例如 sip:ims.home.com),URI 中不能包含用户部分和 ”@“。P-CSCF 会根据这个域名查询 I-CSCF 地址。
  • From/To:都填写要注册的公共用户标识(AOR/IMPU)。它们代表用户的逻辑身份,是注册的主体。
  • Contact:填写 UE 当前的物理可达地址(如 IP 地址和端口),并包含 expires 参数。注册的本质就是将 From/To 定义的逻辑身份与 Contact 定义的物理地址进行绑定。

请您发出“请继续”指令,我将开始撰写第三篇。