路由 ECMP (Equal-Cost Multi-Path)

ExtremeXOS 網路架構大師班 | 20 年經驗資深架構師觀點

一、核心概念 (Concept)

一句話定義

當路由器發現前往同一個目的地有多條路徑,且這些路徑的成本 (Cost/Metric) 完全相同時,同時利用這些路徑來轉送封包,以達到負載平衡與備援的效果。

生活化比喻:高速公路收費站

想像你要從台北開車到高雄(封包傳輸)。如果在某個收費站(路由器)後方,有 4 個開放的閘道(Links) 都可以通往同一個出口。

ECMP 就像是聰明的交管人員,不會讓所有車都擠在第 1 車道,而是根據車牌號碼(Header Hash),平均將車輛引導到這 4 個閘道,讓整體車流更順暢。

二、運作原理 (Mechanism)

1. 技術細節:Hash Algorithm (雜湊演算法)

很多人誤以為 ECMP 是「輪流發送 (Round-Robin)」,即第1個封包走 A 路徑,第2個走 B 路徑。這是錯誤的觀念! 在現代高速網路 (包含 ExtremeXOS) 中,為了避免封包順序錯亂 (Out-of-Order),通常採用 Flow-based Load Balancing

  • 5-Tuple Hashing: 路由器會讀取封包的 5 個特徵值 (來源 IP, 目的 IP, 來源 Port, 目的 Port, 協定)。
  • 計算結果: 將這些值丟入演算法計算,得出一個 Hash Key。
  • 路徑選擇: 相同的 Hash Key 永遠走同一條路徑;不同的連線 (Flow) 才會被分配到不同路徑。

2. 關鍵參數與 ExtremeXOS 設定

通用標準:

  • Cost/Metric: 必須完全一致 (例如 OSPF Cost 都是 10)。
  • Maximum Paths: 大多數設備預設支援 4-8 條路徑,現代 Data Center 交換機可支援 64+。

ExtremeXOS 視角:

  • 指令: enable iproute sharing
  • 演算法: 預設多為 address-based (L3+L4),可確保同一 Session 走同一條路。

3. 實戰驗證:如何確認路由同時 Active?

在 ExtremeXOS 輸入 show iproute <目的地>,若 ECMP 生效,您會看到多行相同的 Destination,但指向不同的 Gateway,且 Metric (Mtr) 必須相同

admin@CoreSwitch# show iproute 192.168.100.0/24 -- ExtremeXOS Output --
Ori  Destination        Gateway         Mtr  Flags        VLAN       Duration
#s   192.168.100.0/24   10.1.1.2        10   UG---S-um--f Uplink_1   0d:4h:20m
#s   192.168.100.0/24   10.1.2.2        10   UG---S-um--f Uplink_2   0d:4h:20m
#s   192.168.100.0/24   10.1.3.2        10   UG---S-um--f Uplink_3   0d:4h:20m
相同的目的網段
不同的下一跳
相同的 Cost
UG Flags: Up & Gateway

三、架構視覺化 (Visuals)

圖表 A: ECMP 拓撲示意圖

graph TD Client[使用者電腦] -->|發送封包| CoreA[核心交換機 A] subgraph ECMPGroup [ECMP 路徑群組] direction LR CoreA -->|Path 1 Hash A| FW1[防火牆/路徑 1] CoreA -->|Path 2 Hash B| FW2[防火牆/路徑 2] CoreA -->|Path 3 Hash C| FW3[防火牆/路徑 3] end FW1 --> Server[應用伺服器] FW2 --> Server FW3 --> Server style CoreA fill:#f9f,stroke:#333,stroke-width:2px style ECMPGroup fill:#e1f5fe,stroke:#0288d1,stroke-dasharray: 5 5

圖說:核心交換機透過 Hashing 將流量分散至三條實體路徑

圖表 B: Hashing 決策流程 (Sequence Diagram)

sequenceDiagram participant Pkt as 進站封包 participant CPU as 轉送引擎(ASIC) participant Hash as Hash計算器 participant Table as 路由表(ECMP) participant Egress as 出口介面 Pkt->>CPU: 1. 抵達交換機 CPU->>Hash: 2. 提取 5-Tuple (Src/Dst IP+Port) Hash-->>CPU: 3. 回傳 Hash Index (例如: 2) CPU->>Table: 4. 查詢路由 (Next-Hop) Table-->>CPU: 5. 發現 ECMP 群組 (共 3 條路徑) Note right of CPU: 根據 Index 2 選擇
第 2 條路徑 CPU->>Egress: 6. 從 Port 2 送出

四、實務應用場景 (Use Case)

案例:企業資料中心 Spine-Leaf 架構

在現代化資料中心,我們不再使用傳統的 STP (Spanning Tree) 來阻擋備援路徑。相反地,我們在 Leaf Switch (存取層) 與 Spine Switch (骨幹層) 之間建立 Full Mesh 連線,並開啟 Layer 3 ECMP。

ExtremeXOS 設定情境:
Leaf Switch 設定指向所有 Spine Switch 的 Default Route (0.0.0.0/0),由於 Metric 相同,流量會自動分散到所有 Uplink,頻寬利用率從 50% (STP Active/Standby) 提升至 100%。

優點 (Pros)

  • 頻寬聚合: 將多條 10G 線路合併使用,無需購買昂貴的 40G/100G 介面。
  • 高可用性: 若其中一條路徑斷線,Hashing 會自動重新計算,將流量導向剩餘路徑,使用者幾乎無感。
  • 配置簡單: 相較於複雜的 MPLS TE,ECMP 只要路由 Metric 一樣即可生效。

缺點/限制 (Cons)

  • Hash 碰撞 (Polarization): 若演算法不佳,可能導致流量分配不均(例如所有大流量剛好都被 Hash 到同一條路)。
  • 除錯困難: 使用 traceroute 時,可能每次看到的路徑都不同,難以定位掉包發生在哪一條線路。

五、隨堂測驗 (Quiz)

身為未來的架構師,請測試看看你是否掌握了 ECMP 的精隨。