=============================================

既然進到電信業者的行動核心(mobile core)部門當工程師,乾脆在家也把核心設備重現一次吧。不過話說回來,我是負責行動核心的基礎建設開發,對 3GPP 與設備只有概要程度的了解。文中可能會有部分敘述不夠精確,敬請見諒。

這次要做的是在自家 WiFi 中,依據裝置或使用者對通訊速率進行限制的實作。簡單來說,就是在路由器和無線基地台(AP)之間放一台樹莓派,讓經過無線 AP 的流量由樹莓派施加速率限制。

我把這個系統放到 GitHub 上公開了(持續開發中)。

3GPP 的超簡要說明

4G LTE 的核心網路(EPC)由 3GPP 標準化其功能與介面,世界各地的業者都是依照這個規格來建置網路。

下面用極度簡化的方式說明:從手機連到基地台到連上 Internet 的過程。
※實際上還有更多設備,但理解以下主要角色就足夠了。
![画像10.png]()

  • ① UE(User Equipment)
    使用者所使用的裝置(例如智慧型手機),為通訊的起點。

  • ② eNodeB(enhanced NodeB)
    3G 時代的基地台稱為 NodeB,4G 為其發展型稱作 eNodeB(enhanced NodeB),而 5G 稱為 gNodeB(next Generation NodeB)。
    (像 LTE 的 Long Term Evolution 或 5G 的 New Radio/Next Generation 這種命名,時間過了就可能不再準確,個人不是很喜歡這種命名方式……)

  • ③ MME(Mobility Management Entity)
    負責終端認證(與 HSS 互動)、位置管理(例如裝置連到哪個基地台)、以及連線控制等功能。

  • ④ HSS(Home Subscriber Server)
    儲存加入者資訊(認證資訊、合約資訊等)的資料庫。

  • ⑤ SGW(Serving Gateway)
    負責資料的中繼與在移動時維持資料路徑。

  • ⑥ PCRF(Policy and Charging Rules Function)
    決定 QoS 與頻寬控制等政策的控制功能,並即時監控通信量以進行收費。

  • ⑦ PGW(Packet Gateway)
    與外部網路的連接點,負責分配 IP 位址並作為流量出口。執行由 PCRF 決定的政策。

系統架構

以 tc 指令為基底,建立一套自動維持通訊控制設定的機制。

關於 tc 指令的安裝與使用可以參考相關文章。

我們的架構參考了 Kubernetes 的設計思想。

![スクリーンショット 2026-03-20 11.43.38.png]()

首先,把理想的通訊狀態(Desired State)定義在資料庫裡。這個 DB 準備以下兩張表來設定通訊政策:

  • filter_pocily:使用者 A 的裝置限制為通訊速度 100 Mbps 等等...
  • device_info:MAC 位址為「1A:2B:3C」的裝置是使用者 A 的 iPhone 等等...

另一方面,實際設定在 Linux 上的狀態(Actual State)則由 tc 指令所設定的 filter 與 qdisc 的內容所決定。

系統定期比較這兩種狀態(輪詢),若有差異則進行修正,實作為一個 reconciliation loop(調和迴圈)。

這個處理會以 systemd 方式守護化,作為一個常駐的 reconciler 守護程序執行。

系統內封包的流向

![図1.png]()

通訊控制的流程如下。我也把 3GPP 的節點一併對應上。因為不考慮基地台移動,所以 MME 與 SGW 在此系統中不需要。另外,本系統中 PGW 會包含 HSS 與 PCRF 的功能(實務上通常為不同節點),因此畫面會如圖所示。

把樹莓派放在路由器與存取點之間,內部使用 bridge(br0)來中繼通訊。

  • eth0:路由器方向
  • eth1:無線基地台(AP)方向
  • br0:連接兩個介面的橋接
  1. 封包接收(ingress)

當路由器方向(eth0)有封包進來時,首先以 ingress 的方式接收。

  1. 透過 ifb 的轉換(ingress → egress)

在 Linux 上 ingress 無法做較複雜的頻寬整形(shaping),因此會先將封包重導(redirect)到 ifb0(虛擬 NIC),把 ingress 的封包「當作 egress」來處理。

  1. 使用 tc 進行分類

在 ifb0 上就可以把流量當作一般的 egress 流量來處理,利用 tc 的 filter 對封包做分類。
→ 以目的 MAC 位址判定裝置,依每位使用者的通訊政策分配到不同的 class。
(3GPP 流程中:向 HSS 詢問該裝置屬於誰,向 PCRF 詢問使用者對應的通訊政策,然後在 PGW 執行頻寬控制。)

  1. 佇列與頻寬控制

每個 class 都會配置各自的佇列(qdisc),例如:

  • 高速通訊(例:1 Gbps)
  • 低速通訊(例:1 Kbps)

以政策為單位進行頻寬控管。封包會暫存在各自的佇列中,並由排程器依序送出。

結語

電信業者的行動核心設備,其核心運作原理與這次實作的大致相同。雖然這次是在樹莓派上直接建置系統,但現今行動核心多半會以 Kubernetes、OpenShift 等容器平台建置,因此未來我也會嘗試把此系統部署到 Kubernetes 上。


原文出處:https://qiita.com/takuteh/items/4d04c2691c788d1781e1


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝14   💬10   ❤️2
390
🥈
我愛JS
📝2   💬9   ❤️2
87
🥉
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付