天天看點

HCIA STP的端口狀态與BPDU

一、前言

前面我們研究了STP原理

先回顧一下根橋、根端口、指定端口的選舉依據。

根網橋選舉依據:

1)先看優先級

2)優先級一樣看MAC位址

3)相對較小的是根網橋

這裡BID其實就是交換機的優先級+交換機MAC位址

根端口,指的是非根網橋(交換機)所有端口中,距離根網橋最近的端口,選舉依據有:

1)路徑開銷,就是端口的帶寬,帶寬越大開銷越小,端口總開銷的計算是“将根橋到達端口前所有’入’端口開銷加起來”,這裡隻計算入口不計算出口,總開銷較小的就是根端口。我們使用的交換機端口預設開銷都是200000,這個可以通過display stp查詢。

2)對端BID,如果開銷一緻,則比較對端的BID(也就是CIST Bridge的值),值較小的就是根端口。

3)對端PID,如果BID也一樣就比較對端的PID,PID指的是Port ID,由端口優先級(預設128)+端口号組成。

4)本端PID,如果對端PID也一樣,那就比較本端的PID,較小的就是根端口了。

指定端口,指的是鍊路上的兩個端口中,距離根網橋最近的端口,選舉依據有:

1)路徑開銷,鍊路上兩個端口中路徑開銷最小的就是指定端口

2)交換機BID,路徑開銷一樣時,鍊路上兩個端口所在交換機BID較小的是指定端口

3)端口PID,BID也一樣時,則比較端口的PID,較小的是指定端口

阻塞端口,一個端口如果既非根端口又非指定端口,那就是阻塞端口了。

綜上,我們可以發現所有選舉的依據其實就是:

1)BID:交換機優先級(預設32768)+交換機MAC位址

2)PID:端口優先級(預設128)+端口号

3)路徑開銷:與端口帶寬相關的一個值,帶寬越大值越小

二、BPDU封包

封包内容如下圖所示,标紅的部分就是與選舉有關的字段,可以看到它囊括了BID、PID、路徑開銷,足夠我們來實作STP協定了。

HCIA STP的端口狀态與BPDU

三、選舉過程與端口狀态

1.初始關機狀态

我們可以假設網絡互聯的交換機都已配置好了STP,并且現在都是關機狀态。

HCIA STP的端口狀态與BPDU

2.選舉

現在同時啟動四台交換機,由于他們都配置了STP,是以STP協定開始發揮作用。

由STP的機制可知,一開始所有交換機都認為自己是“根橋”,他們會将BPDU封包中的Root Identifier字段設定為自己的BID并向網絡中其他交換機發自己的BPDU,具體怎麼發的不知道,但是我們知道網絡中所有交換機都能收到其他交換機的BPDU就行了。

如下圖應當是交換機啟動時各端口向隔壁發BPDU的情況。

HCIA STP的端口狀态與BPDU

交換機收到其他BPDU後就比較Root Identifier字段中的BID與自己的BID,如果發現自己的BID比較大,那就将BPDU中Root Identifier替換這個較小的BID并向隔壁的交換機繼續發。向下圖這樣應當就是各交換機通過BPDU最終收集到的資訊,包括了根橋BID、對端BID、對端PID、本端BID、本端PID,依據這些資訊就可以選舉出根橋、根端口、指定端口。

HCIA STP的端口狀态與BPDU

3.端口狀态與時間門檻值

交換機自然不是一啟動就完成了根橋和各端口的選舉,他必然是有一個過程的,從啟動交換機到端口選舉再到MAC學習整個過程如下:

1)交換機啟動,啟動後所有端口預設進入Disabled:禁用狀态,端口既不處理和轉發BPDU封包,也不轉發使用者流量。端口會在這種狀态下停留10秒鐘時間。很自然的,交換機剛啟動需要預留10秒鐘時間來等待自身穩定。10秒鐘的Disabled結束後,交換機會先進入Blocking:阻塞狀态,并持續20秒鐘時間。不知道為啥需要這20秒。

2)選舉根橋和各端口,交換機接着進入Listening:偵聽狀态,端口可以轉發BPDU封包,但不能轉發使用者流量。在預設情況下,該端口會狀在這種态下停留15秒鐘的時間。很明顯這時候網絡中的交換機通過交換BPDU來擷取必要資訊并選舉出根橋、根端口、指定端口和非根非指定端口(也就是需要阻塞的那個)。

3)學習MAC位址,選好根橋和各端口後進入Learning:學習狀态。端口可根據收到的使用者流量建構MAC位址表,但不轉發使用者流量預設情況下,端口會在這種狀态下停留15秒鐘時間。

4)轉發流量,學習好MAC位址後端口就進入Forwarding:轉發狀态。端口既可轉發使用者流量也可轉發BPDU封包,隻有根端口或指定端口才能進入Forwarding狀态。

5)阻塞端口,那麼非根端口和非指定端口,就再次進入Blocking:阻塞狀态,端口僅僅能接收并處理BPDU,不能轉發BPDU,也不能轉發使用者流量。

四、網絡變化與收斂時間

如下圖,我們有這樣一個拓撲的網絡,我已經根據前面的計算方式把根橋、根端口、指定端口、阻塞端口都标出來,并在交換機上逐一确認過标注是對的。

HCIA STP的端口狀态與BPDU

假如我們現在把LSW2與LSW3中間的鍊路拔掉,根據規則LSW3的E0/0/1會成為根端口,但其端口需要經過“Listening:偵聽狀态和Learning:學習狀态”這兩個狀态,也就是需要最少30秒才能完成穩定。

現在考慮另一個場景,假如網絡中接入另一台交換機LSW5,他上電開機後,一般會影響到兩連的兩個交換機,但假如其優先級比别人都小一點(比如改成4096而别人都是32768),然後我們把這個交換機上電後再接入到網絡中。

HCIA STP的端口狀态與BPDU

很明顯網絡需要重新選舉根橋、根端口、指定端口等,但根據我實際觀察隻有一部分端口受到影響,會逐漸經曆Blocking:阻塞狀态、Listening:偵聽狀态、Learning:學習狀态這三個階段,也就是至少需要50秒網絡才能真正穩定。

這30秒和50秒也就是STP的收斂時間。

五、回顧

總的來說,STP使用BPDU這個封包來傳遞各種資訊,包括BID、PID、路徑開銷等,交換機收集到各種資訊後“選舉”出根橋、根端口、指定端口,最後将非根非指定端口阻塞,這個過程會經曆Disabled:禁用狀态(10秒)、Blocking:阻塞狀态(20秒)、Listening:偵聽狀态(15秒)、Learning:學習狀态(15秒),最後根端口和指定端口進入Forwarding:轉發狀态,非根非指定端口進入Blocking:阻塞狀态。

我們将端口進入穩定狀态需要的時間稱為收斂時間,不同的網絡變動可能需要的收斂時間不一樣,主要有30秒和50秒兩種。