STP生成樹協議
問題
為了提高網絡的可用性,需要進行冗余和備份。但是冗余路徑會產生環路
環路會導致以下問題
廣播風暴
:由於交換機會對廣播、多播、和未知目標MAC的單播包進行泛洪,在存在環路的情況下,很短的時間內就會產生風暴
多幀拷貝
、MAC地址表不穩定
:當交換機剛剛啟動時,MAC地址表是空的,所以,所有的單播幀都會進行泛洪操作。但是如果存在環路的話,交換機在特定情況下,會從不同的接口收到相同的MAC地址,這樣的話,MAC地址表將不穩定
STP
(spanning tree protocal,IEEE802.1D)就是通過軟件防止環路的產生,通過邏輯的禁用接口,使得環路在邏輯上不存在;當線路出現故障時,將禁用的接口啟用,使得網絡能夠發揮物理冗余路徑帶來的高可用性
STP協議的工作原理
STP協議的原則如下:
- 每個廣播域中只有一個根網橋,根網橋的接口都是指定接口
- 每一個非根網橋上都有一個根接口,根接口就是到達根網橋最近(帶寬最高,開銷最小)的接口
- 每個網段中只有一個指定接口(發送方的橋ID較小的,或者端口優先級較小,或者端口ID較小的)
- 非指定接口不使用
假如上圖的Switch X是根網橋,那么它的兩個接口都是指定接口;Switch Y是非根網橋,由於100BASE的帶寬更高,所以Switch Y上面的接口是根接口;上下兩個segement中,s1和s2都已經有指定接口了,所以Switch Y下面的接口既不是根接口,也不是指定接口,那么將其阻斷。
上述的過程是交換機通過STP協議和交換BPDU
(Bridge Protocol Data Unit)橋接協議數據單元,自動協商得到的。BPDU每2秒鍾發送一次。
BPDU的數據結構
Root ID(8Bytes)
:根網橋ID,每個交換機通過橋ID進行標識,橋ID由橋優先級+MAC地址組成(64個字節)。橋優先級的默認值為32768,最大值為65535。橋ID最小的為根網橋
Cost of path(4Bytes)
:接口的Cost值,端口速率對應的開銷值如下:
Bridge ID(8Bytes)
:本網橋(交換機)的橋ID
Port ID(2Bytes)
:端口編號
Hellotime(2Bytes)
:BPDU間隔發送時間,默認為2秒
Max age
:詳見下面
Forward delay
:詳見下面
上述四個字段,在交換機交換BPDU的過程中就能夠協商出結果。
在STP協議故障轉移過程中,交換機接口狀態有如下四個狀態
當某個指定接口出現故障時,需要將原先的非指定接口轉為指定接口。如何檢測故障呢?
一種情況是,直接端口故障,交換機能夠立即得知這樣的故障,則將Blocking的非指定接口立即切換到Listening狀態
另一種情況是,線路故障,交換機無法直接檢測到,此時通過BPDU檢測。正常情況下兩台交換機之間會每兩秒鍾收到對方的BPDU,如果在Max age
時間后,仍然無法收到BPDU的話,需要進行重選舉,將原先Blocking的非指定接口,切換到Listening狀態。
Listening狀態持續Forward Delay
時間,這段時間后,選舉完成。之后進入Learning狀態,交換機在該端口上進行學習MAC地址,但是不轉發數據,以防止對未知單播幀的廣播,這個時間持續Forward Delay時間;最后進入正常的Forwarding狀態
一般情況下根據超時時間的設置,最長有可能需要經過30-50秒,STP協議才能重新選舉完成
總結:
- Blocking:非指定接口的狀態,即不轉發數據也不學習MAC地址
- Forwarding:指定接口或根接口,轉發數據和學習MAC地址
- Listening:進入重選舉的狀態
- Learning:重選舉完成后,進入MAC地址學習,但不轉發數據
下面是一個例子
- SWR的網橋優先級最小,所以SWR為根網橋,其接口為指定接口
- SWA、SWD的上面的兩個接口到SWR的開銷最小(都是19),所以都是根接口;同理,可以得到SWB和SWC的根接口
- SWA和SWD下面的端口都是其各自segement的指定接口(每個segment有且只有一個指定接口)
- SWB和SWC組成的segement還沒有指定接口,此時由於SWB的橋優先級較小,所以SWB側的接口為指定接口,而SWC側的接口即為非指定接口,進入Blocking狀態
PortFast
如果終端設備直接連接在交換機上,也需要等待30秒的話,會出現問題,比如DHCP超時。所以,可以配置交換機的接口為PortFast模式,PortFast的接口不會介入STP選舉的過程,不需要等待30秒的選舉過程。但是不能用在Trunck接口上,因為如果用在Trunck接口上啟用PortFast,交換機之間無法進行STP選舉,極易產生環路。所以PortFast一般只用在直連終端的“接入接口”。