1. 程式人生 > >STP生成樹詳解

STP生成樹詳解

 

一、STP(生成樹協議)

1.1 線路冗餘

一旦在交換機上使用鏈路冗餘,那麼將出現二層的橋接環路;因為CAM是流量觸發交換機生成的, 該表預設並沒有被管理

1.1.1造成的影響

  1. 廣播風暴
  2. CAM表記錄翻滾(MAC地址表不穩定)
  3. 資料幀的重複拷貝

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;根網橋上全部為指定埠,根埠的對端一定是指定埠

選舉規則:

  1. 必須從根網橋發出的BPDU,通過該埠向外(出項)轉發時消耗的cost值,越小越優先
  2. 若出向cost值相同,比較本地的BID,越小越優先
  3. 本地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)重新喚醒該介面的方法

  1. 手工重啟:先關閉(shutdown)再開啟(no shutdown)
  2. 自動啟動:需要人配置,配置後若該介面再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過載),建議兩種技術均配置