# 專題論文 中文題目:5G核心網路的即時通訊應用 ~~實現即時通訊應用於5G核心網路~~ 英文題目(若需要):Implement Instant Messaging Application through 5G Core Network ## 摘要 :::info * 最後撰寫 簡述以下論文內容 大方向論述5G ::: 即時通訊自二十世紀末葉開始蓬勃發展,5G 核心網路則是近期網路架構的產物。這篇論文中,我們想把這兩個想法結合起來並設計一個實驗。在 5G 核心網路上實作即時通訊的應用程式。 關鍵詞:5G 核心網路、即時通訊 Abstract Instant Messaging(IM) has become popular since late 20th century, and 5G is a new mobile network implementation now. In this paper, we decide to combine these two concepts together and design a experiment. Implement instant messaging on a 5G core network. Keywords: 5G core network, instant messaging ## 一、簡介 :::info 5G and IM 介紹 ::: * 5G 第五代行動通訊技術(5th generation mobile networks, 5G)是最新一代行動通訊技術,其效能目標為高資料速率、減少延遲、節省能源、降低成本、提高系統容量和大規模裝置連接。由於網路技術快速發展更新以及現代網路需求大增導致網路載體需求上升,要同時滿足包含資訊系統運算、儲存、網路、安全等不同面向的功能,在採購和更新網路硬體上成本大幅提高,因此網路虛擬化(Network Virtualization, NV)以及軟體定義網路(software-defined networking, SDN)等技術蓬勃發展[[1]](https://ieeexplore.ieee.org/document/7275351)[[2]](https://ieeexplore.ieee.org/document/7838073),在這樣的技術下相較於供應商提供的專用硬體,投入的成本較低。另外,網路虛擬化也可將各種管理工作自動化[[3]](https://ieeexplore.ieee.org/document/7883994),以減少人為錯誤、縮短佈建時間,並提供更出色的網路生產力與效率。以上各種條件可以大大降低採購和營運成本。 5G 通訊系統必須同時滿足增強型移動寬頻(Enhanced Mobile Broadband, eMBB)、高可靠低延遲通訊(Ultra-Reliable Low-Latency Communications, uRLLC)以及大量裝置連網通訊(Massive Machine-Type Communications, mMTC)等三種特性,但是這三種特性部分有所矛盾,例如大量裝置連網通訊要求低功耗、低價格、高覆蓋,而增強型移動寬頻要求的是速度快,這必然與低功耗相違背,因此必須使用網路切片(Network slicing)的技術來解決。 * 核心網路 行動通訊網路系統架構,包括核心網路(core network, CN)、骨幹網路(backbone)、無線接取網路(radio access network, RAN)和用戶設備(user equipment, UE)等。其中核心網路為各種通訊系統所組成的網路系統,由所有用戶共用,負責傳輸骨幹數據資料,能夠實現大範圍的數據資料傳送。5G 的核心網路被稱為下世代核心(Next Generation Core, NGC)。 在本文後續的研究中,使用的 5G 核心網路皆有使用到上述虛擬化網路的技術,大大降低研究的難易度與成本。 * 即時通訊 即時通訊(Instant Messaging, IM)是透過網路進行通訊的一種系統,傳輸的內容可以為文字、檔案及影音。不同於更早期出現的電子郵件,即時通訊更強調雙方的通訊是即時的。 * 比較現有的 5G CN 目前市面上有三套開放原始碼的 5G 核心網路專案,分別為台灣研發的 free5GC 專案、韓國研發的 Open5GS 專案以及開放網路基金會(Open Networking Foundation, ONF)研發的 OMEC 專案。以下將針對三套專案進行比較 : free5GC 專案是全世界第一套開放原始碼的 5G 核心網路,其特色為可支援架設實體網路,且專案的硬體需求較低。Open5GS 專案的特色是可以在核心網路的架構上選擇基於 4G 核心網路的組態,或是選擇基於 5G 核心網路的組態,硬體需求則比 free5GC 略高。OMEC 專案的特色是其可以與開放網路基金會的其他專案進行整合,但硬體的需求頗高。最後在資金成本、研究能力等條件的考量下,本文選擇了 free5GC 專案作為本次研究的對象,並嘗試在此基礎之上設計一套即時通訊之應用程式。 本文編排的章節如下:第二章將介紹核心網路應用以及 5G 即時通訊相關之文獻,第三章將介紹 free5GC 之系統模型,第四章介紹即時通訊程式之設計,第五章為總結本文與未來展望。 ## 二、背景與相關文獻 * 找核心網路應用相關文獻(3+) 網路虛擬化的技術為 5G 核心網路的研究帶來許多便利性,卻也可能造成網路安全性上的疑慮[[4]](https://ieeexplore.ieee.org/document/7096165),因此如同論文[[5]](https://ieeexplore.ieee.org/document/9657934)中所提,建立一個注重私人的核心網路可以有效的增加資訊安全。 論文[[6]](https://ieeexplore.ieee.org/document/8701936)中深入研究如何建立網路切片,將核心網路切割成支援不同功能的多個虛擬核心網路,每個虛擬網路之間能獨立運作。 :::info [Study on Core Network Security Enhancement Strategies in 5G Private Networks](https://ieeexplore.ieee.org/document/9657934) * 注重私人的core network * 重點於資訊安全的加強 [Latency-aware Placement for State Management Functions in Service-based 5G Mobile Core Network](https://ieeexplore.ieee.org/document/8465746) * 注重在可攜式且提供服務的core network * 重點於縮小傳輸延遲 [5G Core Network Framework Based on Artificial Intelligence](https://ieeexplore.ieee.org/document/9444013) * 注重 core network 中提供的服務 * 透過AI幫助管理資源和偵測錯誤 [How to Create a Network Slice? - A 5G Core Network Perspective](https://ieeexplore.ieee.org/document/8701936) * 注重 5G core network 獨有的 slicing * 介紹如何建立一個新的 slice [Experimental Demonstration of Live Migration Impact on Virtualized 5G Network using Federated Testbeds](https://ieeexplore.ieee.org/document/9040099) * 實驗在某些元件失效時需要花多久才能回復正常運作 [Virtualising and orchestrating a 5G evolved packet core network](https://ieeexplore.ieee.org/document/8004215) * 實驗實體的和虛擬化的 core network 對於網路品質的差別 [Traffic monitoring system for 5G core network](https://ieeexplore.ieee.org/document/8806155) * 5G core network的網路監控系統 ::: * 找IM(5G related)相關文獻(3+) 除了建立一個安全性良好的私人 5G 核心網路環境之外,本文也注重研發一個可以在此環境下運作的即時通訊程式。在論文[[7]](https://ieeexplore.ieee.org/document/6919850)中示範了如何使用 P2P 的方式建立即時通訊程式,這種設計方式較為簡單,缺點是安全性不足,但在私人網路上使用這種方式設計程式,可以一定程度上抵銷其短處。 在論文[[8]](https://ieeexplore.ieee.org/document/7396602)中設計了可以跨平台的即時通訊程式,私人網路在架設成功後,可能會因為用戶所使用的平台不同而導致訊息障礙,可以參考此論文來解決問題。 完成私人網路的架設後,可以參考論文[[9]](https://ieeexplore.ieee.org/document/1286884)來調整即時通訊程式所使用的網路協定,以增進訊息的傳輸表現及用戶體驗。 :::info [Design and Implementation of Instant Message System Based on 3G](https://ieeexplore.ieee.org/document/4347474) * 電腦與手機之間透過3G網路傳輸影像 [Instant Messaging Based on Semantic P2P Network](https://ieeexplore.ieee.org/document/6919850) * P2P 的 IM [Cross-Platform Instant Messaging System](https://ieeexplore.ieee.org/document/7396602) * 跨平台的 IM * 用圖片展現API [Instant Messaging Application for the Internet of Things](https://ieeexplore.ieee.org/document/6394287) * IOT 內透過 IM 通訊 [Topic Detection in Instant Messages](https://ieeexplore.ieee.org/document/7033118) * 在 IM 的訊息之間找出主題 [The war of presence and instant messaging: right protocols and APIs](https://ieeexplore.ieee.org/document/1286884) * 討論 IM 應該使用的 protocol 和 API ::: ## 三、實驗環境建置 ### 環境細節(ubuntu 版本) * 至 [ubuntu](https://ubuntu.com/download/server) 官網下載 server 版本的映像檔 * 下載版本為 Ubuntu 20.04.3 LTS * 安裝工具 * (備案 `uname -a` or `lscpu`) ```shell $ sudo apt upgrade $ sudo apt install net-tools # 安裝 ifconfig 工具 $ ping google.com # 測試網路是否正常 ``` ```shell $ sudo vi /etc/hostname $ sudo vi /etc/hosts # 修改主機名稱(hostname)成 free5GC 方便後續辨識 ``` ```shell $ cd /etc/netplan $ sudo vi 00-installer-config.yaml # 將前面 ifconfig 及虛擬機設定中的 host-only 網卡做以下修改 # dhcp4: no # addresses: [192.168.56.101/24] $ sudo netplan try $ sudo netplan apply # 測試修改並套用 ``` ```shell $ uname -r #output here # 確認 linux kernel 版本大於 5.4.0 ``` ```shell $ wget https://golang.org/dl/go1.17.4.linux-amd64.tar.gz $ sudo tar -C /usr/local -xzf go1.17.4.linux-amd64.tar.gz # 安裝 go $ mkdir -p ~/go/{bin,pkg,src} $ echo 'export GOPATH=$HOME/go' >> ~/.bashrc $ echo 'export GOROOT=/usr/local/go' >> ~/.bashrc $ echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> ~/.bashrc $ echo 'export GO111MODULE=auto' >> ~/.bashrc $ source ~/.bashrc # 設定 go 的參數 $ go version # 測試 go 是否安裝 ``` ```shell $ sudo apt -y install mongodb $ sudo systemctl start mongodb $ mongo # 安裝並測試 mongo ``` ```shell $ sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev $ go get -u github.com/sirupsen/logrus # 安裝 free5GC 需要的各個開發工具 ``` ```shell= $ sudo sysctl -w net.ipv4.ip_forward=1 $ sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE $ sudo systemctl stop ufw $ sudo iptables -I FORWARD 1 -j ACCEPT # 每次重新開機後都要輸入以上指令進行設定 # 注意第二行的 enp0s3 必須自行改成虛擬機上的外網卡名稱 ``` ### free5GC 建置過程 * 建置虛擬機過程 先建立第一台虛擬機作為核心網路(Core Network, CN)的載體,確定其外部網路可以連線。再使用連結再製出兩台虛擬機作為用戶設備(User Equipment, UE)以及基地台(Next Generation Node B, gNB)的載體。再修改主機名稱(hostname)及本機的網路位址(Internet Protocol address, IP address)以方便實驗過程辨識。三台虛擬機我們後續簡稱為 CN, UE102, UE103,分別將其 IP address 設置為 192.168.56.101、192.168.56.102、192.168.56.103,這三組 IP address 將在後續實驗中大量重複使用。再將 UE102 以及 UE103 的外部網卡關閉,讓後續實驗環境都只能使用核心網路來連線,確保實驗的正確性。 * 安裝 free5GC 直接從 free5GC 的官方 Github 中下載專案,參照官方文件[[1]](https://www.free5gc.org/installations/stage-3/)的步驟要求安裝所需要的套件,將專案中的網路參數改成設定好的 IP address ,即可編譯建置核心網路。再來依照指示下載 gtp5g 的專案,此專案為開發給 Linux 作業系統核心的核心模組(Kernel Module),用來處理 3GPP 定義下的 N4 接口的封包。安裝好核心模組後即可執行建置好的核心網路,開啟後使用指令檢查核心網路的連線狀態以及網路介面(Internet Interface)的設定參數,確定建置成功後即可進行 UE102 以及 UE103 的架設。 ```shell $ cd ~ $ git clone --recursive https://github.com/free5gc/free5gc.git # 從 free5gc 官網取得核心網路 $ cd free5gc $ make # 建置核心網路,可能會花上一點時間 ``` ```shell $ cd ~ $ git clone https://github.com/free5gc/gtp5g.git # 取得 free5GC 必備的套件 $ cd gtp5g $ make $ sudo make install # 建置並安裝 gtp5g $ lsmod | grep gtp # output here ``` ```shell $ cd ~/free5gc $ ./test.sh TestRegistration # 測試 free5GC 是否已正確安裝 ``` ```shell $ sudo apt remove cmdtest $ sudo apt remove yarn # 確認沒有過時套件 $ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | $ sudo apt-key add - $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list $ sudo apt-get update $ sudo apt-get install -y nodejs yarn # 安裝 node.js 和 yarn ``` ```shell $ cd ~/free5gc $ make webconsole # 建置 webconsole, 可以用來新增用戶 $ cd webconsole $ go run server.go # output here # 其中一行輸出 Listening and serving HTTP on :5000 # 回到實體機器上打開瀏覽器並輸入 192.168.56.101:5000 嘗試連接到 webconsole 內 # 切換至 Subscriber 頁面並點選 New subscriber # 修改 Operator Code Type 成 Op # 其他設定與 UE config 保持相同 # 需針對 UE102 和 UE103 各新增一個 subscriber ``` ```shell $ vim ~/free5gc/config/amfcfg.yaml ... ngapIpList: # the IP list of N2 interfaces on this AMF - 192.168.56.101 # 127.0.0.1 ... # 將原本的 127.0.0.1 改成 192.168.56.101 ``` ```shell $ vim ~/free5gc/config/smfcfg.yaml ... interfaces: # Interface list for this UPF - interfaceType: N3 # the type of the interface (N3 or N9) endpoints: # the IP address of this N3/N9 interface on this UPF - 192.168.56.101 # 127.0.0.8 ... # 將原本的 127.0.0.8 改成 192.168.56.101 ``` ```shell $ vim ~/free5gc/NFs/upf/build/config/upfcfg.yaml ... gtpu: - addr: 192.168.56.101 # 127.0.0.8 ... # 將原本的 127.0.0.8 改成 192.168.56.101 ``` * 複製虛擬機並安裝 ueransim 開啟 UE102 的虛擬機,依照官方文件指示下載 UERANSIM 專案並建置,此專案用來模擬 UE 以及 gNB 設備,在連線到核心網路之前,先從 CN 的虛擬機執行腳本,將 UE102 的 IP address 新增進入用戶(Subscriber),新增後即可執行 UERANSIM 專案的腳本開啟 UE 以及 gNB ,建立成功後檢查是否可以透過核心網路連線到雲端網路(Data Network, DN)並使用指令檢查網路介面的設定,連線成功即代表整體的核心網路環境有成功架設。最後按照同樣的步驟設置並檢查 UE103 ,設置完畢後可以進行後續實驗。 複製前面設置的虛擬機,並做以下設置 ```shell $ cd /etc/netplan $ sudo vi 00-installer-config.yaml # 將前面 ifconfig 及虛擬機設定中的 host-only 網卡做以下修改 # dhcp4: no # addresses: [192.168.56.102/24] $ sudo netplan try $ sudo netplan apply # 測試修改並套用 ``` ```shell $ sudo vi /etc/hostname $ sudo vi /etc/hosts # 修改主機名稱(hostname)成 UE102 ``` 針對 UE103,以上內容設置 `addresses: [192.168.56.103/24]` 及 hostname 設成 UE103 ```shell $ cd ~ $ git clone https://github.com/aligungr/UERANSIM # 下載 UE 和 gNB 的模擬器 $ cd UERANSIM $ make # 建置步驟 ``` ```shell $ vim ~/UERANSIM/config/free5gc-ue.yaml # 僅需檢查是否於前面在 webconsole 內註冊的資料相同 ``` ```shell $ vim ~/UERANSIM/config/free5gc-gnb.yaml ... ngapIp: 192.168.56.102 # 127.0.0.1 # gNB's local IP address for N2 Interface (Usually same with local IP) gtpIp: 192.168.56.102 # 127.0.0.1 # gNB's local IP address for N3 Interface (Usually same with local IP) # List of AMF address information amfConfigs: - address: 192.168.56.101 # 127.0.0.1 ... # 將原本的 127.0.0.1 改成 192.168.56.102 # 對於 UE103,僅修改 ngapIp 和 gtpIp 成 192.168.56.103 ``` * 開啟核心網路 ```shell # free5gc 虛擬機內 $ cd ~/free5gc $ ./run.sh # 開啟核心網路 ``` ```shell # UE102 及 UE103 虛擬機內皆作相同事情 $ cd ~/UERANSIM $ build/nr-gnb -c config/free5gc-gnb.yaml # 開啟 gNB ``` ```shell # UE102 及 UE103 虛擬機內皆作相同事情 $ cd ~/UERANSIM $ sudo build/nr-ue -c config/free5gc-ue.yaml # 開啟 UE ``` 使用 `ifconfig` 確認 `uesimtun0` 是否被新增,若 `UE102` 和 `UE103` 皆出現 `uesimtun0` 則代表核心網路已經建置完成 * 介紹內部元件 * 下載官方框架圖並介紹內部元件 下圖為 Free5GC 官方框架圖,以下介紹實驗時有修改的三個元件: ![Free5GC 官方框架圖](https://camo.githubusercontent.com/def0625c61f00434a8196fd689da7ec2f3dd4d5149ef8acdb323a55e6545a45b/68747470733a2f2f692e696d6775722e636f6d2f73434153544a592e706e67) * AMF(Access and Mobility Management Function) 負責管理用戶是否有權限使用核心網路,以及用戶連線後的維護連線功能 * SMF(Session Management Function) 負責幫用戶建立連線,分配用戶的 IP * UPF(User Plane Function) 負責處理用戶的封包傳送 :::info Reference: [5G Core Network Functions](https://www.grandmetric.com/2018/03/02/5g-core-network-functions/) * Access and Mobility Management Function (AMF) supports the Termination of NAS signaling, NAS ciphering & integrity protection, registration management, connection management, mobility management, access authentication and authorization, and security context management. (AMF has part of the MME functionality from the EPC world) * Session Management Function (SMF) supports session management (session establishment, modification, release), UE IP address allocation & management, DHCP functions, termination of NAS signaling related to session management, DL data notification, traffic steering configuration for UPF for proper traffic routing. (SMF has part of the MME and PGW functionality from the EPC world) * User plane function (UPF) supports: packet routing & forwarding, packet inspection, QoS handling, acts as an external PDU session point of interconnecting to Data Network (DN), and is an anchor point for intra- & inter-RAT mobility. (UPF has part of the SGW & PGW functionality from the EPC world) * Policy Control Function (PCF) supports a unified policy framework, providing policy rules to CP functions, and access to subscription information for policy decisions in UDR. (PCF has part of the PCRF functionality from the EPC world) * Authentication Server Function (AUSF) acts as an authentication server. (part of HSS from EPC world) * Unified Data Management (UDM) supports the generation of Authentication and Key Agreement (AKA) credentials, user identification handling, access authorization, and subscription management. (part of HSS functionality from EPC world) * Application Function (AF) supports: application influence on traffic routing, accessing NEF, and interaction with a policy framework for policy control. (same as AF in the EPC world) * Network Exposure Function (NEF) supports exposure of capabilities and events, secure provision of information from external applications to the 3GPP network, and translation of internal/external information. (not present in the EPC world) * NF Repository function (NRF) supports: service discovery function, maintains NF profile and available NF instances. (not present in the EPC world) * Network Slice Selection Function (NSSF) supports: selecting the Network Slice instances to serve the UE, determining the allowed NSSAI, and determining the AMF set to be used to serve the UE. (not present in the EPC world) ::: * 自製框架圖 * CN + UE102 graph :::info insert CN + UE102 diagram ::: 實驗時的框架圖如下所示,為求畫面簡潔,僅放上 UE102 。可以看出兩張框架圖大致相同,實驗時僅針對部分 IP 作具體設置。 * 互相ping以驗證已建置完成 * 呈現方式? 與學長和教授再討論 ## 四、即時通訊應用建置 * IM建置 * 附上程式碼? or 演算法 此即時通訊(Instant Messaging, IM)程式使用Python語言撰寫,程式功能為在雙方機器上建立插座(socket),並透過此socket進行通訊,可以做到傳輸訊息以及檔案的功能。運作流程大致如下: 1. 兩方有順序地開啟此程式,皆開啟程式後即完成建立 socket 的步驟。 2. 在其中一方輸入預先設定好的模式代碼(輸入m代表傳輸文字,輸入f代表傳輸檔案),即可開始通訊。 3. (a) 選擇傳輸文字後,輸入想傳輸的文字後即可傳輸,另一方則會看到 Incoming message : 的字樣以及對方傳輸的文字。 3. (b) 選擇傳輸檔案後,輸入想傳輸的檔案名稱後即開始傳輸檔案,若檔案不存在則不會進行傳輸。雙方在傳輸完成後會看到 File transmission complete 的字樣。 4. 若想從其中一個模式退出,輸入 stop 即可退出並回到第二步驟。 5. 若想結束此程式,請確保雙方皆在第二步驟的狀況下於任一方輸入 exit 即可終止程式。 * tshark 介紹 Tshark 為基於命令列(command line)格式的網路封包解析工具,使用上與 tcpdump 指令頗為相似。但 Tshark 為 Wireshark 公司所研發,其支援所有 Wireshark 上具備的所有功能,因此在功能上如封包解碼及過濾器(filter)比 tcpdump 更為強大且有效。 在研究中將會大量使用 Tshark 工具作為理論驗證的基礎,目的為證實本論文中設計的即時通訊程式在傳輸網路封包的過程中有通過 5G 核心網路。 * 證實有通過核心網路 驗證的流程如下 : 先將即時通訊程式啟動並確認傳輸狀態正常,再使用 ssh 指令連線到 CN, UE102, UE103 三台虛擬機,在每台虛擬機上使用 Tshark 指令選取特定的網路介面卡進行監聽,最後使用即時通訊程式傳送訊息,觀察 Tshark 工具監聽的結果。 實驗中測試監聽不同網路介面卡所產生的結果,一共監聽了以下幾張介面卡 : CN 監聽核心網路的元件(upfgtp)、外網卡及內網卡,UE102 監聽內網卡及核心網路開啟的通道(uesimtun0),UE103 監聽內網卡及 uesimtun0 。 實驗時皆為從 UE 102 透過即時通訊程式傳送一則訊息到 UE 103。開始前預先提出以下理論,封包在網路架構中的理論應如圖三所示,時間順序大致為 UE 102 -> CN -> UE 103。而在圖四中可看出,實際行為不完全如實驗前的預期,時間順序變成 UE 102 -> UE 103 -> CN。 :::warning 一共測試了以下幾種組合 : 1. CN監聽核心網路的元件(upfgtp)、UE102監聽 uesimtun0 2. CN監聽外網卡、UE102監聽uesimtun0 3. CN監聽內網卡、UE102監聽uesimtun0 4. CN監聽內網卡、UE102監聽內網卡 CN監聽外網卡及核心網路的元件(upfgtp)、UE102監聽uesimtun0及內網卡 連到外部網路: (UE102)uesimtun0 -> (UE102)內網卡 -> (CN)upfgtp -> (CN)外網卡 連到內部網路: (UE102)uesimtun0 -> (UE102)內網卡 -> (CN)upfgtp -> (UE103)內網卡 -> (UE103)uesimtun0 ::: ## 五、結論與未來工作 透過實驗得知即時通訊軟體傳輸的訊息確實有經過核心網路,實驗時卻意外找出經過核心網路的時間順序不如預期。希望未來可以找出什麼原因導致這個狀況的發生,讓結論可以更加完善。