3GPP Release-15 閱讀筆記

簡介

3GPP Release-15 簡稱 3GPP R15 或者 R15

官方介紹: https://www.3gpp.org/release-15

規格詳情頁: https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3389

15.0.0 版本鏈接: https://www.3gpp.org/ftp//Specs/archive/21_series/21.915/21915-f00.zip (發佈日期 2019-10-01)截至寫稿時(2021-09-21)該版本為 3GPP Release-15 最新版本

3GPP Release-15 為 5G 的第一個 3GPP 規格

R15 定義了 5G 系統的 Phase 1

R16 將定義 5G 系統的 Phase 2

The 5GS service aspects(5G 服務場景)

在 SMARTER 工作組下,SA1 定義了 5G 的需求和新服務

TS 22.261 描述了不同需求類型對應的 5G 使用場景

主要包括:

  • Enhanced Mobile Broadband (eMBB)
  • Critical Communications (CC) and Ultra Reliable and Low Latency Communications (URLLC)
  • Massive Internet of Things (mIoT)
  • Flexible network operations

一些 5G 能夠應用的垂直行業領域包括:

  • Automotive and other transport (trains, maritime communications)
  • Transport, logistics, IoT
  • Discrete automation
  • Electricity distribution
  • Public Safety
  • Health and wellness
  • Smart cities
  • Media and entertainment

其中還有一些垂直行業在 TS 22.261 中有提及

還有一些方面,例如 鐵路,eV2X 和相關聯的需求在 TS 22.186 中有提及

5G 兼容性

5G 除了支持新的 5G 標準服務以外,還支持所有在

  • TS 22.278

  • TSs 22.011

  • 22.101

  • 22.185

  • 22.071

  • 22.115

  • 22.153

  • 22.173

中定義的 EPS(4G) 功能

References

[1] TS 22.261, “Service requirements for the 5G system”.

[2] TS 22.278, “Service requirements for the Evolved Packet System (EPS)”.

[3] TS 22.011, “Service accessibility”.

[4] TS 22.101, “Service aspects; Service principles”.

[5] TS 22.185, “Service requirements for V2X services”.

[6] TS 22.071, “Location Services (LCS); Service description”.

[7] TS 22.115, “Service aspects; Charging and billing”.

[8] TS 22.153, “Multimedia priority service”.

[9] TS 22.173, “IP Multimedia Core Network Subsystem (IMS) Multimedia Telephony Service and supplementary services”.

[10] TS 22.186, “Service requirements for enhanced V2X scenarios”.

NSA 非獨立組網架構 VS SA 獨立組網架構

Non-Stand Alone(NSA) 非獨立組網架構

5G RAN 和 NRF 接口連接至 LTE 和 EPC 核心網(分別對應4G Radio 和 4G Core)

這樣可以充分利用 5G NR,但是又無需替換核心網

這種情況下只能使用 4G 服務,但是又可以享受到 NR 帶來的低延遲能力

The NSA is also known as “E-UTRA-NR Dual Connectivity (EN-DC)” or “Architecture Option 3”. See also the clause on EDCE5.

In EN-DC, the 4G’s eNB is the Master Node (MN) while the 5G’s en-gNB is the Secondary Node (SN).

NSA Architecture

Stand Alone(SA) 獨立組網架構

5G NR(New Radio) 連接至 5G CN(Core Network)

這種配置下,全部的 5G Phase 1 都將被支持

NRF 基站(邏輯節點gNB)之間使用 Xn 接口互聯

並且 AN(Access Network (called the “NG-RAN for SA architecture”)) 使用 NG 接口連接至 5GC

SA Architecture

Core Network 核心網概述

5G 獨立組網系統中,5G System(5GS)由

  • User Equipment
  • Access Network(New Radio,NRF)
  • Core Network

組成

之前提到的服務需求將作為架構定義的基礎

TR 23.799 開始定義了架構規格(stage 2),也稱為 NextGen TR

之後在

  • TS 23.501
  • TS 23.502
  • TS 23.503

中完全定義

Service-Based Architecture (SBA)

5G 架構依賴於 SBA 框架

一系列的 Network Function 替代了 傳統 Network Entities 組成架構內的元素

通過公共框架的一些接口,任何給定的 NF (服務提供者)都可以提供服務給被授權的其他 NFs 或者服務消費者。

5G_System_architecture

在當前 stage,只有如下的 NF(Network Function)和元素將被重點提到

  • The User Equipment (UE);
  • The (Radio) Access Network [(R)AN];
  • The User Plane Function (UPF), handling the user data;
  • The (external) Data Network (DN);
  • Some remarkable Network Functions (NFs):
    • The Application Function (AF), handling the application(s);
    • The Access and Mobility management Function (AMF), that accesses the UE and the (R)AN;
    • The Session Management Function (SMF), that accesses the UPF.

其他 NF 之後會提到

特性

SBA 服務允許虛擬化部署

服務可以分佈式部署,做冗餘或者彈性伸縮

同一功能可以由多個 NF 同時提供(冗餘)並且部署在多個位置

UE 的消息將被路由至任何一個具有處理能力的 NF

因此 NF 必須盡可能保持無狀態特性,這樣才能過很方便地水平擴展或者允許請求消息被任意路由至不同的 NF

由於 NF 提供了冗餘能力,因此任何指定的 NF 都可以有計劃性的進行停機維護,當維護完畢後他們也可以自動恢復

Access Network 接入網概述

5G AN 架構非常簡單,因為它只包含一個實體,也就是 gNB,具體可以參考 TS 38.401

  • gNB 通過 NG Interface 連接至 5G CN
  • gNB 通過 Xn Interface 連接至 5G’s gNB
  • gNB 通過 X2 Interface 連接至 4G’s eNB
  • gNB 通過 NR interface 連接至 UE

AN_interfaces

AN 架構在原理上和 4G LTE 和 eNB 組網的方式相近,可以參考 TS 36.401 和 TS 38.420

References for 5GS Stage 2

The main Stage 2 specifications for the 5G System are:

[1] TS 23.501, “System Architecture for the 5G System”, Stage 2. It specifies the overall 5GS Stage 2: the architecture reference model, including the network functions and the description of high level functions.

[2] TS 23.502, “Procedures for the 5G System”, Stage 2. It specifies the 5GS Stage 2 for roaming and non-roaming scenarios, for the policy and charging related control framework.

[3] TS 23.503, “Policy and Charging Control Framework for the 5G System”, Stage 2. It is the companion specification to TS 23.501 and TS 23.503, and specifies the Stage 2 procedures and Network Function Services.

[4] TR 23.799 “Study on Architecture for Next Generation System”, Stage 2

[5] TS 38.401 “ NG-RAN; Architecture description”

[6] TS 38.420 “ NG-RAN; Xn general aspects and principles”

[7] TS 36.401 “Evolved Universal Terrestrial Radio Access Network (E-UTRAN); Architecture description”

Abbreviation applicable to this section:

NR New Radio (5G Radio)

NSA Non Stand-Alone

PBCH Physical Broadcast Channel

PDCCH Physical Downlink Control Channel

PDSCH Physical Downlink Shared Channel

PRACH Physical Random Access Channel

PSS Primary Synchronisation Signal

PUCCH Physical Uplink Control Channel

PUSCH Physical Uplink Shared Channel

SA Stand-Alone

SSS Secondary Synchronisation Signal

Radio 和 Core 之間的功能劃分

進一步了解 AN 和 CN 提供的功能

The_5G_System_architecture

AN 和 CN 之間交換數據是通過 CN 側的 AMF,UPF 和 SMF,而 AN 側則是 gNB

Functional_Split_between_NG-RAN_and_5GC

黃色方框為 NF,白色方框為其所負責的任務

CN 側

所有和用戶數據無關的信令都將經過 AMF (“Access and Mobility management Function”) ,例如可移動性或者安全性

SMF (“Session Management Function”) 負責與用戶數據有關的信令,例如會話的建立

UPF 負責處理用戶數據

AN 側

gNB (5G Node B) 執行所有 AN 相關的主要任務,包括

  • 無線電資源管理
  • 無線電承載控制
  • 無線電權限控制
  • 移動連接控制
  • 為 UE 動態分配資源

5G 核心網

NF (Network Function)

AMF (Access and Mobility management Function)

支援不同移動性管理需求的 UE

它主要處理如下工作

  • Non-Access Stratum (NAS) 信令處理
  • NASA 信令安全
  • Access Stratum (AS) 安全控制
  • CN 節點之間處理 3GPP AN 的信令
  • 空閒模式下 UE 設備的可達性,包括控制和控制重傳
  • 區域管理註冊
  • 支援系統內外的可移動性
  • 訪問認證
  • 檢測漫遊權限
  • 支援網路切片
  • SMF 選擇

SMF (Session Management Function)

和 AMF 共同配合,客製化移動管理模式,例如 “Mobile Initiated Connection Only” (MICO) 僅允許移動連接初始化或者 RAN enhancements RAN 增強,類似於 RRC Inactive 狀態

它主要處理如下任務

  • 會話管理
  • UE IP 地址分配和管理
  • UPF 的選擇與控制
  • 為 UPF 設定流量轉發策略,將數據包路由到正確位置
  • 策略,QoS
  • 下行數據通知

UPF (User Plane Function)

主要負責的處理任務

  • RAT 內外的可移動性的錨點

  • 外部 PDU 會話與 Data Network 互聯

  • 封包路由和轉發

  • 封包偵測與用戶面的部分策略規則

  • 流量報告

  • 上行流量分類,將流量路由到數據網路

  • 支援多宿主的 PDU 會話分支點

  • 用戶面的 QoS 處理,包括封包過濾,門控,上下行速率控制

  • 上行封包校驗(SDF 到 QoS flow 的映射)

  • 下行封包緩衝和下行數據通知觸發

Network Repository Function” (NRF)

提供 NF 服務管理,包括

  • 服務註冊
  • 服務註銷
  • 服務驗證
  • 服務發現

Network Exposure Function” (NEF)

對外輸出 NF 的處理能力數據

這些“能力”包括

  • 監控能力
  • 供應能力
  • 路由流量的應用影響能力
  • 策略與計費能力

Unified Data Management” (UDM)

5GC 資源的數據存儲架構為“計算和存儲分離”

Unified Data Repository (UDR) 是主要數據庫

Unstructured Data Storage Function (UDSF) 存儲非結構化的動態數據

3GPP 與 3GPP 規格介紹

3GPP 與 3GPP 規格介紹

3GPP 簡介

參考 https://www.3gpp.org/about-3gpp/about-3gpp

3GPP 總共有三種技術標準化組織 Technical Specification Groups (TSG) ,包括:

  • Radio Access Networks (RAN)
  • Services & Systems Aspects (SA)
  • Core Network & Terminals (CT)

2021 3gpp Organigram

3GPP 組織主要負責制定以上 3 個部分的電信網路標準

3GPP 標準

為何需要技術標準?

電信網路中設備數量和種類眾多,只有當制定了了標準之後,各個電信網路設備製造商才可以按照標準各自生產網路設備,然後可以依照標準中定義的接口互相連通,之後便可以共同協作運行。這裡的設備不僅僅包含電信網路局端設備(運營商),也包括用戶端設備(UE,User Equipment),例如手機,IoT 設備等

標準不同的情況下,各家製造商生產的設備無法互相連通。便無法實現網路互通。因此標準定義十分重要

3GPP Release 規格介紹

參考 https://www.3gpp.org/releases

3GPP 使用名為 “Releases” 的命名方式,定期將一部分技術特性整理在某個指定版本中,並且允許在之後的版本中繼續增加新功能

例如 TR 21.914 covers Rel-14, TR 21.915 for Rel-15 and now TR 21.916 as the Rel-16 description document. 可以看出規律,TR.219xx,其中 xx 對應 Release-xx 中的 xx 部分

如下圖所示,這是最近的 Release 發佈時間表(寫稿時間為:2021-09-21)

Release timeline R16 R17

https://portal.3gpp.org/#/55934-releases 可以查看所有 Release 標準的進度

規格的 stage

The term “Stage” derives from the ITU-T (originally CCITT) method for categorizing specifications (Recommendation I.130).

stage 是來自 ITU-T(最初是 CCITT)組織在 I.130 標準建議書中提出的一種標準分類方法

  • “Stage 1” refers to the service description from a service-user’s point of view.
    • stage 1 指的是從服務用戶的視角描述服務
  • “Stage 2” is a logical analysis, devising an abstract architecture of functional elements and the information flows amongst them across reference points between functional entities.
    • stage 2 是邏輯分析與功能設計元素的抽象架構,以及功能實體之間的信息流參考點(此處描述比較抽象,需要藉助一個具體的標準文件進行解釋)
  • “Stage 3” is the concrete implementation of the functionality and of the protocols appearing at physical interfaces between physical elements onto which the functional elements have been mapped.
    • stage 3 是功能和協定的具體實現,這些實現體在對應功能元件(一些物理元件)之間的物理通訊接口上

The mechanisms for creating and maintaining specifications are described in TR 21.900. A presentation outlining the release and change request process can be found here.

在 TR 21.900 中描述了這些規範的創建和維護機制

規格的命名

https://www.3gpp.org/specifications/specification-numbering

所有 3GPP 規格都有一個由 4 到 5 位數字的規格名稱(例如 09.02 或者 29.002)

前 2 位數字定義規格所屬的系列,後面緊跟著 01 至 13 系列對應的 2 個數字,或者 21 至 55 系列的 3 位數字

Tracing Source Code of AMF of Free5GC

AMF v3.0.5

Call Flow

  • main.go
    • 基於urfave/cli作為CLI程式的參數處理工具
    • 基於sirupsen/logrus為日誌系統
    • 設定app名稱,參數使用方法usage的顯示,參數flag的獲取,參數動作的routing
    • 判斷app運行後是否出錯,若有錯誤直接退出並且打日誌
    • 將action掛載到app cli程式上,action是程式的主體邏輯與動作
      • 執行AMF.Initialize,若有錯誤則打日誌
        • 執行factory.InitConfigFactory(amfcfg)讀取amfcfg文件中的配置信息(根據是否傳入amfcfg這個flag決定從何處讀取配置文件)
        • 根據配置文件中的log level,對logrus進行正確的log level設定
        • 檢測配置版本是否為AMF_EXPECTED_CONFIG_VERSION(在v3.0.5中該值為1.0.2),若不匹配則throw err
      • 執行AMF.Start開始運行
        • 使用logger_util.NewGinWithLogrus創建了一個基於Gin和Logrus的REST HTTP API Server Middleware(背景知識:Gin為golang語言中的高性能HTTP REST API Server框架,Logrus為golang語言中的日誌框架,Middleware將會攔截每個請求,並在請求處理的之前(pre)和之後(post)執行相關動作)
          • 這裡實際將如下訊息打印到日誌中
            • path
            • query body
            • client ip
            • request method
            • response status
            • error message
        • 使用router.Use(cors.New(cors.Config{}))創建middleware,用於支援CORS請求(Cross-origin resource sharing),CORS是在傳統瀏覽器環境下需要為“同源策略”放行的規則,為了相容類似於Web Console等需要使用Web Browser訪問某些free5gc中的HTTP API的場景,因此需要設定該CORS規則。
        • 將httpcallback的router註冊到URL為/namf-callback/v1的分組上(部分細節待確認)
        • 將oam的router註冊到URL為/namf-oam/v1的分組上(部分細節待確認)
          • TODO and future work
            • 此處有coding style問題,例如文件名未統一為route或者routes
            • 此處有專案目錄結構問題,例如未把service層和controller層規劃在一個專門的package下,導致專案package結構不夠清晰明確(通常在Java Web等專案中都會有統一的controller,service,modle等分層架構)
        • 從AMF配置文件的AmfConfig.Configuration.ServiceNameList部分讀取服務名稱列表,並且將對應的router註冊到對應的URL
          • 其Configuration Temple File中(/config/amfcfg.yaml)包含如下配置
            serviceNameList: # the SBI services provided by this AMF, refer to TS 29.518
                - namf-comm # Namf_Communication service
                - namf-evts # Namf_EventExposure service
                - namf-mt   # Namf_MT service
                - namf-loc  # Namf_Location service
                - namf-oam  # OAM service
        • 其程式碼中只包含如下服務的註冊流程
          • ServiceName_NAMF_COMM
          • ServiceName_NAMF_EVTS
          • ServiceName_NAMF_MT
          • ServiceName_NAMF_LOC
        • self := context.AMF_Self() 將 /amf/context/[email protected] context賦值給self並且調用 /amf/util/[email protected]
          • 該流程中主要是讀取配置文件並且將配置信息注入struct context中,對不合法的配置項設定缺省值(default value)
          • context 包含 NFs/amf/context/[email protected] AMFContext和一些methods
        • addr := fmt.Sprintf("%s:%d", self.BindingIPv4, self.SBIPort) 組裝IPv4和port為inet addr格式的字符串
        • 在NgapIpList配置和38412端口運行ngap服務
          • 該服務包含的handler
            • ngap.Dispatch
            • ngap.HandleSCTPNotification
        • 將本服務即AMF註冊至NRF (Register to NRF)
          • 調用 /consumer/BuildNFInstance() 構建 AMF 需要在 NRF 中註冊的資料結構(一個 type為 NfProfile 的 model 對象)
          • 註冊 NF 後獲取 nfId 並且寫入當前 context 中
        • 偵聽 os signal,當signal 為 interrupt 時執行 amf.Terminate() 並且退出進程,返回 0 號錯誤碼給 OS
          • amf.Terminate()

            •   TODO: forward registered UE contexts to target AMF in the same AMF set if there is one
              

              根據此項 TODO 看,未來工作中將要引入自動 AMF 遷移機制,當一個 AMF 停機後,需要遷移連接至該 AMF 的所有 UE 到其他 AMF 上,實現自動故障轉移和負載均衡

            • 執行 SendDeregisterNFInstance 流程,從 NF 中移除當前實例

            • 執行 BuildUnavailableGUAMIList 流程(暫不清楚該流程的作用和內容)

            • 執行 ngap_message.SendAMFStatusIndication(ran, unavailableGuamiList) 動作

            • 停止 ngap_service 服務

            • 向其他subscription 宣告自己將要停止服務

  • factory
    • config.go
      • 配置struct的聲明和default value的getter(當某些配置不存在時會自動返回默認值)
    • factory.go
      • InitConfigFactory讀取文件,並使用yaml.Unmarshal將配置信息解析到AmfConfig變數中
      • TODO:需要支援從API中更新配置(我個人猜測可能是未來工作中需要做一個配置中心,因為微服務環境下通常都有配置中心集中管理配置一些需要統一設定的配置,而非每個微服務自己攜帶一些重複性的配置文件,至於非重複性的配置,根據我的工作經驗,通常使用.env環境變量的方式進行管理)

Free5GC Code Tracing

Free5GC Code Tracing

the code tracing below is based the project in GitHub which repo URI is free5gc/free5gc and version is v3.0.5
you can fetch all source code which version is v3.0.5 by these command
git clone --recursive -b v3.0.5 -j `nproc` https://github.com/free5gc/free5gc.git

Introduction

What is free5GC?

The free5GC is an open-source project for 5th generation (5G) mobile core networks. The ultimate goal of this project is to implement the 5G core network (5GC) defined in 3GPP Release 15 (R15) and beyond.

Currently, the major contributors are with National Chiao Tung University (NCTU). Please refer to our roadmap for the features of each release.

refer to https://github.com/free5gc/free5gc#readme

Environment

  • Golang 1.15.x
  • Ubuntu Server 20.04 LTS

Future Work

  • unified the identity(variable) naming rule
    • for searching optimize by IDE(code editor) and coding reformat
  • optimize the coding style by theory based software design pattern including these methods:
    • extract some codes from a big function to some small functions.
      • Why we need do this?
        • Because many IDEs and code editors like Goland, VSCode, Eclipse have a panel names “Structure”, the UI screenshot is at below:
          • goland_structure_panel_screenshot
        • We can easily watch all functions in the panel, so we can quickly understand what functions are included in the code and its role or duty in the Network Function(NF) by the function name, but not only a Start() function(We can’t quickly understand what actions are done in the Start() function unless tracing every code line in this function)
        • We can easily test many small functions by automatic unit test framework like gotest, so we could develop new features and refoactor old codes efficienly.
    • move the hard-code and magic number to the configuration or constant with description comment
  • refactor the directory structure
    • We can quickly understand the role of files, and locate the bugs quickly
  • optimize the performance
    • TODO
  • add some comment for coding analysis friendly
    • we can generate the application documentation by go doc and API documentation by swagger, and we can easily test the HTTP RESTful API in the swagger-ui