一、 MSTP協議
MSTP是一個共有的生成樹協議,在實際生產環境中得到廣泛的應用。
傳統的生成樹只運行一個實例,且收斂速度慢,RSTP再傳統STP基礎上通過改進達到了加速網絡拓撲收斂的目的,但是依然存在缺陷。由于 STP和RSTP再整個局域網中,所有的VLAN共享一個生成樹實例,因此無法實現基于VLAN的負載均衡,網絡環境穩定狀態下備份鏈路始終不能轉發數據流量,造成帶寬的浪費。

MSTP(Multiple Spanning tree Algorithm and protocol)是多生成樹技術,允許在一個交換環境中運行多個生成樹,每個生成樹稱為一個實例(instance)。實例時間的生成樹彼此獨立,如一個實例下的阻塞接口在另一個實例上可能是一個轉發端口。和Cisco私有的PVST技術不同,MSTP允許多個vlan運行一個生成樹實例,相比較Cisco的PVST技術,這是一個優勢,因為在Cisco交換機中,運行PVST技術,是一個實例一棵樹,實例越多,生成樹越多,交換機維護這些生成樹,也是需要消耗硬件資源及網絡開銷的。大部分情況下,運行多個生成樹實例的好處就在于鏈路的負載分擔,但是當只有一條冗余鏈路時,運行兩個生成樹實例完全可以實現負載均衡,同時又能節約系統開銷。

上圖網絡環境中存在兩個生成樹實例,不同實例的根網橋再不同物理交換機上,不但可以實現負載分擔,而且不會因為過多的實例而占用系統資源。
MSTP將環路網絡修剪成一個無環的樹形網絡,避免廣播風暴的產生,同時還提供了數據轉發的多個冗余路徑,在數據轉發過程中實現VLAN數據的負載均衡。MSTP還兼容STP和RSTP。
MSTP把一個交換網絡劃分成多個域,每個域內形成多棵生成樹,生成樹之間彼此獨立。每棵生成樹稱為一個多生成樹實例(Multiple spanning tree instance,MSTI),每個域稱為一個MST域。
MSTP通過設置VLAN映射表(即VLAN和MSTI的對應關系表),把VLAN和MSTI聯系起來。每個VLAN只能對應一個MSTI,即同一VLAN的數據只能在一個MSTI中傳輸,而一個MSTI可以對應多和VLAN。如上圖所示,instance 1對應vlan 10,instance 2對應vlan 20,S1為MSTI1的根交換機,S2為MSTI2的根交換機,instance 1阻塞S2與S3之間鏈路,instance 2阻塞S1與S3之間鏈路,可以充分利用網絡帶寬,有效避免資源浪費。
二、MSTP的基本原理是什么?
在MSTP中,通過把整個互聯的二層網絡劃分成若干個域。在域內,把其中的vlan分成若干組,每組具有相同的拓撲結構,然后定義若干個MSTI,并把這些生成樹實例和不同的vlan映射起來。
所謂實例就是多個vlan的一個集合。通過將多個vlan映射到一個實例,可以節省通信開銷和資源占用率。MSTP各個實例拓撲的計算相互獨立,在這些實例上可以實現負載均衡。可以把多個相同拓撲結構的vlan映射到同一個實例里,這些vlan在接口上的轉發狀態取決于接口在對應MSTP實例的狀態。
如果僅僅是為了防止廣播風暴等環路問題,運行CST(CST也是一種生成樹協議,關于CST技術自行查閱相關資料,這里不敘述了)已經足夠。運行多實例的主要目的在于使其負載分擔鏈路負載。所以運行的生成樹實例數量一般取決于冗余線路的數量,如果只有一條冗余鏈路,那么最好運行兩個實例。如果有兩條冗余鏈路,那么運行三個實例將是最好的選擇,并盡可能保證每個實例中流量相差不大。
1、 MSTP的網絡層次
一個二層交換網絡可以劃分多個MST域(多生成樹域),每個生成樹域可以劃分多個MSTI,每個實例中可以映射多個vlan。

如上圖中的MSTP網絡包含3個MST域,分別是A、B、C。每個MST域中包含一個或多個MSTI。MST域B中包含兩個MSTI,分別是instance 1和instance 2。instance 1和vlan 1-5映射,instance 2和vlan 6-10映射。
2、 MST域
MST域是多生成樹域,由局域網中的多臺交換機及他們之間的網段構成。一個局域網可以存在多個MST域,各MST域之間在物理上直接相連。用戶可以通過MSTP配置命令把多臺交換機劃分在同一個MST域內。MST域中的交換機都啟用了MSTP,配置了相同的域名及vlan映射表(VLAN映射表是MST域的屬性,它描述了VLAN和MSTI之間的映射關系)。
3、MSTI
一個MST域內可以運行多個MSTI,MSTI之間彼此獨立,MSTI可以與一個或者多個VLAN對應,但一個VLAN只能與一個MSTI對應。
4、端口角色
MSTP中的端口角色主要有根端口,指定端口 ,預備端口,備份端口和邊緣端口。除邊緣端口外其他端口角色都參與MSTP的計算過程。同一端口在不同的MSTI中可以擔任不同的角色。
根端口:非根交換機上到根交換機開銷最小的端口就是該交換機的根端口,根端口能夠轉發數據流量到根交換機。下圖中的P3、P4和P8為根端口。
指定端口:該交換機向下游交換機發送BPDU(一種橋協議數據單元,用來交換網橋ID、根路徑成本等信息,用來選舉交換機端口角色)或者數據流量的端口。在下圖中,P1、P2和P6為指定端口(當S3優先級高于S2時)。
邊緣端口:位于網絡最邊緣處,不參與生成樹計算,一般連接非交換機設備,如終端服務器、PC、路由器等。
預備端口:從轉發數據流量的角度來看,預備端口提供了到達根交換機的一條備份鏈路,其接口狀態為阻塞,不轉發數據流量,當根端口被阻塞時,預備端口將成為新的根端口。在下圖中P5為預備端口。
備份端口:當同一臺交換機的兩個端口互相連接時就存在一個環路(聚合鏈路除外),此時,交換機就會將其中一個端口阻塞,備份端口就是被阻塞的那個端口。從發送BPDU來看,備份端口就是由于學習到本設備上其他端口發送的BPDU而被阻塞的端口。從轉發數據流量來看,備份端口作為指定端口的備份,提供了一條從根交換機到非根交換機的備份鏈路,在下圖中,P7就是備份端口。

5、MSTP的端口狀態
Forwarding(轉發狀態):在這種狀態下,端口即轉發用戶流量,又接收/發送BPDU報文。
Learning(學習狀態):這是一種過渡狀態,在Learning狀態下交換機會根據收到的用戶流量,學習mac地址表,但不轉發用戶流量,所以稱為學習狀態。Learning狀態的端口接收/發送BPDU報文,不轉發用戶流量。
Discarding(阻塞狀態):在這種狀態下,端口只接收BPDU報文。
三、 MSTP的保護功能
在面對一些二層生成樹攻~擊時,下面四個技術可以增加生成樹的安全性。
1、 BPDU保護
在交換機上,通常將直接與用戶終端(如PC機)或服務器等非交換機設備相連的端口配置為邊緣接口,以實現這些端口的快速收斂,正常情況下,這些端口是不會接收到BPDU。如果有人偽造BPDU惡意攻~擊交換機,當這些端口收到BPDU時,交換機會自動將這些端口設置為非邊緣端口,并重新進行生成樹計算,從而引起網絡震蕩。
啟用BPDU保護功能后,如果接口收到BPDU報文,那么該接口將被自動關閉,從而避免了后續的攻~擊及由此帶來的網絡震蕩。
配置命令如下:
[LSW1]stp bpdu-protection #開啟BPDU保護
2、 根保護
由于網絡管理人員失誤或人為惡意攻 擊,網絡中的合法交換機端口可能會收到優先級更高的BPDU,這將使目前網絡中的根失去根地位,之后將重新計算生成樹,引起網絡震蕩,還有可能將網絡流量從高速鏈路上轉移到低俗鏈路中,造成網絡擁塞。為了防止這種情況出現,交換機提供根保護功能。根保護功能通過維持指定端口的角色來保護根交換機的地位。配置了根保護功能的端口,在所有實例上的端口角色都保持為指定端口。當端口接收到優先級更高的BPDU時,端口角色不會變為非指定端口,而是進入偵聽狀態,不再轉發報文。經過足夠長的時間,如果端口一直沒有再收到優先級較高的BPDU,端口會恢復到原來的正常狀態。
配置命令如下:
[LSW1]in g0/0/1 #進入指定端口 [LSW1-GigabitEthernet0/0/1]stp root-protection #開啟根保護
3、 環路保護
根端口和其他阻塞端口狀態會周期性地接收來自上游交換機(在本博文的第三張配圖中,R1就是R2和R3的上游交換機,R4就是R2和R3的下游交換機)的BPDU。當鏈路擁塞或者單向鏈路故障時,這些端口無法接收來自上游交換機的BPDU,交換機會重新選擇根端口。原先的根端口會轉變為指定端口,而原先的阻塞端口會遷移到轉發狀態,從而造成交換網絡中可能產生環路。環路保護功能會抑制這種環路產生。在啟動了環路保護功能后,如果根端口收不到來自上游的BPDU,根端口會被設置進入阻塞狀態;而阻塞端口則會一直保持在阻塞狀態,不轉發報文,從而不會在網絡中形成環路 。
配置命令如下:
[LSW1]in g0/0/1 #進入根端口 [LSW1-GigabitEthernet0/0/1]stp loop-protection #啟用環路保護功能
4、 TC保護
交換機在接收到TC-BPDU報文后,會執行MAC地址表項和ARP表項的刪除操作,如果有人偽造TC-BPDU報文惡意攻~擊交換機,交換機短時間內會收到很多TC-BPDU報文,頻繁的刪除操作會給交換機造成很大的負擔,給網絡的穩定性帶來很大的隱患,啟用TC保護功能后,在固定的時間內,MSTP進程處理TC類型BPDU報文的次數可配置。如果在固定的時間內,MSTP進程收到TC類型的BPDU報文數量大于配置的閾值,那么MSTP進程只會處理閾值指定的次數。對于其他超出閾值的TC類型BPDU報文,定時器到期后,MSTP進程對其統一處理一次。這樣可以避免頻繁地刪除MAC地址表項和ARP表項,從而達到保護交換機的目的。
配置命令如下:
[LSW1]stp tc-protection threshold 3 #指定閾值為3。
四、 簡單配置MSTP
實驗環境:
三臺交換機,兩天終端PC,交換機開啟MSTP協議,區域名稱HUAWEI,修訂版本級別為1。分別建立MSTI1和MSTI2,VLAN10映射到MSTI1,VLAN20映射到MSTI2,MSTI1的根網橋在S1上,MSTI2的根網橋在S2上。VLAN10中的客戶端地址為10.1.10.1,VLAN20中的客戶端地址為10.1.20.1。利用MSTP實現VLAN10和VLAN20的互訪,并且VLAN10的流量通過路徑S3→S1→R1到達網關,VLAN20的流量通過路徑S3→S2→R1到達網關。
拓撲圖如下:

推薦步驟:
- 配置客戶端和路由器的IP地址
- 配置VLAN及Trunk
- 配置MSTP
- 驗證
操作步驟:
- 配置客戶端和路由器的IP地址
R1
[R1]INT G0/0/0 #進入接口 [R1-GigabitEthernet0/0/0]ip add 10.1.10.254 24 #配置IP地址 [R1-GigabitEthernet0/0/0]int g0/0/1 #進入接口 [R1-GigabitEthernet0/0/1]ip add 10.1.20.254 24 #配置IP地址 [R1-GigabitEthernet0/0/1]quit #保存退出
- 配置VLAN及Trunk
S1
[S1]vlan batch 10 20 #批量創建vlan [S1]int g0/0/2 #進入接口 [S1-GigabitEthernet0/0/2]port link-type trunk #配置為trunk模式 [S1-GigabitEthernet0/0/2]port trunk allow-pass vlan all #配置承載所以vlan通信 [S1-GigabitEthernet0/0/2]int g0/0/1 #進入接口 [S1-GigabitEthernet0/0/1]port link-type trunk #配置為trunk [S1-GigabitEthernet0/0/1]port trunk allow-pass vlan all #配置承載所有vlan通信 [S1-GigabitEthernet0/0/1]int g0/0/3 #進入接口 [S1-GigabitEthernet0/0/3]port hybrid untagged vlan 10 #轉發數據移除vlan 10的標識 [S1-GigabitEthernet0/0/3]port hybrid pvid vlan 10 #配置PVID為vlan 10 [S1-GigabitEthernet0/0/3]quit #保存退出
S2
[S2]vlan batch 10 20 [S2]int g0/0/2 [S2-GigabitEthernet0/0/2]port link-type trunk [S2-GigabitEthernet0/0/2]port trunk allow-pass vlan all [S2-GigabitEthernet0/0/2]int g0/0/1 [S2-GigabitEthernet0/0/1]port link-type trunk [S2-GigabitEthernet0/0/1]port trunk allow-pass vlan all [S2-GigabitEthernet0/0/1]int g0/0/3 [S2-GigabitEthernet0/0/3]port link-type hybrid [S2-GigabitEthernet0/0/3]port hybrid untagged vlan 20 #轉發數據移除vlan 20的標識 [S2-GigabitEthernet0/0/3]port hybrid pvid vlan 20 #配置PVID為vlan 20 [S2-GigabitEthernet0/0/3]quit
S3
[S3]vlan batch 10 20 #批量創建vlan [S3]int eth0/0/3 #進入接口 [S3-Ethernet0/0/3]port link-type access #接口配置為access模式 [S3-Ethernet0/0/3]port default vlan 10 #vlan 10加入接口 [S3-Ethernet0/0/3]int eth 0/0/4 #進入接口 [S3-Ethernet0/0/4]port link-type access #接口配置為access模式 [S3-Ethernet0/0/4]port default vlan 20 #vlan 20加入接口 [S3-Ethernet0/0/4] int eth0/0/1 #進入接口 [S3-Ethernet0/0/1]port link-type trunk #接口配置為trunk模式 [S3-Ethernet0/0/1]port trunk allow-pass vlan all #承載所以vlan通信 [S3-Ethernet0/0/1]int e0/0/2 #進入接口 [S3-Ethernet0/0/2]port link-type trunk #接口配置為trunk模式 [S3-Ethernet0/0/2]port trunk allow-pass vlan all #承載所有vlan通信 [S3-Ethernet0/0/2]quit #保存并退出
- 配置MSTP
S1
[S1]stp mode mstp #開啟生成樹(將交換機配置成MSTP模式) [S1]stp region-configuration #進入到stp配置模式 [S1-mst-region]region-name HUAWEI #配置stp域名 [S1-mst-region]revision-level 1 #配置stp版本為1 [S1-mst-region]instance 1 vlan 10 #將vlan 10添加到stp實例1中 [S1-mst-region]instance 2 vlan 20 #將vlan 20添加到stp實例2中 [S1-mst-region]active region-configuration #激活生成樹實例 (必須激活,否則無效) [S1-mst-region]quit #保存并退出 [S1]stp instance 1 root primary #配置為實例1的根網橋 [S1]stp instance 2 root secondary #配置為實例2的備份根網橋
S2
[S2]stp mode mstp #開啟生成樹(將交換機配置成MSTP模式) [S2]stp region-configuration #進入到stp配置模式 [S2-mst-region]region-name HUAWEI #配置stp域名 [S2-mst-region]revision-level 1 #配置stp版本為1 [S2-mst-region]instance 1 vlan 10 #將vlan 10添加到stp實例1中 [S2-mst-region]instance 2 vlan 20 #將vlan 20添加到stp實例2中 [S2-mst-region]active region-configuration #激活生成樹實例 (必須激活,否則無效) [S2-mst-region]quit [S2]stp instance 1 root secondary #配置為實例1的備份根網橋 [S2]stp instance 2 root primary #配置為實例2的根網橋
S3
[S3]stp mode mstp #開啟生成樹(將交換機配置成MSTP模式) [S3]stp region-configuration #進入到stp配置模式 [S3-mst-region]region-name HUAWEI #配置stp域名 [S3-mst-region]revision-level 1 #配置stp版本為1 [S3-mst-region]instance 1 vlan 10 #將vlan 10添加到stp實例1中 [S3-mst-region]instance 2 vlan 20 #將vlan 20添加到stp實例2中 [S3-mst-region]active region-configuration #激活生成樹實例 (必須激活,否則無效) [S3-mst-region]quit
- 驗證

驗證中可以看出,instance 1中的Ethernet0/0/2和instance 2中的Ethernet0/0/1處于阻塞狀態,同時,兩個實例之間互相獨立,彼此不受影響。

