天天看點

stp

第一部分 STP基礎

STP概述

生成樹協定(STP,Spanning-Tree Protocol)是一種2層協定,通過一種專用的算法來發現網絡中的實體環路并産生一個邏輯的無環(loop-free)拓撲結構。

   STP生成了一個無環的樹形結構,包括可以在整個2層網絡範圍内擴充的葉和枝。

如上圖這樣一個高備援度的網絡,如果沒有 STP 的存在,将會産生大量的廣播環路,嚴重影響性能。生成樹協定和其他協定一樣,是随着網絡的不斷發展而不斷更新換代的。在生成樹協定發展過程中,老的缺陷不斷被克服,新的特性不斷被開發出來。

l 廣播環路

當主機 A 發送一個目的位址為 FF-FF-FF-FF-FF-FF 的廣播幀時,該 frame 将傳至 CAT-1 和 CAT-2,當達到CAT-1 的端口1/1時,CAT-1按照标準透明橋接算法将資料幀從除去入端口,将其泛洪到其他每個端口,包括 CAT-1的1/2端口,從端口1/2發出的資料幀會到達下方以太網中的所有節點,包括CAT-2的端口1/2。同樣CAT-2也做這樣的處理,此後廣播封包就會在CAT-1和CAT-2之間的鍊路成幾何級數的增長。

廣播環路比路由環路更危險,在以太網幀結構隻包含兩個MAC位址、一個類型字段和一個循環備援校驗(CRC),并将網絡層的包作為資料部分的内容,它沒有像路由器那樣,存在一個 TTL 域,對于一個路由環路而言,一個封包跳過 255 條後,就會被丢棄。而廣播路由環路的封包将永遠不會被丢棄。同時反複廣播,其封包數量呈幾何級數增長。

* 橋接表受損

除了廣播風暴外,單點傳播幀也會引起網絡瓶頸。當主機A 此前已經擁有一條主機B的 ARP條目,希望ping主機B,但主機B臨時從網絡移除,并且交換機上相應于B的橋接表項已經被删除。假定任何一個交換機都沒有運作STP,則當幀到達CAT-1 1/1後,CAT-1找不到目的位址,則CAT-1 1/2産生泛洪,同時CAT-2收到後,将主機A的位置改變到一個錯誤的端口上。此後幀還沿反方向循環。在端口1/1和1/2之間反複改變,導緻CPU負載極大。

生成樹算法

算法(algorithm)就是一個公式或者解決特定問題的一組步驟。算法通常依賴于一組規則,有明确的開始和結束。

l*網橋ID

STP的特征就是生成樹算法。生成樹算法是根據一組參數來進行判别。網橋ID(BID,Bridge ID)是一個8位元組的字段,包含一個數字有序對,如圖,頭2個位元組的十進制數成為網橋優先級(Bridge Priority),後6位元組是MAC位址(16進制)。

網橋優先級是一個用來衡量網橋在生成樹算法中優先權的十進制數,2的16次方,取值為0-65535。預設值為32768。

BID的MAC位址是交換機的MAC位址之一。每個交換機都有一個MAC位址池,每個STP執行個體使用一個,作為按VLAN生成樹執行個體(每個VLAN一棵)的BID。

具體算法:

BID 的比較方式如下,假設(s,t)和(u,v)分别為兩個 BID,數對中的第一個值為優先級,第二個為MAC位址,則比較規則如下:

If    s < u    then    ( s,t ) < ( u,v )

If    ( s = u )&&( t < v )    then    ( s,t ) < ( u,v )

BID值越小的網橋,其優先級越高

*路徑開銷

路徑開銷用來衡量網橋之間距離的一種方式。路徑開銷是兩個網橋間某條路徑上所有鍊路開銷的總和,IEEE 802.1D最初定義鍊路開銷是使用1000Mbit/s 除以Mbit/s為機關的鍊路帶寬。例如10BASE-T鍊路的開銷為 100,快速以太網和 FDDI 為 10。随着 Gbit/s 以太網和其它高速技術的出現,反映了該定義的一些缺陷。

鍊路開銷使用整數存儲,為了解決高帶寬網絡按原有标準計算出現小數的問題(10Gbit/s  按原标準為0.1)。IEEE改變了原有的反比例模型,按如下2種方式定義新的鍊路開銷。

1Gbit/s的CatOS系統使用短整型,10Gbit/s帶寬以上的CatOS和新版的IOS使用長×××

*端口ID

端口ID(PID,Port ID),用來确定到根交換機的路徑。由16bit的子串決定,其中包括6bit的端口優先級和10bit的端口号。基于IOS交換機,兩部分都是8位。

端口優先級是一個可配置的STP參數。在CatOS交換機上,端口優先級的十進制取值範圍是0-63,預設為32。基于IOS的交換機上,端口優先級的十進制取值範圍是0-255,預設值為128。

Port ID的比較方式如下,假設(s,t)和(u,v)分别為兩個Port ID,數對中的第一個值為端口優先級,         

第二個值為MAC 位址,則比較規則如下

PID越小的端口優先級越高

案例:

sw2#show spanning-tree interface fa 0/3 detail

    Port 23 (FastEthernet0/23) of VLAN0001 is forwarding  

    Port path cost 100, Port priority 128, Port Identifier 128.23.

    Designated root has priority 32769, address 0008.2059.9e40

    Designated bridge has priority 32769, address 0009.4376.2300

    Designated port id is 128.3, designated path cost 19

    Timers: message age 0, forward delay 0, hold 0

    Number of transitions to forwarding state: 1

    Link type is shared by default

    BPDU: sent 238527, received 0

PID中端口号定義采用數字編号的方式,一般 基于IOS的交換機上端口号空間為256 個端口。例如slot 0上的2 3 号口,其端口号為23,則Port ID如上所示為  128.23

STP過程

* STP判定和BPDU交換

Spanning-tree算法主要依靠BID,路徑開銷和端口 ID,在建立一個無環路的拓撲時,STP執行如下 4 個步驟:

1. 選取根交換機

2. 計算到根交換機的最小路徑開銷

3. 确定最小發送者BID

4. 确定最小的端口ID

為做出最佳判決,STP需要保證所有參與的網橋都獲得正确的資訊,網橋間的資訊互動采用網橋協定資料單元(BPDU)的基于 2層的frame 來傳遞STP資訊。網橋通過如上4 步來選擇每個端口上所看到的“最佳 BPDU”網橋會村除從每個端口收到的最佳BPDU。在判定最優時,網橋會比較在此端口上收到的所有BPDU,以及會此端口上發送的BPDU。每收到一個BPDU,網橋都會根據4步過程進行檢查,以判定是否比目前儲存的此端口的最佳BPDU更好,如果有新的BPDU(或者本地生成的BPDU)更好,就會替換舊值。

當一個網橋被激活後,其所有的端口每隔2s(預設hello時間)發送一次BPDU封包 。如果收到其它端口比自己更好的BPDU,則本 BPDU。如果20s(預設最大時間Max Age)的時間沒有從鄰居收到更好的BPDU,則本地端口将重新發送BPDU。最大生存時間是最佳BPDU逾時的時間。

*STP收斂的步驟

生成樹算法比較複雜,其收斂于一個無拓撲的初始過程包含

1. 選舉根交換機(Root Bridge)

2. 選舉根端口(Root Ports)

3. 選舉指定端口(Designated Ports)

在網絡第1次“初始”的時候,所有的網橋都會泛洪混合的 BPDU 資訊。網橋開始執行前面讨論過的STP 4個判斷過程。使得網橋追蹤到一組BPDU,形成整個網絡(Cisco 是一個vlan一個STP執行個體,故cisco的生成樹範圍定義在一個vlan中)。

I. 選舉根橋

STP要求每個網橋配置設定一個唯一的辨別(BID),BID通常由優先級(2bytes)和網橋MAC位址(6bytes)構成。根據 IEEE802.1d 規定,優先級值為 0-65535,預設的優先級為 32768(0x8000)。當交換機最初啟動時,它假定自己就是根交換機,并發送次優的 BPDU,當交換機接收到一個更低的 BID 時,它會把自己正在發送的BPDU的根BDI替換為這個最低的根BID,所有的網橋都會接收到這些BPDU,并且判定具有最小BID 值的網橋作為根網橋。

如下圖所示,假定 A,B的優先級均為32,768,C 的優先級為40,000。各個交換機如何知道哪個交換機的BID最小呢?這是通過交換BPDU實作的。BPDU是網橋之間用于交換生成樹資訊的一種特殊的資料幀。

          根據選舉規則,選擇較小的優先級的交換機,則選擇出Cat-A和Cat-B。在A , B優先級相同的時候,查找最小的MAC位址AA-AA-AA-AA-AA-AA.于是Cat-A被選舉成為根交換機.

BPDU的結構:

II. 選擇根端口

在選舉根橋結束後,将選舉根端口,一個網橋的根端口是按照路徑開銷最靠近根交換機的端口。  每一個非根交換機都将選出一個根端口。  根交換機每個接口均為根端口。網橋還是使用開銷(cost)的概念來衡量接近程度。與某些路由協定的度量一樣,STP對接近程度的度量也不使用跳數,而是通過“根路徑開銷”---到達根橋的鍊路開銷之和來衡量。      

其選擇過程如下:

1) 根交換機Cat-A發送BPDU,他們所包含的根路徑開銷為0,當Cat-B收到這些BPDU後,迅速将端口 1/1 的路徑開銷累加到所收到 BPDU 的根路徑開銷。假定為FastEthernet,則加上端口1/1的開銷19,Cat-B 1/1  到根路徑的開銷為  19。

2) Cat-B使用内部值19  ,并從端口1/2發送一個根路徑開銷為19 的BPDU

3) 當Cat-C從Cat-B收到這些BPDU将計算自己到根網橋的開銷為38(19+19)。

4) Cat-C也在1/1 上收到來自A 的BPDU。同時計算1/1到根網橋的開銷為19。

5) 根據最靠近根橋原則,C選出根端口為1/1。

6) Cat-C将繼續向下遊交換機公布其到根端口的開銷為19

III. 選擇指定端口

在橋接式的網絡中,每個網段都有一個指定端口。一個網段的指定端口(Designated Port)是連接配接到網段中的一個橋接端口,它既向根橋發送資料,也通過此網段從根橋接收資料。在選舉根端口的同時,基于到根網橋的的根路徑成本的累加值的指定端口選擇過程也在進行。包含某一網段的指定端口的網橋稱為該網段的指定網根網橋的所有活動端口都成為指定端口,指定端口的選擇也是基于到根橋的根路徑開銷。這條規則的例外是:當根網橋自身存在第一層實體環路的情況,例如:根網橋的兩個端口連接配接到了同一台集線器上,或者兩個端口通過交叉線連接配接到了一起。

Segment  1 中,根交換機 Cat-A 上 1/1 的路徑開銷為 0,Cat-B 上 1/1 的開銷為 19。故 Cat-A 的 1/1為指定端口。Segment  2 中,同樣 Cat-A 上的 1/2 被選舉為指定端口。在 Segment  3 中。Cat-B 和 Cat-C上的1/2口,端口路徑開銷均為19。  此時将根據最小發送者的BID來确定,此時确定B的端口為指定端口,在某些情況下,例如Cisco的交換機每個vlan一個生成樹執行個體,此時,将會出現BID 相同的情況,則最後比較端口ID,端口ID 在同一台交換機上定義是必定不相同的,最小端口ID的端口被定義為指定端口。

STP狀态

在确定根端口,指定端口和非指定端口後,STP準備建立一個無環路拓撲。STP配置根端口和指定端口來轉發流量,非指定端口阻塞流量。STP一共有5種狀态:阻塞、監聽、學習、轉發和禁用。STP狀态可以看作是等級制的,網橋端口從阻塞狀态開始并按照順序到轉發狀态。禁用狀态是管理性的關閉STP狀态。它不是正常STP端口過程的一部分。在交換機初始化之後,所有端口由阻塞狀态開始。

5種狀态:

狀态轉換過程:

* 阻塞狀态(Blocking)

一個端口處于阻塞狀态将會有如下特征:

  # 丢棄所有連接配接的網段上收到的資料幀,或者通過交換而來内部轉發的幀 。

  #接收到的BPDU直接傳給系統子產品。

  #沒有位址資料庫。

  #不傳遞從系統子產品收到的BPDU

  #接收響應網絡管理消息,但不傳遞他們

  #需時20s

*偵聽狀态(Listening)

如果一個網橋在啟動或者在一定時間沒有收到BPDU後立即認為自己是根交換機,端口進入偵聽狀态,偵聽狀态是一種不傳使用者資料的STP狀态,僅在端口發送和接收BPDU封包。努力确定一個活動的拓撲,該狀态有如下特征:

  # 接收到的BPDU直接傳給系統子產品。

  # 沒有位址資料庫。

  # 不傳遞從系統子產品收到的BPDU

  # 接收響應網絡管理消息

  # 需時15s

選舉根橋,根端口和指定端口發生在偵聽狀态期間。 在指定端口選舉中失敗的端口成為非指定端口,并回到阻塞狀态,剩下的指定端口或者根端口在15s後進入學習狀态。

*學習狀态(Learning)

學習狀态是網橋不傳遞使用者資料幀但建構橋接表并收集諸如資料幀源vlan等資訊的一種STP狀态。當網橋收到一個幀, 他将源MAC位址和端口放入橋接表, 當資料轉發開始後學習狀态減少了所需的泛洪次數需求。學習狀态的生存時間同樣受轉發延遲定時器的控制,預設為15s 一個處于學習狀态的端口特性:

  #丢棄所有連接配接的網段上收到的資料幀。

  #  丢棄從其它端×××換來的需要轉發的幀

  #接收,處理傳遞從系統子產品收到的BPDU

  #需時15s

*轉發狀态(Forwarding)

處于一個學習狀态端口在轉發延遲定時器逾時後仍然是根端口或者指定端口,則将進入轉發狀态,轉發狀态特性如下:

  # 轉發所有連接配接的網段上收到的資料幀。

  # 轉發從其它端×××換來的需要轉發的幀

  # 将位置狀态資訊包含進自己的位址資料庫

  # 處理從系統子產品收到的BPDU

sw1#debug spanning-tree events  (打開調試生成樹狀态資訊)

我們将交換機1的fa0/24端口的開銷調整為8,使得fa0/24為指定端口

sw1(config)#interface f0/24

sw1(config-if)#spanning-tree vlan 200 cost 8

sw1(config-if)#end

----------------------------------------------------------

03:51:32: STP: VLAN0200 new root port Fa0/24, cost 8

03:51:32: STP: VLAN0200 Fa0/24 -> listening  

(f0/24原來處于blocking狀态)

03:51:32: STP: VLAN0200 sent Topology Change Notice on Fa0/24

03:51:32: STP: VLAN0200 Fa0/23 -> blocking

03:51:47: STP: VLAN0200 Fa0/24 -> learning

(listening ->learning 15s時間)

03:52:02: STP: VLAN0200 Fa0/24 -> forwarding   

(learning時間為15s)

STP時間

    STP運作受3個定時器的控制:

· HELLO時間(根網橋發送配置BPDU的時間間隔) 預設2s 這個值實際上隻控制配置BPDU在根網橋上生成的時間,其他網橋則把它們從根網橋接收到的BPDU向外通告。換言之,如果在2-20秒内由于網絡故障而沒有收到新的BPDU,非根網橋在這段時間内就停止發送周期BPDU。如果這種情況持續超過20s,也就是超過最大存活期,非根網橋就使原來存儲的BPDU無效,并開始尋找新的根端口。

· 轉發延遲(偵聽狀态或學習狀态的持續時間) 預設15s 網橋在偵聽狀态和學習狀态所花費的時間。隻用轉發延遲就控制了轉發和學習兩個狀态。15秒這個值是假定網絡的最大規模為7段網橋跳數;BPDU的最大丢失個數為3以及HELLO時間間隔為2秒的情況下得到的。這個轉發延遲計時器同樣可以用來控制網橋表在網絡拓撲發生變化後的生存時間。

· 最大存活期(存儲BPDU的時間) 預設20s 就是網橋在丢棄BPDU前用來備份存儲它的時間。

STP的BPDU格式

STP BPDU幀格式随着所使用的協定類型變化。下圖顯示了IEEE 802.1D生成樹協定的BPDU幀格式。

Cisco專有的BPDU幀格式:

标準幀格式

n 幀控制域總是01

n 目的位址域指定了在橋街租位址表中所規定的目的位址,在IEEE STP BPDU 幀中,這個

n 位址為0x800143000000

n 原位址域指明了交換機所使用的基本MAC 位址

n 路由選擇資訊域僅在Cisco STP BPDU中有,RIF必須為0x0200

n 邏輯鍊路控制域控制所有STP BPDU的幀類型,這個域被設定為0x424203

BPDU内各域的格式。除端口ID域外,兩種STP的BPDU内所有的域都是共同的。在IEEE和Cisco STP BPDU幀中,端口ID域定義了起源網橋的傳送端口。

協定标志(2) 版本(1) 消息類型(1) 标志(1) 根ID(8) 根路徑開銷(4) 網橋ID(8) 端口ID(2) 消息生存時間(2) 最大生存時間(2) Hello周期(2) 轉發延遲(2)

協定标志、版本和消息類型域總是被置為0

标志域包括下列的一種:

n 拓撲變化(TC)位,該信号訓示拓撲變化并指明該BPDU是一個拓撲變化通告(TCN)BPDU。該位沒有置位,則說明BPDU是一個配置BPDU。

n 拓撲變化确認(TCA)位,該位被置位表示确認收到一個TC位被置位的配置資訊

   其他域包括:

n 根ID域通過列出2位元組的優先級和緊跟的6位元組ID指明根交換機

n 根路經開銷域指明從網橋發送該配置消息的網橋到跟交換機的路徑開銷

n BID域指明發送該消息的網橋的優先級和ID

n 端口ID域表明該配置消息的發送端口号(IEEE或者Cisco)。該域使得由于多個網橋相連而産生的環路可以被檢測并糾正

n 消息生存時間域訓示自從根發送完目前配置消息已經過了多長時間

n 最大生存時間訓示目前配置消息何時被删除

n hello時間域訓示根網橋配置消息的時間間隔

n 轉發延遲域訓示在拓撲變化後網橋在轉到新狀态之前需要等待多長時間。如果網橋轉換的過快,可能并非所有網絡鍊路都已經準備好了改變狀态,于是會導緻環路。

拓撲變化和STP

STP通過使用一組定時器來避免在網絡中出現橋接環路,如果一個穩定的STP程序出現變化可能需要30~50s 的時間才能收斂到新的拓撲(Max Age 20s + 2次forward delay 15s)。當網絡在收斂過程時,那些已經不可達的實體位址仍舊存在于交換表中,交換機仍然會嘗試向無法達到的裝置轉發資料幀。STP在拓撲變化的機制中,要求迅速清空交換表以删除不可達的實體位址。防止交換機将一些資料幀轉發到那些不可達的裝置。

下圖為一個拓撲變化過程:

1. 交換機D注意到拓撲變化

2. 交換機D從根端口發出一個拓撲變化通知(TCN,Topology Change Notice)BPDU,最終目的地為根交換機。TCN BPDU通過 BPDU中值為 0x80 的一個位元組類型域表明。網橋持續發送 TCN  BPDU直到該網段的指定網橋響應一個TCA“拓撲變更響應(Topology Change Acknoledgment)”配置BPDU,類型TCA是通過1位元組标志域中的最高比特位指明的。

3. 該網段的指定網橋(Cat-B)發送一個 TCA 配置 BPDU 到源網橋(Cat-D)。交換機 B 也從根端口發送一個目的地為根交換機的TCN BPDU

4. 當根交換機收到(上遊)TCN BPDU,就發送配置BPDU通告發生了一個拓撲變化。根交換機在配置中保持拓撲變化的時間等于轉發延遲加最大生存時間.(15s+15s+20s)

5. 一個網橋收到(下遊)從根交換機發出的拓撲變化配置消息,用轉發延遲定時器(15s)使全部位址表項逾時。這使得比預設裝置通常需要5分鐘更快的時間來使整張表逾時快了很多。網橋将持續這一個過程知道不再從根交換機收到拓撲變化配置消息

* 備份根交換機

通常拓撲變化中,如果根橋出現問題,将會極大地影響網絡的 STP 收斂時間,此時,cisco 采用了一種備份根橋的政策。如下圖:

其實質上是根據根網橋選舉規則進行處理的,配置指令為:

Spaning-tree vlan vlan-id root  primay

Spaning-tree vlan vlan-id root  secondary

這2條指令的作用是修改BID中的 Priority 值,該指令僅在Catalyst 6500,4500,3750,3550,2950上支援

配置STP

l 預設配置:

特性                                                   預設設定

---------------------------------------------------------------------------

使能狀态                                             隻有vlan1

生成樹模式                                          PVST+(RSTP和MSTP不啟動)

交換機優先級                                      32768

生成樹端口優先級(基于每個端口) 128

生成樹端口開銷                                 1000Mbps:4

                                                              100Mbps:19

                                                                10Mbps:100

生成樹VLAN優先級(基于每個VLAN) 128

生成樹VLAN開銷                              1000Mbps:4

                                                               100Mbps:19

                                                                 10Mbps:100

生成樹定時器                                      Hello時間: 2秒

                                                              轉發延遲時間: 15秒

                                                              最大生存時間: 20秒

                                                             傳輸資料包: 6個BPDUs包

sw1#show spann vlan 1

VLAN0001

  Spanning tree enabled protocol ieee

  Root ID    Priority    32769

             Address     000b.5f2c.2080

             Cost        19

             Port        23 (FastEthernet0/23)

             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)

             Address     000d.6564.0280

             Aging Time 300

Interface        Role Sts Cost      Prio.Nbr Type

---------------- ---- --- --------- -------- -------------------------------

Fa0/18           Desg FWD 19        128.18   P2p

Fa0/23           Root FWD 19        128.23   P2p

Fa0/24           Altn BLK 19        128.24   P2p

配置STP的模式

交換機支援3種模式:PVST+、RSTP和MSTP,預設設定為PVST+

配置過程:

1) 進入全局配置模式  configure terminal

2) 設定STP模式

spanning-tree mode [pvst|rapid-pvst|mst]

3) 驗證結果

show spanning-tree summary

show spanning-tree interface 接口

show running-config

配置根交換機

1) 全局模式 configure terminal

2) 設定STP根交換機

spanning-tree vlan vlan号 root primary

[diameter 網絡直徑|hello-time 秒]

         diameter:用來指定網絡的直徑。指定了網絡直徑後,交換機會自動針對此直徑設定最優的

                  hello時間、轉發延遲和最大時間,這能大大減少收斂時間。

         Hello-time:人工指定hello時間覆寫自動計算值

     3) 驗證配置

         show spanning-tree detail

sw1(config)#do show span vlan 200         (檢視vlan 200的生成樹狀态)

VLAN0200

  Root ID    Priority    32968

  Bridge ID  Priority    32968  (priority 32768 sys-id-ext 200)

可以看出這台交換機sw1不是根交換機,它的fa0/23端口是根端口,fa0/24處于阻塞,它的優先級為32768+vlan号200=32968

我們現在開始配置,将sw1調整為根交換機

sw1(config)#spanning-tree vlan 200 root primary

sw1#show span vlan 200

  Root ID    Priority    24776

             This bridge is the root         (這裡顯示是Vlan200的根交換機)

  Bridge ID  Priority    24776  (priority 24576 sys-id-ext 200)

                        (它會自動調整交換機優先級為24576)

             Aging Time 15

Fa0/23           Desg FWD 19        128.23   P2p

Fa0/24           Desg FWD 19        128.24   P2p

配置備份根交換機

會将預設的交換機的優先級32768變為28762,作為根交換機的一種備份

spanning-tree vlan vlan号 root second

diameter:用來指定網絡的直徑。指定了網絡直徑後,交換機會自動針對此直徑設定最優的hello時間、轉發延遲和最大時間,這能大大減少收斂時間。取值範圍為2到7

Hello-time:人工指定hello時間覆寫自動計算值,取值範圍為1到10

3) 驗證配置

show spanning-tree detail

配置端口優先級

1) 進入全局模式 configure terminal

2) 進入接口模式 interface 接口

3) 如果接入端口

spanning-tree port-priority 優先級

優先級:取值範圍0-240,預設為128,可以使用0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240

           如果是中繼接口

spanning-tree vlan vlan号 port-priority 優先級

4) 驗證配置

show spanning-tree interface 端口

show spanning-tree vlan vlan号

sw2#show span vlan 200

             This bridge is the root   

可以看到sw2是根交換機,因為它的MAC位址低

我們同時也看到交換機sw1的vlan200的情況,其中fa0/23是根端口,fa0/24是處于阻塞狀态

Sw1#conf  t

Sw1(config)#interface f0/24

Sw1(config-if)#spanning-tree vlan 200 port-priority 64

我們将端口fa0/24的優先級調整為64,預設為128

Sw2#conf  t

Sw2(config)#interface f0/24

Sw2(config-if)#spanning-tree vlan 200 port-priority 64

檢視修改後的情況

             Port        24 (FastEthernet0/24)

Fa0/23           Altn BLK 19        128.23   P2p

Fa0/24           Root FWD 19         64.24   P2p

發現現在fa0/24是根端口,它的端口優先級為64,而fa0/23處于了阻塞狀态了

配置路徑開銷

如果想改變幀從某個交換機到根所經過的路徑,需要仔細地計算目前的路徑開銷,然後改變目标路徑上的端口開銷。路徑開銷是通過配置STP路徑上的各個端口開銷來規定的。端口開銷值小的端口被選做用于幀的轉發,如果開銷相同的,就選擇端口号小的端口

選擇過程:(優先級依次遞減)

路徑開銷(path cost)

網橋ID (Bridge ID)

端口優先級(Port Priority)

2) 進入接口模式

interface 接口

3) 設定STP端口路徑開銷

接入接口

   spanning-tree cost 開銷值

   開銷值為:1-200000000

中繼接口

   spanning-tree vlan vlan号 cost 開銷值

   vlan号:1-4094

   開銷值:1-200000000

4) 驗證配置

我們接着前面的例子繼續,前面我們修改了sw1的fa0/24的端口優先級從128調整為64,使其成為了轉發端口,現在我們配置端口路徑開銷

sw1(config)#interface f0/23

sw1(config-if)#spanning-tree vlan 200 cost 8  我們将vlan 200的端口開銷調整為8)

sw1#show spanning-tree vlan 200

             Cost        8

Port        23 (FastEthernet0/23)    (發現端口轉變為fa0/23)

Fa0/23           Root FWD 8         128.23   P2p

Fa0/24           Altn BLK 19         64.24   P2p

我們可以看到雖然fa0/24的端口優先級為64,但因為fa0/23端口的路徑開銷小,是以選擇了fa0/23

配置vlan的優先級

先要了解mac位址縮減(MAC address reduction)和網橋ID優先級(Bridge ID Priority)的概念(和網橋優先級有差別)。有些交換機支援4096個VLAN,MAC位址縮減将STP的MAC位址需求從每個VLAN或者每個MISTP執行個體一個減少為一台交換機一個,在PVST+下最多支援4096個VLAN,或者16個有唯一辨別符的MISTP執行個體,而且不需要增加交換機所需的MAC位址的數量。

啟用MAC縮減後,存儲在生成樹BPDU中的網橋辨別符就包含了被稱為系統ID擴充的額外字段,它和網橋優先級組合後,系統ID擴充作為VLAN或者MISTP執行個體的唯一辨別符。

未啟用MAC位址縮減的網橋辨別符

       ----------------------------------------------------------------

       |    網橋優先級(2位元組)    |  MAC位址(6位元組) |

       -----------------------------------------------------------------

啟用MAC位址縮減的網橋辨別符

       ------------------------------------------------------------------------------------------------

       |   網橋優先級(高4位)  |  系統ID擴充(低12位) |   MAC位址(6位元組) |

       |                                                 網橋ID優先級                                                      |

      -------------------------------------------------------------------------------------------------

   是以要注意,當啟用了MAC位址縮減時,高4位用于确認網橋的優先級,這就意味着有16種可能的網橋ID優先級:0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440。

1) 進入全局模式 configure terminal

2) 進入接口模式 interface 接口

3) 配置某vlan的優先級

spanning-tree vlan vlan号 priority 優先級

優先級取值:4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440

我們一般還是通過spanning-tree vlan vlan号 root primary指令來設定

配置STP定時器

在根交換機上可以配置hello、最大生存時間、轉發延遲時間和傳輸延遲計數

1) 進入全局配置模式 configure terminal

2) 配置hello時間,預設為2秒

spanning-tree vlan vlan号 hello 秒數

秒數取值:1-10秒,預設為2秒

3) 配置轉發延遲時間

spanning-tree vlan vlan号 forward-time 秒數

秒數取值:4-30秒,預設為15秒

4) 配置最大生存時間

spanning-tree vlan vlan号 max-age 秒數

秒數取值:6-40秒,預設為20秒

5) 配置傳輸延遲計數

spanning-tree transmit hold-count bpdu數

bpdu數:是指1秒鐘内傳輸bpdu資料包數,取值為1-20,預設為6

6) 驗證配置

sw1(config)#spanning-tree vlan 200 hello-time 1

sw1(config)#spanning-tree vlan 200 forward-time 10

sw1(config)#spanning-tree vlan 200 max-age 15

sw1#show spann vlan 200

             This bridge is the root

             Hello Time   1 sec  Max Age 15 sec  Forward Delay 10 sec

  CCIE-LAB題目(YY)

在SW1上把fa0/7劃分到vlan14中,并且把SW1指定為VLAN14的根交換機,且VLAN14的max-age為16秒,forward-delay為14秒,hello為2秒

配置指令

SW1

   Conf t

   Interface fa0/7

Switchport access vlan 14

Exit

   Spanning-tree vlan 14 root primary

   Spanning-tree vlan 14 hello-time 2

   Spanning-tree vlan 14 max-age 16

   Spanning-tree vlan 14 forward-time 14

驗證

   show spanning-tree vlan 14

-----------------------------------------------------

CCIE-LAB題目(V148)

High-priority traffic is running on VLAN_C. Make sure, once the corresponding switch ports have been activated, the time spent listening for a topology change is shortened to 5 seconds.

配置:

spanning-tree vlan 22 forward 5

配置負載

可以根據STP的一些特性實作基于STP的負載均衡,如下圖:

方法一:修改端口優先級

我們按照如上圖,進行配置:

1) 進入全局模式 config terminal

2) 進入中繼接口 interface 接口1

3) 修改端口優先級

spanning-tree vlan 8-10 port-priority 10

4) 進入另中繼接口 interface 接口2

5) 修改中繼端口的優先級

spanning-tree vlan 3-6 port-priority 10

方法二:修改端口路徑開銷

1) 進入全局模式 config terminal

2) 進入中繼接口 interface 接口1

3) 修改端口路徑開銷

spanning-tree vlan 2-4 cost 30

4) 進入另中繼接口 interface 接口2

5) 修改中繼端口的優先級

6) spanning-tree vlan 8-10 cost 30

CCIE-LAB(版本148)

題目要求:

Load balance between the trunks, meeting the following requirements:

· Use trunk 1 for VLAN_BB1(VLAN 10) and VLAN_BB2(VLAN 40) traffic.

· Use trunk 2 for VLAN_B(VLAN 22) and VLAN_C(VLAN 62).

If one of the trunks should fail, all VLAN traffic should still be send across the trunk.

Restrict the traffic crossing the trunk to the VLANs used in this lab.

Do NOT change the path cost.

配置:SW1和SW2

interface f0/23

  switch trunk allowed vlan 10,22,40,62

  spanning-tree vlan 10 port-priority 64

  spanning-tree vlan 40 port-priority 64

interface f0/24

  switchport trunk allowed vlan 10,22,40,62

  spanning-tree vlan 22 port-priority 64

  spannint-tree vlan 42 port-priority 64

第二部分 STP特性

Portfast快速端口

  Portfast快速端口是一個Catalyst的一個特性,能使交換機或中繼端口跳過偵聽學習狀态而進入STP轉發狀态,在基于IOS交換機上,PortFast 隻能用于連接配接到終端工作站的接入端口上。

   當一個裝置連接配接到一個端口上時,端口通常進入偵聽狀态。當轉發延遲定時器逾時後,進入學習狀态,當轉發延遲定時器第二次逾時,端口進入到轉發或者阻塞狀态,當一個交換機或中繼端口啟用PortFast後,端口立即進入轉發狀态,但交換機檢測到鍊路,端口就進入轉發狀态(插電纜後的2s) 。如果端口檢測到一個環路同時又啟用了PortFast 功能。它就進入阻塞狀态。重要的是要注意到PortFast 值在端口初始化的時候才生效。如果端口由于某種原因又被迫進入阻塞狀态,随後又需要回到轉發狀态,仍然要經過正常的偵聽 。

啟用PortFast的主要原因是防止啟動周期小于30s的PC需要和交換機端口從未連接配接狀态進入到轉發狀态,一些網卡直到 MAC 層軟體驅動被實際加載之後才會啟動鍊路。這種情況下就會導緻一些故障,例如DHCP環境下,這可能會出現一些問題。

1) 進入全局配置模式  configure terminal

2) 選擇端口  interface 端口

3) 設定該端口啟用portfast功能

   spanning-tree portfast [trunk]

   如果你要在trunk端口上啟用portfast,必須添加trunk關鍵字。

          show spanning-tree interface 端口 portfast

          -----------------------------------------------

          VLAN0001         enabled

          Show spanning-tree summary

          ------------------------------------

          Switch is in pvst mode

          Root bridge for: none

          EtherChannel misconfig guard is enabled

          Extended system ID           is enabled

          Portfast Default             is enabled

          PortFast BPDU Guard Default  is disabled

          Portfast BPDU Filter Default is disabled

          Loopguard Default            is disabled

          UplinkFast                   is disabled

          BackboneFast                 is disabled

          Pathcost method used         is short

    conf t

    spanning portfast default  (所有的接入端口)

    interface f0/24

    spanning portfast trunk

    end

    show spanning summary

    show runn inter f0/24

    Building configuration...

    Current configuration : 87 bytes

    !

    interface FastEthernet0/24

      switchport mode trunk

      spanning-tree portfast trunk

CCIE-LAB(V142)

在sw1的F0/18口連接配接一台PC,使其不需要經過spanning-tree的學習過程,直接forwarding,不會自動協商成trunk。

       Interface f0/18

          Spanning-tree portfast

UplinkFast

在 STP 收斂過程中,一些終端站點可能會不可達,這是基于站點所連接配接交換機端口的 STP 狀态而定。這打亂網絡連接配接,于是關鍵是減少STP的收斂時間和網絡受影響的時間。快速級聯鍊路(UplinkFast)就是用來加快STP收斂的。UplinkFast是一項交換機的功能,用于在鍊路或者交換機失效時加速新的根端口的選擇。

當鍊路或交換機故障,或 STP 重新配置後,UplinkFast可以加速選擇一個新的根端口。根端口立即進入轉發狀态,Uplinkfast 通過減少最大更新速率來限制突發多博流量。定義了更新分組發送的最大速率,預設為150分組/分鐘

Uplinkfast 對于網絡邊緣的布線間交換機非常有用。他不适用于骨幹裝置。UplinkFast 在直連鍊路故障後提供快速的收斂能力,并通過上行鍊路組在備援。

如上圖所示,A 和根交換機相連的端口為轉發狀态,另一個為阻塞狀态。當到根交換機的上行鍊路斷開後,如果配置了Uplinkfast到另一台上層交換機的鍊路将直接轉入轉發狀态,而不需要經過減聽和學習狀态,如圖,這個轉換需要經過大約1-5秒。

一旦交換機将以個備用端口轉為轉發狀态,交換機開始在該端口發送僞多點傳播幀,本地橋接标中每個表項都對應一個僞多點傳播幀,每個本地網橋表中的表項(除了與發生故障的根端口相關聯的表項)都對應一個僞多點傳播幀。預設時,每100毫秒大約發送15個僞多點傳播幀。它使用工作站位址做為源位址,目的位址01-00-0C-CD-CD-CD作為目的位址。 如果原來的交換機恢複連接配接,交換機在等待2倍轉發延遲時間再加上5s後才将該端口轉入轉發狀态。這是的鄰接端口有時間經過偵聽和學習狀态才轉入轉發狀态。

注意,

1) 啟用了uplinkfast後,它會影響此交換機的所有的VLAN。不能在單個VLAN上配置UplinkFast。

2) 在已經配置了網橋優先級的VLAN上不能啟動Uplinkfast。要在配置了網橋優先級的VLAN上啟動uplinkfast,必須首先将vlan上的交換機優先級恢複到預設值(使用指令no spanning-tree vlan vlan号 priority)

3) 啟動了UplinkFast時,所有VLAN的網橋優先級都被設為49152,并且如果不改變預設的路徑開銷,所有接口和VLAN trunk的路徑開銷都會增加3000

1) 進入全局配置模式 configure terminal

2) 啟用UplinkFast

     spanning-tree uplinkfast [max-update-rate 每秒傳輸包]

     取值為每秒0到32000個資料包,預設值為150。通常這個值就足夠了。

3) 驗證配置

     show spanning-tree uplinkfast

     show spanning-tree summary

    #show spanning summary

    ----------------------------

    Switch is in pvst mode

    Root bridge for: none

    EtherChannel misconfig guard is enabled

    Extended system ID           is enabled

    Portfast Default             is enabled

    PortFast BPDU Guard Default  is enabled

    Portfast BPDU Filter Default is disabled

    Loopguard Default            is disabled

    UplinkFast                   is disabled

    BackboneFast                 is enabled

    Pathcost method used         is short

Name                   Blocking Listening Learning Forwarding STP Active

---------------------- -------- --------- -------- ---------- ----------

VLAN0001                     1         0        0          2          3

VLAN0010                     1         0        0          1          2

VLAN0020                     1         0        0          1          2

VLAN0100                     1         0        0          1          2

VLAN0200                     1         0        0          1          2

VLAN0201                     1         0        0          1          2

6 vlans                      6         0        0          7         13

    #conf t

    (config)#spanning uplinkfast

    #show span  uplinkfast

    UplinkFast is enabled

    Station update rate set to 150 packets/sec.

    UplinkFast statistics

    -----------------------

    Number of transitions via uplinkFast (all VLANs)            : 0

    Number of proxy multicast addresses transmitted (all VLANs) : 0

    Name                 Interface List

    -------------------- ------------------------------------

    VLAN0001             Fa0/23(fwd), Fa0/24

    VLAN0010             Fa0/23(fwd), Fa0/24

    VLAN0020             Fa0/23(fwd), Fa0/24

    VLAN0100             Fa0/23(fwd), Fa0/24

    VLAN0200             Fa0/23(fwd), Fa0/24

    VLAN0201             Fa0/23(fwd), Fa0/24

    #Show span summary

    PortFast BPDU Guard Default  is disabled

    UplinkFast                   is enabled

    BackboneFast                 is disabled

    #debug spanning uplinkfast

    (config)#int f0/23

    (config-if)#switchport mode access

00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0001 FastEthernet0/24 root port id new: 128.24 prev: 128.23

00:26:40: %SPANTREE_FAST-7-PORT_FWD_UPLINK: VLAN0001 FastEthernet0/24 moved to Forwarding (UplinkFast).

00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/18

VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/FastEthernet0/23) cur state forwarding role uplink

00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0001 port-id 8017

00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0010 FastEthernet0/24 root port id new: 128.24 prev: 128.23

00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0010 port-id 8017

00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0020 FastEthernet0/24 root port id new: 128.24 prev: 128.23

00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0020 port-id 8017

00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0100 FastEthernet0/24 root port id new: 128.24 prev: 128.23

00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0100 port-id 8017

00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0200 FastEthernet0/24 root port id new: 128.24 prev: 128.23

00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0200 port-id 8017

00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0201 FastEthernet0/24 root port id new: 128.24 prev: 128.23

00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0201 port-id 8017

00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/24

VLAN0001 is: uplink enabled new root FastEthernet0/24 (me)prev root exists(8017/<none>) cur state forwarding role uplink

VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/<none>) cur state forwarding role uplink

00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/23

VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/<none>) cur state blocking role looped

00:26:40: %SPANTREE-7-RECV_1Q_NON_TRUNK: Received 802.1Q BPDU on non trunk FastEthernet0/23 VLAN1.

00:26:40: %SPANTREE-7-BLOCK_PORT_TYPE: Blocking FastEthernet0/23 on VLAN0001. Inconsistent port type.

00:26:55: %SPANTREE-2-UNBLOCK_CONSIST_PORT: Unblocking FastEthernet0/23 on VLAN0001. Port consistency restored.

00:26:55: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/23

00:26:56: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/24

00:26:56: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/18

00:27:31: STP FAST: UPLINKFAST: make_forwarding on VLAN0001 FastEthernet0/23 root port id new: 128.23 prev: 128.24

00:27:31: %SPANTREE_FAST-7-PORT_FWD_UPLINK: VLAN0001 FastEthernet0/23 moved to Forwarding (UplinkFast).

#show spanning uplinkfast

UplinkFast is enabled

Station update rate set to 150 packets/sec.

UplinkFast statistics

-----------------------

Number of transitions via uplinkFast (all VLANs)            : 7

Number of proxy multicast addresses transmitted (all VLANs) : 32

Name                 Interface List

-------------------- ------------------------------------

VLAN0001             Fa0/23(fwd), Fa0/24

VLAN0010             Fa0/24(fwd)

VLAN0020             Fa0/24(fwd)

VLAN0100             Fa0/24(fwd)

VLAN0200             Fa0/24(fwd)

VLAN0201             Fa0/24(fwd)

BackboneFast

BackboneFast快速骨幹是Catalyst交換機在跟端口或阻塞端口從指定網橋收到一個劣質(inferor)的BPDU時會起動的一種特性。次級BPDU用來辨別一個既是根橋又是指定網橋的交換機。當一個交換機收到一個劣質 BPDU,就以為這該交換機的一個非直接鍊路出現故障。也就是說,一個指定網橋已經丢失到根交換機的連接配接。按照 STP 規則,因為所有配置的最大生存時間(20秒), 交換機會忽略所有的劣質的BPDU。Backbonefast的作用就是欺騙這20秒的延遲。當交換機接收到了次級BPDU時,交換機會判斷是否有到達根橋的其他路徑。

有兩種情況需要考慮:

1) 如果劣質BPDU 到達一個阻塞端口,則交換機上的根端口和其他阻塞端口成為到根交換機的備選路徑

2) 如果劣質BPDU 到達根端口,所有的阻塞端口都會成為到根交換機的潛在備用。

   如果劣質BPDU 到達根端口,且沒有阻塞端口,交換機将自己定義為根交換機。如果交換機存在備

用路徑,它适用備用路徑傳送一種新的協定,通常情況下該模式會節約 20s的時間。

如上圖:當L1 Down時,SWB 會發送一個劣等BPDU,告訴 SWC,我SWB 是Root,SWC 經過和SWA溝通(使用Root Link Query BPDU查詢),SWA 告訴SWC,我SWA還活着呢。然後SWC告訴 SWB,SWA還活着,它還是Root。

BackboneFast應用在所有的VLAN中,不支援令牌環VLAN

2) 啟用BackboneFast

    spanning-tree backbonefast

    show spanning-tree backbonefast

----------------------------------------------------

BackboneFast is enabled

BackboneFast statistics

Number of transition via backboneFast (all VLANs)           : 0

Number of inferior BPDUs received (all VLANs)               : 0

Number of RLQ request PDUs received (all VLANs)             : 0

Number of RLQ response PDUs received (all VLANs)            : 0

Number of RLQ request PDUs sent (all VLANs)                 : 0

Number of RLQ response PDUs sent (all VLANs)                : 0

BPDU保護

BPDU保護僅用在PortFast模式。它被網絡設計者用來加強STP域邊界。進而保持與其的活動拓撲。在啟用STP PortFast端口之後的裝置被禁止影響STP拓撲。對于配置了portfast特性的接口,它不應當接收到BPDU,如果配置了PortFast特性的接口接收了BPDU,那就表示了無效的配置,可能就會産生橋接環路,通過配置BPDU保護後,配置了PortFast的端口如果收到BPDU将會把端口狀态調整到Err-Disable.如下是一個資訊:

2000 May 12 15:13:32 %SPANTREE-2-RX_PORTFAST:Received BPDU on PortFast enable port. Disabling 2/1

2000 May 12 15:13:32 %PAGP-5-PORTFROMSTP:Port 2/1 left bridge port 2/1

如下圖所示,A的優先級為8192,為該vlan的根橋,B的優先級為16

繼續閱讀