Try   HackMD

專題簡報大綱

Checklist

  • 專題簡介

    • 成果預期
    • 實作流程簡介
  • 專題報告

    • 5G 核心網路簡介
    • 條列並比較目前開放免費使用的核心網路 (與第一點合併)
    • 簡述為何選擇 free5gc (與第一點合併)
    • 介紹 free5gc, UERANSIM, 我們架設的環境
    • 網路架構圖介紹 (和環境合併)
    • 實作的流程以及結果 (簡化內容)
    • 結果分析及驗證假設 (保留)
    • 紀錄Demo流程
      • 用影片或是投影片動畫呈現demo流程

專題簡介

成果預期

  1. 架設出 5G 核心網路並了解其運作機制
  2. 透過自行撰寫程式以更詳細的了解封包轉送的順序
  3. 架設出可以讓手機使用並通訊的核心網路

實作流程簡介

  1. 根據 free5gc 官網的下載流程安裝核心網路 (專案 github 連結)
  2. 設定完成核心網路後前往 UERANSIM github 取得 UE/RAN 的模擬器
  3. 先嘗試在僅有一個 UE 的狀況下對外部網路連線,確認核心網路可以運作
  4. 接著嘗試在兩個 UE 的狀況下彼此互相連線及對外部網路連線
  5. 比較通過預設網路卡及核心網路的網路延遲影響
  6. 嘗試自行撰寫程式讓兩台 UE 可以透過核心網路互相通訊

專題報告

5G 核心網路簡介

核心網路是甚麼?

核心網路是整個網路架構的中心部分,是許多網路元件的集合體,每個元件都有其被賦予的功能,在核心網路中被稱為 Network Function (NF) ,眾多元件的合作與溝通即形成核心網路,用實際一點的例子來舉例,就是電信業者所架設的機房。


核心網路可以把 local area networks (LANs) 及 wide-area networks (WANs) 連結起來,目的是傳送大規模、遠距離的資料,並確保其穩定性及效能。

4G 與 5G 核心網路的差異

Reference

Evolution of Core Network(3G vs. 4G vs. 5G)
當SDN遇上NFV 虛擬化5G核心網路掀革

由於 Software-Defined Networking (SDN) 及 Network-Function Virtualization (NFV) 技術的發展, 5G 核心網路比起 4G 核心網路多了不少虛擬化的網路元件 (Network Function , NF) ,這樣帶來的好處有 3 :

  1. 減少實體設備所需要的成本
  2. 較容易維護,不需要關閉服務就能進行
  3. 網路的穩定性更高,若其中一個 NF 故障,只需用其他 VM 去替補即可維持服務。
5G 的元件將原先 4G 的元件分工的更加細緻
如 4G 的 MME 變為 5G 的 AMF, SMF
4G 的 S-GW 和 P-GW 變為 5G 的 UPF

條列並比較目前開放免費使用的核心網路

目前我們知道的開放使用 5G 核心網路有以下幾種
開放的 5G 核心網路清單

free5GC

國立陽明交通大學通訊服務與軟體研究中心主持
此專案至今仍然持續維護

此專案歷經三個版本的改良,最新版本中僅包含 5G 核心網路的 NF ,不具有 4G 核心網路的架構。

目前的功能僅限於網路上,不具有通話的功能。

與 UERANSIM (用戶裝置模擬器)配合

OMEC

Open Networking Fundation 主持維護
此專案目前也持續維護

屬於 COMAC 底下的其中一個專案
COMAC 架構圖如下

COMAC 架構圖
可以看出此專案較為接近商業用的版本,除了核心網路本身之外,還在網路服務的方向做了許多功能,使其更貼近商用的目的。

除了 OMEC 專案以外,其他專案僅部分為開源 project 。

open5GS

此專案也持續維護
此專案基於 4G 核心網路進行改良,在安裝時可以根據指南選擇安裝的組態,一種是 4G/5G 的核網架構,另一種為純 5G 的架構。
底下的 VoLTE 有提供 call setup 的功能,功能相較於 free5GC 更為完善。

簡述為何選擇 free5gc

科技部新聞-世界第一套符合國際標準的開放原始碼5G核心網路
https://www.p1sec.com/corp/2021/12/31/pentesting-5g-core-networks/

https://read01.com/zh-tw/J843zAK.html#.YonlhKhBxPY

free5GC OMEC Open5GS
優點 官方文件整理得較易懂 功能最多最齊全 指南詳盡、補充資料多
架設流程最簡單 延伸功能多,且有文件教學
缺點 功能相對單調 安裝上相對困難 文件有些凌亂
官方文件雜亂無章
free5GC OMEC Open5GS
台灣研發 國際組織 韓國研發
全世界第一套完全依照3GPP Release 15國際標準的開放原始碼5G核心網路
安裝指南詳細+影片輔助 安裝指南複雜 安裝指南詳細但無影片輔助
硬體需求低 硬體需求高 硬體需求居中
重視商用
功能完善 功能較侷限 附加功能較多

free5GC: https://www.free5gc.org/installations/stage-3-free5gc/
OMEC:https://guide.opencord.org/prereqs/hardware.html

Open5GS:https://open5gs.org/open5gs/docs/tutorial/01-your-first-lte/

https://opennetworking.org/onf-connect-2019-resources/
因為我們深知核心網路相關議題之深與其複雜程度,在對核心網路一無所知的前提下,我們決定選擇 free5GC 做為研究的方向,原因無他,只因為其最好上手,較有可能是一介大學生可以涉足的程度。

介紹我們架設的環境

共有三台虛擬機,一台架設核心網路,兩台架設 RAN(GNodeB) 和 UE 的模擬器

  • 架設核心網路的機器在底下架構圖中屬於最上面的 Core Network
    • Core Network中有著許多元件,我們有修改過的僅有 AMF, UPF, SMF
    • AMF 修改了 N2 的 IP 為 192.168.56.101 (本機 IP )
    • SMF 修改了 UPF 的 N3 IP 為 192.168.56.101
    • UPF 修改了 GTPU 的 IP 為 192.168.56.101
  • 兩台模擬器分別是圖片左下角和右下角的黑框
    • 裡面皆有一個 GnB 和 UE 的模擬器
    • UE 和 GnB 之間的 tunnel IP 會在和 CN 連線時才決定(藍色字體 IP)
    • GnB 設定 N2 和 N3 為本機 IP,以及 AMF 的位置為 192.168.56.101 (Core Network IP 位置)

網路架構圖介紹

架構圖

Core Network中有著許多元件,每個元件都有他各自的用途
主要解釋 AMF, SMF, UPF 這三個元件

實作的流程以及結果

我們自己撰寫了一份程式,這隻程式可以讓兩台虛擬機透過核心網路互相傳送訊息和檔案
必須從 103 開始此程式,這是因為這隻程式的架構依舊是 client-server 架構,我 hardcode 成 103 那端做為第一個 client 端
這隻程式會創建出兩個 thread ,分別負責接收和傳送訊息。

  • 文字傳輸
    • 假設在 102 上輸入要傳文字的指令,102 上的傳送訊息端會和 103 的接收訊息端發一則訊息,跟 103 那邊的程式說接下來要準備接收文字。從 103 開始傳文字同理。
    • 這段期間內可以不斷傳輸文字,直到傳送端從 user 收到停止傳輸指令
    • 當傳送端接收到停止傳輸文字指令時,會傳輸一則訊息讓接收端可以關閉接收文字的功能
  • 檔案傳輸
    • 設置過程和文字傳輸同理
    • 傳送端會等待 user 輸入要傳輸的檔案名字,輸入檔名後會傳給接收端
    • 傳送端接著會傳輸檔案內容給接收端,傳送端已經傳送完檔案後接收端會多等一秒後才結束此次傳輸檔案
    • 傳送端會繼續等待 user 輸入要傳輸的檔案名字,或是收到停止傳輸指令
    • 收到停止傳輸指令後的動作和文字傳輸時相同

結果分析及驗證假設

介紹 tshark 工具,可指定攔截封包的介面卡及了解封包的在傳輸時的時間戳記變化,並藉由它協助分析封包傳輸順序

工具介紹: tshark

tshark 與 wireshark 的功能大致相同,可以藉由特定參數指定我們想要抓取的 interface 或是指定 IP 位置,我們在後續進行實驗時使用到以下參數:

  • -i <interface>: 選定特定的 interface
  • -t <format>: 設定輸出的 timestamp 格式,以下皆使用 -t a作為輸入參數,以顯示絕對時間
  • -f <filter>: 設定攔截封包時的 filter
    e.g. -f "src 192.168.56.102", -f "dst 192.168.56.102"
  • -c <count> : 設定最大攔截封包量,如 -c 1 代表僅攔截一個封包

tshark 是 wireshark 的無 GUI 版本
整體功能和 wireshark 相同,可針對各個 interface 攔截封包
也可在攔截或輸出時設置 filter 抓取特定來源或是特定目的地的封包

  • 分析互 ping 和我們自製程式執行時的封包傳輸順序

結果假設

在我們設置核心網路的過程中,會先依序建立 GNB 及 UE ,若只建立 GNB 時先用 ifconfig 檢查,會發現 tunnel (uesimtun0) 尚未建立,

$ cd ~/UERANSIM
$ build/nr-gnb -c config/free5gc-gnb.yaml
$ ifconfig
#外網卡
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500             │
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255      │
        inet6 fe80::a00:27ff:fe71:80f6  prefixlen 64  scopeid 0x20<link> │
        ether 08:00:27:71:80:f6  txqueuelen 1000  (Ethernet)             │
        RX packets 19146  bytes 28323255 (28.3 MB)                       │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 4281  bytes 330622 (330.6 KB)                         │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0       │
                                                                         │
#內網卡
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500             │
        inet 192.168.56.103  netmask 255.255.255.0  broadcast 192.168.56.│
255                                                                      │
        inet6 fe80::a00:27ff:fea7:2fe8  prefixlen 64  scopeid 0x20<link> │
        ether 08:00:27:a7:2f:e8  txqueuelen 1000  (Ethernet)             │
        RX packets 165647  bytes 11151423 (11.1 MB)                      │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 541021  bytes 88881165 (88.8 MB)                      │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0       │
                                                                         │
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536                             │
        inet 127.0.0.1  netmask 255.0.0.0                                │
        inet6 ::1  prefixlen 128  scopeid 0x10<host>                     │
        loop  txqueuelen 1000  (Local Loopback)                          │
        RX packets 84275  bytes 4604638 (4.6 MB)                         │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 84275  bytes 4604638 (4.6 MB)                         │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0       │

此時再建立 UE 後,即可在 ifconfig 中看到多了一個網路介面 uesimtun0

$ cd ~/UERANSIM
$ sudo build/nr-ue -c config/free5gc-ue.yaml
$ ifconfig
#外網卡
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500             │
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255      │
        inet6 fe80::a00:27ff:fe71:80f6  prefixlen 64  scopeid 0x20<link> │
        ether 08:00:27:71:80:f6  txqueuelen 1000  (Ethernet)             │
        RX packets 19146  bytes 28323255 (28.3 MB)                       │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 4281  bytes 330622 (330.6 KB)                         │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0       │
                                                                         │
#內網卡
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500             │
        inet 192.168.56.103  netmask 255.255.255.0  broadcast 192.168.56.│
255                                                                      │
        inet6 fe80::a00:27ff:fea7:2fe8  prefixlen 64  scopeid 0x20<link> │
        ether 08:00:27:a7:2f:e8  txqueuelen 1000  (Ethernet)             │
        RX packets 165647  bytes 11151423 (11.1 MB)                      │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 541021  bytes 88881165 (88.8 MB)                      │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0       │
                                                                         │
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536                             │
        inet 127.0.0.1  netmask 255.0.0.0                                │
        inet6 ::1  prefixlen 128  scopeid 0x10<host>                     │
        loop  txqueuelen 1000  (Local Loopback)                          │
        RX packets 84275  bytes 4604638 (4.6 MB)                         │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 84275  bytes 4604638 (4.6 MB)                         │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0       │
                                                                         │
#tunnel
uesimtun0: flags=369<UP,POINTOPOINT,NOTRAILERS,RUNNING,PROMISC>  mtu 1400│
        inet 60.60.0.2  netmask 255.255.255.255  destination 60.60.0.2   │
        inet6 fe80::1d04:6930:f887:e4fa  prefixlen 64  scopeid 0x20<link>│
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuele│
n 500  (UNSPEC)                                                          │
        RX packets 39  bytes 3640 (3.6 KB)                               │
        RX errors 0  dropped 0  overruns 0  frame 0                      │
        TX packets 40  bytes 2968 (2.9 KB)                               │
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

因此我們推論 uesimtun0 建立在本機(GNB 和 UE 間)而非核心網路所在的虛擬機上。

驗證假設

為了驗證假設,我們先用 tshark 來抓取內網卡的封包。

#在核網虛擬機的內網卡截取封包
$ sudo tshark -i enp0s8 -t a | grep 60.60.0.2

輸出結果:

Capturing on 'enp0s8'
67 09:52:47.242659917    60.60.0.1 → 60.60.0.2    GTP <ICMP> 142 Echo (ping) request  id=0x0043, seq=1/256, ttl=64
68 09:52:47.242744115    60.60.0.1 → 60.60.0.2    GTP <ICMP> 142 Echo (ping) request  id=0x0043, seq=1/256, ttl=63
69 09:52:47.243838476    60.60.0.2 → 60.60.0.1    GTP <ICMP> 142 Echo (ping) reply    id=0x0043, seq=1/256, ttl=64 (request in 68)
70 09:52:47.243884277    10.0.2.15 → 60.60.0.2    GTP <ICMP> 170 Redirect             (Redirect for host)
71 09:52:47.243903999    60.60.0.2 → 60.60.0.1    GTP <ICMP> 142 Echo (ping) reply    id=0x0043, seq=1/256, ttl=63


#在UE/RAN 102的內網卡截取封包
$ sudo tshark -i enp0s8 -t a | grep 60.60.0.2

輸出結果:

Capturing on 'enp0s8'
47    60 11:22:07.153655482    60.60.0.1 → 60.60.0.2    GTP <ICMP> 142 Echo (ping) request  id=0x0043, seq=1/256, ttl=64
   61 11:22:07.155416577    60.60.0.2 → 60.60.0.1    GTP <ICMP> 142 Echo (ping) reply    id=0x0043, seq=1/256, ttl=63 (request in 60)

#在UE/RAN 103的內網卡截取封包
$ sudo tshark -i enp0s8 -t a | grep 60.60.0.2

輸出結果:

Capturing on 'enp0s8'
37     1 09:52:47.231759080    60.60.0.1 → 60.60.0.2    GTP <ICMP> 142 Echo (ping) request  id=0x0043, seq=1/256, ttl=63
    2 09:52:47.232191412    60.60.0.2 → 60.60.0.1    GTP <ICMP> 142 Echo (ping) reply    id=0x0043, seq=1/256, ttl=64 (request in 1)
    3 09:52:47.232849427    10.0.2.15 → 60.60.0.2    GTP <ICMP> 170 Redirect             (Redirect for host)


Note

DNS outside Core Network

-: dash
_: underscore
: space
/: slash
\: backslash


0525

  • 架構圖大小重拉

    • 簡介AMF, SMF, UPF
    • 簡易網路架構加註全名
    • CN圖片
    • 表格順序調換
    • Terminal加註

tmux basic hotkeys

link

Hotkey usage
Ctrl+b d detach tmux
Ctrl+b c create new window
Ctrl+b % Split pane horizontally
Ctrl+b " Split pane vertically
Ctrl+b x Close selected pane
Ctrl+b w Show window list
Ctrl+b & Close selected window