一、核心概念 (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 閒置
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
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)
四、實務應用場景 (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。
優缺點分析
- 優點: 實現 L2 負載平衡 (Load Balancing)、故障隔離範圍較小 (VLAN 10 的 Loop 不一定會讓 VLAN 20 癱瘓)。
- 缺點: 交換機 CPU 負擔重 (VLAN 越多負擔越重)、設定較複雜、不同廠商間的相容性較差 (例如 Cisco PVST 接到只跑 CST 的設備可能會有 PVID 不一致問題)。
五、經典案例分析: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 斷線。
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)
- CST 的單一視角: 802.1w (CST) 在整台交換機上只有一個 STP 實例 (Instance)。它不認得 VLAN 標籤 (因為是 Access Port,BPDU 也不帶 Tag)。
- 收到兩份 BPDU: Switch A 身為 Root,會從 Port 1 和 Port 2 同時發送標準 BPDU。Switch B 在 Port 1 和 Port 2 都收到了這份 BPDU。
- 誤判為環路: Switch B 的 STP 邏輯判斷:「我有兩個 Port 連接到同一個 Root Bridge,這是一個 Loop!」
- 執行阻斷: 為了消除 Loop,STP 必須 Block 其中一個 Port。假設 Port 2 ID 較大,STP 將 Port 2 設為 Blocking (Discarding)。
- 業務中斷: 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 的主要差異,下列何者正確?
2. 如果你在一個擁有 500 個 VLAN 的網路上啟用 Cisco PVST+,最可能遇到什麼風險?
3. 在 ExtremeXOS 中,若要達成類似 PVST 的效果,通常會使用什麼物件?
4. 為什麼標準 802.1w (RSTP) 通常被認為無法達成 L2 流量負載分擔?
5. 若希望結合 CST 的低資源消耗與 PVST 的負載平衡優點,目前的最佳實踐標準協定是?