好的,我们正式进入规范的微观世界。在前几章中,我们已经从宏观上理解了5G计费的场景、服务和框架。现在,我们将拿起“手术刀”,解剖构成这一切的基础——消息体本身。这就像我们已经欣赏了一部精彩的电影,现在要去分析它的剧本,看看每一个词、每一个标点是如何共同构建出宏大叙事的。

由于第7章内容极其详尽,我们将遵循“长章节拆分”的原则,将其分为几篇文章。本文将专注于整个计费交互的“开场白”——计费数据请求(Charging Data Request)的结构。

深度解析 3GPP TS 32.290:7 Message contents (Part 1 - 请求的艺术:CTF的“独白”)

本文技术原理深度参考了3GPP TS 32.290 V18.9.0 (2025-03) Release 18规范中,关于“Table 7.1: Common Data structure of Charging Data Request”的核心内容,旨在为读者深度剖析计费请求消息的每一个信息单元(IE)及其背后的逻辑。

欢迎来到5G计费的“DNA测序”实验室。到目前为止,我们已经知道CTF(如SMF)会向CHF发送CreateUpdateRelease等请求,但这些请求的“信封”里究竟装着什么样的“信”?CTF是如何用一种标准化的、滴水不漏的“语言”,向CHF讲述一个用户业务的完整故事的?

答案就藏在本章的表格中。今天,我们将聚焦于Table 7.1,这份定义了计费数据请求通用结构的“天书”。为了让这份“天书”变得生动可读,我们的主角是一位在未来智能工厂工作的资深维修工程师——“老王”。他正佩戴着5G AR头盔,对一条复杂的自动化生产线进行维护。他的一举一动,都将转化为计费请求中一个个精确的数据字段。

1. 请求的“剧本”:通用数据结构概览

在5G服务化架构(SBA)中,所有通信都基于HTTP/2和JSON。我们即将分析的Table 7.1,本质上就是一个JSON对象的数据结构定义。这个结构被CreateUpdateRelease等操作共同使用,形成了一个统一的“请求模板”。

老王的AR维护任务是一个典型的融合计费场景,他的PDU会话中同时承载着多种业务:

  • 业务A(在线计费):AR头盔的高清视频流和实时3D模型渲染,需要超低时延和高带宽,必须进行实时配额管理。
  • 业务B(离线计费):生产线传感器数据的后台同步,流量不大,对时延不敏感,只需事后记账。
  • 业务C(在线计费):与远在德国的总工程师进行的VoNR高清语音通话。

现在,当SMF为老王的这个复杂会话发起计费请求时,它究竟是如何组织语言的呢?我们将Table 7.1中的字段,按逻辑功能划分为几个“段落”来解读。

2. “我是谁,我在哪?”—— 身份与会话信息

计费请求的第一段,必须清晰地回答最基本的问题:这是关于“谁”的、“哪个”会话,以及作为请求方的“我”又是谁。

  • Session Identifier (会话标识符):这是一个由CHF在响应Create请求时生成的唯一ID。在后续的所有UpdateRelease请求中,SMF都必须带上这个ID。它就像是这次AR维护任务在计费系统中的“档案编号”,确保所有相关的报告都能被归档到同一个地方。

  • Subscriber Identifier (用户标识符):这明确了服务的使用者,也就是老王。它通常是SUPI或GPSI。这是CHF进行用户账户匹配和策略查询的根本依据。

  • Tenant Identifier (租户标识符):这是一个面向企业客户(2B)的重要字段。老王是智能工厂的员工,这个字段将标识出“智能工厂”这个商业实体。这使得运营商可以为整个工厂进行统一出账,而不是为老王个人。

  • NF Consumer Identification (NF消费者标识):这是请求方SMF的“自报家门”。它是一个结构体,包含了NF Functionality (功能,如SM-Service)、NF Name (唯一实例名,如UUID)、NF Address (IP地址/FQDN) 和NF PLMN ID (所属运营商网络)。这使得CHF不仅知道“谁在用服务”,还知道“谁在为他记账”,对于问题定位和网络管理至关重要。

  • Charging Identifier (计费标识符):这个ID由SMF生成,用于在CTF和CHF之间关联计费信息。它与Session Identifier的主要区别在于生成方不同,且在某些特定场景下(如[Initial]请求重试时),它可以帮助CHF识别重复请求。

3. “何时,为何事而来?”—— 事务与触发信息

第二段内容,是关于本次通信本身的元数据,它解释了这次请求发生的时间、原因以及可靠性保障机制。

  • Invocation Timestamp (调用时间戳):记录了SMF生成这个请求的精确时间。这是所有计费和审计的基础。

  • Invocation Sequence Number (调用序列号):这是保证消息顺序和防止重复处理的“生命线”。从Create请求开始(序列号通常为0或1),每次SMF发送新的UpdateRelease请求,这个序列号都会递增。CHF会严格检查这个序列号,如果收到了一个已经处理过的序列号,就会忽略它。

  • Retransmission Indicator (重传指示器):一个布尔值。如果SM-F因为超时而重传一个请求,它会将此位置为true。这明确告知CHF:“你可能已经见过这个请求了,请注意查重。”

  • Triggers (触发器):这是一个非常丰富的字段,它直接回答了“为何而来”的问题。它是一个数组,可以包含多个触发事件。

    • 场景A(QoS变化): 老王的AR应用需要渲染一个极其复杂的3D模型,PCF下发策略提升了其QoS。SMF会立刻发起Update请求,Triggers字段中会包含QOS_CHANGE
    • 场景B(配额门限): 老王的AR视频流用完了90%的配额,SMF发起Update请求,Triggers字段会包含QUOTA_THRESHOLD
    • 场景C(位置变更): 老王从工厂的A车间走到了B车间,UE上报了新的位置。Triggers字段会包含USER_LOCATION_CHANGE。 通过这个字段,CHF可以清晰地了解导致这次计费上报的上下文,从而应用正确的计费逻辑。

4. “我用了什么,我还想要什么?”—— 核心:用量与配额

这是计费请求的核心,是“信”的正文。它通过一个可重复的结构体Multiple Unit Usage,来分别描述不同业务的使用情况。

Multiple Unit Usage (多单元使用量):这是一个容器,可以出现多次。在老王的场景中,SMF会为业务A(AR)、业务B(传感器)和业务C(VoNR)分别填充一个Multiple Unit Usage实例。

让我们深入这个“容器”内部,看看它的精妙结构。

  • Rating Group (计費组):每个Multiple Unit Usage的唯一标识,例如RG 1对应AR,RG 2对应传感器,RG 3对应VoNR。这是CHF区分不同业务、应用不同费率和策略的基础。

  • Requested Unit (请求单元)只在需要在线计费的业务中出现。当SMF为AR业务(RG 1)上报用量时,会在这里填写它希望获得的下一个配额,例如:“请再给我1GB流量”。而为传感器业务(RG 2,离线计费)上报时,这个字段会留空

  • Used Unit Container (已使用单元容器):这是对上一个计费周期用量的详细报告。它本身也是一个复杂的结构体:

    • Time/Total Volume/Uplink Volume/Downlink Volume: 分别报告了使用的时长和流量。
    • Triggers / Trigger Timestamp: 再次声明是哪个触发器,在什么时间,导致了这个用量报告的生成。
    • Quota management Indicator (配额管理指示器): 这是一个至关重要的枚举值,明确告知CHF本次上报的用量是在何种模式下产生的。
      • ONLINE_CHARGING: 表示这是在线计费模式下的用量,例如老王的AR视频流。
      • OFFLINE_CHARGING: 表示这是离线计费模式下的用量,例如传感器数据。
      • QUOTA_MANAGEMENT_SUSPENDED: 表示这是在配额管理被临时挂起期间产生的用量。

通过Rating Group的区分,以及Requested UnitQuota management Indicator字段的灵活使用,SMF可以在一个Charging Data Request消息中,完美地向CHF描述清楚老王这个融合了多种计费模式的复杂业务场景。

5. 其他信息

请求的最后,还包含了一些用于特定场景和提供附加信息的字段。

  • One-time Event / One-time Event Type: 用于非会话类的一次性事件计费。
  • Supported Features: SMF向CHF声明自己支持哪些可选的计费特性。这是一种能力协商机制。
  • Service Specification Information: 提供本次请求遵循的3GPP规范版本信息,主要用于信息和调试目的。

6. 完整的“剧本”:Table 7.1全览

现在,我们已经将请求的“剧本”按段落拆解完毕。让我们以专业的视角,审视规范中定义的完整表格结构。

Table 7.1: Common Data structure of Charging Data Request

Information ElementConverged Charging CategoryOffline Only Charging CategoryDescription
Session IdentifierOcOc标识计费会话。
Subscriber IdentifierOcOM标识使用服务的个人用户。
Tenant IdentifierOc-标识使用服务的商业用户(租户)。
NF Consumer IdentificationMM标识计费服务的消费者NF。
… (sub-fields)
Charging IdentifierOM-允许关联计费信息的标识符。
Invocation TimestampMMNF消费者发起服务调用的时间戳。
Invocation Sequence NumberMM一次计费会话中服务调用的序列号。
Retransmission IndicatorOcOc指示该消息是否为重传。
One-time EventOc-指示这是事件计费。
One-time Event TypeOc-指示一次性事件的类型(立即或事后)。
TriggersOcOc标识触发请求的事件。
Multiple Unit UsageOcOc包含配额管理请求和/或用量报告的参数。
Rating GroupMM标识一个计费组。
Requested UnitOc-指示需要配额管理,并包含请求的服务单元数量。
TimeOc-请求的时间量。
Total VolumeOc-请求的总流量(双向)。
Used Unit ContainerOcOc包含已使用的非货币服务单元数量。
TriggersOcOc本次用量报告的原因。
Trigger TimestampOcOc触发器的时间戳。
TimeOcOc已使用的时间量。
Total VolumeOcOc已使用的总流量。
Quota management IndicatorOc-指示上报的用量是否在配额管理控制下。

(注:为简洁起见,表格已作精简,M表示强制,O表示可选,c表示有条件,M/c下标表示适用性)

总结

通过对Table 7.1的深度解剖,我们发现,一个计费请求远不止是简单的数字上报。它是一份高度结构化、信息极其丰富的“独白”,由CTF(SMF)这位“一线记者”,向CHF这位“总编辑”生动地讲述着一个用户业务的完整故事。

这份“独白”逻辑严谨,层次分明:

  • 开场:清晰交代了人物(Subscriber)、事件(Session)和讲述者(NF Consumer)。
  • 上下文:阐明了时间(Timestamp)、动机(Triggers)和可靠性保障(Sequence Number)。
  • 核心情节:通过可重复的Multiple Unit Usage结构,为不同业务线(Rating Group)分别叙事,精准地区分了在线计费的“预支与偿还”(Requested Unit & Used Unit)和离线计费的“纯粹记录”。

正是这份“剧本”的精妙设计,使得5G计费系统能够从容应对从个人娱乐到工业生产的各种复杂场景。现在,我们已经完全理解了CTF的“诉求”。在下一篇文章中,我们将切换视角,看看CHF这位“总编辑”是如何回复的,共同解读Charging Data Response的奥秘。


FAQ - 常见问题解答

Q1:为什么在请求中需要那么多不同的标识符,如Session IdentifierSubscriber IdentifierCharging Identifier A1:这些标识符在计费系统中扮演着不同层次的“钥匙”角色,缺一不可。

  • Subscriber Identifier (如SUPI) 是用户维度的钥匙,用于关联到用户的账户、套餐和策略。
  • Session Identifier业务会话维度的钥匙,由CHF生成,用于将一个持续业务(如PDU会话)的所有UpdateRelease操作关联在一起。
  • Charging IdentifierCTF侧会话维度的钥匙,由CTF生成,主要用于辅助关联和在某些初始请求的异常场景(如重试)下帮助CHF进行去重。 它们共同构建了一个立体化的关联体系,确保了计费的准确无误。

Q2:Requested UnitUsed Unit Container这两个结构最核心的区别是什么? A2:它们代表了计费交互中两个相反方向的动作:“索取”与“汇报”。

  • Requested Unit 是CTF向CHF的**“索取”,代表“为了接下来的业务,我想要**多少资源?”。它是在线计费的核心,用于申请配额。
  • Used Unit Container 是CTF向CHF的**“汇报”,代表“从上次通信到现在,我已经用掉**了多少资源?”。它是在线和离线计费都需要的部分,用于报告用量。在一个典型的在线计费Update请求中,这两个字段通常会同时出现。

Q3:Invocation Sequence Number(调用序列号)是如何工作的? A3:它是一个在单个计费会话中单调递增的计数器。会话的第一个请求(通常是Create)序列号为N,后续的UpdateRelease请求的序列号依次为N+1, N+2, N+3… CHF会记录下当前会话已成功处理的最高序列号。如果它收到一个序列号小于或等于已记录最高值的请求,就判定其为重复或过时的消息,并予以忽略。这是一种简单而高效的机制,用于保证消息在传输层之外的应用层面的有序性和幂等性。

Q4:一个Charging Data Request消息可以同时包含在线和离线计费业务的信息吗? A4:可以,这正是融合计费的强大之处。通过使用多个Multiple Unit Usage信息单元来实现。例如,SMF可以为老王的AR视频流(在线)构建一个Multiple Unit Usage,其中包含Rating Group=1, Requested UnitUsed Unit ContainerQuota management Indicator设为ONLINE);同时为后台传感器数据(离线)构建另一个Multiple Unit Usage,其中包含Rating Group=2, 没有Requested Unit,只有Used Unit ContainerQuota management Indicator设为OFFLINE)。这两个结构会放在同一个Charging Data Request消息中发送。

Q5:决定一个业务流(Service Data Flow)属于哪个Rating Group,并采用何种计费模式(在线/离线)的,是SMF自己吗? A5:不是SMF自己决定的。这个决策权属于策略控制功能PCF (Policy Control Function)。在PDU会话建立或修改时,PCF会根据用户的签约信息、网络策略、以及所请求的应用等,生成一套PCC(Policy and Charging Control)规则下发给SMF。这些规则中会明确定义:何种数据流(通过SDF模板识别)应该被映射到哪个Rating Group,以及这个Rating Group应该采用在线计费还是离线计费。SMF是这些策略的执行者,它根据PCF的指令来填充Charging Data Request中的相应字段。