Multiple Spanning Tree Protocol (mSTP) 沒這麼麻煩吧

這不是 tutorial,是發洩記錄文

之前一直沒有搞懂 mSTP,也找不到真得很懂的人 (應該是我表達能力待加強,請教的對象聽不懂我的問題)。想要在兩台 switch 拉個兩條用 VLAN 切開的 Logical Link 沒那麼麻煩吧!

問題定義

  1. 用 VLAN 來切 logical link
  2. 不能接成 logical link loop
  1. SW1–3 形成一個 physical link loop
  2. 當我們跑 STP/rSTP 時,三條 link 必需block 其中一條,這樣 loop 的狀況才可以消除。
  3. 若有切 VLAN 的話,那可以設定成三組 logical topology,不會有 loop 狀況的發生。

好的,因為 STP/rSTP 沒辦法依照 VLAN 的設定來判斷 logical link,所以 mSTP 就上場了。

mSTP 基本概念

  • mSTP 可以有多組 STP instance。每一個 instance 都是獨立形成一個 logical spanning tree
  • 每個 instance 有自己負責的 VLAN 及 port state (block/forward),被 block 的 port 是不能轉發 packet
  • 每個 instance 可以獨立設定每個 port 的 priority
  • instance 0 為預設的 instance,為了與 rSTP/STP 相容。預設的 VLAN 是 1–4096
  • instance 1-n 為其它的 instance,不在 instance 0 內的 VLAN 都可放到這邊

最重要的一點是

port 在 mSTP instance 被 block 的話,則不能送收該 instance 所管理 VLAN 的 packet。

假設 mSTP 的設定如下:

mSTP instance 1 
VLAN 2
port 1 block
mSTP instance 2
VLAN 4
port 1 forward
  1. port 1 在 mSTP instance 1 被 block,所以它不能送收 VLAN 2 的 packet
  2. port 1 在 mSTP instance 2 是 forward 狀態,所以它可以送收 VLAN 4 的 packet

注意事項

  1. priority 較低會優先被選為 root bridge/root port
  2. priority/id 較高的,會優先被 block
  3. priority/id 的資料是對面 port 丟過來的,所以在看 priority /id決定 port 要不要 block 時,不是看該台 switch 的 port 設定,而是看對接的那台 switch 的 port 設定
  4. 沒有改 bridge id/priority 或 priority 的話,不管開多少個 mSTP instance 長出來的 logical topology 都會一樣

我犯的錯誤

在設定 mSTP instance 所管理的 VLAN 時,以為每個 instance 只會 block 其 VLAN 相關的 port

實際上是,switch 上每個 port 都受到每個 mSTP instance 所以管理。每一個 mSTP instance 會獨立決定 port state (block/forward)。mSTP 在推導 logical topology 時,並不會去查每個 port VLAN 的設定。這個根本的認知錯誤是造成我一直看不懂 mSTP 的主因,大家不要跟我一樣掉到同一個地方了。

所以 mSTP 應該是要這樣子看待

  1. mSTP instance 各自建立自己獨立的 logical topology (switch 上所有的 port 都會納入)
  2. 當有 packet 要 forward 時,才會依照 packet 帶的 VLAN 去查 mSTP instance 裡 port state 是 block/forward 來決定要不要 forward packet

那麼,如何讓 mSTP instance 依照不同 VLAN 跑出不同的 logical topology?

有人會跟你說改 bridge id 或 priority,但我覺得不適合,這樣不是通解。通解應該是:

把每個 mSTP instance 所管理的 VLAN 相關的 port 其 prirority 都設成最低,讓不屬於該 VLAN 的 port 優先被 block 就可以了

動手玩一下

把 switch 接成 loop,但用 VLAN 1,2,3 切三組 logical topology 。

mSTP 設定及狀態

  • SW 1
instance 1 
vlan 1
port 2, priority 0, forward
port 3, priority 0, forward

  • SW 2
instance 1 
vlan 1
port 2, priority 0, forward
port 32, priority 128, block
port 33, priority 128, block
instance 2
vlan 2
port 2, priority 128, block
port 32, priority 0, forward
port 33, priority 128, block
instance 3
vlan 3
port 2, priority 128, block
port 32, priority 128, forward
port 33, priority 0, block
  • SW 2
instance 1 
vlan 1
port 2, priority 0, forward
port 22, priority 128, block
port 23, priority 128, block
instance 2
vlan 2
port 2, priority 128, block
port 22, priority 0, forward
port 23, priority 128, block
instance 3
vlan 3
port 2, priority 128, block
port 22, priority 128, block
port 23, priority 0, forward
Show your support

Clapping shows how much you appreciated 林銘賢’s story.