之前的文章介紹了Cisco網路交換器在網路中的定位和運作的原理,眼尖的讀者可能會想到,過去筆者所介紹的文章都是比較單純的網路環境,僅假設網路架構只有單一的網路交換器,這是為了方便說明,但大多企業型的網路環境不可能只有一個交換器,多個交換器存在時很容易出現一些網路問題。為此,本文將特別介紹多個交換器所可能發生的問題,以及相關的解決方案。
在這個網路架構圖中,Segment 1和Segment 2這兩個網段分別連接到交換器A和交換器B這兩台交換器,因而造成網路拓樸的迴圈發生。
而STP的效用就在於自動辨識出這樣的網路迴圈,並藉由封鎖某一個埠的流通來解除這樣的網路迴圈(例如封鎖交換器A下面這個埠)。
當然,當網路線路出現一定的問題時,STP會自動調整所有的埠,也許某些被封鎖的埠又會再次被開啟,或是當網路架構改變時,STP也會自動改變需要被封鎖的埠,以便提升整體網路的最大效能。預設上,Cisco Catalyst交換器系列的設備上,STP是開啟的。
運作流程
到這裡,各位讀者都已經知道STP的目的與效用,接著介紹STP的運作流程。STP運用兩個關鍵性的概念來避免網路迴圈:Bridge ID(BID)以及網路路徑所需的花費。
以下面這個網路架構圖來解釋整個運作流程,而運作過程主要分成以下幾個步驟:
1. 選出Root Bridge。
2. 在每一個Non-root Bridge中選出Root Port。
3. 每一個網段中選出Designated Port。
基本運作流程
底下先針對整體步驟做一個大略說明,接著根據每一個細節來解釋運作方式。
第一步驟:選出Root Bridge
第一步驟就是選出Root Bridge,在一個網路中只有一台設備可以當Root Bridge,而在Root Bridge上的所有的埠都稱為Designated Port,Designated Port通常都處於Forwarding(轉發)的狀態,也就是隨時可以協助轉發(接收並送出)封包。
這裡假設交換器A被選為Root Bridge,這個時候,網路上其他的交換器設備就全部是Non-root Bridge。
第二步驟:選出Root Port
接下來,在每一個Non-root Bridge上都必須選出一個Root Port,Root Port的定義是從Non-root Bridge到Root Bridge之間能夠花費最少的成本,這些Root Port一樣都是處於轉發的狀態中。
由上面這個範例圖中可以看出,交換器B這個Non-root Bridge經由Segment 1到達交換器A可以用最少的成本來達成,因為Segment 1是100 BaseT,相對之下,Segment 2的10 BaseT的網路速度明顯慢了許多,所以走Segment 2會花費比較多的成本。
第三步驟:選出Designated Port
接著就是在每一個網路區段中選出一個Designated Port,Designated Port代表從這個Port到Root Bridge的成本最低,在以上這個範例中,因為兩個網路區段的Designated Port都在Root Bridge上,所以都已經被選好了。
至於其他的Ports就都是Non-designated Port,又稱為NDB,這種Port是處於Block(封鎖)的狀態,所以沒有辦法轉發任何的封包。
所以在上面這個例子中,交換器B下面的這個Port就是Non-designated Port,而因為這個Port被Block住,所以整個網路迴圈就不再存在了。
這是整個STP運作的大致流程,以下分別針對每個步驟做詳細的說明。到這裡為止,請把握幾個大重點:
1. 每一個網路只能有一個Root Bridge。
2. 每一個Non-root Bridge上面只能有一個Root Port。
3. 每一個網路區段(Segment)中僅只能有一個Designated Port。
4. 每一個Non-designated Port都是被封鎖住,也就是不會作用的。
底下針對上面的步驟,做更詳細的說明,以便於解釋剛才那些是如何選出來的。
如何選取Root Bridge?
基本上,選取Root Bridge的條件是BID,也就是Bridge ID。Bridge ID是由交換器的優先序(Priority)和MAC位址所組成。而這些資料都是放在BPDU之中,BPDU的全稱為Bridge Protocol Data Unit。
同一個網路上所有運作於STP協定的交換器和橋接器設備都會定期交換BPDU,預設上,所有的設備會每隔兩秒交換一次,而交換的方式是採用群播(Multicast)的方式來進行。
優先序是由兩個bytes所組成,而MAC位址當然就是由6個bytes所組成。在802.1d的STP協定中,優先序的預設值是32768,其二進位是1000 0000 0000 0000,十六進位就是0x8000,其實也就是兩個bytes所能表達之數字範圍內的中間值。
優先序和MAC位址的值越低,代表BID的值越低,而交換器如果擁有越低的BID值,代表這台設備越有機會成為Root Bridge。
以上圖為例,這兩台交換器設備都是使用預設的優先序,也就是32768,但是因為交換器A的MAC位址設定值比較低,所以交換器A就是Root Bridge。
其實,這個優先序可以自行更改,能夠依照網管人員的網路規劃做不同的設定。
如何決定各個埠的角色?
一旦決定Root Bridge之後,其他的交換器和橋接器 設備就都是Non-root Bridge,在Root Bridge上的各個Ports一定都是Designated Ports,接著要在這些其他的Non-root Bridge中決定哪個埠要當成Root Port。接著來看稍微複雜一點的範例。
從下頁這個圖例來看,根據第一步驟的概念,很輕易地得知交換器C是這整個網路的Root Bridge,所以交換器C上面的埠都是Designated Ports。而由於Root Port的定義是指能以最少的成本到達Root Bridge的埠就叫做Root Port。