STP基礎+高級特性+實驗模擬

STP(Spanning Tree Protocol)是生成樹協議的英文縮寫。該協議可應用於在網絡中建立樹形拓撲,消除網絡中的二層環路,並且可以通過一定的方法實現路徑冗餘(不是一定可以實現路徑冗餘),實現冗餘備份;同時避免因環路的存在而造成廣播風暴的問題。

明白了STP大致是幹什麼的之後,現在來了解一下他的過程:

運行STP協議的交換機的端口總共有四種狀態:
⑴阻塞BLK(20s)
⑵監聽LIS(15s)
⑶學習LRN(15s)
⑷轉發FWD

交換機通電後,該網絡內的交換機即爲阻塞狀態,此階段各交換機向外發送自己的BPDU(網橋協議數據單元Bridge Protocol Data Unit),並接收所收到的BPDU。通過分析BPDU數據來選舉根橋交換機。

根橋交換機的選舉原則:BID(bridge id)

BID中包含網橋優先級和橋MAC

選舉時首先比較bridge priority(橋優先級),bridge priority 越小越優,默認爲32768,優先級必須爲4096的倍數。
在這裏插入圖片描述
如上圖所示,優先級的數值爲32768+vlan名(如:vlan 1,優先級即爲32768+1)。

若設備的優先級相同,則比較橋MAC地址。橋MAC地址同橋優先級一樣,越小越優

根橋交換機選舉完成後,各端口即進入監聽狀態。此階段與阻塞狀態的過程有些類似,但目的不同。此階段各交換機的各個端口向外發送自己的BPDU,同時接收其他交換機的BPDU。通過分析BPDU的數據來選舉根端口RP和指定端口DP。

  • 選舉根端口(RP)
    在每個非根橋交換機上選舉一個根端口。

選舉規則爲:
⑴到根網橋最低的路徑開銷
⑵發送BPDU的網橋ID較小
⑶端口ID較小的

路徑開銷cost值如下圖所示:
鏈路開銷
端口ID由端口優先級與端口編號組成。默認的端口優先級爲128。端口優先級根據對端交換機的端口優先級計算,越小越優。
當端口優先級相同時,則比較端口號(port-number),端口號越小越優,同樣與對端交換機的端口進行比較。

  • 選舉指定端口(DR)

每個網段上選舉一個指定端口。

選擇順序爲:
⑴根路徑成本較低

⑵發送BPDU的交換機的網橋ID值較小

⑶本端口的ID值較小。

另外,根網橋的接口皆爲指定端口,因爲根網橋上端口的根路徑成本爲0。

小結:生成樹協議運行生成樹算法(STA)。生成樹算法很複雜,但是其過程可以歸納爲以下3步:

(1)選舉根網橋

(2)選舉根端口

(3)選舉指定端口


通過實驗進行驗證,實驗拓撲圖如下所示:
在這裏插入圖片描述
基本配置:
SW-1

SW-1(config)#vlan 10
SW-1(config-vlan)#vlan 20
SW-1(config-vlan)#exit
SW-1(config)#interface range g0/0-1
SW-1(config-if-range)#switchport trunk encapsulation dot1q 
SW-1(config-if-range)#switchport mode trunk 
SW-1(config-if-range)#exit
SW-1(config)#spanning-tree vlan 10 priority 4096
SW-1(config)#spanning-tree vlan 20 priority 0
//修改模式爲pvst
SW-1(config)#spanning-tree mode pvst 

SW-2

SW-2(config)#vlan 10
SW-2(config-vlan)#vlan 20
SW-2(config-vlan)#exit
SW-2(config)#interface range g0/0-1
SW-2(config-if-range)#switchport trunk encapsulation dot1q 
SW-2(config-if-range)#switchport mode trunk 
SW-2(config-if-range)#exit
SW-2(config)#spanning-tree vlan 10 priority 0
SW-2(config)#spanning-tree vlan 20 priority 4096
//修改模式爲pvst
SW-2(config)#spanning-tree mode pvst 

SW-3

SW-3(config)#vlan 10
SW-3(config-vlan)#vlan 20
SW-3(config-vlan)#exit
SW-3(config)#interface range g0/0-1
SW-3(config-if-range)#switchport trunk encapsulation dot1q 
SW-3(config-if-range)#switchport mode trunk 
SW-3(config-if-range)#exit
SW-3(config)#interface g0/2
SW-3(config-if)#switchport mode access 
SW-3(config-if)#switchport access vlan 10
SW-3(config-if)#exit
SW-3(config)#interface g0/3
SW-3(config-if)#switchport mode access 
SW-3(config-if)#switchport access vlan 20
SW-3(config-if)#exit
//修改模式爲pvst
SW-3(config)#spanning-tree mode pvst 

驗證思路:基本配置完成後,以vlan 10爲例,我們先關閉SW-3上對應vlan 10的interface G0/2端口,然後再打開。由前面的理論我們知道,STP的收斂速度是很慢的。因此我們可以在no shutdown G0/2接口後不斷的輸入show spanning-tree命令來查看接口的狀態信息,以此來摸清運行 STP協議 的網絡的狀態變化過程。

先關閉,後打開G0/0接口後的狀態變化過程(白色部分爲時間):

  1. 阻塞→監聽

在這裏插入圖片描述

  1. 監聽→學習(15s)
    在這裏插入圖片描述
  2. 學習→轉發(15s)
    在這裏插入圖片描述
    通過觀察上面幾個過程及計算時間,我們不難得知,監聽→學習需15s, 學習→轉發需15s。

協議缺點:
1、拓撲收斂慢,當網絡拓撲發生改變的時候,生成樹協議需要50-52秒的時間才能完成拓撲收斂。

2、不能提供負載均衡的功能。當網絡中出現環路的時候,生成樹協議簡單的將環路進行Block,這樣該鏈路就不能進行數據包的轉發,浪費網絡資源。


STP高級特性

通過上面的實驗,我們可得知STP的收斂速度是很慢的,需50s才能收斂完成。這種情況是一些實時以及對帶寬敏感的網絡應用是不能接受的。針對這一情況,Cisco公司提出了三種新的端口特性來予以解決。

1.portfast:連接終端設備的端口(邊緣端口edge),當RP失效,馬上啓動阻斷端口保持通信。這樣收斂時間很快,不用重新進行STP運算,可從監聽狀態直接變爲轉發狀態,從而節約30s的時間。

2.uplinkfast:針對直連鏈路的故障解決。當直連鏈路發生故障時,設備要重新選舉端口。此時開啓了uplinkfast特性的接口可直接從監聽狀態變爲轉發狀態,從而節省30s的收斂時間。

3.backbonefast:若使用此端口特性,則需要在該網絡的每一臺交換機上開啓。通過backbonefast的特性,讓其他和根橋斷掉的交換機主動發送查詢消息,查詢是否還有到達根橋的備份路徑。 若沒有備份路徑,則該端口稱爲新的根端口。若有,則該端口變爲指定端口。

BackboneFast是對UplinkFast的一種補充:UplinkFast能夠檢測直連鏈路的失效,BackboneFast是用來檢測間接鏈路的失效。當啓用了BackboneFast的交換機檢測到間接鏈路失效之後,會馬上使阻塞的端口進入監聽狀態,少了20S的老化時間。

實驗驗證:
同樣是上文的拓撲和配置,我們只需多輸入幾條命令即可實現。

portfast:SW-3

SW-3(config)#interface g0/2
SW-3(config-if)#spanning-tree portfast edge default
//輸入上面一條命令時,會彈出警告
%Warning: portfast should only be enabled on ports connected to a single
 host. Connecting hubs, concentrators, switches, bridges, etc... to this
 interface  when portfast is enabled, can cause temporary bridging loops.
 Use with CAUTION

%Portfast has been configured on GigabitEthernet0/2 but will only
 have effect when the interface is in a non-trunking mode.
//現在將端口關閉再打開,查看狀態變化
SW-3(config-if)#shutdown 
SW-3(config-if)#no shutdown 

在這裏插入圖片描述
我們可以看到,該端口直接變爲了轉發狀態,節省了監聽和學習共30s的時間。
在這裏插入圖片描述
當然我們也可以在全局模式下開啓portfast特性(使用需謹慎):
在這裏插入圖片描述


uplinkfast:SW-3(非根橋上開啓)

SW-3(config)#spanning-tree uplinkfast 
SW-3(config)#interface g0/0
SW-3(config-if)#shutdown 
SW-3(config-if)#no shutdown 

在這裏插入圖片描述
關閉接口後會直接彈出這條提示,查看spanning-tree:
在這裏插入圖片描述
可以看出,端口關閉後新的根端口立刻選舉了出來並變爲轉發狀態,節省了從監聽到轉發狀態所需的30s時間。


backbonefast:假定某一端口出現故障
SW-1

SW-1(config)#spanning-tree backbonefast 

SW-2

SW-2(config)#spanning-tree backbonefast 
SW-2(config)#interface g0/0
SW-2(config-if)#shutdown 

SW-3

SW-3(config)#spanning-tree backbonefast 

SW-2的G0/0口出現故障後,SW -3上可看見如下提示:
在這裏插入圖片描述
在這裏插入圖片描述
可發現SW-3上直接變爲監聽狀態,省去了BPDU老化的20s時間。


補充:root guard根防護功能

Root Guard:防止新加入的交換機(有更低根網橋ID)影響一個已經穩定了(已經存在根網橋)的交換網絡,阻止未經授權的交換機成爲根網橋。
工作原理:當一個端口啓動了此特性,當它收到了一個比根網橋優先值更優的BPDU包,則它會立即阻塞該端口,使之不能形成環路等情況。這個端口特性是動態的,當沒有收到更優的包時,則此端口又會自動變成轉發狀態。當收到更優的包時,該端口將變爲根不連續的阻塞狀態。

配置根防護的命令

//接口下配置
SW(config-if)#spanning-tree guard root

在這裏插入圖片描述

當收到更優數據包時,查看對應vlan的信息,可發現該端口的狀態變爲根不連續的阻塞狀態。
在這裏插入圖片描述
相關查看配置的命令

SW#show spanning-tree inconsistentports

root guard作用位置:
1.交換機上未使用的端口
2.接入的端口


BPDU guard

前面提到了portfast特性是適用與連接終端設備的端口特性。但是不能排除配置時人爲造成的錯誤配置。若兩臺交換機之間的鏈路開啓了portfast特性,這兩個端口將跳過偵聽和學習階段,不參與STP的計算而直接進入轉發狀態,從而造成存在環路的風險。爲了避免出現這種情況,我們引入了BPDU guard的概念:BPDUGuard使具備PortFast特性的端口在接收到BPDU時進入err-disable狀態來避免橋接環路,其可在全局或接口下進行配置(默認關閉)。

爲消除因portfast造成的環路,主要有兩種方法:
1.開啓BPDU guard特性
2.將問題接口的portfast特性移除
在這裏插入圖片描述
現在我們做個實驗來做一些驗證。

//全局下開啓portfast特性
SW-2(config)#spanning-tree portfast edge default

現在SW-2的狀態如下所示在這裏插入圖片描述
現在我們在SW-2上開啓BUDP guard特性

//全局下開啓BUDP guard
SW-2(config)#spanning-tree portfast edge bpduguard default
//接口下開啓BUDP guard
SW-2(config-if)#spanning-tree bpduguard enable
//開啓因觸發BPDU guard懲罰而關閉的端口自動恢復
SW-2(config)#errdisable recovery cause bpduguard 
//修改自動恢復的時間
SW-2(config)#errdisable recovery interval 30

現在我們打開SW-1的e0/0端口,SW-2會彈出如下日誌:
在這裏插入圖片描述

查看SW-2的所有端口狀態可發現,e0/0端口確實已經關閉:
在這裏插入圖片描述
當SW-2的e0/0端口接收到BPDU報文時,端口將關閉;未接收到BPDU 報文時,端口將自動恢復。默認恢復時間爲300s。


此外,另一種解決辦法:移除問題端口的portfast特性

//全局下開啓針對portfast特性的bpdufilter
SW-2(config)#spanning-tree portfast edge bpdufilter default
//接口下開啓bpdufilter
SW-2(config)#spanning-tree bpdufilter enable

全局下開啓時,當某個交換機的edge端口收到了BPDU,將端口的portfast特性移除,使其迴歸到原始的生成樹狀態,參與STP的計算。

接口下開啓bpdufilter後,該端口將不再發送BPDU報文,也不會再接收BPDU報文。

重複上文實驗,查看端口狀態可以驗證此特性。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章