天天看點

生成樹協定(STP)原理與配置PVST+實作負載均衡

交換網絡環路的産生

     在實際網絡環境中,實體環路可以提高網絡的可靠性,當一條線路斷掉時,另一條線路仍然可以傳輸資料。但是,當交換機收到廣播請求時,交換機就根據轉發原理(交換機從除收到該廣播幀之外的所有端口轉發廣播幀),形成了一個環路,這種廣播幀會越來越多,最終形成廣播風暴,導緻網絡癱瘓。這種廣播風暴隻有在實體環路消失時才可能停止。

    但是環狀的實體線路能夠為網絡提供備份線路,增強網絡的可靠性,這在網絡設計中是必要的,是以,這就需要一種解決方法,一方面能夠保證網絡的可靠性,另一方面還要防止廣播風暴的産生。

STP協定就是用來解決這個問題的。STP協定并不是斷掉實體環路,而是在邏輯上斷開環路,防止廣播風暴的産生。

STP簡介

   STP(Spanning Tree Protocol,生成樹協定)就是把一個環形的結構改變成一個樹形的結構。STP協定就是用來将實體上存在環路的網絡,通過一種算法,在邏輯上阻塞一些端口,來生成一個邏輯上的樹形結構。當線路發生故障時,被阻塞的線路就重新激活,使資料從這條線路正常傳輸。

生成樹算法

   生成樹協定運作生成樹算法(Spanning Tree Algorithm,STA)。生成樹算法很複雜,但是其過程可以歸納為以下三個步驟:

第一步:選擇根網橋(Root Bridge)

第二步:選擇根端口(Root Ports)

第三步:選擇指定端口(Designated Ports)

網橋:交換機的前身,由于STP是在網橋基礎上開發的,是以現在交換機的網絡中仍然沿用網橋這一術語。在Cisco教程裡習慣稱為“網橋”,在這指的就是“交換機”。

1.選擇根網橋(在一個環形網絡中,可以出現多個根網橋(有多個VLAN的時候,或者做負載均衡的時候),預設隻有一個)

   選擇根網橋的依據是網橋ID,網橋ID是一個八位元組的字段,前兩個位元組的十進制數稱為網橋優先級,後兩個位元組是網橋的MAC位址。

  網橋優先級是用于衡量網橋在生成樹算法中優先級的十進制數,取值範圍為0-65535,預設值是32768.

  網橋ID中的MAC位址是交換機自身的MAC位址,可以使用指令show version在交換機版本資訊中檢視交換機自身的MAC位址。

  * 按照生術數算法的定義,當比較某個STP參數的兩個取值時,值小的優先級高。是以,在選擇根網橋的時候,比較的方法是看哪台交換機的網橋ID的值最小,優先級小的被選擇為根網橋,在優先級相同的情況下,MAC位址小的為根網橋。

2.選擇根端口(在每個非根網橋上選擇一個)

   選出了根網橋之後,網絡中的每台交換機必須和根網橋建立某種關聯,是以STP将開始選擇根端口的過程。根端口存在于非根網橋上,需要在每個非網橋上選擇一個根端口。

選擇根端口的依據按照順序依次如下:

(1) 到根網橋最低的根路徑成本

(2) 直連的網橋ID最小

(3) 端口ID最小(直連對端的網橋端口ID最小的端口所對應的端口)

  根路徑成本是兩個網橋間的路徑上所有線路的成本之和,也就是某個網橋到達根網橋的中間所有線路的路徑成本之和。

  路徑成本用來代表一條線路帶寬的大小,一條線路的帶寬越大,它傳輸資料的成本也就越低。

  端口ID是一個二位元組的STP參數,由一個位元組(8位)的端口優先級和一個位元組(8位)的端口編号組成。

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

  端口編号是Catalyst用于列舉各個端口的數字标示符。在基于IOS的交換機上,可以支援256個端口。端口編号不是端口号,但是端口号低的端口,端口編号值也較小。

  * 在STP選擇根端口的時候,首先比較交換機端口的根路徑成本,根路徑成本低的為根端口。當根路徑成本相同的時候,比較連接配接的交換機的網橋ID值,選擇網橋ID值小的作為根端口;當網橋ID相同的時候,比較端口ID值,選擇較小的作為根端口。

注意:在比較端口ID值時,比較的是接收到的對端的端口ID值。

3.選擇指定端口(在每條鍊路上選擇一個)

   選擇完根網橋和每台交換機的根端口後,一個樹形結構已初步形成,但是,所有的線路仍連接配接在一起,并可能都處于活動狀态,最後導緻形成環路。

    為了消除環路形成的可能,STP進行最後的計算,在每一個網段上選擇一個指定端口。選擇指定端口的依據與根端口相同,按順序有以下三個:

(1)根路徑成本較低

(2)所在的交換機的網橋ID的值較小

(3)端口ID的值較小

  * 在STP選擇指定端口的時候,首先比較同一網段上端口中根路徑成本最低時,也就是将到達根網橋最近的端口作為指定端口;當根路徑成本相同的時候,比較這個端口所在的交換機的網橋ID值,選擇一個網橋ID值小的交換機上的端口作為指定端口;當網橋ID相同的時候,也就是說,有幾個位于同一交換機上端口時,比較端口ID值,選擇較小的作為指定端口。

注意:和選擇根端口不同,在比較端口ID值時,比較的是自身的端口ID值。

生成樹算法驗證 

  在交換機上使用指令檢視生成樹

   Switch# show  spanning-tree            

橋協定資料單元(BPDU)

   交換機之間通過BPDU(橋協定資料單元,Bridge Protocol Data Unit)來交換網橋ID、根路徑成本等資訊。交換機從端口發送出一個BPDU幀,使用該端口本身的MAC位址作為源位址。交換機本身并不知道它周圍是否還有其他的交換機存在。是以,BPDU幀利用了一個STP多點傳播位址(01-80-c2-00-00-00)作為它的一個目的位址,使之能到達相鄰的,并處于STP偵聽狀态的交換機。

  每隔兩秒,便向所有的交換機端口發送一次BPDU封包,以便交換機(或網橋)能交換目前最新的拓撲資訊,并迅速識别和檢測其中的環路。

1.BPDU的兩種類型

(1) 配置BPDU,用于生成樹計算。

(2) 拓撲變更通告(Topology Change Notification,TCN)BPDU,用于通告網絡拓撲的變化。

2.BPDU封包字段

  BPDU中包含根網橋ID、根路徑成本、發送網橋、端口ID和計時器等,下面是對BPDU幾個關鍵字段作用的解釋。

(1) 根網橋ID:由一個二位元組優先級和一個六位元組網橋MAC位址組成。這個資訊組合表明已經被標明為根網橋的裝置辨別。

(2) 根路徑成本:說明這個BPDU從根網橋傳輸了多遠,成本是多少。這個字段的值決定哪些端口将進行轉發,哪些端口将被阻斷。

(3) 發送網橋ID:這是發送BPDU的網橋資訊,由網橋的優先級和網橋MAC位址組成。

(4) 端口ID:由一個位元組的端口優先級和一個位元組的端口編号組成。

(5) 計時器:計時器用于說明生成樹用多長時間能完成它的每項功能。這些功能包括封包老化時間、最大老化時間、通路時間和轉發延遲。

3.STP利用BPDU選擇根網橋的過程

   根網橋的選擇是一個持續、反複進行的過程,它沒兩秒觸發一次,檢查BPDU的根網橋ID是否發生了變化、網橋是否有網橋ID值更低的交換機加入進來。

STP的收斂

1.生成樹端口的狀态

   生成樹協定在交換機中自動運作,在交換機開機的時候可以看到,交換機的訓示燈顯示為***,并且大約有30S的時間不能轉發資料,這時交換機是在做STP計算。直到交換機的STP計算完畢,有些端口可以轉發資料,有些端口被阻塞,也就是網絡收斂後,交換機才開始轉發資料。并且,當網絡的拓撲發生變化的時候,交換機還要重新運作STP計算,形成新的邏輯的拓撲結構。

   在STP運算過程中,交換機的每一個端口都必須依次經曆好幾種狀态,如圖所示:

2. 生成樹計時器

   STP在交換機互相發送BPDU封包時,盡力形成一個無環路的拓撲。BPDU從一台交換機傳到另一台交換機時,總要花費一定的時間。另外,當拓撲改變(如線路或根網橋故障)的消息從網絡的一側傳送到另一側時,也要經曆一定的傳播延遲。由于存在這些延遲,是以需要為交換機設定足夠的時間來完成BPDU的轉發和生成樹的運算,因襲,在交換機内部設定了一些計時器來控制每個階段的時間長度。

   STP利用三種計時方法來确定一個網絡正确的收斂。現将STP計時器及它們的預設值描述如下:

* Hello時間:網橋發送配置BPDU封包之間的時間間隔。IEEE802.1q标準規定的預設通路時間為兩秒。

* 轉發延遲:一個交換機端口在Listening(偵聽)和Learning(學習)狀态所花費的時間間隔,它的預設值各為15S。

* 最大老化時間:交換機在丢失BPDU封包之前存儲它的最大時間。

偵聽和學習都是生成樹所實施的過渡狀态,用來強迫端口等待來自其他交換機上的所有BPDU。典型的端口過渡如下:

A.從阻塞到偵聽(20s)

B.從偵聽到學習(15s)

C.從學習到偵聽(15s)

  當啟用STP時,VLAN上面的每台交換機在加電以後都經過從給阻塞到偵聽、學習的過渡狀态。

  STP計時器可以用指令予以配置和調整。不過,如不是經過認真考慮和規劃,建議不要輕易改變計時器的預設值。

STP與VLAN的關系

VLAN與生成樹之間的關系主要有以下幾種:

1.IEEE的CST(Common Spanning Tree,通用生成樹)

2. Cisco的PVST(Per VLAN Spanning Tree,每VLAN生成樹)

3.Cisco的PVST+(Per VLAN Spanning Tree Plus,增強的每VLAN生成樹)

4. IEEE的MST(Multiple Spanning Tree,多生成樹)

  其中,CST不考慮VLAN,以交換機為機關運作STP(整個交換網絡生成一個STP執行個體),交換機中劃分VLAN不會産生廣播環路。但是由于CST不考慮VLAN,是以經過STP計算後會阻塞其中的一個端口。

PVST是Cisco私有的協定,PVST為每個虛拟區域網路運作單獨的生成樹執行個體(每個VLAN生成一個STP執行個體)。

PVST為每個VLAN運作獨立的一個生成樹執行個體,能優化根網橋的位置,能為所有的VLAN提供最優路徑(因為VLAN的拓撲結構各不相同)。

  但是,PVST也不是完美的,主要缺點如下:

1.為了維護針對每個VLAN而生成的生成樹,交換機的使用率(如CPU負載)會更高。

2. 為了支援各個VLAN的BPDU,需要占用更多的Trunk線路帶寬。

3. PVST與IEEE的CST不相容,使得運作PVST的Cisco交換機不能與其他廠家的交換機進行互操。

  為了解決和其他廠商的交換機進行互操作的問題,Cisco開發了PVST+。PVST+允許CST的資訊傳給PVST,以便與其他廠商在VLAN上運作生成樹的實作方法進行互操作。

  PVST+為每一個VLAN生成一個生成樹執行個體,而每個執行個體都要占用交換機的CPU和記憶體資源。随着VLAN的增加,執行個體也會增加,這導緻維護生成樹執行個體将占用較多的交換機資源。

1. 配置PVST+的意義

   因為在交換網絡中,如果一個根網橋不穩定,那麼這個網絡就需要經常驚醒STP運算,經常變化邏輯拓撲。是以,可以說,如果網絡中有一個不穩定的根網橋,就會有一個不穩定的網絡。

   而在交換機選擇根網橋的時候,如果不修改網橋ID中的優先級,那麼選擇的依據就是交換機的MAC位址,而MAC位址是随機的,很可能就會碰到這種情況:網絡中最邊緣的交換機被選擇成了根網橋。是以,雖然生成樹在交換機中自動運作,但是,合理的配置能夠對網絡進行優化。

  除了配置網絡中比較穩定的交換機為根網橋外,PVST+的配置主要還有以下幾個方面:

1) 利用PVST+實作網絡的負載均衡

   配置兩台或多台核心交換機分别為不同VLAN的根網橋,使不同的VLAN中各接入交換機上選擇的根端口不同,是以,不同的VLAN的資料傳輸使用的線路也不同,以達到兩條或多條線路之間負載均衡的目的。

2) 配置速端口(PostFast)

   使連接配接終端的端口快速進入到轉發狀态。主機連接配接到交換機的端口,如果主機關閉後再開機,交換機的端口狀态會先變為down再變為up。這時,此端口直到STP進入轉發狀态後才可用,如果使用預設的STP計時器,端口從down到STP的轉發狀态需要至少30秒。這就導緻主機必須等待端口進入轉發狀态後,才能接收或轉發資料。

當單台主機連接配接到交換機的一個端口時,不可能形成環路,是以Cisco交換機提供了速端口功能。在端口啟用速端口功能後,當端口從down到up狀态時,該端口不經過偵聽和學習狀态,直接進入轉發狀态,節省30秒的轉發延遲。然而,該端口仍然運作生成樹協定,如果檢測到了環路,也能夠從轉發狀态轉換到阻塞狀态。速端口隻能配置在連接配接終端的接口上,否則就有可能導緻短時間的生成樹的環路。

2. PVST+配置指令

(1) 啟用生成樹指令

   交換機在預設情況下啟用生成樹。通過在此指令前加no,可以關掉某個VLAN的生成樹,但是,一般情況下,即使網絡中不存在實體環路,也不建議關閉生成樹。啟用生成樹的指令如下:

   Switch(config)# spanning-tree vlan vlan-list          

(2) 指定根網橋

由于MAC位址不可更改,是以要指定VLAN的優先級。可以使用下面指令更改優先級。

   Switch(config)# spanning-tree vlan vlan-list priority Bridge-priority  

  其中,Bridge-priority預設為32768,範圍是0-65535,可以通過此指令同時更改多個VLAN的網橋優先級,例如VLAN5和VLAN10-20的網橋優先級配置為4096,如下所示:

   Switch(config)# spanning-tree vlan 5,10-20 priority 4096          

除了更改網橋的優先級外,還可以使用指令指定交換機為根網橋,如果配置為primary,則交換機的優先級變為24576,配置secondary,優先級變為28672。配置根網橋的指令如下:

   Switch(config)# spanning-tree vlan vlan-list root {primary | secondary}   

注意:配置VLAN負載均衡的兩種方法的目的都是改變STP的優先級,且配置的STP優先級必須是4096的倍數。

(3) 修改端口成本

在端口模式下配置如下指令,來更改該端口的端口成本。如下所示:

   Switch(config-if)# spanning-tree vlan vlan-list cost cost   

(4) 修改端口優先級

在端口模式下配置如下指令,更改該端口的端口優先級,如下所示:

   Switch(config-if)#spanning-tree vlan vlan-list port-priority priority   

例如,使用下面指令更改F0/1端口的成本和優先級,如下所示:

   Switch(config)# spanning-tree vlan 1 cost 10              

   Switch(config)# spanning-tree vlan 1 port-priority 96     

(5) 配置速端口

   Switch(config)# spanning-tree portfast             

3. PVST+配置的檢視

(1) 檢視生成樹的配置

   Switch# show spanning-tree                        

(2) 檢視某個VLAN的生成樹詳細資訊

   Switch# show spanning-tree vlan vlan-id detail    

配置STP實作VLAN負載均衡

(1)為交換機配置VLAN并配置連接配接端口為trunk模式 (略)

(2)配置VLAN負載均衡

   SW1(config)# spanning-tree vlan 1  root primary          

   SW1(config)# spanning-tree vlan 2  root secondary        

   SW2(config)# spanning-tree vlan 2  root primary          

   SW2(config)# spanning-tree vlan 1  root secondary        

(3)在SW3上為端口1-20配置速端口

   SW3(config)# int r f0/1 -20                              

   SW3(config)# spanning-tree portfast                      

本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/1957184,如需轉載請自行聯系原作者

繼續閱讀