好的,专家讲师。根据您的指令,我将继续为您撰写 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 地址

  1. S-CSCF 的 Forking:当主叫用户发起会话请求(INVITE)到达被叫 S-CSCF 时,S-CSCF 根据 HSS 返回的注册信息,发现被叫用户(PUI)有多个注册的 Contact 地址(例如 UE1, UE2, UE3)。
  2. 同时振铃:被叫 S-CSCF 发生并行 Fork,向 UE1、UE2 和 UE3 同时发送 INVITE 消息。因此,预期结果是每个终端都能振铃
  3. 摘机确认:当其中一个终端(例如 UE1)摘机后,UE1 返回 200 OK (INVITE) 最终响应。
  4. 终止其他分支: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 必须与初始 INVITERequest-URI 一致,Cseq 必须在 InviteCseq 上递增。

3. CDR 话单的精细化控制:闭合原因与完整性

在离线计费(Rf 接口)中,CDF 必须精确记录话单的生成、分割和终止原因,以便进行准确的计费结算。这主要通过 Cause-For-Record-ClosingIncomplete-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)部分话单的分割标志(如音视频切换)
5O&M 操作干预(managementIntervention)异常结束标识
6切换次数达到导致话单分割(maxChangeCond)部分话单的分割标志
7CCF 发起话单关闭异常结束标识

部分话单的序列号:在因超时等原因生成部分话单的情况下,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 网络中的两个复杂机制:

  1. 并行 Forking:S-CSCF 根据多注册 Contact 地址同时向多个终端发送 INVITE,通过第一个摘机的终端返回的 200 OK 触发向其他分支发送 CANCEL,以确保资源释放。
  2. 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 必须与初始 INVITERequest-URI 一致Cseq 序列号(Call-Sequence Number)必须在初始 INVITECseq 上递增

Q2:IMS 会话释放时,P-CSCF 和 S-CSCF 收到 BYE 请求的 2xx 响应后,各自需要执行哪些资源清理操作?

A2: 在会话释放流程中,P-CSCF 和 S-CSCF 都必须释放所有相关的会话状态和多媒体资源:

  1. P-CSCF:当收到对应当前对话 BYE 请求的 2xx 响应时,应删除保存的所有与该对话相关的信息。此外,P-CSCF 也会触发向 PCRF 发送 STR 消息,释放底层承载资源。
  2. S-CSCF:当收到 BYE2xx 响应时,S-CSCF 应该释放所有的与对话相关的信息和与多媒体会话相关的信息。如果会话触发了 AS 服务,S-CSCF 还需要根据存储的对话信息通知相关 AS 结束业务

Q3:CDR 话单中的 Cause-For-Record-Closing 字段,当其值为 4 时,表示什么含义?这在 SIP 流程中通常由哪个 SIP 消息触发?

A3:Cause-For-Record-Closing 字段的值为 4 时,表示媒体切换导致话单分割(service-Change)。

在 SIP 流程中,这种状态变化通常由 INVITEUPDATE 消息触发,特别是当这些消息携带新的 SDP 净荷(例如,从语音切换到视频,或反之)并成功收到 200 OK 响应后。此时,P-CSCF/S-CSCF 会发送 ACR [Interim] 消息给 CDF,并包含新的媒体信息,CDF 随后生成标记为“4”的部分话单。