好的,专家讲师。根据您的指令,我将继续为您撰写 SIP 协议深度解析系列的第二十二篇。本篇将深入分析 IMS 网络中的两种复杂场景管理机制:一是 并行 Forking(即一个呼叫振铃多个终端),二是 CDR 话单的精细化控制,特别是话单的分割和闭合原因。
VoLTE高清语音技术精要(二十二):IMS 会话的复杂场景管理:并行 Forking 与 CDR 话单的闭合原因解析
1. 导论:IMS 会话的复杂性与状态精细控制
在基础的 SIP 呼叫模型中,一个 INVITE 请求通常对应一个被叫终端。但在 IMS 环境下,由于用户可以拥有多个公共用户标识(PUI)并同时注册多个终端(Contact 地址),S-CSCF 必须支持 并行 Forking 机制,即向所有注册的可达终端同时发送呼叫请求。
此外,IMS 呼叫的计费要求极其严格,CDF(计费数据功能)不仅需要记录呼叫的起始和结束,还需要记录会话在中间发生的所有状态变化(如媒体切换、超时、异常),并通过 Cause-For-Record-Closing 等字段,准确标记话单终止的原因。
本章将结合某运营商的测试规范,解析并行 Forking 的信令要求,并深入分析 CDF 话单中的关键控制字段,这些字段是保障计费准确性和故障分析的关键。
2. IMS 并行 Forking 机制详解
并行 Forking 是 S-CSCF 的一项核心能力,旨在确保任何可达终端都不会错过呼叫。
2.1 Forking 的触发条件与信令流程
并行 Forking 的前提是多个终端共享同一个 **PUI(公共用户标识)**并已成功注册到不同的 Contact 地址。
- S-CSCF 的 Forking:当主叫用户发起会话请求(
INVITE)到达被叫 S-CSCF 时,S-CSCF 根据 HSS 返回的注册信息,发现被叫用户(PUI)有多个注册的 Contact 地址(例如 UE1, UE2, UE3)。 - 同时振铃:被叫 S-CSCF 发生并行 Fork,向 UE1、UE2 和 UE3 同时发送
INVITE消息。因此,预期结果是每个终端都能振铃。 - 摘机确认:当其中一个终端(例如 UE1)摘机后,UE1 返回
200 OK (INVITE)最终响应。 - 终止其他分支:S-CSCF 收到 UE1 的
200 OK后,必须向其他未接通的分支(UE2 和 UE3)发送CANCEL消息,使 UE2 和 UE3 停止振铃。
2.2 异常情况下的分支管理
并行 Forking 机制必须能够应对会话过程中分支终端状态的变化,例如终端注销或主叫取消呼叫。
| 异常事件 | S-CSCF 或网络处理动作 | 预期结果 | 来源 |
|---|---|---|---|
| 主叫取消会话 | S-CSCF 向所有振铃的被叫分支发送 CANCEL 消息。 | 被叫终端停止振铃。 | |
| 部分分支被注销 | 当其中一个分支(例如 UE2)被 HSS 注销。 | 被注销分支终端能停止振铃。 | |
| 影响范围 | 其他未被注销的分支(例如 UE1, UE3)。 | 其他分支应继续振铃,不受影响。 |
在 IMS 互通场景中,如果主叫在被叫用户应答前挂机,BGCF 会向 VIG(VoLTE I/I/E-CSCF/BGCF)发送 CANCEL 消息。此时 Request-URI 必须与初始 INVITE 的 Request-URI 一致,Cseq 必须在 Invite 的 Cseq 上递增。
3. CDR 话单的精细化控制:闭合原因与完整性
在离线计费(Rf 接口)中,CDF 必须精确记录话单的生成、分割和终止原因,以便进行准确的计费结算。这主要通过 Cause-For-Record-Closing 和 Incomplete-CDR-Indication 字段实现。
3.1 Cause-For-Record-Closing(话单关闭原因)
该字段由 **CCF(Charging Gateway Function)**填写,用来描述本次会话结束的原因,其取值包括正常结束、异常终止、超时和媒体切换等。
| 值 | 含义 | CDR 状态标志 | 来源 |
|---|---|---|---|
| 0 | 会话正常结束(service-Delivery-End-Successfully) | 正常结束标志(单独话单和最后部分话单) | |
| 1 | 会话异常终止(un-Successful-Service-Delivery) | 异常结束标识(单独话单和最后部分话单) | |
| 3 | 到达话单分割时间(time-Limit) | 部分话单的分割标志 | |
| 4 | 媒体切换导致话单分割(service-Change) | 部分话单的分割标志(如音视频切换) | |
| 5 | O&M 操作干预(managementIntervention) | 异常结束标识 | |
| 6 | 切换次数达到导致话单分割(maxChangeCond) | 部分话单的分割标志 | |
| 7 | CCF 发起话单关闭 | 异常结束标识 |
部分话单的序列号:在因超时等原因生成部分话单的情况下,CCF 需要为该会话中的每个部分话单分配 Record-Sequence-Number,从 1 开始依次递增,用于判断一次会话是否有部分话单丢失。
3.2 Incomplete-CDR-Indication(话单不完整指示)
该字段说明本 CDR 内容是否完整,用于 CDF 检测缺少计费数据时提供额外的缺失功能记录。它包含三个子字段:
| 子字段 | 含义 | 状态(例如 TRUE) | 来源 |
|---|---|---|---|
| aCRStartLost | 缺少 Start 类型的计费消息。 | TRUE 表示缺少 ACR[Start] 消息。 | |
| aCRInterimLost | 缺少 Interim 类型的计费消息。 | YES 表示缺少 ACR[Interim] 消息。 | |
| aCRStopLost | 缺少 Stop 类型的计费消息。 | TRUE 表示缺少 ACR[Stop] 消息。 |
注意:如果 aCRInterimLost 值为 NO,则表示含有 Interim 类型的计费消息。
4. SIP 会话修改与 ACR [Interim] 的触发
话单分割标志中的 **媒体切换导致话单分割(service-Change,值 4)**与 SIP 层的会话修改(INVITE/UPDATE)紧密相关。
在会话中间收到 INVITE/UPDATE 消息后,主叫用户的 S-CSCF 及 P-CSCF 能够发出 ACR [Interim] 请求。CDF 收到 ACR [Interim] 消息后,会更新 CDR。
| SIP 消息 | 触发 ACR 消息类型 | CDR 状态变化 | 来源 |
|---|---|---|---|
INVITE/UPDATE 消息及其 200 OK 响应 | ACR [Interim] | 更新 CDR | |
| BYE 消息 | ACR [Stop] | 关闭 CDR |
5. 本章小结
本章深入解析了 IMS 网络中的两个复杂机制:
- 并行 Forking:S-CSCF 根据多注册 Contact 地址同时向多个终端发送
INVITE,通过第一个摘机的终端返回的200 OK触发向其他分支发送CANCEL,以确保资源释放。 - CDR 话单控制:计费系统通过 Cause-For-Record-Closing 字段(值 0-7)精确标识话单终止和分割的原因,并通过 Record-Sequence-Number 确保部分话单的连续性和完整性。
6. 工程师进阶思考 (FAQ)
Q1:在并行 Forking 场景中,如果主叫在被叫摘机前取消会话,S-CSCF 应该向未接通的分支发送什么 SIP 消息?该消息的 CSeq 序列号应如何设置?
A1: 当主叫取消会话时,S-CSCF 应该向未接通的被叫分支发送 CANCEL 消息,以停止振铃。
CANCEL 消息的 Request-URI 必须与初始 INVITE 的 Request-URI 一致。
Cseq 序列号(Call-Sequence Number)必须在初始 INVITE 的 Cseq 上递增。
Q2:IMS 会话释放时,P-CSCF 和 S-CSCF 收到 BYE 请求的 2xx 响应后,各自需要执行哪些资源清理操作?
A2: 在会话释放流程中,P-CSCF 和 S-CSCF 都必须释放所有相关的会话状态和多媒体资源:
- P-CSCF:当收到对应当前对话
BYE请求的2xx响应时,应删除保存的所有与该对话相关的信息。此外,P-CSCF 也会触发向 PCRF 发送 STR 消息,释放底层承载资源。 - S-CSCF:当收到
BYE的2xx响应时,S-CSCF 应该释放所有的与对话相关的信息和与多媒体会话相关的信息。如果会话触发了 AS 服务,S-CSCF 还需要根据存储的对话信息通知相关 AS 结束业务。
Q3:CDR 话单中的 Cause-For-Record-Closing 字段,当其值为 4 时,表示什么含义?这在 SIP 流程中通常由哪个 SIP 消息触发?
A3: 当 Cause-For-Record-Closing 字段的值为 4 时,表示媒体切换导致话单分割(service-Change)。
在 SIP 流程中,这种状态变化通常由 INVITE 或 UPDATE 消息触发,特别是当这些消息携带新的 SDP 净荷(例如,从语音切换到视频,或反之)并成功收到 200 OK 响应后。此时,P-CSCF/S-CSCF 会发送 ACR [Interim] 消息给 CDF,并包含新的媒体信息,CDF 随后生成标记为“4”的部分话单。