之前的文章介紹了Cisco網路交換器在網路中的定位和運作的原理,眼尖的讀者可能會想到,過去筆者所介紹的文章都是比較單純的網路環境,僅假設網路架構只有單一的網路交換器,這是為了方便說明,但大多企業型的網路環境不可能只有一個交換器,多個交換器存在時很容易出現一些網路問題。為此,本文將特別介紹多個交換器所可能發生的問題,以及相關的解決方案。
從圖中可以看出,在下面兩台交換器設備中,其上面的埠通往交換器C一定可以消耗最少的成本,因為Segment 1的網路速度是100 BaseT,所以這兩台設備的上面的埠都是Root Ports。
這兩台交換器設備的下面兩個埠中,必須選出一個埠當作Designated Port。因為「每個網路區段都必須要有一個Designated Port」,而這個Designated Port到Root Bridge的成本消耗也必須是比較低的。
但是就圖上這兩個埠而言,它們到達Root Bridge所花費的成本都是一樣多,此時就要根據BID來選擇,BID較低的就是Designated Port。
由於交換器A的BID比較低(因為MAC位址的值比較低),所以交換器A下面的埠就是Designated Port,而最後沒有被選上的交換器B的下端埠,就變成Non-designated Port,這個Non-designated Port的目的就在於破壞整個網路造成的迴圈。
事實上,STP之所以要如此複雜,其目的就在於建立一個「不具網路迴圈的最佳網路路線圖」,因為希望能夠得到最佳的網路路線圖,所以整個考量因素便會著重於網路成本之中,使那些可以用最低成本就可以到達整個網路各個設備的埠能被夠使用。
在STP製作出來的網路路線中,Non-designated Port的角色就相當於「後備」埠,如果原本正在運作的埠中有任何一個突然無法正常運作的話,整個網路的STP就會重新運作並計算出最佳的非迴圈網路路線,並把Non-designated Port重新啟動,加入整個STP運算的考量之中。
因此,當原本非Non-designated Port不正常運作時,至少會有一個原本是Non-designated Port會變成Root Port或是Designated Port。
除了不正常運作之外,當橋接器或交換器設備在20秒之內沒有收到任何的BPDU的話,一樣也會重新採用STP計算最佳網路拓樸。此外,當網路架構中有新增或是移除設備的話,也會重新執行STP協定的運算過程。
各種埠的狀態
看到這裡,想必讀者已經知道STP的詳細運作流程與目的,而在STP運作完成後,會產生各種角色的埠。
如同之前範例所看到的Designated Port,Root Port和Non-designated Port等等,Designated Port和Root Port都是處在轉發(Forwarding)的狀態,而Non-designated Port則處於封鎖(Blocking)的狀態。
事實上,當STP重新運算時,埠從封鎖的狀態要變成轉發的狀態,期間還會經過其他的狀態,在STP運作途中,總共有四種狀態,分別是Blocking、Listening,Learning和Forwarding狀態。
當STP被啟動時,各個埠都會先處於Blocking狀態,接著經過Listening狀態,再變成Learning狀態,如果設定一切正常的話,最後埠會穩定地變成Blocking或是Forwarding狀態。若變成Forwarding狀態,就代表從這個埠到Root Bridge的成本比較低。
前面提到,當有任何原本是Forwarding狀態的埠不正常運作時,STP就會重新計算,此時,各個埠會重新變成Listening和Learning狀態。
直到STP運算穩定下來之後,埠才會被決定要處於Forwarding狀態,還是Blocking狀態。因此,從Blocking要轉變成Forwarding狀態的過程如下圖所示:
Blocking狀態
一開始,各個埠都是處於Blocking狀態,此時,這些埠會等候並監聽BPDU的到來,在這種等待的過程中,最多會等待20秒,如果在這20秒期間,都沒有收到來自其他交換器的BPDU的話,這個埠就會自動變成Listening狀態。
而當交換器在開機之後,都會認為自己這台設備是Root Bridge,所以每一台設備都會傳送BPDU到其他設備,但是等到STP運算結束之後,只有Root Bridge才會發送BPDU給其他設備。
Listening狀態
從Blocking狀態變成Listening狀態之後,就可以發送或接收BPDU封包,但是這時無法發送和接收使用者的資料封包。
當各個埠處於Listening的狀態時,所有的交換器會完成以下這三件事情:
1. 選擇誰來當Root Bridge。
2. 在Non-root Bridge設備上決定Root Port。
3. 在每一個網路區段上選出一個Designated Port。
Learning與Forwarding狀態
Learning狀態是用來學習各個交換器和橋接器設備的MAC位址,以避免轉發資料時所必須的Flooding動作。
如果當某個埠在這種學習的過程結束之後,還是屬於Root Port或Designated Port的話,這些埠就會被轉變成Forwarding狀態。
當埠處於Forwarding狀態時,這個埠就可以用來發送和接收資料封包。當然,若學習結束之後,那些不是Root Port或是Designated Port的埠都會轉成Blocking狀態。
從Listening狀態轉換成Learning狀態的時間差,以及從Learning狀態轉變成Forwarding狀態的時間差,都稱為「Forward Delay」,預設值是15秒。