From f34fe52b8f88389c2af73974ac8f039221ffef04 Mon Sep 17 00:00:00 2001 From: ben10ten Date: Tue, 12 Sep 2023 07:10:39 +0000 Subject: [PATCH] update 20230913.md and related src img --- docs/blog/20230913.md | 151 ++++++++++++++++++ docs/blog/20230913/CHF_preview.png | Bin 0 -> 45006 bytes .../High_Level_Common_Architecture.png | Bin 0 -> 43250 bytes .../blog/20230913/converged_charging_func.png | Bin 0 -> 96872 bytes docs/blog/20230913/diff_4G_5G_charging.png | Bin 0 -> 81452 bytes docs/blog/20230913/free5GC_icon.png | Bin 0 -> 6867 bytes docs/blog/20230913/offline_charging_func.png | Bin 0 -> 84209 bytes docs/blog/20230913/online_charging_func.png | Bin 0 -> 96453 bytes 8 files changed, 151 insertions(+) create mode 100644 docs/blog/20230913.md create mode 100644 docs/blog/20230913/CHF_preview.png create mode 100644 docs/blog/20230913/High_Level_Common_Architecture.png create mode 100644 docs/blog/20230913/converged_charging_func.png create mode 100644 docs/blog/20230913/diff_4G_5G_charging.png create mode 100644 docs/blog/20230913/free5GC_icon.png create mode 100644 docs/blog/20230913/offline_charging_func.png create mode 100644 docs/blog/20230913/online_charging_func.png diff --git a/docs/blog/20230913.md b/docs/blog/20230913.md new file mode 100644 index 00000000..bbf00a89 --- /dev/null +++ b/docs/blog/20230913.md @@ -0,0 +1,151 @@ + +# CHarging Function(CHF) overview + +The `charging function` is a crucial component of the 5G core network responsible for tasks such as `traffic calculation and quota management`. For network providers and administrators, it is one of the most critical network elements. This article will explain the fundamental concepts and mechanisms of charging, as well as highlight the differences between 4G and 5G charging. Finally, we will include information about the CHF implementation developed by the free5GC team. +![](20230913/CHF_preview.png) + +## Charging Mechanisms +The charging system can be divided into three main types: offline charging, online charging, and converged charging: + +* **Offline Charging**: + + * **After network resource usage**, charging information is transmitted from the network to the Billing Domain (BD). + * The Billing Domain is responsible for performing cost calculations and data statistics. + +* **Online Charging**: + + * **Before network resource usage**, the network sends an authentication request to the Online Charging System (OCS). + * The OCS queries the subscriber's account information to determine whether the usage of these resources is allowed. + * After receiving authentication from the OCS, resource usage is monitored, and related account information is stored in the OCS. + +* **Converged Charging**: + + * Converged charging is a mechanism that combines both online and offline charging. + * **For example, the CHF (Converged Charging Function) architecture in the 5G core system is an example of converged charging**. + * In other service systems, if the charging system includes both offline and online charging functionalities, it can also be referred to as converged charging. + + + +Typical triggers for charging related to **network resource usage include**: + +* A voice call of a certain duration. +* The transport of a certain volume of data. +* The submission of a multimedia message (MM) of a certain size. + +> Resource usage requests can be triggered by the UE or by the core network. Furthermore, for the same chargeable event, both offline and online charging can occur simultaneously and independently. + +## High Level Common Architecture + +The diagram below is from [3GPP TS32.240-V15.5.0](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1896), which illustrates the architectural differences among the three charging systems and indicates through which reference points data is transmitted for each Network Element (NE). +![](20230913/High_Level_Common_Architecture.png) + +--- +### Offline Charging Function +![](20230913/offline_charging_func.png) + +The **Offline Charging Function** primarily consists of three components: **CTF** (Charging Trigger Function), **CDF** (Charging Data Function), and **CGF** (Charging Gateway Function). Here's an overview of the roles of each function and how data flows between them: + +1. **CTF (Charging Trigger Function):** + - **Role:** CTF is responsible for generating charging events by observing network resource usage. + - **Data Flow:** It collects information about trigger conditions, information elements to be collected, and which service events, signaling, or user traffic to monitor. + - **Data Transfer:** CTF forwards generated charging events to CDF. + +2. **CDF (Charging Data Function):** + - **Role:** CDF receives charging events from CTF and processes them. + - **Data Flow:** It processes and stores charging data, potentially performing reformatting to comply with specific formats. + - **Data Transfer:** CDF sends the processed Charging Data Records (CDRs) to CGF. + +3. **CGF (Charging Gateway Function):** + - **Role:** CGF is responsible for persistent CDR storage, preparing CDR files, and transferring them to the Billing Domain (BD). + - **Data Flow:** It provides storage for CDRs and manages the routing of CDR files. + - **Data Transfer:** CGF transfers CDR files to the Billing Domain via the Bx reference point. + +These functions work together to collect, process, and store charging data in the offline charging system. + +--- +### Online Charging Functions(OCF) +![](20230913/online_charging_func.png) +The **Online Charging Function** primarily consists of four components: **CTF** (Charging Trigger Function), **OCF** (Online Charging Function), **ABMF** (Account Balance Management Function), and **RF** (Rating Function). Here's an overview of the roles of each function and how data flows between them: + +1. **CTF (Charging Trigger Function):** + - **Role:** CTF observes network resource usage to generate charging events. + - **Data Flow:** It collects information about trigger conditions, information elements to be collected, and the monitoring of service events, signaling, or user traffic. + - **Data Transfer:** CTF forwards generated charging events to the OCF. + +2. **OCF (Online Charging Function):** + - **Role:** OCF is responsible for real-time charging and authorization of resource usage. + - **Data Flow:** It evaluates charging events, determines the value of requested resource usage, and authorizes it. + - **Data Transfer:** OCF sends authorization information to the network element, which then executes the resource usage. + +3. **ABMF (Account Balance Management Function):** + - **Role:** ABMF manages subscriber account balances and credit control. + - **Data Flow:** It keeps track of subscriber account balances and interacts with OCF for authorization and debiting. + - **Data Transfer:** ABMF communicates with OCF to manage subscriber balances during resource usage. + +4. **RF (Rating Function):** + - **Role:** RF determines the value or amount of actual network resource usage for OCF (according to OCF from charging event) + - **Data Flow:** The OCF provides the RF with essential data extracted from the charging event. Then RF returns the rating results, which can be in the form of monetary or non-monetary units. + - **Data Transfer:** OCF send charging event to RF, and RF return rating results in specific unit + +These functions collaborate to enable real-time online charging, authorization, and account management for subscribers in the online charging system. + +--- +### Converged Charging Functions +![](20230913/converged_charging_func.png) +The **Converged Charging Functions** consist of various components, each with specific roles and data flow within the system. Here's an overview of the roles of each function and how data flows between them: + +1. **CTF (Charging Trigger Function):** + - **Role:** CTF is mostly integrated into network functions like PCF, SMSF, and SMF. These network functions monitor charging information and transform it into charging events, which are then forwarded to the CHF for further processing. + - **Data Flow:** It collects information on trigger conditions, information elements to be captured, and monitors service events, signaling, or user traffic. + - **Data Transfer:** The CTF forwards the generated charging events to the CHF via an SBI (Service-Based Interface) located within the core network's control plane. + +2. **CHF (CHarging Function):** + - **Role:** CHF is responsible for facilitating communication among all functions within the Converged Charging System(CCS). Its role includes receiving charging events and generating CDRs (Charging Data Records). Importantly, it can simultaneously handle both online and offline charging functions. + - **Data Flow:** It evaluates charging events, determines the value of requested resource usage, authorizes it, and manages subscriber account balances. + - **Data Transfer:** CHF and its associated functions engage in data exchanges involving various types of information. These data exchanges include charging events, user count balances, CDRs (Charging Data Records), and rating information. + + +>The remaining functions mentioned earlier in the descriptions of offline and online charging serve the same purposes and functions, so we won't go into further detail here. + + +## The Differences between 4G and 5G Charging +In the 4G era, various concepts and functions for online and offline charging were already established. When defining the 5G standards, it was recognized that there was a need to support various charging methods. Therefore, a new function called CHF (Charging Function) was introduced, and other functions such as ABMF, CGF, and RF from different systems were integrated into the Converged Charging System. This addition expanded the capabilities of 5G Core (5GC) charging. + +![](20230913/diff_4G_5G_charging.png) + +The differences between 4G and 5G charging can be summarized as follows: + +1. **Network Architecture**: + - **4G**: In 4G networks, charging functions are typically less integrated and may involve multiple **separate components**. + - **5G**: 5G introduces a **more integrated and converged charging system** where various charging functions are unified within the Converged Charging System (CHF), allowing for more flexibility and efficiency. + + +2. **Charging Flexibility**: + - **4G**: 4G networks may have limitations in terms of charging flexibility, especially when it comes to handling different charging scenarios and services. + - **5G**: 5G charging is designed to be more versatile and adaptable, **capable of handling various charging models, both online and offline**, for a wide range of services and use cases. + +3. **Service Support**: + - **4G**: 4G charging systems are primarily designed for traditional mobile services like **voice and data**. + - **5G**: 5G charging systems are **built to support a broader range of services**, including enhanced mobile broadband (**eMBB**), massive machine-type communications (**mMTC**), and ultra-reliable low-latency communications (**URLLC**), making them more suitable for diverse 5G applications. + +4. **Convergence**: + - **4G**: Converged charging in 4G networks is often limited, and different charging models may not be as seamlessly integrated. + - **5G**: **5G emphasizes the convergence of charging functions**, allowing for greater consistency and interoperability across various charging scenarios and services. + +5. **Charging Efficiency**: + - **4G**: Charging efficiency in 4G networks may vary depending on the specific implementation and the level of integration between charging components. + - **5G**: 5G charging systems aim to improve efficiency by streamlining charging processes and **reducing redundancy, thanks to the unified CHF**. + +Overall, **the key difference between 4G and 5G charging lies in the level of integration, flexibility, and support for a broader range of services and use cases in 5G networks**. The introduction of the CHF in 5G brings greater convergence and efficiency to charging operations. + +## CHF Implementation +**Hello everyone, we are the free5gc development team. We have recently added CHF (Charging Function) to enhance the functionality of 5G Core (5GC).** We invite anyone interested in CHF to check out how we have implemented the charging function. Below is the relevant link, and thank you for your interest. + +![](20230913/free5GC_icon.png) + +* Ref: https://github.com/free5gc/chf + +## Reference +* [3GPP TS32.240 v15 spec](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1896) +* https://devopedia.org/5g-service-based-architecture +* https://free5gc.org/ \ No newline at end of file diff --git a/docs/blog/20230913/CHF_preview.png b/docs/blog/20230913/CHF_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c776d953acbd208893c4a551929b5f132b5723e8 GIT binary patch literal 45006 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