本系列文介紹 5G 核心網路的概念與實作:
- 從認識 5G 系統概觀到原始程式碼探討
- 讀規格書讓人想睡覺?沒關係,這邊有懶人包讓你看!
- 使用世界第一套開源核心網路專案 free5GC 探討實作細節
- 學習網路基礎、認識林姓商人的作業系統如何處理網路封包
- Kernel & User space 上分別有什麼作法?效能瓶頸在哪裡?
- 除了使用 Container,還有什麼方法可以隔絕 Process 之間的網路資源
- 了解為什麼各大 CSP(Cloud Service Provider)都想參與核心網路專案的開發/整合
- 學習使用 docker 將核心網路專案容器化
- 使用 docker-compose 管理 Network Functions
- 容器化之後:認識 CNCF 產出的優秀專案(Kubernetes、Prometheus、Helm),將核心網路專案轉型為 Cloud-Native 應用
- DevOps 與 GitOps 是什麼?怎麼做?
寫在開始之前
為什麼選擇 5G 核心網路作為主題?
微服務架構
、雲原生應用
、持續整合與持續交付
這幾個名詞在這幾年充滿了整個軟體開發領域,對於像我這樣沒有經驗的軟體開發者來說,要從頭:
- 規劃一個具規模性的網路服務
- 以微服務架構的精神進行系統架構的設計
- 實作它並且保證服務的可靠性、可維護性、可觀察性與可用性
- 設計與實作可靠的持續整合與交付方案
- 將服務部署至公有雲/私有雲
…並非不可能!
但是一個人要做到這麼多事需要耗費非常多的時間。對於我來說,快速掌握這些技術的方式是:
- 站在巨人的角度看世界
- 模仿
- 發想與實踐
於是我決定結合自己本身的研究領域(核心網路)與想要學習的技術(DevOps),大量的閱讀前輩的文章與嘗試,最後就意外的產生這個系列文了。
特別感謝
在去年寫完兩個系列的挑戰賽後,我以為就讀碩士期間是不可能再參與 IT 邦幫忙鐵人賽了,這次還能順利參賽需要感謝兩個人:
- 一個是我的指導老師陳志成教授,非常感謝老師同意我使用實驗室的開放原始碼專案參賽,相信藉由這次參賽,我能夠讓自己以及讀者群更了解核心網路的運作原理。
- 同樣感謝我的女朋友支持我再度參賽,因為寫稿、內容編排調整花費的都是原本可以用來約會相處的時間,感恩女朋友、讚嘆女朋友!
相關資源
- 3GPP 會議報告
- 工研院資訊與通訊研究所參與 3GPP 會議的會議紀錄,如果想關注最新的發展,可以閱讀這些會議報告。
- ONF - SD Core
- ONF 的核心網路,文件整合的很清楚。
- Awesome5G
- 一個包含 5G 專案、學習資源連結的列表
- TelecomHall Forum
目錄
Basics
繁體中文社群幾乎沒有介紹核心網路的文章(即使有也很破碎),導致對核網有興趣的人很難入門(會不知道該怎麼看規格書、該看哪一本規格書),本系列文的基礎章節會以 TS 23.501 與 TS 23.502 這兩份規格書為主軸,介紹 5G 核心網路的核心概念。
- 核心網路的演進
- Network Functions Overview
- 5G Identifier & Network Slicing
- NF 之間的傳話筒:SBI
- 5G State Management
- PDU Session 與 QoS
- 5G Security
- 核心網路的策略與計費
Protocols
介紹完核網的基本概念後,會探討除了 SBI 以外的幾個 Interface 分別使用哪些網路協定溝通,從 high layer 到 low layer 介紹每一層的工作與特性。
- 5G Protocol stack
- NAS (將不在本系列探討)
- NGAP
- PFCP
- GTP-U (將不在本系列探討)
- Data Link Layer in 5G NR
Procedures
在核心網路的世界中,每秒都會有大量的流程觸發,如果你嘗試閱讀 3GPP TS 23.502 也會發現它提到了許多讓人頭昏眼花的流程。考慮到系列文的可讀性,筆者會挑選幾個最常見的流程來介紹整個系統的運作,並且選擇最基本的註冊流程詳細說明,幫助大家理解規格書上的內容。
Advanced Topics
結束前兩章後,讀者們應該對核心網路有了基礎的認知,接下來就會進入進階篇章,分析專案原始碼與嘗試其他 DevOps tool 的整合。
- 安裝 free5GC 也能學習網路概念!
- 學習 Linux Kernel Network NS (namespace)
- 5G NF 通用架構
- UPF 原始程式碼解說
- Linux 網路系統概觀
- 你知道 Linux 如何處理網路封包嗎? - 以 socket programming 為例
- 以 Dummy module 為例來學習 device driver 開發
- gtp5g 原始程式碼解說
- DevOps 與核心網路
- 使用 Docker 建構容器
- Docker Network 介紹
- 使用 Docker compose 模擬網路拓墣:free5gc-compose 專案解說
- 使用 Prometheus 結合 free5GC 實作告警系統
- Kubernetes 淺淺談
- 使用 Helm 管理 Kubernetes 資源
- 淺談 Infrastructure as Code
- 為 free5GC 導入 CI workflow
- GitOps 與 ArgoCD
- 設計模式與重構
- 完賽心得 & 軟體設計雜談
關於作者
- AwesomeCS
- 技術文章寫手:
- [獲鐵人賽佳作肯定]微自幹的作業系統輕旅行
- Deno 入門指南
- StarBugs
- COSCUP 2021 IT Team lead
- 曾在 SITCON、COSCUP、GDG DevFest、六角學院 擔任講者
- 菜鳥軟體工程師 @Saviah
- free5GC 專案管理者(貢獻者)之一
文章相關問題或勘誤歡迎留言或是發信到我的信箱: ychen.desl@gmail.com
。