生成樹協議(STP)算法
1、STP概述網絡
一、交換機網絡環路的產生ide
如上圖所示,PC1和PC2經過交換機相連,網絡初始狀態時,PC1與PC2的通訊過程以下。學習
1)、在網絡通訊的最初,PC1的ARP條目中沒有PC2的MAC地址,根據ARP原理,PC1首先會發送一個ARP廣播請求(請求PC2的MAC地址)交給交換機SW1。優化
2)、擋SW1收到ARP的廣播請求時,根據交換機的轉發原理,SW1交換機將廣播幀從除接收端口以外的全部端口轉發出去(即該廣播會從F0/1和F0/2分別轉發給SW2和SW3)。spa
3)、SW2收到廣播幀後,一樣根據交換機的轉發原理,將廣播幀從F0/2和鏈接PC2的端口轉發,一樣,SW3收到廣播幀後,將其從F0/2端口轉發。3d
4)、SW2從F0/2端口收到從SW3發送的廣播幀後,將其從F0/2和鏈接PC2的端口轉發,一樣,SW3收到從SW2發送的廣播幀後,將其從F0/1端口轉發。blog
5)、SW1分別從SW2、SW3收到廣播幀,而後將從SW2收到的廣播幀轉發給SW3,而將從SW3收到的廣播幀轉發給SW2。接口
SW1、SW2和SW3會將廣播幀相互轉發,這是網絡就造成了一個環路,而交換機之間並不知道,這將致使廣播幀在這個環路中永遠循環下去,以下圖所示:ip
在實際網路環境中,狀況要複雜得多,擋廣播幀通過交換機時,交換機就以指數的形式生成廣播幀(交換機除收到該廣播幀以外的全部端口轉發廣播幀)。這種廣播幀會愈來愈多。最終造成廣播風暴,致使網絡癱瘓。
可是環狀的物理線路可以爲公司提供備份喜好南路,加強網絡的可靠性,所以有一種解決方法,一方面可以保證網絡的可靠性,另外一方面還能夠防止廣播風暴的產生。
STP(生成樹協議):並非斷掉物理環路,而是在邏輯上斷開環路,防止廣播風暴產生。
1.2、STP簡介
STP(生成樹協議):就是把一個環形的結構改變成一個樹形的結構。STP協議就是用來說物理上存在環路的網絡,經過一種算法,在邏輯上阻塞一些端口,來生成一個邏輯上的樹形結構。
邏輯上斷開環路,防止廣播風暴的產生。
當線路故障,阻塞接口被激活,恢復通訊,起備份線路的做用。
三臺交換機正常使用STP邏輯上斷開一個端口以後的通訊過程,以下圖
當SW1與SW2的鏈路發生故障時,會將邏輯堵塞的端口自動開啓,以下如:
2、STP的工做原理
一、生成樹算法
生成樹算法能夠概括爲如下三個步驟:
1)、選擇根網橋(boot bridge)
2)、選擇根端口(root ports)
3)、選擇指定端口(designated ports)
1)、選擇根網橋的算法
選擇根網橋的依據是網橋ID,網橋ID是一個8字節的字段,其組成結構圖以下圖所示,
前2字節的十進制數成爲網橋優先級,後6字節是網橋的MAC地址。
網橋優先級是用於衡量網橋在生成樹算法中優先級的十進制數,取值範圍爲0~65535,,默認值是32768。
網橋ID中的MAC地址是交換機自身的MAC地址,使用show ver可查看。
交換機顯示MAC的地址以下:
按照生成樹算法的定義:交換機網橋ID值最小,優先級小的被選擇爲根網橋;優先級相同狀況下,MAC地址小的爲根網橋。
2)、選擇根端口
根端口存在於非網橋上,須要在每一個非根網橋上選擇一個根端口。
選擇根端口時,順序以下:
a、到根網橋最低的根路徑成本
b、直連的網橋ID最小
c、 端口ID最小
帶寬與路徑成本的關係
鏈路帶寬(Mbps) |
路徑成本 |
10 |
100 |
16 |
62 |
45 |
39 |
100 |
19 |
155 |
14 |
622 |
6 |
1000 |
4 |
10000 |
2 |
端口ID是一個2字節的STP參數,由1字節端口優先級和1字節端口編號組成。
端口優先級是一個可配置的STP參數,在基於IOS的交換機上,端口優先級的十進制值範圍是0~255,默認值是128.
端口編號Catalyst用於列舉各個端口的數字標識符。在基於IOS的交換機上,能夠支持256個端口。端口編號不是端口號,可是端口號低的端口,端口編號也小。
在STP選擇根端口的時候,首先比較交換機端口的根路徑成本,根路徑成本低的爲根端口。擋根路徑成本相同的時候,比較鏈接的交換機的網橋ID值,選擇網橋ID值小的最爲根端口;當網橋ID相同的時候,比較端口ID值,選擇較小的最爲根端口。(注:在比較端口ID值時,比較的是接收到的對端的端口ID值)
3)、選擇指定端口
爲了消除環路造成的可能,STP進行最後的計算,在每個網段上選擇一個指定端口。
選擇指定端口順序以下:
a、 根路徑成本較低;
b、所在的交換機的網橋ID值較小;
c、 端口ID值較小
在STP選擇指定端口的時候,首先比較同一網段上端口中根路徑成本最低的,也就是將到達根網橋最近的端口做爲指定端口。另外,根網橋上的接口都是指定端口,由於根網橋上端口的根路徑成爲爲0。(注意:和選擇根端口不一樣,在比較端口ID值時,比較的是自身的端口ID值)。
生成樹算法驗證:
查看SW1生成樹狀態
查看SW2生成樹狀態
查看SW3生成樹狀態
2、橋協議數據單元(BPDU)
交換機之間經過BPDU(橋協議數據單元)來交換網橋ID、根路徑成本等信息。BPDU幀利用了一個STP組播地址(01-80-c2-00-00-00)做爲它的一個目的地址,使之能到達相鄰的、並處於STP偵聽狀態的交換機。
BPDU報文每隔2S向全部的交換機端口發送一次報文,以便交換機能交換當前最新的拓撲信息,並迅速識別和檢測其中的環路。
2.1、BPDU的兩種類型
配置BPDU,用於生成樹計算。
拓撲變動通告(topology change notification,TCN),BPDU用於通告網絡拓撲的變化
2.2、BPDU報文字段
BPDU中包含根網橋ID、根路徑成本、發送網橋ID、端口ID和計時器等,對BPDU幾個關鍵字段做用的解釋以下。
根網橋ID:有一個2字節優先級和一個6字節網橋MAC地址組成。這個信息組合代表已經被選定爲根網橋的設備標識
根路徑成本:說明這個BPDU從根網橋傳輸了多遠、成本是多少。這個字段的值決定哪些端口進行轉發,哪些端口將被阻斷。
發送網橋ID:這是發送該BPDU網橋信息,由網橋的優先級和網橋的MAC地址組成。
端口ID:由一字節的端口優先級和一字節的端口編號組成。
計時器:用於說明生成樹用多長時間能完成它的每項功能。這些功能包括報文老化時間、最大老化時間、訪問時間和轉發延遲。
2.3、STP利用BPDU選擇根網橋的過程
當一臺交換機第一次啓動時,假設本身是根網橋,在BPDU報文中的根網橋字段填入本身的網橋ID,以下所示:
當接收到其餘交換機發出的BPDU後,比較網橋ID,選擇較小的添加到根網橋ID中
當全網全部的交換機接收到所有的BPDU並做比較後,就能夠選擇出惟一的一個根網橋。
3、STP的收斂
在STP運算過程當中,交換機的每個端口都必須經歷好幾種狀態。
以下列出了交換機端口的五種STP狀態
狀 態 |
用 途 |
轉發(Forwarding) |
發送/接收用戶數據 |
學習(Learning) |
構建網橋表 |
偵聽(Listening) |
構建「活動」拓撲 |
阻塞(Blocking) |
只接收BPDU |
禁用(Disabled) |
強制關閉 |
STP端口狀態詳細描述以下:
Disabled(禁用):由管理員關閉或網絡故障使端口處於Disabled狀態,他不屬於正常的STP狀態的一部分。
Blocking(阻塞):在端口初始化後,一個端口既不能接受或發送數據,也不能向它地址表添加MAC地址。相反,這樣的一個端口僅容許接收BPDU報文,以便能偵聽到其餘鄰接交換機的信息。此外,選出指定端口後,非指定端口也處於阻塞狀態。
Listening(偵聽):若是一個交換機認爲一個端口可選爲根端口或指定端口,他就會把該端口的Blocking狀態變爲Listening狀態,在Listening狀態,端口仍然不能接收或發送數據幀。不過,爲了使該端口加入到生成樹的拓撲過程,容許他接收或發送BPDU報文。因爲該端口能夠經過發送BPDU報文給其餘交換機通告該端口的信息,這個端口最終可能被容許成爲一個根端口或指定端口。若是該端口失去根端口或指定端口的地位,將返回Disabled狀態。
Learning(學習):一個端口在Listening狀態下通過一段時間後,將轉爲Learning狀態。該端口仍可像從前同樣發送和接收BPDU報文。不過,該交換機能夠學習到新的MAC地址,並將改地址添加到交換機的地址表中。正因如此,才使得交換機能夠沉默必定的時間才處理有關地址表的信息。
Forwarding(轉發):在Learning狀態下載通過一段時間的學習和轉發,該端口轉入到Forwarding狀態。在Forwarding狀態,該端口既能夠發送和接收數據幀,也能夠手機MAC地址表加入到他的地址表,還能夠發送和接收BPDU報文。再生成樹拓撲中,該端口以此才成爲一個全功能的交換機端口。
STP利用三種計時方法來確保一個網絡正常的收斂。
a、Hello時間:網橋發送配置BPDU報文之間的時間間隔。在根網橋交換機中配置的訪問時間值將決定全部的非跟交換機的訪問時間,這是由於這些交換機在收到發自根網橋的配置BPDU報文時,僅僅中繼他們。不過,全部的交換機都有一個本地配置的訪問時間,他用於肯定從新發送TCN BPDU(拓撲變化提示)報文的時間。IEEE 902.1d標準規定的默認訪問時間爲2S。
b、轉發延遲:一個交換機端口在Listening和Learning狀態所花費的時間間隔,它的默認值各爲15S。
c、最大老化時間:交換機在丟棄BPDU報文以前存儲它的最大時間。在執行STP時,每個交換端口都保存一份它所偵聽到的「最好的」BPDU備份。若是源BPDU失去了與交換機端口的聯繫,交換機則在最大老化時間以後通知網絡發生了拓撲結構方面的變化。最大老化時間默認值是20S。
偵聽和學習都是生成樹所實施的過渡狀態,用來強迫端口等待來自其餘交換機上全部BPDU。典型的端口過渡以下。
3、STP與VLAN的關係
生成樹與vlan之間的關係主要有如下幾種:
a、IEEE的CST(Common Spanning Tree,通用生成樹)。
b、Cisco的PVST(Per vlan spanning Tree,每一個vlan生成樹)。
c、Cisco的PVST+(Per vlan spanning Tree Plus,加強的每一個vlan生成樹)。
d、IEEE的MST(Multiple spanning Tree,多生成樹)。
CST:不考慮VLAN,以交換機爲單位運行STP(整個交換網絡生成一個STP實例),因此通過STP計算後,對阻塞一個端口,那麼vlan3將沒法通訊。
以下圖:
PVST:Cisco私有協議,爲每一個vlan運行單獨的生成樹實例(每一個vlan生成一個生成樹實例)。以下圖:
PVST能優化根網橋的位置,爲全部vlan提供最後路徑(由於vlan的拓撲結構各不相同)。
PVST主要缺點以下:
爲了維護每一個vlan生成的生成樹,交換機的利用率(如CPU負載)會更高。
爲了支持各個vlan的BPDU,須要真用更多的trunk鏈路帶寬。
PVST與IEEE的CST不兼容,不能與其餘廠家的交換機進行互操做。
爲了解決與其餘廠家的交換機進行互操做,Cisco開發了PVST+。PVST+容許CST的信息傳給PVST,以便於其餘廠商在vlan上運行生成樹的實現方法進行互操做。以下圖:
PVST+爲每個vlan生成一個生成樹實例。
4、PVST+的配置命令
啓用生成樹命令
Switch(config)#spanning-tree vlan vlan-list
指定根網橋
Switch(config)#spanning-tree vlan vlan-list priority Bridge-priority
Switch(config)#spanning-tree vlan vlan-list root { primary|secondary }
修改端口成本
Switch(config-if)#spanning-tree vlan vlan-list cost cost
修改端口優先級
Switch(config-if)#spanning-tree vlan vlan-list port-priority priority
將端口配置爲速端口
Switch(config-if)#spanning-tree portfast
例如:
使用下面命令指定根網橋
Switch(config)#spanning-tree vlan 2 priority 4096
或使用下列命令指定根網橋
Switch(config)#spanning-tree vlan 2 root primary
使用下面命令修改F0/1端口的成本和優先級
Switch(config-if)#spanning-tree vlan 2 cost 10
Switch(config-if)#spanning-tree vlan 2 port-priority 96
使用下面命令查看生成樹的配置
Switch#show spanning-tree
使用下面命令查看某個vlan的生成樹詳細信息
Switch#show spanning-tree vlan 2