目錄

前言
RSTP 現存問題
  消耗硬體資源
  缺乏區域管理
  非開放標準
區域 Region
  Configuration Name
  Revision Number
  VLAN 及 Instance 對應表
Common and Internal Spanning Tree (CIST)
  CIST Root
  Regional Root
與 RSTP 或 STP 並存
用 VTP Version 3 設定 MSTP

前言

Spanning Tree 的終極一課,就是 Multiple Spanning Tree Protocol (MSTP)。從傳統 STP 至 RSTP,是速度的進化。而從 RSTP 至 MSTP 則是節省硬件資源和層級式管理的進化。MSTP (又名 802.1s) 繼承了 RSTP 的 Synchronization Process 來達成高效率的收斂 (Convergence),而比 RSTP 優秀的是,MSTP 可把多個 Spanning Tree 分配給不同的 Instance 去減少整個 Spanning Tree 系統的 Topology 數量,本篇假設讀者已深入了解 STP 與 RSTP 原理。

RSTP 現存問題

消耗硬體資源

Cisco 所支緩的 RSTP (或 STP) 都是 Per-VLAN Base 的,即是說 Spanning Tree Topology 數目等於 VLAN 數目。如果 Switch 有 100 個 VLAN 就要處理 100 個 Spanning Tree Topology,包括發送、接收和運算 BPDU,VLAN 越多,對整個網絡所有 Switch 的 CPU 和 RAM 資源都會造成壓力。

MSTP 提出了 Instance 的想法,把多個 VLAN 分組成為不同的 Instance,同一組 Instance 的 VLAN 共用一組 Spanning Tree Topology。舉例:VLAN101 至 VLAN200 共 100 組 VLAN,可把 VLAN101 至 VLAN150 編入 Instance 1,餘下的 VLAN151 至 VLAN200 編入 Instance 2。Spanning Tree Topology 數量由 100 個大大縮減至 2 個。

缺乏區域管理

RSTP 缺乏區域概念,難於管理。MSTP 可把整個網絡分區 (Region) 管理,Region 與 Region 之間不會互相干擾 Topology。每個 Region 會構成一隻巨大的虛擬 Switch (Virtual Switch),每個 Virtual Switch 之間會進行一個獨立的 Spanning Tree 運算,而這個稱為 Common and Internal Spanning Tree (CIST) 又不會影響 Region 裡的 Topology,聽起來相當複雜,在之後的部份將會深入說明。

非開放標準

由於 RSTP 是 Cisco 專有的,如網絡裡有其他牌子的 Switch,則要使用 Open Standard 的 MSTP (802.1s) 來享受快速的收斂時間。

區域 Region

同一 Region 裡的 Switch 只會處理相同 Region 裡的 BPDU 資訊,從而計算出 Topology。要判斷是否身處在同一個 Region,Switch 會比較 spanning-tree mst configuration 中的 3 個參數。3 個參數均相同才算是同一個 Region。

Configuration Name

Configuration 的名稱,用指令 name 去設定。

Revision Number

設定的版本編號,習慣上每次更改 mst 設定都應把 Revision number 加 1。設定指令為 revision

VLAN 及 Instance 對應表

設定 Instance 所包含的 VLAN,指令為 instance <num> vlan <num> 。留意 Cisco Switch 的 MSTP 預設 instance 0 用作 CIST,不可用作 Region 用途。

現在試為以下網絡設定 MSTP。

mst

首先在每一隻 Switch 都使用 spanning-tree mst configuration 進入 MST 設定,然後輸入這 3 項必要的參數。

SW1(config)#spanning-tree mst
SW1(config)#spanning-tree mst configuration
SW1(config-mst)#name Region1
SW1(config-mst)#revision 1
SW1(config-mst)#instance 1 vlan 11-13
SW1(config-mst)#instance 2 vlan 21-23
SW2(config)#spanning-tree mst
SW2(config)#spanning-tree mst configuration
SW2(config-mst)#name Region1
SW2(config-mst)#revision 1
SW2(config-mst)#instance 1 vlan 11-13
SW2(config-mst)#instance 2 vlan 21-23
SW3(config)#spanning-tree mst
SW3(config)#spanning-tree mst configuration
SW3(config-mst)#name Region1
SW3(config-mst)#revision 1
SW3(config-mst)#instance 1 vlan 11-13
SW3(config-mst)#instance 2 vlan 21-23

然後可以用 show spanning-tree mst configuration 指令去檢查一下。3 隻 Switch 的結果應該是一模一樣的。留意 MSTP 會把其餘的 VLAN 放進 Instance 0。

SW1#show spanning-tree mst configuration
Name      [Region1]
Revision  1     Instances configured 3

Instance  Vlans mapped
--------  ---------------------------------------------------------------------
0         1-10,14-20,24-4094
1         11-13
2         21-23
-------------------------------------------------------------------------------
SW2#show spanning-tree mst configuration
Name      [Region1]
Revision  1     Instances configured 3

Instance  Vlans mapped
--------  ---------------------------------------------------------------------
0         1-10,14-20,24-4094
1         11-13
2         21-23
-------------------------------------------------------------------------------
SW3#show spanning-tree mst configuration
Name      [Region1]
Revision  1     Instances configured 3

Instance  Vlans mapped
--------  ---------------------------------------------------------------------
0         1-10,14-20,24-4094
1         11-13
2         21-23
-------------------------------------------------------------------------------

確定無誤後在每隻 Switch 輸入指令 spanning-tree mode mst,這樣子 Region1 就建立起來了。

SW1(config)#spanning-tree mode mst
SW2(config)#spanning-tree mode mst
SW3(config)#spanning-tree mode mst

show spanning-tree 查看 MSTP 狀態,發現一共有 3 個 Instance 正在執行中,除了剛剛我們建立的 Instance 1 (MST1) 和 2 (MST2) 外,還有 1 個 Instance 0 (MST0)。Instance 0 是預設的,用來作 CIST 之用,稍後詳細說明。現只集中研究 MST1 和 MST2,並發現 SW1 是 MST1 與 MST2 的 Root Switch。

SW1#show spanning-tree

MST0
  Spanning tree enabled protocol mstp
  Root ID    Priority    32768
             Address     aabb.cc00.0400
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32768  (priority 32768 sys-id-ext 0)
             Address     aabb.cc00.0400
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 2000000   128.1    Shr
Et0/1               Desg FWD 2000000   128.2    Shr


MST1
  Spanning tree enabled protocol mstp
  Root ID    Priority    32769
             Address     aabb.cc00.0400
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0400
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 2000000   128.1    Shr
Et0/1               Desg FWD 2000000   128.2    Shr


MST2
  Spanning tree enabled protocol mstp
  Root ID    Priority    32770
             Address     aabb.cc00.0400
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32770  (priority 32768 sys-id-ext 2)
             Address     aabb.cc00.0400
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 2000000   128.1    Shr
Et0/1               Desg FWD 2000000   128.2    Shr

假設我們希望 MST2 由 SW2 來做 Root Switch,可用以下指令更改 Priority,與 RSTP/STP 不同的是,MSTP 要改的是 Instance,而不是 VLAN。

SW2(config)#spanning-tree mst 2 priority 28672
SW2(config)#exit
SW2#
SW2#show spanning-tree mst 1-2

##### MST1    vlans mapped:   11-13
Bridge        address aabb.cc00.0500  priority      32769 (32768 sysid 1)
Root          address aabb.cc00.0400  priority      32769 (32768 sysid 1)
            port    Et0/1           cost      2000000              rem hops 19

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Desg FWD 2000000   128.1    Shr
Et0/1            Root FWD 2000000   128.2    Shr

##### MST2    vlans mapped:   21-23
Bridge        address aabb.cc00.0500  priority      28674 (28672 sysid 2)
Root          this switch for MST2

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Desg FWD 2000000   128.1    Shr
Et0/1            Desg FWD 2000000   128.2    Shr

如在 SW3 查看 show spanning-tree 就發現 SW3 正在分別用 Et0/0 和 Et0/1 來傳輸 MST1 和 MST2,由此可見 MSTP 一樣可以實現在 STP 或 RSTP 那種 Load Balancing。當然我們也可以透過修改 Port Cost 或 Port Priority 等去影響 Topology 結果,指令跟 STP 一樣,只不過把 vlan 改成了 mst,本篇假設讀者已了解 STP 設定,在此不再重覆解說了。

SW3#show spanning-tree mst 1-2

##### MST1    vlans mapped:   11-13
Bridge        address aabb.cc00.0700  priority      32769 (32768 sysid 1)
Root          address aabb.cc00.0400  priority      32769 (32768 sysid 1)
            port    Et0/0           cost      2000000              rem hops 19

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Root FWD 2000000   128.1    Shr
Et0/1            Altn BLK 2000000   128.2    Shr

##### MST2    vlans mapped:   21-23
Bridge        address aabb.cc00.0700  priority      32770 (32768 sysid 2)
Root          address aabb.cc00.0500  priority      28674 (28672 sysid 2)
            port    Et0/1           cost      2000000              rem hops 19

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Altn BLK 2000000   128.1    Shr
Et0/1            Root FWD 2000000   128.2    Shr

Common and Internal Spanning Tree (CIST)

現在我們把眼光放遠一點,如果網絡裡出現另一個 Region,MSTP 又會如何處理呢?首先要重提,各 Region 的 Spanning Tree 互相並不影響 Topology。有趣的是,MSTP 會把這些 Region 當成一隻隻巨大的 Virtual Switch 去看代,請看下圖。

mst

Instance 0 就是 Cisco 預設的 CIST,CIST 將會把整個 Region 變成 Virtual Switch,在此之前,CIST 需要先找出 CIST Root 和 Regional Root。

CIST Root

整個網絡 (包含所有 Region) 會揀選一隻 Bridge Prioriy 最低的 Switch 來當 CIST Root,這可以算是 MST 裡的超級 Root 了。擁有這隻超級 Root 的 Virtual Switch 將會成為 CIST 的 Virtual Root Switch。以上圖為例,SW6 因為 Bridge Priority 最小而成為 CIST Root,由於 CIST Root 身處 Region2,因此,Region2 將會成為 Virtual Root Switch。

SW6#show spanning-tree mst 0

##### MST0    vlans mapped:   1-10,14-20,24-4094
Bridge        address aabb.cc00.0600  priority      24576 (24576 sysid 0)
Root          this switch for the CIST
Operational   hello time 2 , forward delay 15, max age 20, txholdcount 6
Configured    hello time 2 , forward delay 15, max age 20, max hops    20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Desg FWD 2000000   128.1    Shr
Et0/1            Desg FWD 2000000   128.2    Shr
Et0/2            Desg FWD 2000000   128.3    Shr

Regional Root

有連著其他 Region 的 Switch 稱為 Boundary Switch,在 Region1 中,SW1 和 SW2 都是 Boundary Switch。而在 Boundary Switch 中,Bridge Prioriy 最低的 Switch 會再晉升成為 Regional Root。在上圖中 SW1 Bridge Priority 比 SW2 低,因此 SW1 成為 Region1 的 Regional Root。

mst

於是 CIST 就會把兩個 Region 看成兩隻 Virtual Switch,接下來,CIST 就會用和 RSTP/STP 一樣的方法去防止 Loop 發生。

mst

已知 Region2 是 Virtual Root Switch,下一步就要決定 Root Port、Designated Port、Alternate Port 或 Backup Port。CIST 會用以下步驟去決定。

首先,各 Region (除了成為 Virtual Root Switch 的 Region) 的 Regional Root 揀選自己 Root Cost 最小的一個 Port 成為 Root Port,如遇 Root Cost 值相同,則再用其他因素決定,與傳統 STP 方法相同,在此不重覆闡述。所以 SW1 的 e0/2 會成為 Region 1 的 Root Port。

SW1#show spanning-tree mst 0

##### MST0    vlans mapped:   1-10,14-20,24-4094
Bridge        address aabb.cc00.0400  priority      32768 (32768 sysid 0)
Root          address aabb.cc00.0600  priority      24576 (24576 sysid 0)
              port    Et0/2           path cost     2000000
Regional Root this switch
Operational   hello time 2 , forward delay 15, max age 20, txholdcount 6
Configured    hello time 2 , forward delay 15, max age 20, max hops    20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Desg FWD 2000000   128.1    Shr
Et0/1            Desg FWD 2000000   128.2    Shr
Et0/2            Root FWD 2000000   128.3    Shr

有了 Root Port 後,每一個網段都選 Root Cost 最小的 Port 成為 Designated Port,方法亦與 STP 相同。SW4 e0/0 和 SW5 e0/0 會成為 Designated Port。

SW4#show spanning-tree

MST0
  Spanning tree enabled protocol mstp
  Root ID    Priority    24576
             Address     aabb.cc00.0600
             Cost        0
             Port        3 (Ethernet0/2)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32768  (priority 32768 sys-id-ext 0)
             Address     aabb.cc00.0200
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 2000000   128.1 Shr 
Et0/1               Desg FWD 2000000   128.2 Shr 
Et0/2               Root FWD 2000000   128.3 Shr
SW5#show spanning-tree mst 0

##### MST0    vlans mapped:   1-10,14-20,24-4094
Bridge        address aabb.cc00.0300  priority      32768 (32768 sysid 0)
Root          address aabb.cc00.0200  priority      32768 (32768 sysid 0)
              port    Et0/1           path cost     0
Regional Root address aabb.cc00.0200  priority      32768 (32768 sysid 0)
                                      internal cost 2000000   rem hops 19
Operational   hello time 2 , forward delay 15, max age 20, txholdcount 6
Configured    hello time 2 , forward delay 15, max age 20, max hops    20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Desg FWD 2000000   128.1    Shr
Et0/1            Root FWD 2000000   128.2    Shr
Et0/2            Desg FWD 2000000   128.3    Shr

最後,其餘的 Port 則會設定為 Alternate Port 或 Backup Port,並把 Port State 變成 Blocking 避免 Loop 發生。揀選方法與 RSTP 相同。

SW2#show spanning-tree mst 0

##### MST0    vlans mapped:   1-10,14-20,24-4094
Bridge        address aabb.cc00.0500  priority      32768 (32768 sysid 0)
Root          address aabb.cc00.0600  priority      24576 (24576 sysid 0)
              port    Et0/1           path cost     2000000
Regional Root address aabb.cc00.0400  priority      32768 (32768 sysid 0)
                                      internal cost 2000000   rem hops 19
Operational   hello time 2 , forward delay 15, max age 20, txholdcount 6
Configured    hello time 2 , forward delay 15, max age 20, max hops    20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Et0/0            Desg FWD 2000000   128.1    Shr
Et0/1            Root FWD 2000000   128.2    Shr
Et0/2            Altn BLK 2000000   128.3    Shr

於是,網絡就變成以下這個模樣。

mst

與 RSTP 或 STP 並存

由於把使用 RSTP/STP 的網絡改為使用 MSTP 是一項十分浩瀚的工程,難免要分階段進行,以致網絡裡很大機會同時存在 MSTP 和 RSTP/STP 的 Switch。幸好 MSTP 是可以向下兼容 RSTP/STP 的,我們可以試試在上面的 MSTP 網絡中加入一隻 RSTP Switch,看看出現什麼狀況。

mst

如果把 Region1 與 Region2 幻化為 Virtual Switch,便可看得簡單一點,其實就是以下這個模樣,同意嗎?

mst

由於 Region2 是 Root Bridge,SW7 e0/1 順理成章成為 Root Port,而 Region 1 與 SW7 之間的網段,就因為 SW7 那邊 Root Cost 較小而勝出成為 DP,這些只是簡單 STP 層面的運算,在此不再詳述了。

比較想跟讀者說明的是關於 BPDU 背後的操作,MSTP 是怎樣相容 RSTP/STP 的呢?由於 MSTP 的 BPDU 是以 Instance 作為單位的,而不是 VLAN,理論上 RSTP/STP 是看不懂由 MSTP 傳來的 BPDU。秘密在於 MSTP 能夠偵測到對方是在運行 MSTP 還是 RSTP/STP,一但發現對方是 RSTP/STP,MSTP 就會把 BPDU 拆散成 Per VLAN 形式發送,如果存在 100 個 VLAN 就發 100 個 BPDU 過去 (事實上和傳統 RSTP/STP 一樣),這樣 SW7 便能夠用 RSTP/STP 來配合了。另外,SW7 當然也可以透過改變 Port 的 STP Cost 來達成 Load Balancing。

那麽,我們可以用新加入的 SW7 來成為 Root 嗎?試試看。

SW7(config)#spanning-tree vlan 1-4094 root primary

出事了!SW2 和 SW5 都會出現 Inconsitent 的訊息,而且把 Port Block 掉。因為 Cisco MSTP 只支緩用 CIST 成為 Root,非常重要,設定時要注意了。

SW5#
*Mar  7 11:59:17.754: %SPANTREE-2-PVSTSIM_FAIL: Blocking root port Et0/3: Inconsitent inferior PVST BPDU received on VLAN 11, claiming root 20491:aabb.cc00.0100
SW5#show spanning-tree

MST0
  Spanning tree enabled protocol mstp
  Root ID    Priority    20481
             Address     aabb.cc00.0100
             Cost        2000000
             Port        4 (Ethernet0/3)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32768  (priority 32768 sys-id-ext 0)
             Address     aabb.cc00.0300
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 2000000   128.1    Shr
Et0/1               Desg FWD 2000000   128.2    Shr
Et0/2               Desg FWD 2000000   128.3    Shr
Et0/3               Root BKN*2000000   128.4    Shr Bound(PVST) *PVST_Inc
SW2#
*Mar  7 11:59:17.438: %SPANTREE-2-PVSTSIM_FAIL: Blocking root port Et0/3: Inconsitent inferior PVST BPDU received on VLAN 11, claiming root 20491:aabb.cc00.0100
SW2#show spanning-tree

MST0
  Spanning tree enabled protocol mstp
  Root ID    Priority    20481
             Address     aabb.cc00.0100
             Cost        2000000
             Port        4 (Ethernet0/3)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32768  (priority 32768 sys-id-ext 0)
             Address     aabb.cc00.0500
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 2000000   128.1    Shr
Et0/1               Desg FWD 2000000   128.2    Shr
Et0/2               Altn BLK 2000000   128.3    Shr Bound(RSTP)
Et0/3               Root BKN*2000000   128.4    Shr Bound(PVST) *PVST_Inc

用 VTP Version 3 設定 MSTP

MSTP 有一個很麻煩的問題就是那個 VLAN 及 Instance 對應表的設定,由於各 Switch 間的設定必需相同才能讓 Switch 處於同一個 Region。試想想,如果我這個 Region 有一百隻 Switch,每次要動這個設定的時候,豈不是要到所有一百隻 Switch 去更改?這顯然不是理想的做法。解決方法是 VTP Version 3,如果網絡有使用 VTP Version 3 來傳遞 VLAN 設定的話,現在就可以一併傳遞 MSTP 設定了。

關於 VTP Version 3 的理論可看這篇文章。現為以下網絡設定 VTP,假設 SW3 為 VTP Server,SW1 和 SW2 同為 VTP Client。

mst

SW3(config)#vtp domain jannet
Changing VTP domain name from ccie to jannet
SW3(config)#vtp password ccie
Setting device VTP password to ccie
SW3(config)#vtp version 3
SW3(config)#vtp mode server vlan
Setting device to VTP Server mode for VLAN.
SW3(config)#vtp mode server mst
Setting device to VTP Server mode for MST.
SW1(config)#vtp domain jannet
Changing VTP domain name from ccie to jannet
SW1(config)#vtp password ccie
Password already set to ccie
SW1(config)#vtp version 3
SW1(config)#vtp mode client vlan
Setting device to VTP Client mode for VLANS.
SW1(config)#vtp mode client mst
Setting device to VTP Client mode for MST.
SW2(config)#vtp domain jannet
Changing VTP domain name from ccie to jannet
SW2(config)#vtp password ccie
Password already set to ccie
SW2(config)#vtp version 3
SW2(config)#vtp mode client vlan
Setting device to VTP Client mode for VLANS.
SW2(config)#vtp mode client mst
Setting device to VTP Client mode for MST.

以後,要更新 MSTP 設定就可以只在 VTP Server 更新,然後輸入指令 vtp primary mst 升級成 VTP Primary Server,MSTP 設定就會散播到 VTP Client。

SW3#vtp primary mst
This system is becoming primary server for feature  mst
No conflicting VTP3 devices found.
Do you want to continue? [confirm]
SW3#
*Mar  7 12:33:28.789: %SW_VLAN-4-VTP_PRIMARY_SERVER_CHG: aabb.cc00.0700 has become the primary server for the MST VTP feature

更新完成後建議把其免去 Primary Server 的角色,避免發生意外更新。方法是把 VTP mode 改成 Transparent 再改回 Server。

SW3(config)#vtp mode transparent mst
Setting device to VTP Transparent mode for MST.
SW3(config)#vtp mode server mst
Setting device to VTP Server mode for MST.

然而,用 VTP Version 3 發放 MSTP 設定有一點需要注意的,由於每一個 MST Region 的設定是不相同的,因此每個 Region 都需要放於不同的 VTP Domain 之中。