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-Vector 和 P-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 OK | Accounting Request | Start | 打开会话 CDR,开始计费。 | P-CSCF/S-CSCF | |
| 收到 UPDATE/reINVITE 200 OK | Accounting Request | Interim | 更新 CDR,记录会话修改(如媒体改变)。 | P-CSCF/S-CSCF | |
| 收到 INVITE(Cx查询前) | Accounting Request | Event | 创建事件 CDR(非会话 CDR),记录路由事件。 | I-CSCF | |
| 收到 BYE 请求 | Accounting Request | Stop | 关闭会话 CDR,结束计费。 | P-CSCF/S-CSCF | |
| Session Timer 超时 | Accounting Request | Stop/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-value | Session-Id(或其关联 AVP) | 唯一标识 IMS 会话,用于关联所有 CDR。 | P-CSCF 始发 |
| P-Asserted-Identity | User-Name 或 Called-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 都在收到
UPDATE或reINVITE消息的200 OK响应后,向 CDF 发送 ACR [Interim] 消息。
3.2 CDF 对 ACR [Interim] 的处理
CDF 收到 ACR [Interim] 消息后,会根据其中包含的信息执行处理:
- 媒体改变:如果消息是由于会话修改(如媒体的改变)而产生,CDF 会生成部分 CDR。
- 超时:如果消息是由于超时而产生,CDF 会生成部分 CDR 或者更新原有的 CDR。
- 序列号: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 流程
- UE 发送 BYE:会话终止开始。
- P-CSCF 收到应用会话终止消息:P-CSCF 收到
BYE请求后,向 PCRF 下发 STR 消息(Command-Code 275),通知已建立的会话要被终止。 - PCRF 释放承载:PCRF 随后指示 EPC 网络(通过 RAR 消息携带 REMOVE QoS Rules 指示)删除专有承载。
- 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 状态 | 来源 |
|---|---|---|---|---|---|
| 路由寻址 | 收到 INVITE | I-CSCF | ACR [Event] | I-CSCF CDR (Event) | |
| 会话建立 | 收到 INVITE 的 200 OK | P-CSCF | ACR [Start] | Open P-CSCF CDR | |
| 会话建立 | 收到 INVITE 的 200 OK | S-CSCF | ACR [Start] | Open S-CSCF CDR | |
| 会话修改 | 收到 UPDATE/reINVITE 的 200 OK | P-CSCF/S-CSCF | ACR [Interim] | Update CDR | |
| 会话释放 | 收到 BYE 请求 | P-CSCF/S-CSCF | ACR [Stop] | Close CDR | |
| 承载释放 | 收到 BYE 请求 | P-CSCF | STR (Rx 接口) | 释放底层承载 | |
| AS 订阅注册 | AS 发送 SUBSCRIBE | AS | ACR [Event] | 记录 AS 订阅事件 |
7. 本章小结
IMS 计费的实现是 SIP 协议与 Diameter 协议深度协同的结果。
- 锚点关联:SIP 层的
P-Charging-Vector(特别是 ICID)是跨越所有 CSCF 和 AS 的会话计费锚点,确保所有 CDR 记录的关联性。 - CDR 触发:P-CSCF 和 S-CSCF 在收到
200 OK响应后触发 ACR [Start],在会话修改后触发 ACR [Interim],并在收到BYE后触发 ACR [Stop]。I-CSCF 则触发 ACR [Event]。 - 承载同步:P-CSCF 作为 AF,在会话终止时,必须向 PCRF 发送 STR 消息,同步释放承载资源。
- 在线控制:在线计费(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-CSCF | 1. 删除所有对话和多媒体会话相关的信息。2. 向 PCRF 下发 STR 消息,请求释放承载会话。3. 向 CDF 发送 ACR [Stop] 消息,关闭 P-CSCF CDR。4. 删除用户的安全关联(SA),如果仍有活动对话,应丢弃所有与这些对话相关的信息。 | |
| S-CSCF | 1. 释放所有的与对话相关的信息和与多媒体会话相关的信息。2. 如果会话通过 AS 提供服务,则通知相关 AS 结束业务。3. 向 CDF 发送 ACR [Stop] 消息,关闭 S-CSCF CDR。 |
Q3:在 S-CSCF 收到来自 AS 的请求响应时,它是如何判断这是一个新的请求还是与现有对话的联系?
A3: S-CSCF 通过检查到来请求 Route 头域的最高项来判断。
- 判断逻辑:S-CSCF 从服务用户或 PSI 接收到对话的最初请求或者独立会话的请求时,会检查 S-CSCF 以前放置在
Route头域中的原始对话标识是否存在于到来请求Route头域的最高项。 - 新的请求:如果不存在,则表示这个请求是第一次拜访这个 S-CSCF。
- 对话联系:如果存在,则表示了与一个现存对话的联系,且请求是从 AS 发来的对于先前发送请求的响应。
这种机制确保了 S-CSCF 能够精确地执行 iFC(初始过滤规则)判断,并正确地维护会话状态。
请您发出“请继续”指令,我将开始撰写第十四篇。