我們介紹乙太網交換機生成樹協議的基本概念。
請大家思考一下,應該如何提高乙太網的可靠性呢?例如如圖所示的乙太網,由三臺交換機互聯而成,每個交換機上都連線有一些主機,為了簡單起見,我們只畫出了每個交換機上連線的一臺主機,如果交換機 A 與 B 之間的鏈路出現了故障,則交換機 B 上連線的所有主機,既無法與交換機 A 上連線的所有主機進行通訊,也無法與交換機 C 上連線的所有主機進行通訊。
如果交換機 A 與交換機 B 和 C 之間的鏈路都出現了故障,則原來的乙太網變成了三個獨立的較小的乙太網,他們之間無法通訊。相信很多同學已經想到了,可以透過新增冗餘鏈路的方法來提高乙太網的可靠性。
例如在本例中,我們給交換機 B 和 C 之間新增一條冗餘鏈路後,即使交換機 A 和 B 之間的鏈路出現了故障,整個網路還是聯通的,但是冗餘鏈路也會帶來負面效應,那就是形成網路環路。如圖所示,網路環路會帶來一些問題。例如廣播風暴,我們來舉例說明,假設主機 H1 傳送了一個廣播幀,交換機 B 收到該幀號,將其從自己的其他所有介面轉發出去,交換機 A 收到交換機 B 轉發來的該幀後,將其從自己的其他所有介面轉發出去。
同樣的交換機 C 收到交換機 B 轉發來的該證號,將其從自己的其他所有介面轉發出去;交換機 C 收到交換機 A 轉發來的該幀後,將其從自己的其他所有介面轉發出去。
同樣的,交換機 A 收到交換機 C 轉發來的該幀後,將其從自己的其他所有介面轉發出去。交換機 B 收到交換機 C 轉發來的該幀後,將其從自己的其他所有介面轉發出去。
同樣的,交換機 B 收到交換機 A 轉發來的蓋章後,將其從自己的其他所有介面轉發出去。
很顯然該廣播幀將在各交換機之間反覆轉發,分別按順時針和逆時針方向同時兜圈,這就是所謂的廣播風暴,廣播風暴會大量消耗網路資源,使得網路無法正常轉發其他資料幀,也會使主機反覆收到廣播幀,大量消耗主機資源,還會使交換機的幀交換表震盪(漂移),如圖所示,這是交換機 B 的幀交換表,這是其各介面的介面號。為了簡單起見,假設各主機的名稱也可作為其 MAC 地址,當交換機 B 收到主機 H1 傳送的廣播幀後進行登記工作,將幀的源 MAC 地址 H1 和幀進入交換機 B 的介面號 1 登記到幀交換表中,這條記錄是正確的。
當交換機 B 再次收到交換機 C 轉發來的該廣播幀後進行登記工作,將幀的源 MAC 地址 H1 和幀進入交換機 B 的介面號 2,這條錯誤記錄登記到幀交換表中,並刪除原先正確的記錄。
當交換機 B 再次收到交換機 A 轉發來的該廣播幀號進行登記工作,將幀的源 MAC 地址 H1 和幀進入交換機 B 的介面號 3,這條錯誤記錄登記到幀交換表中,並刪除原先錯誤的記錄。
當交換機 B 再次收到交換機 C 轉發來的該廣播幀後進行登記工作,將幀的源 MAC 地址 H1 和幀進入交換機 B 的介面號 2,這條錯誤記錄登記到幀交換表中,並刪除原先錯誤的記錄。很顯然有關 MAC 地址 H1 的記錄將在這兩個錯誤記錄之間反覆震盪。
為了可以在增加冗餘鏈路來提高網路可靠性的同時,又避免網路環路帶來的各種問題。乙太網交換機使用生成樹協議,其英文縮寫詞為 STP 不論交換機之間採用怎樣的物理連線,使用生成樹協議的交換機都能夠自動計算,並構建出一個邏輯上沒有環路的網路,其邏輯拓撲結構必須是樹形的,也就是沒有邏輯環路。
我們來舉例說明,如圖所示,為了提高可靠性,5 臺交換機之間進行了冗餘連線,冗餘鏈路不止一條,網路環路也不止一個。為了簡單起見,各交換機上連線的主機沒有畫出。我們用綠色的小圓圈表示交換機的介面狀態為正常狀態,用橙色的小方塊表示交換機的介面狀態為阻塞狀態,用紅色的叉表示出現了故障,如果各交換機的各介面都處於正常狀態,則會存在多個網路環路。實際上各交換機之間按照生成樹協議中規定的生成樹演算法,互動一些引數後,就可以判斷出自己應該阻塞自己的哪些介面。例如圖中所示,這樣就會形成一個邏輯上沒有環路的網路,如圖所示。
當然這個邏輯上沒有環路的網路,一定要確保聯通整個網路,否則就沒有意義了。當首次連線交換機或網路物理拓撲發生變化時,這有可能是人為改變造成的,也有可能是出現故障造成的,交換機都將進行生成樹的重新計算。例如假設這段鏈路出現了故障,相關交換機檢測到該故障後,重新計算生成樹,決定將自己之前阻塞的介面恢復為正常狀態,這樣就會形成一個新的邏輯上沒有環路的網路。
需要說明的是,生成樹協議所使用的生成樹演算法,以超出本系列課程的教學大綱,對生成樹演算法感興趣的同學,可以參看我們的另一個系列課程,計算機網路簡明教程和模擬實驗。