簡介
STP(生成樹協定 SpanningTreepProtocol)能夠提供路徑備援,使用STP可以使兩個終端中隻有一條有效路徑。在實際的網絡環境中,實體環路可以提高網絡的可靠性,當一條線路斷掉的時候,另一條鍊路仍然可以傳輸資料。但是,在交換網絡中,當交換機接收到一個未知目的位址的資料幀時,交換機的操作是将這個資料幀廣播出去,這樣,在存在實體的交換網絡中,就會産生一個雙向的廣播環,甚至産生廣播風暴,導緻交換機當機。如何既有實體備援鍊路保證網絡的可靠性,又能避免備援環路所産生的廣播風暴呢?STP協定是在邏輯上斷開網絡的環路,防止廣播風暴的産生,而一旦正在用的線路出現故障,邏輯上被斷開的線路又被連通,繼續傳輸資料。
交換網絡環路
交換網絡環路會帶來3個問題:廣播風暴、同一幀的多個拷貝和交換機CAM表不穩定。
交換網絡環路的産生:
PC1和PC2通過交換機相連。網絡初始狀态時,PC1與PC2通信過程如下:
1.在網絡通信最初,PC1的ARP條目中沒有PC2的MAC位址,PC1首先會向SW1發送一個ARP廣播請求PC2的MAC位址;2.當SW1收到ARP的廣播請求後,SW1會将廣播幀從除接收端口之外的所有端口轉發出去即會從F0/1和F0/2發出;3.SW2收到廣播後,會将廣播幀從F0/2和連接配接PC2的端口轉發,同樣SW3收到廣播後,将其從F0/2端口轉發;
4.SW2收到SW3的廣播後,将其從F0/1和連接配接PC2的端口轉發,SW3收到SW2的廣播後将其從F0/1端口轉發;
5.SW1分别從SW2、SW3收到廣播幀,然後将從SW2收到的廣播幀轉發給SW3,而将從SW3收到的廣播幀發給SW2。SW1、SW2和SW3會将廣播幀互相轉發。這時網絡就形成了一個環路,而交換機并不知道,這将導緻廣播幀在這個環路中永遠循環下去。
STP工作原理
STP運作STA(生成樹算法 Spanning Tree Algorithm)。STA算法很複雜,但是其過程可以歸納為以下三個步驟:
1.選擇根網橋(Root Bridge);
1>網橋ID最小。
2.選擇根端口(Root Ports);
1>到根路徑成本最低;
2>最小的直連發送方網橋ID;
3>最小的發送方端口ID。
3.選擇指定端口(Designated Ports)。
1>根路徑成本最低;
2>所在交換機的網橋ID最小;
3>所在交換機的端口ID最小。
特别注意:選擇根端口:比較接收的BPDU!!!;選擇指定端口:比較發送的BPDU!!!。
選擇根網橋
網橋ID最小:選擇根網橋的依據是網橋ID的大小。在選擇根網橋的時候,比較的方法是看哪台交換機的網橋ID的值最小,優先級小的被選擇為根網橋;在優先級相同的情況下,MAC位址小的為根網橋。
網橋ID:是一個8Byte的字段,前面2Byte的十進制數稱為網橋優先級,後6Byte是網橋的MAC位址。
網橋優先級:用于衡量網橋在生成樹算法中優先級的十進制數,取值範圍為0-65535,預設值是32768。
網橋的MAC位址:交換機自身的MAC位址,可以使用指令show version檢視。
示例:
選擇根端口
選出了根網橋之後,網絡中的每台交換機必須和根網橋建立關聯,是以STP将開始選擇根端口。每個非根網橋上存在一個根端口,是以需要在每個非根網橋上選擇一個根端口。選擇根端口的依據有三個:
到根路徑成本最低的端口:路徑成本是兩個網橋間的路徑上所有鍊路的成本之和,根路徑成本也就是一個網橋到達根網橋的中間所有鍊路的路徑成本之和,路徑成本用來代表一條鍊路帶寬的大小,一條鍊路的帶寬越大,它的傳輸資料的成本也就越低。
最小的直連發送方網橋ID:BPDU幀是從根網橋發向根端口的,則當端口的根路徑成本相同時,以收到發來BPDU直連的網橋ID最小(端口的對端端口,即本地端口)為根端口。
最小的發送方端口ID:當直連發送方網橋ID大小相同時,也就是說有幾個位于同一交換機上的端口時,比較最小的發送方端口ID。端口ID是一個二位元組的STP參數,由一個位元組的端口優先級和一個位元組的端口編号組成。端口優先級是一個可配置的STP參數,在基于IOS的交換機上,端口優先級的十進制取值範圍是0-255,預設值是128。端口編号是catalyst用于列舉各個端口的數字辨別符,在基于IOS的交換機上,可以支256個端口。
說明:端口編号不是端口号,但是端口号低的端口,端口編号值(端口 ID)也較小。
端口ID:
選擇指定端口
選擇完根網橋和每台交換機的根端口後, 一個樹形結構已初步形成,但是,所有鍊路仍連接配接在一起,并可以都處于活動狀态,最後導緻形成環路。為了消除環路形成的可能,STP進行最後的計算,在每一個網段上選擇一個指定端口。選擇指定端口的依據有三個:
根路徑成本最低;
所在交換機的網橋ID最小;
所在交換機的端口ID最小。
注意:根網橋上的接口都是指定端口,因為根網橋上端口的根路徑成本為0。
說明:如果端口既不是根端口,也不是指定端口,那麼這個端口被阻塞(BLOCK)稱為阻塞端口。被阻塞的端口不能傳輸資料,即該鍊路成為備份鍊路。
BPDU(Bridge Protocol Data Unit 橋協定資料單元)
STP在交換機互相通信時進行操作,資料封包以橋協定資料單元(BPDU)的形式進行交換。每隔2秒,BPDU封包便向所有的交換機端口發送一次,以便交換機(或網橋)能交換目前最新的拓撲資訊,并迅速識别和檢測其中的環路。
BPDU的兩種類型
正常情況下,交換機隻會從它的Root Port上接收configuration BPDU包,但不會主動發送configuration BPDU包給Root Bridge。第二種類型的BPDU包是Topology Change Notification(TCN) BPDU,當一台交換機檢測到拓撲變化後,它就可以發送TCN給Root Bridge,注意TCN是通過Root Port向Root Bridge方向發出的。當交換機從它的designate port接收到TCN類BPDU時,它必須為其做轉發,從它自已的root port上發送出去TCN類型的BPDU包,這樣一級一級地傳到root bridge後,TCN的任務才算完成。
BPDU封包主要字段
協定ID:該值總為0。
版本号:STP的版本(為IEEE 802.1d時值為0)。
封包類型:BPDU類型(配置BPDU=0,TCN BPDU=80)。
标記域:LSB(最低有效位)=TCN标志;MSB(最高有效位)=TCA标志。
根網橋ID:根資訊由2位元組優先級和6位元組ID組成。這個資訊組合标明已經被標明為根網橋的裝置辨別。
根路徑成本:路徑成本為到達根網橋交換機的STP開銷。表明這個BPDU從根網橋傳輸了多遠,成本是多少。這個
字段的值用來決定哪些端口将進行轉發,哪些端口将被阻斷。
發送網絡橋ID:發送該BPDU的網橋資訊。由網橋的優先級和網橋ID組成。
端口ID:發送該BPDU的網橋端口ID。
計時器:計時器用于說明生成樹用多長時間完成它的每項功能。這些功能包括封包老化時間、最大老化時間、
通路時間和轉發延遲。
最大老化時間:根網橋發送BPDU後的秒數,每經過一個網橋都會遞減1,是以它的本質是到達根網橋的跳計數。
通路時間:根網橋連續發送BPDU的時間間隔。
轉發延遲:網橋在監聽學習狀态所停留的時間。
STP利用BPDU選擇根網橋的過程
1.當一台交換機第一次啟動時,假定自己是根網橋在BPDU封包中的根網橋字段填入自己的網橋ID,向外發送。
2.交換機比較接收到的BPDU封包中根網橋ID與自己的網橋ID的值哪個更小,如果接收到的BPDU中的根網橋ID值小
于自己的網橋ID,則用接收到的根網橋ID替換現有的根網橋ID,并向外轉發。如此不斷反複,最終能夠選擇出
全網公認的唯一一個根網橋。
3.收斂以後,如果又一台新的交換機加入進來,則繼續比較更網橋ID,選出新的根網橋。
STP利用BPDU确定端口的跟路徑成本
1.根網橋發送一個根路徑成本為0的BPDU封包。
2.當離根網橋最近的下一級交換機收到BPDU封包時,就把BPDU所到達的那個端口的路徑成本值與根網橋的根路徑
成本值相加。
3.鄰接交換機再以這個新的累加值作為根路徑成本,然後發送出包含此值的BPDU封包。
4.當鄰接交換機下的每一台交換機都收到這個BPDU封包時,再把随後的交換機端口路徑成本與這個值相加,依次
類推。
生成樹端口的狀态
禁用:強制關閉(實際并不屬于端口正常的STP狀态的一部分)。
轉發:可以發送和接收資料幀,也可以收集MAC位址加入到它的位址表,還可以發送BPDU封包。
學習:延遲時間15s,轉發BPDU封包的同時,學習新的MAC位址,并添加到交換機的位址清單中。
偵聽:延遲時間15s,為了使該端口加入生成樹的拓撲過程,允許接收或發送BPDU封包。
阻塞:老化時間20s,以便能偵聽到其他鄰接交換機的資訊。
生成樹協定的發展曆程
IEEE生成樹發展史:STP/802.1D ——> RSTP/802.1W ——> MISTP/MSTP/802.1S:
STP/802.1D:STP(生成樹協定/單生成樹協定 Spanning Tree Protocol)在IEEE 802.1D中定義。該協定的的原
理是按照樹的結構來構造網絡拓撲,消除網絡中的環路,避免由于環路的存在而造成廣播風暴問題。
缺點:
1.拓撲收斂慢,當網絡拓撲發生改變的時候,生成樹協定需要50秒的時間才能完成拓撲收斂;
2.不能提供負載均衡的功能,當網絡中出現環路的時候,生成樹協定簡單的将環路進行Block,這樣改鍊路
就不能進行資料包的轉發,浪費網絡資源。
CST:CST(公共生成樹 Common Spanning Tree)在IEEE 802.1Q中定義的?是IEEE 802.1D對于VLAN和STP的
解決方案。CST在生成樹收斂的時候,不考慮網絡中VLAN的存在,隻在網絡中生成和維護單個生成
樹;所有CST的BPDU作為不帶标記的幀通過原生VLAN進行傳輸。
特點:
1.交換機CPU負載較低,隻需要計算一個生成樹執行個體;
2.網絡中的STP無法按照VLAN的需求,為VLAN建立最優的STP路徑,可能導緻某些VLAN存在次優路徑;
3.備援的端口被阻塞掉之後,在每個VLAN中就無法轉發資料,會導緻無法實作網絡流量的負載均衡。
RSTP/802.1W:RSTP(快速生成樹協定 Rapid Spaning Tree Protocol)在IEEE 802.1W中定義,由802.1D發展而
來。這種協定進一步處理了網絡臨時失去連通性的問題,在網絡結構發生變化時能更快的收斂網絡。實際
上它是把減少STP收斂時間的一些措施融合在802.1D中形成新的協。它比802.1D多了兩種端口類型:預備端
口類型(Alternate Port)和備份端口類型(Backup Port),将PortFast、UplinkFast、BackboneFast等問題
都解決了,我們要做的隻是打開802.1W協定。RSTP協定可以向下相容802.1D,但是如果它們共存時802.1W
所擁有的内在的快速收斂功能将失效。
RSTP相對于STP的改進:
1.STP沒有明确區分端口狀态與端口角色,收斂時主要依賴于端口狀态的切換,RSTP比較明确的區分了端口
狀态與端口角色,為根端口和指定端口設定了快速切換用的替換端口和備份端口兩種角色,且其收斂時
更多的是依賴于端口角色的切換;
2.STP端口狀态的切換必須被動的等待時間的逾時,而RSTP端口狀态的切換卻是一種主動的協商;
3.STP中的非根網橋隻能被動的中繼BPDU,而RSTP中的非根網橋對BPDU的中繼具有一定的主動性。
優點:
1.內建了IEEE 802.1D的很多增強技術,這些增強功能不需要額外配置;
2.RSTP使用第2類和第2版BPDU,能夠與IEEE 802.1D相容;
3.RSTP能夠主動确認端口是否能安全轉換到轉發狀态,而不需要依靠任何計時器來做出判斷。
1.仍是單生成樹結構,不能做負載均衡,鍊路被阻塞後不承載任何流量造成了帶寬浪費;
2.收斂速度仍無法應對大型網絡。
MISTP/802.1S:不常用不作介紹。
MSTP/802.1S:MSTP(多執行個體生成樹協定 Multiple Spanning Tree Protocol)将環路網絡修剪成為一個無環的
樹型網絡,避免封包在環路網絡中的增生和無限循環,同時還提供了資料轉發的多個備援路徑,在資料轉
發過程中實作VLAN資料的負載均衡。MSTP相容STP和RSTP,并且可以彌補STP和RSTP的缺陷。它既可以快速
收斂,也能使不同VLAN的流量沿各自的路徑分發,進而為備援鍊路提供了更好的負載分擔機制。
1.MSTP設定VLAN映射表(VLAN和生成樹的對應關系表),把VLAN和生成樹聯系起來,通過增加“執行個體”(将多
個VLAN整合到一個集合中)這個概念,将多個VLAN捆綁到一個執行個體中,以節省通信開銷和資源占用率;
2.MSTP把一個交換網絡劃分成多個域,每個域内形成多棵生成樹,生成樹之間彼此獨立;
3.MSTP将環路網絡修剪成為一個無環的樹型網絡,避免封包在環路網絡中的增生和無限循環,同時還提供
了資料轉發的多個備援路徑,在資料轉發過程中實作VLAN資料的負載分擔;
4.MSTP相容STP和RSTP。
MST:MST(多生成樹 Multiple Spanning Tree)由IEEE 802.1S定義,是把802.1W的RST算法擴充而得到
的,MST提出了域的概念,在域的内部可以生成多個生成樹執行個體,并将VLAN關聯到相應的執行個體中,每
個VLAN隻能關聯到一個執行個體中。這樣在域内部每個生成樹執行個體就形成一個邏輯上的樹拓撲結構,在
域與域之間由CIST執行個體将各個域連成一個大的生成樹。具有相同的MST配置資訊,并且具有完全一緻
的VLAN-執行個體映射關系同時運作MSTP協定的橋組成一個域。每個域的内部有一個主執行個體成為IST,域和
域之間有CST連接配接,這樣整個網絡拓撲就有CST和IST功能組成了一個樹形拓撲,這個樹就是CIST。各
個VLAN内的資料在不同的生成樹執行個體内進行轉發,這樣就提供了負載均衡功能。
CIST:CIST(公共和内部生成樹 Common and Internal Spanning Tree)是連接配接一個交換網絡内所有交換機
的單生成樹,由IST和CST共同構成。CIST是每個MST區域的IST執行個體、互連MST區域的CST執行個體和802.1D
單生成樹橋的一個集合。CIST與MST區域内的IST執行個體是一緻的,并與MST區域外部的CST也是一緻的。
IST:IST(内部生成樹 Internal Spanning Tree)是MST區域内的一棵生成樹。IST和CST共同構成整個交換
機網絡的生成樹CIST。
CST:CST(公共生成樹 Common Spanning Tree)見上。
說明:執行個體就是多個VLAN的集合,通過多個VLAN捆綁到一個執行個體中去的方法可以節省通信開銷和資源占用率。
Cisco生成樹發展史:PVST ——> PVST+:
PVST:PVST(每VLAN生成樹 Per VLAN Spanning Tree)為每個VLAN建構一棵單獨的生成樹執行個體,可以獨立地為每
個VLAN控制哪些端口要轉發資料,進而能實作對每個VLAN作二層負載平衡,進而確定能夠使用所有的鍊
路,而不會過度使用某條鍊路。一般情況下PVST要求在交換機之間的中繼鍊路上運作Cisco的ISL,并允許
一個VLAN中繼當被其它VLANs的阻塞時将一些VLANs轉發。PVST不相容STP、RSTP。
PVST+:PVST+(增強的每VLAN生成樹 Per VLAN Spanning Tree Plus)對PVST做了改進,它允許在相同網絡中同
時存在CST和PVST,使CST可以将資訊傳給PVST,以便相容其它廠商的生成樹協定。 具體做法是在Vlan 1上
運作CST,在其他VLAN上運作PVST。VLAN上PVST+的每個執行個體都有單獨的根橋,這個根橋向網絡中的所有其
它交換機傳播與該VLAN相關的生成樹資訊。PVST+也是每個VLAN一棵STP,也可以實作第二層的負載均衡
PVST+可以使用802.1Q封裝,并在Catalyst 802.1Q的Trunks鍊路上是自動啟動的。PVST+将區域分成三種類
型:PVST區域、PVST+區域、單生成樹區域。Cisco交換機預設是運作該協定的。
優點:
1.支援ISL和IEEE802.1Q中繼 ;
2.相容STP、RSTP;
3.支援Cisco專有的STP擴充,并添加了BPDU防護和根防護增強功能。
PVST和PVST+的缺點:
1.由于每個VLAN都需要生成一棵樹,PVST BPDU的通信量将正比于Trunk的VLAN個數。
2.在VLAN個數比較多的時候,維護多棵生成樹的計算量和資源占用量将急劇增長。特别是當Trunk了很多VLAN的
接口狀态變化的時候,所有生成樹的狀态都要重新計算,CPU将不堪重負。是以,Cisco交換機限制了VLAN的使
用個數,同時不建議在一個端口上Trunk很多VLAN。
3.由于協定的私有性,PVST和PVST+不能像STP和RSTP一樣得到廣泛的支援,不同廠家的裝置并不能在這種模式下
直接互通,隻能通過一些變通的方式實作,例如Foundry的IronSpan。IronSpan預設情況下運作的是STP協定,
當某個端口收到PVST BPDU時,該端口的生成樹模式會自動切換成PVST與PVST+相容模式。一般情況下,網絡的
拓撲結構不會頻繁變化,是以PVST/PVST+的這些缺點并不會很緻命。但是,端口Trunk大量VLAN這種需求還是
存在的。
總結:
1.STP/RSTP是基于端口的,PVST/PVST+是基于VLAN的,MSTP是基于執行個體的。
2.第一代生成樹協定:STP/RSTP,沒有VLAN認知能力,不支援二層負載均衡;
1>STP/IEEE 802.1D版本最為流行;
2>RSTP/IEEE 802.1W向下相容STP。
第二代生成樹協定:PVST/PVST+具有VLAN認知能力,支援二層負載均衡;
1>PVST不相容STP/RSTP協定;
2>PVST+為PVST的改進版,相容STP/RSTP。
第三代生成樹協定:MSTP/MISTP。
1>MSTP/IEEE 802.1S具有VLAN認知能力,可以實作負載均衡,可以實作類似RSTP的端口狀态快速切換,可以捆
綁多個VLAN到一個執行個體中以降低資源占用率MSTP可以很好地向下相容STP/RSTP協定。
3.實際應用中多使用:PVST、PVRST、MSTP;Cisco預設開啟PVST+,而PVRST、MSTP則需要另外打開。
簡單地說:
CST是公共生成樹協定,由IEEE 802.1Q定義?該标準規定所有的VLAN隻有單個STP,減少了交換機性能的消耗。
PVST是Cisco私有,作用是一個VLAN有一個STP。優點可以做負載平衡等;缺點不能和使用CST的裝置交換BPDU。
PVST+就可以使PVST和CST之間交換BPDU,其他方面跟PVST一樣。
MST是多生成樹。每個VLAN一個STP,如果有很多VLAN,則會有很多STP,這樣會消耗交換機的性能。然而其中許
多的STP實際上是可以共用的,MST就是把多個VLAN集合起來,進而使用一個STP執行個體。避免STP太多或者太少。
實驗
RSTP
指令:
sw1(config)#spanning-tree mode rapid-pvst //啟用RSTP模式生成樹
sw1 (config-if-range)#duplex full //設定鍊路為全雙工模式
sw1(config-if-range)#spanning-tree link-type point-to-point //設定生成樹鍊路類型為點到點
sw3(config-if-range)#spanning-tree portfast //啟用速端口
說明:試驗中交換機之間是Trunk鍊路,自動協商為全雙工,RSTP會自動把它們的鍊路類型辨別為點到點類型,
我們在這裡手動強制配置了一遍。
sw1(config)#spanning-tree mode rapid-pvst
sw1(config)#int range f0/14 - 15
sw1(config-if-range)#switchport mode trunk
sw1 (config-if-range)#duplex full
sw1(config-if-range)#spanning-tree link-type point-to-point
sw2 (config)#spanning-tree mode rapid-pvst
sw2(config)#int range f0/14 - 15
sw2(config-if-range)#switchport mode trunk
sw2 (config-if-range)#duplex full
sw2(config-if-range)#spanning-tree link-type point-to-point
sw3 (config)#spanning-tree mode rapid-pvst
sw3(config)#int range f0/13 - 14
sw3(config-if)#switchport mode trunk
sw3 (config-if-range)#duplex full
sw3(config-if-range)#spanning-tree link-type point-to-point
sw3(config)#int range f0/1 - 2
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 1
sw3(config-if-range)#spanning-tree portfast
實驗調試
sw1#show spanning-tree vlan 1 //檢視生成樹的配置
sw1#show spanning-tree vlan 1 int f0/14 detail //檢視該接口Vlan 1生成樹詳細資訊
sw1#show spanning-tree summary
sw1#show spanning-tree root
RSTP的接口類型:
邊界接口(Edge Port):如果接口上啟用Portfast,該接口就是邊界接口;
指令:sw1 (config-if)#spanning-tree portfast
點到點接口(Point-to-Point Port):如果接口是全雙工,該接口就是點到點接口;
指令:sw1 (config-if)#duplex full
sw1(config-if)#spanning-tree link-type point-to-point
共享接口(Share Port):如果接口是半雙工,該接口就是共享接口;
指令:sw1 (config-if)#duplex half
sw1(config-if)#spanning-tree link-type shared
說明:雖然RSTP會自動識别鍊路類型,但是在接口上手動指明鍊路類型和接口類型有利于RSTP的運作。
PVST 和 STP保護
sw1(config)#spanning-tree mode pvst //啟用PVST模式生成樹
sw1(config)#spanning-tree vlan 1 root primary //設定sw1為Vlan 1的主根橋
sw1(config)#spanning-tree vlan 2 root secondary //設定sw1為Vlan 2的次根橋
sw3(config-if-range)#spanning-tree portfast //配置速端口
sw3(config)#spanning-tree uplinkfast //配置上行速鍊路
sw3(config)#spanning-tree backbonefast //配置快速主幹
sw3(config-if)#spanning-tree vlan 1 cost 18 //設定鍊路開銷
sw3(config-if)#spanning-tree vlan 1 port-priority 112 //設定端口優先級
sw1(config-if)#spanning-tree guard root //配置Guard Root
sw3(config-if)#spanning-tree bpduguard enable //配置BPDU Guard
說明:
①“spanning-tree vlan 1 root primary”和“spanning-tree vlan 1 root secondary”指令實際上是宏命
令,執行該指令時交換機會先取出目前根橋的優先級,然後把本交換機的優先級設定為比目前根橋優先級大或
者小4096的值;使用“show running-config”指令時,在配置檔案中是看不到該指令的。
②設定鍊路開銷和端口優先級時,注意根據SPA算法配置在正确的交換機上。
③配置Guard Root後,如果該端口收到比現有根橋更優的BPDU幀,為了保護現有根橋,該端口将進入Blocking;
④配置BPDU Guard後,如果該端口收到BPDU幀,為了保護現有網絡,該端口将會立即關閉,要重新開啟端口需要
先移除BPDU源,在端口下執行“shutdown”和“no shutdown”指令。
sw1(config)#vtp domain PVST
sw1(config)#vlan 2
sw1(config)#spanning-tree mode pvst
sw1(config)#spanning-tree vlan 1 root primary
sw1(config)#spanning-tree vlan 2 root secondary
sw1(config)#spanning-tree backbonefast
sw1(config)#int f0/14
sw1(config-if)#spanning-tree guard root
sw2(config)#spanning-tree mode pvst
sw2(config)#spanning-tree vlan 2 root primary
sw2(config)#spanning-tree vlan 1 root secondary
sw2(config)#spanning-tree backbonefast
sw2(config)#int f0/14
sw2(config-if)#spanning-tree guard root
sw3(config-if-range)#switchport mode trunk
sw3(config)#spanning-tree mode pvst
sw3(config-if)#spanning-tree bpduguard enable
sw3(config)#int range f0/3 - 4
sw3(config-if)#switchport access vlan 2
sw3(config)#spanning-tree uplinkfast
sw3(config)#spanning-tree backbonefast
sw3(config)#int f0/13
sw3(config-if)#spanning-tree vlan 1 cost 18
sw3(config-if)#spanning-tree vlan 1 port-priority 112
①網橋優先級必須是4096的倍數,預設為32768,相當于“spanning-tree vlan 1 priority 32768”指令;
②百兆鍊路成本預設為19,相當于“spanning-tree vlan 1 cost 19”;
③端口優先級必須是16的倍數,預設為128,相當于“spanning-tree vlan 1 port-priority 112”指令;
④每個VLAN的優先級又有所不同,為“優先級 + VLAN ID”;
⑤執行“spanning-tree vlan 1 root primary”指令後,優先級設定為24576,該指令相當于“spanning-tree
vlan 1 priority 24576”指令,當不同交換機輪換使用“root primary”參數時,優先級設定為目前主根橋
優先級遞減4096,到0為止;
⑥執行“spanning-tree vlan 1 root secondary”指令後,優先級設定為28672,該指令相當于“spanning-
tree vlan 1 priority 28672”指令,不同交換機輪換使用“root secondary”參數時,優先級不變。
⑦如果sw3強制成為根橋,那麼sw2和sw1的F0/14端口将進入阻塞狀态;
⑧如果sw3的F0/1 - 4端口接收到BPDU幀,些端口将被立即關閉。
sw3#show spanning-tree vlan 1
sw1#show spanning-tree
sw1#debug spanning-tree bpdu //檢視STP發送和接收的BPDU幀情況
sw1#debug spanning-tree events //檢視STP事件
注意:
①在實際中,當要顯式控制根橋和根口等時,不要利用交換機的MAC位址來控制,如果交換機更換或者網絡中加
入新的交換機,由于這些交換機的MAC位址并不能事先知道,可能導緻STP和我們預想的不一緻。
②沒有環路時可以使用“no spanning-tree vlan 1”指令關閉某個VLAN的STP;但是建議不要做此動作,因為
STP對交換機的壓力通常是可以忍受的。
PortFast、UplinkFast和BackboneFast:
PortFast(速端口):用于接入層交換機或連接配接到路由器接口的配置;作用主要用在以太網接口一但有裝置入,
端口立即進入Forwarding狀态,不必經過Listening、Learning的30s。
配置要求:通常用于Access接口,該接口不能用于接入交換機,隻能接入計算機或路由器等。
配置指令:sw3(config)#int range f0/1 - 2
sw3(config-if-range)#spanning-tree portfast
在通常情況下接口先進入Listening,然後經過Learning最後才成為Forwarding,這期間需要30秒。這對于某些場合是不能忍受的(如DHCP自動擷取時,如果端口啟動時間過長将導緻用戶端得不到IP位址),配置PortFast特性後,一旦有裝置接入端口立即進入Forwarding狀态,端口不參與STP計算,但依然運作STP協定,如果檢測到環路也能夠将Forwarding轉換為Blocking。
說明:确定網絡沒有環路時,Trunk接口也可以配置PortFast,使用“spanning-tree portfast trunk”指令。
UplinkFast(上行速鍊路):用于接入層交換機的配置;作用主要用在接入層交換機到主幹交換機的主鍊路故障
時,能立即切換到備份鍊路的Forwarding,不必經過最大老化時間、Listening、Learning的50s或者30s。
配置要求:必須用于接入層交換機,該交換機至少有一個端口處于blocking,鍊路失效必須發生在根端口時
才有意義。
配置指令:sw3(config)#spanning-tree uplinkfast
沒有配置UplinkFast時,交換機如果能直接檢測到主鍊路故障,那麼另外的備份鍊路接口會先進入Listening,然後經過Learning最後才成為Forwarding,這期間需要30秒。然而如果到上行交換機的主鍊路上存在一個Hub,那麼當對端端口故障時,無法直接檢測到故障,需要等待10個周期沒有收到對端的BPDU(每個周期2s),20s後才能進入Listening、然後經過Learning最後才成為Forwarding,這樣總共50s才能進入Forwarding。是以,STP重新收斂的時間通常需要30-50s。配置UplinkFast後會把優先級增加到49152,端口開銷增加3000,如果主鍊路故障,那麼備份鍊路能很快進入Forwarding。由于配置後提高了交換機上所有端口的路徑開銷,是以交換機不适合作為根網橋。
注意:該指令隻能用于接入層,不能配置在彙聚和核心層;Catalyst交換機不支援以VLAN為基礎配置該指令。
BackboneFast(快速骨幹):用于所有交換機的配置;可以在不是相鄰網絡的故障中縮短網絡收斂的時間,即
省去了由Blocking到Listening的20s的最大老化時間。
配置要求:需要在所有交換機上都進行配置。
配置指令:sw3(config)#spanning-tree backbonefast
BackboneFast是對UplinkFast的一種補充,UplinkFast能夠檢測直連鍊路的失效,BackboneFast是用來檢測間接鍊路的失效。當啟用了BackboneFast的交換機檢測到間接鍊路失效後,會使阻塞端口立即直接進入Listening,而不經過20s的最大老化時間,然後經過Learning最後成為Forwarding,隻需要30s就進入Forwarding,比之前的50s少了20s。
總結:PVST+為每一個VLAN生成一棵生成樹,在預設情況下,所有生成樹的根橋都是同一交換機。設定主次根橋為了優化交換網絡實作負載均衡;配置速端口為了使接入終端的端口快速進入轉發狀态;配置上行速鍊路為了實作備份的上行鍊路快速恢複;配置快速主幹可以縮短不相鄰網絡的故障的收斂時間。
Root Guard
配置Guard Root功能是為了防止使用者擅自在網絡中接入交換機并成為新的根橋,進而破壞了原有的STP樹。該功能通常在接入層上對外開放的接口下配置,這些接口将拒絕接收比現有根橋更優的BPDU幀。
Bpdu Gard
配置BPDU Guard功能是為了防止在那些已經配置PortFast指令的端口上接入交換機,進而導緻環路的産生。因為PortFast端口通常用于接入計算機,這些端口一但激活就立即進入Forwarding,配置BPDU Guard功能後可以防止這些端口收到BPDU幀。
端口恢複:
可以配置端口自動恢複,來恢因BPDU Guard而關閉的端口。
sw3(config)#errdisable recovery cause bpduguard
sw3(config)#errdisable recovery interval 60
MST
sw1(config)#spanning-tree mode mst //啟用MST生成樹模式
sw1(config)#spanning-tree mst configuration //進入MST配置模式
sw1(config-mst)#name MST /命名MST名字
sw1(config-mst)#revision 1 //配置MST的Revision号
sw1(config-mst)#instance 1 vlan 1 – 2 //把vlan 1、2的生成樹映射到執行個體1
sw1(config-mst)#instance 2 vlan 3 – 4 //把vlan 3、4的生成樹映射到執行個體2
sw1(config-mst)#exit //退出配置才能生效
sw1(config)#spanning-tree mst 1 priority 8192 //配置sw1為MST執行個體1的主根橋
sw1(config)#spanning-tree mst 2 priority 12288 //配置sw1為MST執行個體2的次根橋
①隻有MST的名字和Revision号相同的交換機才是在同一個MST區域;
②執行個體0是預設的執行個體,預設時所有的VLAN都映射到該執行個體上。
sw1(config)#vlan 3
sw1(config)#vlan 4
sw1(config)#spanning-tree mode mst
sw1(config)#spanning-tree mst configuration
sw1(config-mst)#name MST
sw1(config-mst)#revision 1
sw1(config-mst)#instance 1 vlan 1 – 2
sw1(config-mst)#instance 2 vlan 3 – 4
sw1(config-mst)#exit
sw1(config)#spanning-tree mst 1 priority 8192
sw1(config)#spanning-tree mst 2 priority 12288
sw2(config)#spanning-tree mode mst
sw2(config)#spanning-tree mst configuration
sw2(config-mst)#name MST
sw2(config-mst)#revision 1
sw2(config-mst)#instance 1 vlan 1 – 2
sw2(config-mst)#instance 2 vlan 3 – 4
sw2(config-mst)#exit
sw2(config)#spanning-tree mst 2 priority 8192
sw2(config)#spanning-tree mst 1 priority 12288
sw3(config)#spanning-tree mode mst
sw(3config)#spanning-tree mst configuration
sw3(config-mst)#name MST
sw3(config-mst)#revision 1
sw3(config-mst)#instance 1 vlan 1 – 2
sw3(config-mst)#instance 2 vlan 3 – 4
sw3(config-mst)#exit
sw3(config)#int range f0/5 – 6
sw3(config-if)#switchport access vlan 3
sw3(config)#int range f0/7 – 8
sw3(config-if)#switchport access vlan 4
sw1#show spanning-tree mst configuration //檢視MST的配置