生成樹協議(STP)

生成樹協議(STP)算法

n 交換網絡環路的產生網絡

在實際網絡環境中,狀況要複雜得多,當廣播幀通過交換機時,交換機就以指數的形式生成廣播幀(交換機從除收到該廣播幀以外的全部端口轉發廣播幀)。這種廣播幀會愈來愈多,最終造成廣播風暴,致使網絡癱瘓。負載均衡

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

可是環狀的物理線路可以爲網絡提供備份線路,加強網絡的可靠性,這在網絡設計中是必要的,所以,這就須要一種解決方法,一方面可以保證網絡的可靠性,另外一方面還要防止廣播風暴的產生。學習

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

n STP簡介spa

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

n 生成樹算法blog

生成樹協議運行生成樹算法(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

相關文章
相關標籤/搜索