好的,专家讲师。我将继续为您撰写 SIP 协议深度解析系列的第十二篇。本篇将聚焦于 IMS 网络中的计费机制。在电信级网络中,计费的精确性和可靠性是核心要求。我们将深入解析 SIP 协议中专门用于计费关联的私有头域 P-Charging-Vector,以及它在整个呼叫生命周期中,如何与 Diameter 计费消息(ACR)协同工作。


VoLTE高清语音技术精要(十二):IMS计费核心:P-Charging-Vector与ICID/IOI

1. 导论:电信级计费的挑战与SIP的解决方案

在 IMS(IP Multimedia Subsystem)网络中,计费系统(Charging System)必须精确记录每一次会话的属性、时长、用户身份、接入网络以及所涉及的网络实体。由于 SIP 信令是分散式路由的,且会话状态在多个网元(P-CSCF、S-CSCF、I-CSCF、AS 等)上维护,如何将这些分散的事件和状态精确地关联到同一个“会话”上,是 IMS 计费面临的核心挑战。

IMS 采用 Diameter 协议(如 Rf 接口用于离线计费,Ro 接口用于在线计费)进行实际的计费数据传输。然而,SIP 协议本身需要承载必要的计费锚点信息,以便在 SIP 域内传递计费上下文。

P-Charging-Vector 私有头域正是为解决这一问题而生。它在 SIP 消息中扮演着“计费指纹”的角色,确保呼叫的所有阶段(建立、修改、释放)在所有涉及网元上都能被追踪和汇总成完整的计费数据记录(CDR, Charging Data Record)。

2. P-Charging-Vector 的结构与核心参数

P-Charging-Vector 头域用于在 IMS 信任域内传递计费相关信息。它主要包含两个关键的标识符:ICID(IMS Charging Identifier,IMS 计费标识)和 IOI(Inter-Operator Identifier,运营商间标识)。

2.1 ICID:会话的全局锚点

ICID 是 IMS 会话的唯一标识符

参数英文全称核心作用插入网元来源
icid-valueICID Value唯一标识一个 IMS 会话(包括呼叫和独立事务)。P-CSCF(在始发请求中)
icid-generated-atICID Generated At记录生成 ICID 的网元(通常是 P-CSCF)的地址或域名。P-CSCF

P-CSCF 的职责

  • 对于 UE 发起的独立事务请求(例如 MESSAGEOPTIONS),P-CSCF 应在 P-Charging-Vector增加 icid 参数
  • 对于 UE 发起的 INVITE 对话,P-CSCF 在转发给 S-CSCF 前,会在 P-Charging-Vector 中增加 icid-value

2.2 IOI:跨域计费与互通标识

IOI 用于识别 SIP 消息在 IMS 域内或跨域互通中涉及的始发网络和终结网络。

参数英文全称核心作用插入网元/场景来源
orig-ioiOriginating IOI始发网络(主叫方)的标识。S-CSCF(始发会话)或 MGCF(互通场景)
term-ioiTerminating IOI终结网络(被叫方)的标识。S-CSCF(终结会话)或 MGCF(互通场景)

MGCF 的职责(互通场景)

  1. MGCF 必须存储 P-Charging-Vector 头中的 orig-ioi 参数。
  2. MGCF 在向 IMS 域发送 183 Session Progress 响应时,必须向 P-Charging-Vector 插入从初始 INVITE 消息中携带的 orig-ioi 参数以及第二类 term-ioi 参数。第二类 term-ioi 参数必须设置为 MGCF 所在的网络。

2.3 接入网络计费信息

access-network-charging-info 参数用于在会话修改时,传递接入网络层的计费信息(如底层承载的 QoS 变化)。

  • S-CSCF/P-CSCF 的职责:对于从终端发来的 reINVITE 请求或 UPDATE 请求,P-CSCF 在发送给 S-CSCF 时应在 P-Charging-Vector 头中包含更新过的 access-network-charging-info 参数。S-CSCF 收到该请求后,应保存更新了的该参数,并在请求转发给 AS 时应该包含该参数。

3. SIP 消息与 Diameter ACR(计费请求)的协同

SIP 协议通过 P-Charging-Vector 携带的 ICID,将 SIP 层的信令事件(如呼叫建立、修改、释放)与 Diameter 计费系统(通过 Rf 接口)的 ACR(Accounting Request,计费请求)消息关联起来。

3.1 会话计费(ACR [Start]/[Stop]/[Interim])

IMS 会话计费主要由 P-CSCFS-CSCF 触发,它们都在收到 INVITE200 OK 最终响应后,向各自的 CDF(Charging Data Function)发送 ACR [Start] 消息。

阶段SIP 触发消息计费 ACR 消息类型触发网元来源
会话建立收到 INVITE200 OK 响应ACR [Start]P-CSCF/S-CSCF
会话修改收到 UPDATEreINVITE200 OK 响应ACR [Interim]P-CSCF/S-CSCF
会话释放收到 BYE 请求ACR [Stop]P-CSCF/S-CSCF
事件计费INVITE 消息触发 HSS 查询ACR [Event]I-CSCF

CDF 的处理

  • CDF 收到 ACR [Start] 消息后会打开一个会话 CDR。
  • CDF 收到 ACR [Interim] 消息后会生成部分 CDR,或更新原有 CDR。
  • CDF 收到 ACR [Stop] 消息后会关闭会话 CDR。

3.2 计费信息在 SIP 响应中的携带

在呼叫过程中,P-Charging-Vector 也会被携带在响应消息中,以确保计费信息的双向同步。

  • S-CSCF 转发的 183 消息:会包含 icid-valueorig-ioiterm-ioi
  • I-CSCF 转发的 183 消息:同样包含 icid-valueorig-ioiterm-ioi

4. P-CSCF/S-CSCF 容灾与计费连续性

在 IMS 容灾场景下,计费连续性是一个关键考量点。

4.1 P-CSCF 容灾下的计费处理

当 P-CSCF 发生故障并由备用 P-CSCF2 接管时:

  • 路由重建:P-CSCF2 在 INVITE 消息中提取 PPI 或 From 域的主叫号码构造 PAI,并在 Route 中增加标识主叫流程的 orig 参数,将呼叫发往 I-CSCF。
  • 计费关联:虽然 P-CSCF2 重建了 PAI 和路由,但它必须确保后续生成的计费消息(ACR)能够与重建的呼叫上下文正确关联。P-CSCF2 会在转发请求前插入新的 P-Charging-Vector,从而锚定新的计费记录。

4.2 AS 故障处理与计费

当 AS 故障且 S-CSCF 无法从 AS 获得响应时,S-CSCF 必须根据 iFC 规则中的 DefaultHandling 设置来决定是终止会话还是让会话继续。

  • 如果选择终止会话:S-CSCF 会向 CDF 发送相应的 ACR 消息关闭 CDR。
  • 如果选择让会话继续:CDR 保持开启,但 AS 侧的业务逻辑和计费可能受到影响。

5. 会话释放时的计费终结

会话释放是计费流程的终结。

  • BYE 触发:当 UE 发送 BYE 消息时,P-CSCF 收到应用会话终止消息,向 PCRF 下发 **STR(Session-Termination-Request)**消息释放承载会话。同时,P-CSCF 和 S-CSCF 发送 ACR [Stop] 消息关闭会话 CDR。
  • 承载释放:PCRF 收到 STR 后,发送 RAR 消息(携带 REMOVE QoS Rules 指示)通知 PGW 删除专有承载。PCRF 返回 **STA(Session-Termination-Answer)**响应给 P-CSCF。

6. 信令日志实战分析:计费 CDR 的创建

我们通过呼叫建立流程,观察 P-CSCF、I-CSCF 和 S-CSCF 如何创建计费记录。

场景: 主叫 UE P-CSCF I-CSCF S-CSCF 被叫 UE 建立呼叫,最终收到 200 OK

6.1 步骤 1:主叫 INVITE 消息携带 ICID

P-CSCF 收到主叫 INVITE 并转发给 I-CSCF 时,插入了 ICID。

INVITE sip:[email protected] SIP/2.0
...
P-Charging-Vector: icid-value="pcscf-123456789";orig-ioi=visited.net
...

6.2 步骤 2:I-CSCF 触发 ACR [Event] (创建 I-CSCF CDR)

I-CSCF 收到 INVITE 后,进行 Cx 查询 HSS,然后向 S-CSCF 转发 INVITE。此时,I-CSCF 发送 Accounting Request [Event] 给 CDF,创建 I-CSCF CDR

计费事件ACR 消息目的来源
Cx 查询成功Accounting Request [Event]创建 I-CSCF CDRI-CSCF

6.3 步骤 3:收到 200 OK 触发 ACR [Start] (创建会话 CDR)

当呼叫被接通,主被叫双方都收到 200 OK 响应后:

计费事件ACR 消息目的来源
收到 200 OKAccounting Request [Start]P-CSCF/S-CSCF 打开会话 CDR(P-CSCF CDR 和 S-CSCF CDR)P-CSCF/S-CSCF

6.4 步骤 4:会话修改触发 ACR [Interim]

如果在通话过程中,用户发起 UPDATEreINVITE 并成功收到 200 OK 响应,P-CSCF 和 S-CSCF 会发送 ACR [Interim] 消息。

计费事件ACR 消息目的来源
收到 UPDATE/reINVITE 200 OKAccounting Request [Interim]更新 CDR,记录媒体或承载信息修改P-CSCF/S-CSCF

关联性:所有的 CDRs(I-CSCF CDR, P-CSCF CDR, S-CSCF CDR)都通过 P-Charging-Vector 中携带的 ICID 关联起来。

7. 本章小结

P-Charging-Vector 是 IMS 计费系统的核心 SIP 头域,它通过 ICID 实现了 SIP 信令事件与 Diameter 计费消息(ACR)的紧密关联。

  1. P-CSCF 是 ICID 的主要生成和插入者,它将 ICID 锚定在始发请求中。
  2. ACR 消息 分为 Start(呼叫建立)、Interim(会话修改)和 Stop(会话释放)阶段,分别由 P-CSCF/S-CSCF 收到关键 SIP 消息(如 200 OKUPDATE 200 OKBYE)后触发。
  3. IOI 用于跨域呼叫的计费识别,尤其在 MGCF 互通场景中处理复杂。
  4. 会话修改(UPDATE/reINVITE)时,P-CSCF/S-CSCF 必须保存并转发更新后的 access-network-charging-info,并在收到 200 OK 后发送 ACR [Interim]
  5. 在释放会话时,P-CSCF 会向 PCRF 下发 STR 消息释放承载资源。

工程师进阶思考 (FAQ)

Q1:在 IMS 互通呼叫中,MGCF 为什么需要在 183 Session Progress 响应中同时携带 orig-ioiterm-ioi 参数?

A1: MGCF 处于 IMS 域与 CS/PSTN 域的边界,是计费互通的关键网元。在收到 IMS 域的 INVITE 请求后,MGCF 在向 IMS 域发送 183 Session Progress 响应时必须携带 orig-ioiterm-ioi

  1. orig-ioi:用于标识始发网络。MGCF 从初始 INVITE 消息中存储并携带该参数,确保计费系统知道呼叫的源头。
  2. term-ioi:用于标识终结网络。MGCF 必须插入第二类 term-ioi,其值必须设置为 MGCF 所在的网络。这清晰地界定了信令从 IMS 核心网进入 CS/PSTN 域的边界,对于跨运营商的结算和计费分析至关重要。

Q2:当 S-CSCF 收到来自终端的 reINVITE 请求时,它对 P-Access-Network-Info 头域的处理原则是什么?

A2: S-CSCF 对 P-Access-Network-Info (PANI) 的处理取决于下一跳的信任域:

  • 转发给信任域 AS:如果请求将被转发给一个位于信任域的 AS 时,S-CSCF 应保留 P-Access-Network-Info 消息头。这确保了 AS 在处理业务逻辑(如 eSRVCC 切换、呼叫保持)时,能够获取最新的接入网络信息。
  • 转发给非信任域或归属域以外:否则,S-CSCF 应删掉该消息头。

Q3:P-CSCF 收到 UE 发起的 BYE 消息时,除了转发给 S-CSCF 并发送 ACR [Stop] 外,还需要向哪个核心网元发送什么消息以释放承载资源?

A3: P-CSCF 作为 AF(Application Function),负责与底层承载控制功能(如 PCRF/PCF)交互。当 P-CSCF 收到应用会话终止消息(即 BYE)时:

  1. P-CSCF 会向 PCRF 下发 **STR(Session-Termination-Request)**消息,请求释放承载会话。
  2. PCRF 收到 STR 后,会向 PGW 发送 RAR 消息(携带 REMOVE QoS Rules 指示)通知删除专有承载。
  3. PCRF 返回 **STA(Session-Termination-Answer)**响应给 P-CSCF。

这确保了 SIP 层的会话释放与承载层的 QoS 资源释放同步进行,防止资源泄漏。