為什麼要使用生成樹協定
生成樹協定是二層鍊路上的協定。
如上圖所示,在二層網絡中,交換機起到了很重要的作用,如果有一台交換機出現故障會影響網絡的使用,為了避免存在單點故障,在實際的二層鍊路中會采用鍊路備援,也就是采用交換裝置之間多條聯絡連接配接,即多台交換機之間都有連接配接,這樣即使一台交換機故障了,也可以使用其他交換機。這就是鍊路備援。
這種做法雖然很好,但是會産生一個緻命的問題,各個交換機裝置之間都有鍊路連接配接,資料報到達目的主機的路線會增多,進而使資料報在交換機之間不斷的被轉發,形成一個環路。
多鍊路形成環路的緻命問題
1. 形成廣播風暴: 資料報在環路在不斷的被廣播轉發形成廣播風暴。
2. 多重複幀複制: 交換機在接受到不确定單點傳播幀時,将執行泛洪操作,這意味着,在環路中一個單點傳播幀在傳輸中被複制為多個複本。
3. MAC位址表不穩定: 如果交換機在不同的端口收到同一個幀,它的MAC資料庫将會變得不穩定。
以上三種情況不論是哪一種,都将會使二層網絡鍊路發生崩潰。
解決問題分析
我們知道之所有發生這種情況的原因是二層鍊路形成了環路,為什麼形成環路呢?是因為資料幀為到達目的主機會在各個相連的交換機之間互相複制轉發和傳輸形成環路。
如果我們能給各個資料幀指定一條到達目的主機的最短路徑,那麼就不會形成環路了,因為資料幀是沿着我們給定的路線傳輸。這樣就解決了因資料幀胡亂傳輸而形成的環路問題,進而解決了以上的種種問題,而且還能是實作鍊路備援的目的。那麼這條指定的最短路徑要怎麼指定呢?可以在鍊路中加上一個協定,這個協定就是生成樹協定。
生成樹協定有哪些
IEEE協會通過了IEEE802.1d協定,即開天辟地的第一代生成樹協定STP,這個協定和其他協定一樣,都是随着網絡的不斷發展而不斷更新換代的。到現在為止,該協定一共有三代;
第一代 STP/RSTP
第二代PVST/PVST+(思科特有)
第三代 MTSTP/MSTP
我們隻對STP、RSTP和MSTP進行講解
救世主STP(802.1d)又叫 生成樹協定
在這種環路肆虐的時候,如同救世主般的STP來到了我們身邊。呵呵
STP的主要功能是通過一系列的運算來解決由于備份連接配接所産生的環路問題。
注意:單純标準的802.1d STP協定并不能實作真正的備援和負載分擔。
STP運作原理簡介:
通過阻斷備援鍊路将一個有環路的橋接網絡修剪成一個無環路的樹形拓撲結構,即:能夠確定資料幀在某一時刻從一個源出發,到達網絡中任何一個目标的路徑隻有一條,而其他的路徑都處于非激活狀态(不能進行轉發),如果在網絡中發現某條正在使用的鍊路出現故障時,網絡中開啟了STP技術的交換機會将非激活狀态的阻塞端口打開,恢複曾經斷開的鍊路,確定網絡的連通性。
如上圖所示:從PC0到達PC1的資料幀會經過中間由三台交換機組成的環路,STP協定會選擇一條最短的路徑讓資料幀從PC0到達PC1。假如,STP協定通過計算,認為走2路——3路到達PC1是最短路徑,那麼1路就會處于非激活狀态,即1路上有關的端口會處于堵塞狀态。如果交換機S1出現了故障導緻2路和3路不能走了,那麼STP就會激活1路,確定資料幀能夠到達PC1.
STP原理----順序四步走:
1.選擇根橋(根交換機)RB
在網路中需要選擇一台根交換機RB,選擇RB就需要交換機們自己選擇,需要交換機們通信,這些資訊被稱為BPDU(橋協定資料單元),每2秒發送一次,BPDU中包含的資訊較多,但是RB的選擇隻比較BID(橋ID),BID最小的就是根交換機。
BID=橋優先級+橋MAC位址。先比較橋優先級,然後再比較橋MAC位址的優先級,一般來說,橋優先級都是一樣的,都是32768,是以一般隻比較橋MAC位址,MAC位址最小(也就是BID最小)的作為RB。
例如:SW1:Default優先級 32768 MAC 0c0011111111
SW2:Default優先級 32768 MAC 0c0022222222
很明顯,在優先級相等的情況下,MAC位址SW2的小,是以SW2為根交換機。
2.選擇根端口RP(要從離根橋最近的端口選)
對于每台非根橋,要選擇一個端口用來連接配接到根橋,這就是根端口
注意:根端口隻能在非根交換機上選取的。
當非根橋有多個端口可以連接配接到根橋時,應該選擇性能比較好的端口作為根端口,選擇的依據是: 首先比較開銷Q,其次比較PID(端口ID)
比如:如下圖所示;
根據根橋的選取,可以判斷SwitchZ為根橋,也就是根交換機。那麼SwitchX和SwitchY為非根橋,非根橋SwitchX需要選擇一個端口(隻能選擇一個端口)用來連接配接SwitchZ(根橋),首先比較的是開銷Q:帶寬 | IEEE802.1d(STP) |
| |
10Mb/s | 100 | 2000000 | |
100Mb/s | 19 | 200000 | |
1000Mb/s | 4 | 20000 |
通過Port0連接配接到根橋,Q=19.
通過Port1連接配接到根橋,Q=100+19=119.
很明顯通過Port0連接配接到根橋的開銷Q小,是以選擇SwitchX和SwitchY的Port0為根端口。
但是假設Q相同的話,就需要比較PID了,PID=端口優先級+端口号,一般來說端口優先級是預設的,是以,端口号越小的端口,将成為根端口。
注意: 先比較開銷,再比較PID。
3.選擇指定端口DP
在每一個交換機之間的鍊路上選擇一個端口,作為指定端口。
例如:如下圖所示:
上圖中共有3個網段,X-Y,Y-Z,X-Y,其中前兩個網段的指定端口都是SwitchZ(根橋)上的端口,因為根橋沒有根端口,有的隻是指定端口,而X-Y(紅線網段)的指定端口需要選擇,依據如下:
X到達根橋的開銷Q=19
Y到達根橋的開銷Q=19
由于Q相同,需要比較BID(指定端口ID),SwitchX的BID小,是以位于SwitchX上的port1将成為該網段的指定端口。
4.RP、DP設定轉發狀态,其他端口設為阻塞狀态
選出來的RP和DP将設為轉發狀态,既不是根端口也不是指定端口的其他端口将被Block!
通過上述四部走,就可以形成無環路的網絡。
STP計時器
一共有3個:
1. Hello Time: 根橋發送BPDU之間的時間間隔,也是網絡初始化的時候,每個網橋發送各自的BPDU的時間間隔。
2.Forwarding Time : 指一個端口Listening和Learning的各自時間,預設為15s,為了保證BPDU在全網中的轉發,是以做如此設定,這個值是可以配置的,由于Forwarding Time 的限制,一般建議網絡的直徑應小于7
3. Max Age : 存儲BPDU最長的時間,超過這個時間端口接受不到BPDU,就會采取相應的措施。這個時間預設為20s.
注意: 這三個時間在拓撲穩定後都是由根橋發出的,由根橋在全網統一計時器,在根橋修改才有效。
STP端口狀态概述
當協定資訊BPDU通過一個交換網絡時。可能發生傳播延時,那麼交換網絡的拓撲結構就可能會發生改變。
每一個使用STP的二層LAN端口存在以下5種狀态:
1. 阻塞(Blocking):10s 端口不能參與幀的轉發發
2. 偵聽(Listening):15s 這是端口自阻塞狀态後的第一個過渡狀态。STP認為這種狀态的二層LAN端口應當參與幀的轉發
3. 學習(Learning):15s 處于準備參與幀轉發狀态
4.轉發(Forwarding):端口可以正式轉發幀了
5. 禁止(Disabled):端口不參與STP,不轉發幀。
STP端口拓撲變化:
當啟用STP後,裝置開啟電源後,每個端口和網絡都要經曆阻塞、偵聽、學習這類的過渡狀态。如上圖所示。
1.阻塞狀态端口變化: 網絡裝置在交換BPDU之前,都是假設自己為根的,并且端口在初始化時,總是先置于阻塞狀态。交換BPDU後就可以确定哪個裝置作為根橋。
處于阻塞狀态的端口執行以下任務:
丢棄從所在網段中接收的幀;
丢棄與其他轉發端×××換的幀
不把終點位置添加到位址資料庫中。
接收BPDU,并且把它們直接傳到系統子產品中。
不傳輸從系統子產品中接收到的BPDU
2. 偵聽狀态端口變化: 當STP确定這個二層LAN端口應當參與幀轉發時,進就進入到了偵聽狀态
處于偵聽狀态的端口執行以下任務:
丢棄從所在網段中接收的幀;
接收、處理和傳輸從系統子產品中接收到的BPDU
3.學習狀态:從偵聽狀态進入到學習狀态:
處于學習狀态将執行以下任務:
把終點位置添加到位址資料庫中。
4.轉發狀态端口變化; 處于轉發狀态的端口可以正式轉發幀了。
轉發從所在網段中接收的幀;
轉發與其他轉發端×××換的幀
處理和傳輸從系統子產品中接收到的BPDU
5.禁用狀态的端口變化:處于禁用狀态的端口不參與幀轉發或者STP。
注意: 這種把二層端口置于禁用狀态的行為是不建議的,因為這相當于一宗浪費
不接收BPDU,并且把它們直接傳到系統子產品中。
這就是整個網絡中交換機拓撲端口的變化,直到最後網絡穩定。
總結---STP運作過程梳理
假設S1為根交換機
當網絡穩定後,這種穩定狀态下,根交換機S1 向網絡中以2s一次的頻率發送BPDU封包,非根交換機S2通過根端口接受BPDU,然後通過指定端口向S3發送BPDU封包。通過這種方式,BPDU封包可以順利的擴散到網絡的每台交換機。
但是當網絡拓撲發生變化時,交換機會向根交換機方向發送TCN BPDU封包,這兒的變化有以下幾種情況:(當出現以下幾種情況後,當事交換機就會發送TCN BPDU)
1. 處于轉發狀态或者監聽狀态的端口過渡到阻塞狀态,這個狀态通常是鍊路故障
2. 處于未啟用狀态的端口進入轉發狀态,這個狀态通常是增加了新的鍊路
3. 交換機從指定端口收到TCNBPDU封包。
假設S3出現了以上情況中的一種,那麼交換機就認為網絡拓撲發生了變化,将執行步驟1,S3從根端口向根交換機的方向發送TCN BPDU封包(這兒的方向是向S2),S2通過指定端口接受TCN BPDU ,執行步驟2,然後發送給S3 一個TCA,同時執行步驟3,向根交換機的方向發送TCN BPDU封包,S1(根交換機)收到TCN BPDU封包後執行步驟4,向S2發送TC BPDU,S2接受到TC BPDU後再轉發給S3。接受到TC BPDU封包後的交換機S2和S3将自己的MAC位址表老化時間(生存時間)設定為15s,開始學習新的轉發路徑,達到網絡的穩定。
在端口的變化中,從阻塞到偵聽狀态,需要10s的時間,從偵聽到學習需要15s,從學習到轉發需要15s。