VoLTE高清语音技术精要(十三):SIP参数到Diameter AVP的映射:IMS实时/离线计费流程实践

1. 导论:SIP与Diameter协议的协同——构建可计费的会话

在 IMS(IP Multimedia Subsystem)网络中,SIP 协议完成了会话的控制和信令路由,而计费功能则依赖于 Diameter 协议。Diameter 协议在 IMS 中主要通过 Rf 接口(离线计费)和 Ro 接口(在线计费)工作。

IMS 计费的核心挑战在于,如何将 SIP 消息中分散在不同网元(P-CSCF, S-CSCF, I-CSCF, AS)的会话状态信息和计费锚点,可靠地映射到 Diameter 协议的 AVP(Attribute Value Pair,属性值对)中,并最终形成完整、准确的计费数据记录(CDR)。

本章将详细解析 SIP 层的计费头域(主要是 P-Charging-VectorP-Asserted-Identity)如何驱动 Diameter 协议的**计费请求(ACR, Accounting Request)**消息,以及 P-CSCF/S-CSCF/I-CSCF 三大网元在呼叫生命周期中触发 CDR 的精确时机。

2. 离线计费(Rf)中的 SIP 参数映射

IMS 离线计费流程主要通过 Rf 接口实现,该接口连接计费触发功能(CTF,通常集成在 CSCF/AS 中)和计费数据功能(CDF,用于生成 CDR)。SIP 事件是 ACR 消息触发的直接驱动力。

2.1 会话计费状态的生命周期(ACR 消息类型)

计费会话的生命周期与 SIP 对话的生命周期紧密同步,通过不同类型的 ACR 消息进行标识:

SIP 触发消息Diameter 消息类型ACR 请求类型计费 CDR 动作触发网元来源
收到 INVITE 200 OKAccounting RequestStart打开会话 CDR,开始计费。P-CSCF/S-CSCF
收到 UPDATE/reINVITE 200 OKAccounting RequestInterim更新 CDR,记录会话修改(如媒体改变)。P-CSCF/S-CSCF
收到 INVITE(Cx查询前)Accounting RequestEvent创建事件 CDR(非会话 CDR),记录路由事件。I-CSCF
收到 BYE 请求Accounting RequestStop关闭会话 CDR,结束计费。P-CSCF/S-CSCF
Session Timer 超时Accounting RequestStop/Interim关闭会话 CDR 或生成部分 CDR。P-CSCF/S-CSCF

触发时机差异

  • P-CSCF/S-CSCF (会话 CDR):在收到 INVITE 消息的 200 OK 最终响应后,两者均向 CDF 发送 ACR [Start] 消息。
  • I-CSCF (事件 CDR):I-CSCF 在向 S-CSCF 发出 INVITE 信号前,通过 Cx 接口查询 HSS 后,即发出 ACR [Event] 请求,创建 I-CSCF CDR

2.2 SIP 关键头域到 Diameter AVP 的映射

Diameter 计费消息的 AVP 需要携带 SIP 消息中的核心信息,以确保 CDR 的完整性:

SIP 头域/参数Diameter AVP (示例)核心用途触发网元
P-Charging-Vector 中的 icid-valueSession-Id(或其关联 AVP)唯一标识 IMS 会话,用于关联所有 CDR。P-CSCF 始发
P-Asserted-IdentityUser-NameCalled-Party-Address识别主叫/被叫用户的真实身份,用于计费主体。P-CSCF 插入
Via 头域中的 IP/端口Origin-Host/Origin-Realm标识发起 ACR 消息的网元地址和归属域。CSCF/AS
P-Charging-Vector 中的 orig-ioi/term-ioi跨域标识 AVP识别始发和终结网络的标识,用于互通结算。S-CSCF/MGCF
P-Charging-Vector 中的 access-network-charging-info承载网络信息 AVP记录承载 Qos/媒体变化信息,用于 ACR [Interim]。P-CSCF/S-CSCF

ICID 的重要性ICID(IMS Charging Identifier)是计费的全局锚点。P-CSCF 是 ICID 的主要生成和插入者,它通过 icid-value 确保了 P-CSCF CDR、S-CSCF CDR 和 I-CSCF CDR 能够被 CDF 关联起来。

3. 会话修改(UPDATE/reINVITE)与 ACR [Interim]

会话修改是 IMS 计费的独特之处。由于用户可以在通话中改变媒体(如切换到视频),或因移动性事件导致底层承载信息变更,IMS 必须发送 ACR [Interim] 消息更新 CDR。

3.1 P-CSCF 对承载信息的处理

P-CSCF 在会话修改中扮演着承载信息收集者的角色:

  • P-CSCF 的动作:对于终端发来的 reINVITE 请求或 UPDATE 请求,P-CSCF 在发送给 S-CSCF 时,应在 P-Charging-Vector 头中包含更新过的 access-network-charging-info 参数
  • S-CSCF 的动作:S-CSCF 收到该请求后,应保存更新了的该参数,并在请求转发给 AS 时应该包含该参数。
  • 触发 ACR [Interim]:P-CSCF 和 S-CSCF 都在收到 UPDATEreINVITE 消息的 200 OK 响应后,向 CDF 发送 ACR [Interim] 消息。

3.2 CDF 对 ACR [Interim] 的处理

CDF 收到 ACR [Interim] 消息后,会根据其中包含的信息执行处理:

  1. 媒体改变:如果消息是由于会话修改(如媒体的改变)而产生,CDF 会生成部分 CDR
  2. 超时:如果消息是由于超时而产生,CDF 会生成部分 CDR 或者更新原有的 CDR
  3. 序列号:CDF 会为会话中的每个部分话单分配 Record-Sequence-Number

4. 在线计费(Ro)概述与业务干预

在线计费主要通过 Ro 接口连接 AS(应用服务器,作为计费客户端)和 OCS/BOSS(在线计费系统),使用 CCR (Credit-Control-Request)CCA (Credit-Control-Answer) 消息进行实时扣费和授权。

Diameter 消息SIP 流程中的角色触发实体来源
CCR [Initial/Update]实时请求/更新通话时长授权。VoLTE AS (作为 IM-SSF)
CCA [Initial/Update]返回授权时长(Granted-Service-Unit)。OCS/BOSS
CCR [Terminate]请求 OCS 结束计费。VoLTE AS

业务干预:在线计费系统可以实时控制会话。例如,当授权时长耗尽后,AS 会再次向 OCS 申请。如果 CC 消息传输失败:

  • Credit-Control-Failure-Handling (CCFH) AVP 指示客户端如何处理。
  • 如果 CCFH 设置为 TERMINATE (0),业务只有在 CC 服务器连接存在时才可以使用;如果客户端在 Tx 定时器内未收到 CCA,中止终端业务。
  • 如果 CCFH 设置为 CONTINUE (1),即使 CC 消息无法正确发送,也允许业务继续进行。

5. 资源释放与承载控制(Rx 接口)

SIP 会话的终止必须与底层承载资源的释放同步。这通过 P-CSCF(作为 AF,应用功能)与 PCRF 之间的 Rx 接口实现,该接口使用 STR/STA (Session-Termination-Request/Answer) 消息。

5.1 BYE 触发 STR 流程

  1. UE 发送 BYE:会话终止开始。
  2. P-CSCF 收到应用会话终止消息:P-CSCF 收到 BYE 请求后,向 PCRF 下发 STR 消息(Command-Code 275),通知已建立的会话要被终止。
  3. PCRF 释放承载:PCRF 随后指示 EPC 网络(通过 RAR 消息携带 REMOVE QoS Rules 指示)删除专有承载。
  4. PCRF 返回 STA:PCRF 返回 STA(Session-Termination-Answer,Command-Code 275)响应给 P-CSCF。

5.2 资源不可用时的通知(ASR/ASA)

如果底层承载资源因为网络问题(如 Handover 流程中所有 QoS 流被拒绝)而不可用,PCRF 会主动通知 P-CSCF:

  • PCRF P-CSCF (ASR):PCRF 发送 **ASR(Abort-Session-Request)**消息(Command-Code 274),指示已建立会话的所有承载资源不可用。
  • P-CSCF PCRF (ASA):P-CSCF 向 PCRF 发送 **ASA(Abort-Session-Answer)**响应。
  • P-CSCF 后续处理:P-CSCF 收到 ASR 消息后,可能需要向 UE 发送 CANCEL 消息释放会话,或根据 SDP 不符合策略生成 BYE 释放会话。

6. 信令日志实战分析:会话中的 ACR 触发

以下表格整合了 SIP 会话发起方在不同阶段触发 ACR 消息的流程,重点强调 P-CSCF 和 S-CSCF 的动作:

流程阶段SIP 关键消息触发网元Diameter 触发消息 (CDR Type)计费 CDR 状态来源
路由寻址收到 INVITEI-CSCFACR [Event]I-CSCF CDR (Event)
会话建立收到 INVITE 的 200 OKP-CSCFACR [Start]Open P-CSCF CDR
会话建立收到 INVITE 的 200 OKS-CSCFACR [Start]Open S-CSCF CDR
会话修改收到 UPDATE/reINVITE200 OKP-CSCF/S-CSCFACR [Interim]Update CDR
会话释放收到 BYE 请求P-CSCF/S-CSCFACR [Stop]Close CDR
承载释放收到 BYE 请求P-CSCFSTR (Rx 接口)释放底层承载
AS 订阅注册AS 发送 SUBSCRIBEASACR [Event]记录 AS 订阅事件

7. 本章小结

IMS 计费的实现是 SIP 协议与 Diameter 协议深度协同的结果。

  1. 锚点关联:SIP 层的 P-Charging-Vector(特别是 ICID)是跨越所有 CSCF 和 AS 的会话计费锚点,确保所有 CDR 记录的关联性。
  2. CDR 触发:P-CSCF 和 S-CSCF 在收到 200 OK 响应后触发 ACR [Start],在会话修改后触发 ACR [Interim],并在收到 BYE 后触发 ACR [Stop]。I-CSCF 则触发 ACR [Event]
  3. 承载同步:P-CSCF 作为 AF,在会话终止时,必须向 PCRF 发送 STR 消息,同步释放承载资源。
  4. 在线控制:在线计费(Ro 接口)通过 CCR/CCA 实时控制会话,并使用 CCFH AVP 决定网络故障时的业务处理策略。

工程师进阶思考 (FAQ)

Q1:在 P-CSCF 收到 UE 始发的 INVITE 请求时,P-CSCF 为什么必须返回 100 (Trying) 响应?

A1: P-CSCF 应给所有的 INVITE 请求回送 100 (Trying) 临时响应。100 (Trying) 响应和其他临时响应不同的是,Proxy 不会对 100 (Trying) 响应进行转发

其目的在于:100 (Trying) 响应阻止 UAC 在 SIP 定时器 A(INVITE 重传定时器)超时后重传 INVITE 请求。通过快速确认请求已被接收并正在处理,可以减少网络中的冗余信令传输,提高效率。此外,P-CSCF 对所有 reINVITE 请求也应回送 100 (Trying) 响应。

Q2:在 IMS 网络中,会话释放时 P-CSCF 和 S-CSCF 各自的资源清理职责是什么?

A2: P-CSCF 和 S-CSCF 在会话释放时必须协同删除会话状态和资源。

网元资源清理职责来源
P-CSCF1. 删除所有对话和多媒体会话相关的信息。2. 向 PCRF 下发 STR 消息,请求释放承载会话。3. 向 CDF 发送 ACR [Stop] 消息,关闭 P-CSCF CDR。4. 删除用户的安全关联(SA),如果仍有活动对话,应丢弃所有与这些对话相关的信息。
S-CSCF1. 释放所有的与对话相关的信息和与多媒体会话相关的信息。2. 如果会话通过 AS 提供服务,则通知相关 AS 结束业务。3. 向 CDF 发送 ACR [Stop] 消息,关闭 S-CSCF CDR。

Q3:在 S-CSCF 收到来自 AS 的请求响应时,它是如何判断这是一个新的请求还是与现有对话的联系?

A3: S-CSCF 通过检查到来请求 Route 头域的最高项来判断。

  1. 判断逻辑:S-CSCF 从服务用户或 PSI 接收到对话的最初请求或者独立会话的请求时,会检查 S-CSCF 以前放置在 Route 头域中的原始对话标识是否存在于到来请求 Route 头域的最高项
  2. 新的请求:如果不存在,则表示这个请求是第一次拜访这个 S-CSCF。
  3. 对话联系:如果存在,则表示了与一个现存对话的联系,且请求是从 AS 发来的对于先前发送请求的响应。

这种机制确保了 S-CSCF 能够精确地执行 iFC(初始过滤规则)判断,并正确地维护会话状态。


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