=============================================
既然進到電信業者的行動核心(mobile core)部門當工程師,乾脆在家也把核心設備重現一次吧。不過話說回來,我是負責行動核心的基礎建設開發,對 3GPP 與設備只有概要程度的了解。文中可能會有部分敘述不夠精確,敬請見諒。
這次要做的是在自家 WiFi 中,依據裝置或使用者對通訊速率進行限制的實作。簡單來說,就是在路由器和無線基地台(AP)之間放一台樹莓派,讓經過無線 AP 的流量由樹莓派施加速率限制。
我把這個系統放到 GitHub 上公開了(持續開發中)。
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 準備以下兩張表來設定通訊政策:
另一方面,實際設定在 Linux 上的狀態(Actual State)則由 tc 指令所設定的 filter 與 qdisc 的內容所決定。
系統定期比較這兩種狀態(輪詢),若有差異則進行修正,實作為一個 reconciliation loop(調和迴圈)。
這個處理會以 systemd 方式守護化,作為一個常駐的 reconciler 守護程序執行。
通訊控制的流程如下。我也把 3GPP 的節點一併對應上。因為不考慮基地台移動,所以 MME 與 SGW 在此系統中不需要。另外,本系統中 PGW 會包含 HSS 與 PCRF 的功能(實務上通常為不同節點),因此畫面會如圖所示。
把樹莓派放在路由器與存取點之間,內部使用 bridge(br0)來中繼通訊。
當路由器方向(eth0)有封包進來時,首先以 ingress 的方式接收。
在 Linux 上 ingress 無法做較複雜的頻寬整形(shaping),因此會先將封包重導(redirect)到 ifb0(虛擬 NIC),把 ingress 的封包「當作 egress」來處理。
在 ifb0 上就可以把流量當作一般的 egress 流量來處理,利用 tc 的 filter 對封包做分類。
→ 以目的 MAC 位址判定裝置,依每位使用者的通訊政策分配到不同的 class。
(3GPP 流程中:向 HSS 詢問該裝置屬於誰,向 PCRF 詢問使用者對應的通訊政策,然後在 PGW 執行頻寬控制。)
每個 class 都會配置各自的佇列(qdisc),例如:
以政策為單位進行頻寬控管。封包會暫存在各自的佇列中,並由排程器依序送出。
電信業者的行動核心設備,其核心運作原理與這次實作的大致相同。雖然這次是在樹莓派上直接建置系統,但現今行動核心多半會以 Kubernetes、OpenShift 等容器平台建置,因此未來我也會嘗試把此系統部署到 Kubernetes 上。