来自知识星球

如何从log消息⾥区分5G离线计费和在线计费?

这个问题其实是星友提问,但回复有字数和图片数量限制。
因此单独发文说明一下。
A1:因为咱们很多文档中的计费流程采用的是32.290计费架构里定义的流程。
在计费架构流程里,在线计费和离线计费都采用
Charging Data Request Initial/Update/Termination消息。
如下面两个图。
图1:在线计费5.3.2.3 Session based charging

图2:离线计费5.1.2.2.2 Session based charging

由于看文档时,两个都是用的CDR-initial消息。那就很容易搞糊涂。
但是。。。
你在wireshark log里看到的可不是CDR消息,log里看到的是HTTP的方法。
也就是需要把计费架构里的CDR消息映射到CHF的服务。
A2:CHF服务在32291里定义。
在线(融合)计费采用Nchf_ConvergedCharging service。
而离线计费同样也可以采用Nchf_ConvergedCharging service。
都是采用POST/201组合。
也就是说,无论是在线还是离线的CDR消息,在wireshak里看到的都是post/201组合。
这就意味着根据http方法和响应码是无法区分在线和离线的。
不论在线计费、离线计费的log都如下图所示:

A3:所以靠消息是区分不出来的,只能靠参数。
可以根据两个参数来区分。
区分方法1:根据Requested Unit参数区分。
这个参数只有在融合计费中存在,离线计费不适用。
简单说如果在log中看到了该参数,就是融合计费,没有就是离线计费。
该参数用于请求quota。
这个规范的依据是32255的6.1.1.2 Charging Data Request message
这一节是专门讲CDR消息的,既可用于在线,也可用于离线计费。
然后该节有个表Table 6.1.1.2.1: Charging Data Request message contents。
详细说明了哪些参数用于在线、哪些参数用于离线。

第2列是用于在线(融合)计费的参数、第3列是用于离线计费的参数。
可以看到Requested Unit第2列取值是Oc,代表条件必选参数。而第3列取值是-代表不适用。
因此,就是说这个参数就是在线计费专用的。具体参数定义在32290。
这里,放一个log,关于融合计费的Requested Unit参数,长啥样?如下图所示。

和quota相关的参数还有:
当用户采用离线计费时,与在线计费即有配额管理的消息中携带的信元差异如下:
- Nchf_ConvergedCharging_Create Request消息中不包含requestedUnit等配额管理相关信元。
- Nchf_ConvergedCharging_Create Response消息中不包含grantedUnit、timeQuotaThreshold、
volumeQuotaThreshold、unitQuotaThreshold等配额管理相关信元,triggerType不包含配额管理相关
Trigger(比如QUOTA_THRESHOLD和QUOTA_EXHAUSTED)。
- PFCP Session Modification Request消息中的Create URR不包含Volume Quota、Time Quota、Event
Quota等配额管理相关信元。
区分方法2:根据"chargingCharacteristics即CC参数区分。
CC值来区分。运营商规范有明确定义,哪个CC是离线计费,哪个CC是在线计费。
具体看运营商规划。CC值log如下:
如图所示,通常取值是0X00。这个X就看运营商规划。
等于某数时是在线计费,等于另外一个数是是离线计费。

涵盖了5G核心网、IMS绝大多数知识点。
