STP-Spanning-tree protocol
在二層交換網絡中,可以使用多條鍊路在裝置間互聯,這樣可以起到鍊路的備援備份作用,但會産生廣播風暴,網絡中充滿大量的廣播,最終導緻網絡癱瘓而不可用。
STP可以幫助我們既可以實作鍊路的備援備份,同時可以避免廣播風暴的産生。STP通過運算可以将多餘的鍊路置于非活動狀态,即不轉發使用者資料包,而隻留下單條鍊路作為網絡通信,當唯一的活動鍊路不能工作時,再啟用非活動鍊路,進而達到網絡的備援性。STP可以将網絡中多餘的鍊路通過運算置于block狀态,隻保留一條主要通信的鍊路,當主要通信的鍊路down掉後,啟用block狀态的鍊路進而起到備援備份的作用。STP是IEEE标準協定,并且有多個版本。
STP是可以從邏輯上将一個實體環路的網絡變成一個hub-spoke結構的網絡進而避免廣播風暴的産生。
STP在發送資料包測試網絡是否有多條鍊路,是靠發送bridge protocol data units (BPDUs)來完成的,同台交換機發出去的BPDU都被做上了相同的标記,隻要任何交換機從多個接口收到相同标記的BPDU,就表示網絡中有備援鍊路,是以需要STP斷開多餘鍊路。
BPDU資料包裡面有以下資訊:根橋的bridge id,發出交換機的bridge id,path cost,hello max-age forward delay。
STP在運算過程中,需要選擇出根橋、根端口、指定端口,将其他既不是根端口,也不是指定端口的接口置于block狀态,當根端口或者指定端口down掉時,才會啟用block轉發資料,進而達到鍊路備援備份的作用。
STP選擇根橋、根端口、指定端口的依據如下:
1.選擇根橋
根橋是在一個廣播域中唯一的,選擇根橋的依據是bridge id,bridge id由交換機的優先級+MAC位址組成,交換機的優先級預設為32768,優先級的範圍為0-65535,STP選擇bridge id最小的當根橋,值越小,表示優先級越高;
2.選擇根端口
根端口是在非根交換機上選擇的,并且在非根交換機上唯一;選擇根端口的依據是首先比較到達根橋的path cost值,如果相同,繼續比較到達根交換機上一跳交換機的bridge id,如果相同,繼續比較對端交換機的接口優先級,如果相同,繼續比較對端交換機接口編号;值越小,表示優先級越高
path cost的大小是由鍊路的帶寬值來決定的,帶寬值越高cost值越小,也就表示優先級越高。常用的100M鍊路的cost值為19,1000M的cost值為4,10000M的cost值為2
3.選擇指定端口
指定端口是要鍊路上唯一的;選擇指定端口的依據是首先比較端口所在交換機到達根橋的path cost;如果相同,繼續比較接口所在網絡ID,如果相同,繼續比較接口的ID;值越小,表示優先級越高。
由于指定端口是在所有的鍊路上選擇,并且唯一的,是以在與根橋相連的鍊路上,根橋上的端口是到達根橋path cost最小的,是以根橋上的所有接口都是指定端口。
STP通過以上計算過程會選擇出根橋、根端口、指定端口
接口都将置于block狀态,隻有根端口或者指定端口down時,才會啟用block端口
下面通過一個執行個體來說明STP的選舉過程,拓撲圖如下所示,所有的鍊路均為100M鍊路,也就是說cost值都為19:

根橋是在所有的交換機中選擇,選擇根橋的依據是bride id;因為SW1的優先級為4096,SW2的優先級為24576,SW3的優先級為32768,SW4的優先級為32768,是以根據優先級就可以選擇出誰是根橋,SW1的優先級值最小,是以我們選擇SW1為根橋
根端口是在所有的非根交換機上進行選擇,SW2上從端口F0/23到達根的Path Cost值為19,從F0/19和F0/20到達根的Path Cost值都為19×3=57。是以,F0/23被選為根端口。 SW3上從端口F0/19到達根的Path Cost值為19,從F0/23和F0/24到達根的Path Cost值都為19×3=57。是以,F0/19被選為根端口。 SW4上從所有端口到達根的Path Cost值都為19×2=38,根據path cost值,無法選出根端口,接下來比較上一跳交換機Bridge-ID,也就是比較SW2與SW3的Bridge-ID,是以選擇往SW2的方向,到這裡選擇過程并沒有結束,因為SW4上有兩個接口都可以到達SW2,是以要繼續選擇;接下來比較端口F0/19和F0/20對端交換機端口的優先級,因為SW2的F0/19端口優先級為128,而F0/20的端口優先級為112,是以SW4選擇連接配接SW2的F0/20的端口為根端口,即SW4的F0/20為根端口。
指定端口是在所有的鍊路上進行選擇的;由于根橋上的接口都為指定端口,所有SW1與SW2、SW3這兩條鍊路上的指定端口是SW1上的F0/19,F0/23;在SW2與SW4相連的兩條鍊路上,由于SW2到根橋的path cost最小,是以選擇SW2上的F0/19,F0/20為指定端口;在SW3與SW4相連的兩條鍊路上,由于 SW3到根橋的path cost最小,是以選擇SW3上的F0/19,F0/20接口作為指定端口。
一個接口隻能處于一種角色狀态。
在選擇出根橋、根端口、指定端口後,其他的接口全部處于block狀态,進而形成無環的拓撲結構,STP計算結果如下圖所示:
交換機的接口狀态:
initialization
blocking
丢棄所有的資料幀,不會學習MAC位址,能收到BPDU但不發送
listening
丢棄所有的資料幀,不會學習MAC位址,能收到BPDU并處理BPDU,進行STP計算
learning
丢棄所有的資料幀,學習MAC位址,能接收BPDU和處理BPDU
forwarding
轉發資料幀,學習MAC位址,能接收BPDU并處理BPDU