STP生成樹詳解
一、STP(生成樹協議)
1.1 線路冗餘
一旦在交換機上使用鏈路冗餘,那麼將出現二層的橋接環路;因為CAM是流量觸發交換機生成的, 該表預設並沒有被管理
1.1.1造成的影響
- 廣播風暴
- CAM表記錄翻滾(MAC地址表不穩定)
- 資料幀的重複拷貝
1.1.2 解決方案
邏輯性阻塞某個介面
1.2 STP(Spanning Tree生成樹)
樹根裝置到每臺交換機僅存在一條鏈路(預設選擇最佳);邏輯的阻塞部分鏈路;當最佳路徑故障時,阻塞埠被開啟,來恢復通訊
1.2.1 生成樹型別
公有生成樹:STP(802.1D生成樹)、RSTP(802.1W生成樹)、MST(802.1S多生成樹)
私有生成樹:PVST(基於VLAN的標準生成樹)、PVRST+(基於VLAN的快速生成樹)
1.2.2 802.1D
1.BDPU
交換機間溝通時使用的資料幀:BPDU(橋協議資料單元)
跨層封裝到二層--BPDU資料幀預設不屬於任何一個vlan,故在存在與vlan的裝置上,該資料幀基於native vlan傳送
2.BPDU分類
1)配置BPDU
拓撲收斂完成後,僅根網橋週期(2s)傳送(目的保活);在沒有根網橋的時候,所有裝置僅傳送BPDU;
2)拓撲變更BPDU(TCN-BPDU)
拓撲變更訊息,包中不包含任何具體資訊,也不會導致網路重新收斂
當一臺交換機的阻塞埠鏈路被斷開,那麼將標記位中第7位置1,標記拓撲已經改變,該BPDU將傳送到根網橋處,根網橋使用標記位為第6位,來表示確認;若沒有收到ACK,那麼2s週期傳送TCN;根網橋在確認後,將使用BDPU告訴所有的非根網橋,重新整理CAM表,預設CAM的儲存週期為300s
3)次優BPDU
非根網橋上的根埠斷開--或接受不到根網橋的BPDU了,同時本地斷開的已不是阻塞埠;那麼本地將自己定義為根網橋,發出BPDU,由於該BPDU次於根網橋的,故稱為次優BPDU
總結:根網橋傳送配置BPDU,包含拓撲資訊
非根網橋的阻塞埠被斷開,當依然可以與根網橋溝通,那麼傳送TCN,不包含拓撲資訊,不會使網路重新收斂
非根網橋上斷開了根埠後,若不能在與根網橋溝通,將本地定義為根網橋傳送次優BPDU,包含本地的拓撲資訊;也是配置BDPU,但不是根網橋的
3.BDPU主要欄位
Bytes |
Filed |
2 |
Protocol ID |
1 |
Version |
1 |
Message Type |
1 |
Flags |
8 |
Root ID |
4 |
Cost of path |
8 |
Bridge ID |
2 |
Port ID |
2 |
Message age |
2 |
Max age |
2 |
Hellotime |
2 |
Forward delay |
4.生成樹選舉
選舉過程:根網橋---根埠(RP)---指定埠(DP)---非指定埠(NDP)
開始整個交換網路沒有根網橋,所有裝置均認為本地為根網橋,傳送本地BPDU;
當收集到整個交換網路的BPDU後,根網橋被選出;之後由根網橋基於所有的BPDU,生成拓撲,使用配置BPDU來告知其他的交換機;
1)根網橋
整個交換網路的中心;通過BPDU來控制整個網路收斂
選舉條件:協議ID(PID)=網橋優先順序(BID)+MAC地址
網橋優先順序:0-65535(預設32768)
正常的透明交換機不擁有mac地址,不能實現stp技術;非透明交換存在--SVI介面,出廠將被燒錄mac地址;若有多個,將選擇數字最小的來參選
選舉規則:先比較優先順序,數值越小越優先;若優先順序一致,比較MAC地址,數值越小越優先
2)根埠
只能存在於非根網橋上,並且一個交換機只有一個;離根網橋最近的介面;作用是接收來自根網橋的BPDU,正常轉發使用者的資料流--非阻塞
不同頻寬時的cost值:
Bandwidth |
Cost |
10M |
100 |
100M |
19 |
1000M |
1 |
10000M |
2 |
>10000M |
1 |
選舉規則:
(1)比較從該介面進入時的cost值,越小越優先(Cost值實在進入交換機時,才疊加該段鏈路的開銷)
(2)若介面cost值相同,比較介面上級裝置的BID,BID最小裝置對應的介面為根埠,因為給裝置為備份根網橋
(3)若介面cost值相同,上級裝置的BID也相同,再比較上級裝置的PID(埠ID)=優先順序+介面編號
優先順序:0-255(預設為128); 先比較優先順序,越小越優先;再比較介面編號,越小越優先
(4)若以上引數全部一致,比較本地的PID,越小越優先
3)指定埠(DP)
每條鏈路上有且僅有一個;轉發來自根網橋的BPDU;根網橋上全部為指定埠,根埠的對端一定是指定埠
選舉規則:
- 必須從根網橋發出的BPDU,通過該埠向外(出項)轉發時消耗的cost值,越小越優先
- 若出向cost值相同,比較本地的BID,越小越優先
- 本地BID相同,比較本地的PID,越小越優先
(4)本地PID相同,直接阻塞該埠
4)非指定埠(NDP)
又稱為阻塞埠,以上所有角色選舉完成後,剩餘的全部介面為非指定;其狀態為阻塞
注:阻塞埠並不是關閉介面,依然可以接收到資料幀,但不轉發資料幀;可以正常識別BPDU
注:生成樹協議,cisco產品預設執行,個別廠商需要手工開啟-例:H3C
5.802.1D的埠狀態
埠狀態 |
埠能力 |
Disabled |
不收發任何報文 |
Blocking |
不接收或者轉發資料,接收但不傳送BPDU,不進行地址學習 |
Listening(15s) |
不接收或者轉發資料,接收併發送BPDU,不進行地址學習 |
Learning(15s) |
不接收或者轉發資料,接收併發送BPDU,開始進行地址學習 |
Forwarding |
接收或者轉發資料,接收併發送BPDU,進行地址學習 |
結論:802.1D必須在指示燈為綠色時,才開始轉發使用者流量
6.802.1D演算法的收斂時間
1>初次收斂為30s
2>結構變化
(1)存在直連檢測,本地的根埠斷開後,之後僅一條阻塞埠連線於其他交換機;本地不能發出TCN或也發不出次優BPDU;那麼只能本地的阻塞埠,總的收斂時間30s
(2)沒有直連檢測,本地根埠斷開後,可以向其他交換機的阻塞埠傳送次優BPDU;對端交換機在收到次優BPDU後,將忽略該資料幀,而是進行20shold time;之後再收斂該接,總的收斂時間:20s hold time+30s收斂=50s
7.STP控制
一旦執行將自動選擇出所有的角色,當預設可能不是最佳結構,需要管理員手工干預,尤其根網橋一定放置在匯聚層或核心層的交換機上,產生上層blocking埠的數量
方法一:修改裝置的網橋優先順序(4096的倍數)
方法二:設定主根和備份根
方法三:控制根埠位置,修改鏈路Cost值
方法四:修改傳送方的PID優先順序
9.802.1D生成樹的優缺點
優點:樹少、簡單
缺點:1.收斂速度慢
2.鏈路利用率低---備份鏈路正常始終不工作
1.2.3 PVST(基於VLAN的生成樹)
每個vlan一棵樹;因為cisco存在獨立的vlan執行晶片,故可以支援很多的樹;
每棵獨立的樹,依然使用802.1d演算法收斂
不同vlan的網橋優先順序不同,優先順序=32768+vlan id;人為可修改32768的部分,且只能以4096的倍數來進行修改;
切記:一臺裝置若希望加入某棵vlan的樹,條件是該交換機存在該vlan;該交換機存在該vlan的活動介面或者存在trunk幹道;
1.PVST優缺點
優點:簡單、支援負載分擔
缺點:私有、樹多較難管理、收斂慢、trunk幹道僅支援ISL封裝
1.2.4 PVST+
在PVST的基礎上進行了部分的升級優化;相容802.1q trunk幹道封裝,可以做部分的加速優化
1.PVST+優缺點
優點:1.一個VLAN一棵樹,提高連理的利用率
2.部分加速
3.相容802.1Q
缺點:1.樹多,不好管理
2.加速不夠徹底
1.2.5 RSTP
RSTP:也叫RPVST(快速的PVST協議),思科私有
802.1w(802.1D的快速版),公有
1.RSTP和802.1w的異同
相同點:兩種協議均為快速收斂1-2s完成收斂,提速的原理一致
區別:RSTP有基於vlan的運算晶片,故RSTP依然一個vlan一棵樹;802.1w整個交換網路一棵樹
2.RSTP的埠狀態
1)Discarding:丟棄狀態
2)Learining:學習狀態
3)Forwarding:轉發狀態
3.RSTP的埠角色
1)根埠(RP):同802.1D
2)指定埠(DP):同802.1D
3)替代埠(AP):如果一個埠收到另外一個網橋的 BPDU,但不是最好的,那麼這個埠成為替換埠
4)備份埠(BP):在如果一個埠收到同一個網橋的更好 BPDU,那麼這個埠成為備份端。當兩個埠被一個點到點鏈路的一個環路連在一起時,或者當一個交換機有兩個或多個到共享區域網段的連線時,一個備份端口才能存在
注:無論AP還是BP其實就是802.1D中的阻塞埠,AP為對端裝置,BP為本端裝置
4.802.1w中埠角色
1、邊緣埠:edge Port,非trunking,access介面
2、非邊緣埠:非edge Port,trunking介面
5.RSTP快速的原理
1、取消了計時器,而是在一個狀態工作完成後,直接進入下一狀態
2、分段式同步,兩臺裝置間逐級收斂;使用請求和同一標記;依賴標記位的第1和第6位
3、BPDU的保活為6s;hello time 2s
4、將埠加速(邊緣介面)、上行鏈路加速、骨幹加速集成了
5、相容802.1d和PVST,但802.1d和PVST沒有使用標記位中的第1-6位,故不能快速收斂;因此如果網路中有一臺裝置不支援快速收斂,那麼其他開啟快速收斂的裝置也不能快速
6、當TCN訊息出現時,不需要等待根網橋的BPDU,就可以重新整理本地的cam表
啟動快速生成樹,所有交換機全部需啟動
注:所有干涉選舉的命令和上面一致
切記:
預設介面為半雙工(10M)時,介面型別為共享;全雙工時為點到點;
共享型介面依然執行慢速生成;只有點到點介面可以快速;
故建議將共享型介面修改為點到點型
1.2.6 MST
MST,思科私有
802.1S多生成樹,公有
1.MST的原理
將多個vlan放置在一個組內,為每個組生成一個樹,樹型演算法為802.1w;將不同組的根網橋放置到不同的匯聚層裝置處,可以進行流量的分栽,提供鏈路利用率;不同組發出的BPDU,使用網橋優先順序(=優先順序+組ID)區分
優先順序預設為32768,只能以4096的倍數來進行修改
切記:整個交換機需要所有的裝置均正常MST協議,才進行部署
2.MST的配置
修改封裝為802.1q(SW1-SW3同配置):
建立vlan(SW1-SW3同配置):
SW1(config)#spanning-tree mode mst #修改生成樹協議
預設存在組0,且預設所有vlan處於組0
修改連線型別為點到點(SW1-SW3同配置):
SW1#show spanning-tree mst 0
SW1-SW3同配置:
切記:所有執行MST協議的裝置,分組內容必須完全一致,否則可能出現問題
定義根網橋,備份根網橋
SW1(config)#spanning-tree mst 1 root primary #降2個4096
SW1(config)#spanning-tree mst 2 root secondary #降1個4096
SW2(config)#spanning-tree mst 1 root secondary
SW2(config)#spanning-tree mst 2 root primary
SW1(config)#int e0/0 #修改參選介面的引數
SW1(config-if)#spanning-tree mst 1 ?
cost Change the interface spanning tree path cost for an instance
port-priority Change the spanning tree port priority for an instance
1.2.7 STP增強
1.埠加速(portfast)
針對交換機的access介面,連線的是終端使用者這些不需要執行生成樹的埠,切記不得配置於連線trunk幹道的介面。預設進入listening狀態,等待30s進入轉發狀態
節約時間:30s
位置:接入層交換機的access介面
2.上行鏈路加速(uplinkfast)
在裝置上執行上行鏈路加速後,若該裝置滿足直連檢測條件;那麼將阻塞埠直接變為根埠,進入forwarding狀態
節約時間:30s
位置:所有的接入層交換機上
注:開啟後,該交換機的網橋優先順序和cost值,將倍增;迫使該裝置在預設情況下不會成為根網橋,且阻塞埠處於該裝置;故該命令只敢在接入層裝置配置
3.骨幹加速(backbonefast)
若一個阻塞埠收到次優BPDU時,將20s hold time+30s收斂,開啟骨幹加速後;省略20s的hold time
節約時間:20s
位置:所有交換機
1.3 STP的安全
1.3.1 BPDU Guard(BPDU保護)
接入層介面預設為DP(指定埠),該埠連線的是PC。若該介面的PC被更換或者被使用者模擬,成為一臺交換機,那麼可能導致網橋轉移,最終迫使網路結構發生變化。因為根網橋最佳設定應該在匯聚層,而新的結構可能改變該特性,導致網路執行不佳,流量集中於接入層裝置
1.errdisable
可以將這些介面開啟BPDU保護功能;被保護介面若收到BPDU,那麼將進行錯誤關閉狀態;進入該狀態的介面狀態和協議均down。
(1)重新喚醒該介面的方法
- 手工重啟:先關閉(shutdown)再開啟(no shutdown)
- 自動啟動:需要人配置,配置後若該介面再300s內沒有收到BPDU了,那麼將自動開啟
(2)配置位置
在接入層連線使用者的介面上,開啟BPDU保護功能
若接口出現了錯誤關閉,可以檢視導致原因
(3)檢視各種錯誤關閉的原因
針對BPDU保護出現的錯誤關閉,可以通過手工重啟,或設定自動重啟
SW1(config)#errdisable recovery cause bpduguard #當BPDU保護出現後的自動重啟
SW1(config)#errdisable recovery interval ? #預設300s收不到BPDU將自動重啟
<30-86400> timer-interval(sec) #修改計時器,最小30s
SW1(config)#spanning-tree portfast bpduguard #在接入層介面的介面上,開啟所有介面的埠加速和所有介面的BPDU保護,全域性開啟後,還需要到上行鏈路上進行BPDU保護的關閉
SW1(config)#int e0/0
SW1(config-if)#spanning-tree bpduguard disable #關閉單個介面的BPDU保護
SW1#show spanning-tree summary totals #檢視各種全域性協議的配置
2.BPDU過濾
開啟BPDU過濾後,若接入層介面收到BPDU資訊,將僅丟棄BPDU資料幀,正常轉發使用者流量
注:全域性開啟後,需要在上行鏈路手動關閉
3.保護和過濾的區別
保護和過濾除了對介面的處理方式不同,還存在一個區別:保護是拒絕接收BPDU,但可以傳送;過濾是收發均拒絕
1.3.2 根網橋保護
若網路中增添了新的交換機,其BID最優;那麼將可能搶佔網路的根網橋,導致拓撲結構發生變化。在介面開啟根橋保護後,若交換機的介面接收到了更優BPDU時,將該介面阻塞,直到該介面不再收到更優BPDU才恢復
SW2(config-if)#int e0/0
SW2(config-if)#spanning-tree guard root #介面開啟根橋保護
開啟根橋保護的介面,在接收到更優BPDU時,將阻塞,進入broken狀態,顯示與根不一致
SW2#show spanning-tree interface e0/0 detail
Port 1 (Ethernet0/0) of MST0 is broken (Root Inconsistent)
不一致介面在生成樹中的顯示:
SW2#show spanning-tree
Et0/0 Desg BKN*2000000 128.1 P2p *ROOT_Inc
查看出現不一致的介面
接入層介面---保護、過濾·、收到BPDU
根網橋保護---新連線的交換機的介面
總結:BPDU保護和過濾配置在所有的接入層連線PC的介面;
根網橋保護建議配置在新連線交換機的介面,來避免網路的重新收斂
1.4 STP的環路保護
單向鏈路故障,尤其在光纖網路,很有可能出現可以接收但不能傳送;一旦出現單向鏈路故障,網路及時存在STP,也依然可能出現環路
1.4.1 UDLD
當一根網線出現單向鏈路故障時,直接關閉該介面
IOU1(config)#udld enable #全域性開啟所有介面的UDLD
IOU1(config)#int e0/0 #在介面上開啟UDLD
IOU1(config-if)#udld enable
IOU1(config-if)#no udld enable #關閉
IOU1(config-if)#udld disable #關閉
1.4.2 LOOP GUARD
開啟後,僅針對BPDU包,識別為單向鏈路故障,先對該介面進行阻塞,然後自動恢復
1.4.3UDLD與LOOP GUARD的區別
1)UDLD被觸發後,介面被err-disable;然後需要手工重啟或自動重啟
Loop Guard被觸發後,自動阻塞然後恢復介面
2)UDLD用於處理硬體的單向問題,Loop Guard被使用者處理軟體問題(介面擁塞,CPU過載),建議兩種技術均配置