生成樹協議(STP)

生成樹協議(STP)

n 交換網絡環路的產生

在實際網絡環境中,情況要複雜得多,當廣播幀經過交換機時,交換機就以指數的形式生成廣播幀(交換機從除收到該廣播幀之外的所有端口轉發廣播幀)。這種廣播幀會越來越多,最終形成廣播風暴,導致網絡癱瘓。

這種廣播風暴只有在物理環路消失時纔可能停止。

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

STP協議就是用來解決這個問題的。STP協議並不是斷掉物理環路,而是在邏輯上斷開環路,防止廣播風暴的產生。

n STP簡介

STP(Spanning Tree Protocol,生成樹協議)就是把一個環形的結構改變成一個樹形的結構。STP協議就是用來將物理上存在環路的網絡,通過一種算法,在邏輯上阻塞一些端口,來生成一個邏輯上的樹形結構。

n 生成樹算法

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

(1) 選擇根網橋(Root Bridge)

(2) 選擇根端口(Root Ports)

(3) 選擇指定端口(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值。

n 橋協議數據單元(BPDU)

交換機之間通過BPDU(橋協議數據單元,Bridge Protocol Data Unit)來交換網橋ID、根路徑成本等信息。交換機從端口發送出一個BPDU幀,使用該端口本身的MAC地址作爲源地址。交換機本身並不知道它周圍是否還有其他的交換機存在。因此,BPDU幀利用了一個STP組播地址(01-80-c2-00-00-00)作爲它的一個目的地址,使之能到達相鄰的,並處於STP偵聽狀態的交換機。

每隔兩秒,便向所有的交換機端口發送一次BPDU報文,以便交換機(或網橋)能交換當前最新的拓撲信息,並迅速識別和檢測其中的環路。

1. BPDU的兩種類型

? 配置BPDU,用於生成樹計算。

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

2. BPDU報文字段

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

? 根網橋ID:由一個二字節優先級和一個六字節網橋MAC地址組成。這個信息組合表明已經被選定爲根網橋的設備標識。

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

? 發送網橋ID:這是發送BPDU的網橋信息,由網橋的優先級和網橋MAC地址組成。

? 端口ID:由一個字節的端口優先級和一個字節的端口編號組成。

? 計時器:計時器用於說明生成樹用多長時間能完成它的每項功能。這些功能包括報文老化時間、最大老化時間、訪問時間和轉發延遲。

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

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

n STP的收斂

1. 生成樹端口的狀態

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

在STP運算過程中,交換機的每一個端口都必須依次經歷好幾種狀態:

狀態 用途

轉發(Forwarding) 發送/接受用戶數據

學習(Learning) 構建網橋表

偵聽(Listening) 構建“活動”拓撲

阻塞(Blocking) 只接受BPDU

禁用(Disabled) 強制關閉

2. 生成樹計時器

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

STP利用三種計時方法來確定一個網絡正確的收斂。現將STP計時器及它們的默認值描述如下:

? Hello時間:網橋發送配置BPDU報文之間的時間間隔。IEEE802.1q標準規定的默認訪問時間爲兩秒。

? 轉發延遲:一個交換機端口在Listening(偵聽)和Learning(學習)狀態所花費的時間間隔,它的默認值各爲15S。

? 最大老化時間:交換機在丟失BPDU報文之前存儲它的最大時間。

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

1) 從阻塞到偵聽(20s)

2) 從偵聽到學習(15s)

3) 從學習到偵聽(15s)

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

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

n STP與VLAN的關係

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

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

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

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

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

其中,CST不考慮VLAN,以交換機爲單位運行STP(整個交換網絡生成一個STP實例),交換機中劃分VLAN不會產生廣播環路。但是由於CST不考慮VLAN,所以經過STP計算後會阻塞其中的一個端口。

PVST是Cisco私有的協議,PVST爲每個虛擬局域網運行單獨的生成樹實例(每個VLAN生成一個STP實例)。

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

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

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

? 爲了支持各個VLAN的BPDU,需要佔用更多的Trunk線路帶寬。

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

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

PVST+爲每一個VLAN生成一個生成樹實例,而每個實例都要佔用交換機的CPU和內存資源。隨着VLAN的增加,實例也會增加,這導致維護生成樹實例將佔用較多的交換機資源。

n PVST+的配置命令

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

配置VLAN負載均衡

clip_p_w_picpath002

具體步驟:

1. 在SW0上配置如下:

clip_p_w_picpath003

或者更改優先級:

clip_p_w_picpath004

2. 在SW1上配置如下:

clip_p_w_picpath005

或者更改優先級:

clip_p_w_picpath006

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章