Spanning Tree 架構深度解析

ExtremeXOS 網路架構大師觀點:從標準 802.1d/w 到 Per-VLAN 機制

一、核心概念 (Concept)

一句話定義

  • CST (Common Spanning Tree, 802.1d/w): 所有的 VLAN 共用「同一張」邏輯拓撲地圖,一條路斷了,所有 VLAN 一起改道。
  • Per-VLAN STP (PVST+ / R-PVST): 每一個 VLAN 擁有「獨立」的邏輯拓撲地圖,VLAN 10 走左邊,VLAN 20 可以走右邊。

生活化比喻

想像一家大型物流公司的運輸路線:

CST (標準 STP):像是一條「單行管制鐵路」。無論是載運黃金 (VLAN 10) 還是煤炭 (VLAN 20) 的火車,都必須遵循完全相同的軌道。如果主軌道維修,所有類型的火車都必須一起繞遠路,即便旁邊有空閒的軌道也不能用。

Per-VLAN STP:像是「多層立體高架道路」。載客巴士 (VLAN 10) 走上層道路,貨車 (VLAN 20) 走下層道路。上層塞車時,下層可能依然暢通。兩者互不干擾,且能同時利用兩條道路的運量。

二、運作原理 (Mechanism)

特性 CST (802.1d / 802.1w) Per-VLAN STP (PVST+ / STPD)
STP 實例 (Instance) 1 個 (無論有多少 VLAN) N 個 (每個 VLAN 1 個,或每個 Domain 1 個)
BPDU 行為 通常不帶 Tag,透過 Native VLAN 傳送。 每個 VLAN 發送帶有 Tag 的 BPDU (Cisco 使用專屬 MAC 01:00:0c:cc:cc:cd)。
CPU 消耗 (只需計算一次) (100 個 VLAN 就需計算 100 次演算法)
負載平衡 (Load Balancing) 無法達成 (所有流量走同一條路) 可以達成 (不同 VLAN 走不同 Uplink)

技術細節與廠商觀點:

ExtremeXOS 視角: Extreme 使用 STPD (Spanning Tree Domain) 的概念。預設的 s0 是 CST 模式。若要達成 Per-VLAN 效果,我們可以在 Extreme Switch 上建立多個 STPD (例如 stpd_v10, stpd_v20),並將不同的 VLAN 加入不同的 STPD,再分別指定不同的 Carrier VLAN。這比 Cisco 自動為每個 VLAN 產生 Instance 更具彈性與控制力。

Cisco 視角: Cisco 設備預設即為 PVST+ (或 Rapid-PVST+)。這意味著只要你建立一個 VLAN 10,交換機就會自動在背景啟動一個針對 VLAN 10 的 STP 程序。

三、架構視覺化 (Visuals)

情境 A: CST (一般 STP/RSTP)

VLAN 10 和 VLAN 20 被迫走同一條路,連結 B 閒置

graph TD Core_Switch[核心交換機
Root Bridge] Access_Switch[存取交換機] Core_Switch -- "Link A (Forwarding)
VLAN 10 & 20 通行" --> Access_Switch Core_Switch -. "Link B (Blocking)
VLAN 10 & 20 被阻擋" .- Access_Switch style Core_Switch fill:#f9f,stroke:#333,stroke-width:2px style Access_Switch fill:#bbf,stroke:#333,stroke-width:2px linkStyle 1 stroke:red,stroke-width:2px,stroke-dasharray: 5 5;

情境 B: Per-VLAN STP (PVST+ / Multi-STPD)

達成負載平衡:Link A 載送 VLAN 10,Link B 載送 VLAN 20

graph TD subgraph "VLAN 10 拓撲" Core1[核心交換機
VLAN 10 Root] end subgraph "VLAN 20 拓撲" Core2[核心交換機
VLAN 20 Secondary] end Access[存取交換機] Core1 === Core2 Core1 -- "Link A
VLAN 10: FWD
VLAN 20: BLK" --> Access Core2 -- "Link B
VLAN 20: FWD
VLAN 10: BLK" --> Access style Core1 fill:#f9f,stroke:#333 style Access fill:#bbf,stroke:#333 style Core2 fill:#f9f,stroke:#333

BPDU 處理流程 (Sequence Diagram)

sequenceDiagram participant SW_A as Switch A (Root) participant SW_B as Switch B (Non-Root) Note over SW_A, SW_B: 標準 CST (802.1d/w) SW_A->>SW_B: 發送 Untagged BPDU (代表所有 VLAN) SW_B-->>SW_A: 根據單一 BPDU 計算 Port 狀態 Note over SW_A, SW_B: Per-VLAN STP SW_A->>SW_B: 發送 VLAN 10 Tagged BPDU SW_A->>SW_B: 發送 VLAN 20 Tagged BPDU SW_B-->>SW_A: VLAN 10 計算: Port 1 Forwarding SW_B-->>SW_A: VLAN 20 計算: Port 1 Blocking

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

案例:企業園區網路頻寬最佳化

情境:某科技園區大樓,連接 Core Switch 與 Edge Switch 之間有兩條 10G 光纖線路。網管人員希望充分利用這 20G 的頻寬,而不是讓其中一條 10G 閒置做為備援。

使用一般 STP (CST) 的結果

Switch 會偵測到環路 (Loop),為了防止廣播風暴,STP 會強制將其中一條 10G 線路 Block 掉。

結果:總頻寬只有 10G,另外 10G 被浪費。若主要線路擁塞,備援線路依然在睡覺。

使用 Per-VLAN STP 的結果

網管人員設定:

  • VLAN 1-50 的 Root Bridge 設為 Core-A (流量走左邊光纖)。
  • VLAN 51-100 的 Root Bridge 設為 Core-B (流量走右邊光纖)。

結果:兩條光纖同時運作 (Active/Active),達成 Load Sharing,總頻寬利用率接近 20G。

優缺點分析

五、經典案例分析:CST (802.1w) 的 VLAN 阻斷災難

致命的雙 Access Link 架構

  • Switch A (Root, 802.1w CST):
    Port 1 (VLAN 10 Untagged)
    Port 2 (VLAN 20 Untagged)
  • Switch B (Non-Root, 802.1w CST):
    Port 1 (VLAN 10 Untagged)
    Port 2 (VLAN 20 Untagged)

預期 vs 現實

預期: Link 1 傳 VLAN 10,Link 2 傳 VLAN 20,兩者互不干擾。

現實: VLAN 20 斷線。

graph TD subgraph SA ["Switch A (Root Bridge - CST)"] A1[Port 1
VLAN 10] A2[Port 2
VLAN 20] end subgraph SB ["Switch B (Non-Root - CST)"] B1[Port 1
VLAN 10] B2[Port 2
VLAN 20] end A1 -- "Link 1: Untagged BPDU
(Forwarding)" --> B1 A2 -. "Link 2: Untagged BPDU
(BLOCKED by CST)" .-> B2 style A1 fill:#bbf style A2 fill:#f9f style B1 fill:#bbf style B2 fill:#f9f linkStyle 1 stroke:red,stroke-width:3px,stroke-dasharray: 5 5;

災難發生原理 (Mechanism of Failure)

  1. CST 的單一視角: 802.1w (CST) 在整台交換機上只有一個 STP 實例 (Instance)。它不認得 VLAN 標籤 (因為是 Access Port,BPDU 也不帶 Tag)。
  2. 收到兩份 BPDU: Switch A 身為 Root,會從 Port 1 和 Port 2 同時發送標準 BPDU。Switch B 在 Port 1 和 Port 2 都收到了這份 BPDU。
  3. 誤判為環路: Switch B 的 STP 邏輯判斷:「我有兩個 Port 連接到同一個 Root Bridge,這是一個 Loop!」
  4. 執行阻斷: 為了消除 Loop,STP 必須 Block 其中一個 Port。假設 Port 2 ID 較大,STP 將 Port 2 設為 Blocking (Discarding)
  5. 業務中斷: Port 2 被 Block 後,實體線路不通。但 Port 2 是 VLAN 20 唯一 的路徑。結果導致 VLAN 20 完全無法通訊,即使它根本沒有與 VLAN 10 形成 L2 Loop。

如何修正 (Solution)?

如果你必須這樣接線 (不使用 Trunk),你必須改變 STP 模式:

  • 解法 A (Cisco): 改用 PVST+。它會為 VLAN 10 和 VLAN 20 建立獨立的樹,Port 2 只會在 VLAN 20 的樹中運作,不會被 VLAN 10 的拓撲影響。
  • 解法 B (Standard): 改用 MSTP (802.1s)。建立兩個 Instance (MSTI),將 VLAN 10 放入 Instance 1,VLAN 20 放入 Instance 2。
  • 解法 C (Extreme): 建立兩個 STPD (例如 s0 和 s1),分別加入 VLAN 10 和 VLAN 20。

六、隨堂測驗 (Quiz)

請嘗試回答以下問題,點擊選項查看結果。

1. 關於 CST (802.1d) 與 Per-VLAN STP 的主要差異,下列何者正確?

解析: 正解為 B。CST 是單一實例,資源消耗低但無負載平衡;Per-VLAN 是多實例。

2. 如果你在一個擁有 500 個 VLAN 的網路上啟用 Cisco PVST+,最可能遇到什麼風險?

解析: 正解為 B。每一個 VLAN 都要跑一個 STP Process,500 個 VLAN 對 CPU 是巨大負擔。這也是後來 MSTP (802.1s) 被發明的原因。

3. 在 ExtremeXOS 中,若要達成類似 PVST 的效果,通常會使用什麼物件?

解析: 正解為 C。Extreme 使用 STPD 來隔離不同的 STP 運算域,可將不同 VLAN 對應到不同 STPD。EAPS 是 Extreme 專有的環狀保護協定,非 STP。

4. 為什麼標準 802.1w (RSTP) 通常被認為無法達成 L2 流量負載分擔?

解析: 正解為 A。單一樹狀結構 (Single Tree) 意味著只有一套轉發邏輯,無法讓 VLAN A 走左邊、VLAN B 走右邊。

5. 若希望結合 CST 的低資源消耗與 PVST 的負載平衡優點,目前的最佳實踐標準協定是?

解析: 正解為 B。MSTP (Multiple Spanning Tree) 允許將多個 VLAN 群組 (Instance) 映射到同一個樹上,既能負載平衡 (透過不同 Instance),又能節省 CPU (不需每個 VLAN 一個樹)。