廖伯勛
(廣州工商學院,廣東 廣州 510850)
在中大型企業園區網中,大量交換機彼此連接形成較大的交換區塊。為了消除單點故障帶來的問題,交換機之間的連接通常會增加冗余鏈路,以提高網絡的可靠性。然而二層交換機對主機在網絡中的位置認知有缺陷,使得冗余鏈路形成的環路會導致嚴重問題。為了解決冗余鏈路帶來的問題,802.1d標準的生成樹協議被推出[1]。經過多年改進,最新版為802.1s多生成樹協議,并在實際企業園區網絡中廣泛應用。然而802.1s多生成樹協議原理比較抽象復雜,網絡學習者在缺少實驗設備的情況下很難理解。為了加深網絡學習者對其工作原理的理解,掌握其配置命令,本文使用華為模擬器eNSP搭建網絡拓撲,設計了802.1s多生成樹協議仿真實驗,使網絡學習者不受設備的限制,隨時隨地進行實驗,提高了網絡學習者分析問題和實踐操作能力。
交換機S1和S2之間連接了兩條鏈路,形成了環路。該環路將引起廣播風暴、MAC地址漂移等問題[2],如圖1所示。

圖 1 交換機之間形成的環路
第一,MAC地址表項漂移。當PC1發送ARP請求時,交換機S1先根據ARP請求報文的二層源MAC地址建立MAC地址表項,隨后對該報文進行轉發。由于ARP請求報文為廣播報文,交換機S1無法查詢到與其匹配的表項,故S1會將該廣播報文復制并發往除了接收接口(Ethernet0/0/1)以外的所有其他接口。假設交換機S2先從GE0/0/1接口接收到ARP請求報文,則建立PC1的MAC地址與GE0/0/1接口相關聯的MAC地址表項,并從其他接口轉發該數據幀。然后S2再從GE0/0/2接口接收到ARP請求報文,則建立PC1的MAC地址與GE0/0/2接口相關聯的MAC地址表項。此時新的MAC地址表項立即覆蓋了舊的MAC地址表項,從而產生“MAC地址表項漂移”的現象。而S2將GE0/0/1接收的ARP請求報文從GE0/0/2轉回給S1,然后將GE0/0/2接收的ARP請求報文從GE0/0/1轉回給S1,又會引起S1上的“MAC地址表項漂移”現象。
第二,廣播風暴。網絡層IP數據報中設置了TTL字段,TTL的值再經過三層設備轉發后會遞減。當TTL的值為0時,該IP數據報將被當前設備丟棄,從而防止網絡層IP數據報因為環路而被無休止地轉發。而二層交換機并無類似的機制,故前文提到的廣播報文將在該網絡中無休止地轉發下去,形成“廣播風暴”,消耗交換機S1和S2的CPU資源及網絡帶寬。
第三,MAC地址表項錯誤。由于“MAC地址表項漂移”現象的發生,交換機對PC1的認知頻繁更新,并且都是錯誤的(交換機S1認為PC1連接在GE0/0/1或GE0/0/2兩個接口中的其中一個,但實際上PC1只連接在S1的Ethernet0/0/1接口上)。這將導致其他設備將無法與PC1通信。
二層環路引起的問題是由冗余鏈接產生的,解決這些問題的關鍵在于消除二層網絡中的冗余鏈接。生成樹協議正是通過在邏輯上阻塞冗余鏈接的方式,使交換機之間無法形成環路,從而生成一棵無環的“樹”。此為“生成樹”的由來。若只是為了形成無環的二層網絡,則只需在網絡建設之初舍棄冗余鏈接即可。但冗余鏈接是為了保證網絡的可靠性,避免單點故障帶來的網絡中斷。生成樹協議并非只能靜態地阻塞冗余鏈接,若當前激活的鏈路發生故障,生成樹協議會將原來處于阻塞狀態的鏈路激活,從而巧妙地修復了網絡故障。
生成樹協議(Spanning Tree Protocol,STP),是由IEEE(電氣與電子工程師協會)發布的一種通用標準協議,是一種網橋嵌套協議,主要用于解決冗余網絡中的廣播風暴問題[2]。
STP一共經歷了3個版本,分別為最初的802.1d生成樹協議、改進的802.1w快速生成樹協議和最新的802.1s多生成樹協議。多生成樹協議允許對流量進行分流并將其分配給不同的虛擬局域網,使每個虛擬局域網都滿足生成樹協議[3]。
第一,選舉根橋。只有根橋才能發送BPDU,非根橋只能接收和轉發根橋始發的BPDU。在一個交換區塊中,開啟了生成樹協議的交換機都通過接口發送BPDU數據報文。通過比較BPDU中Root ID字段的值來選舉根橋,該值為發送該BPDU交換機的Bridge ID。先比較Root ID中的優先級,較小者為根橋,如相同,則繼續比較Root ID中的MAC地址,較小者為根橋。由于MAC地址全球唯一,最終一定能選出根橋。選出根橋之后,只能由根橋發送BPDU,非根橋接收和轉發BPDU。
第二,選舉根端口。非根橋從所有接口中選出一個作為根端口,用于接收根橋發來的BPDU。最多經過4個步驟,即可選出根端口。第一步,先比較接收到的BPDU中的Root ID字段的值。若一個接口收到的BPDU中的Root ID值最小,則該接口的角色為根端口。第二步,若Root ID相同,則進一步比較接口接收到的BPDU中的CoP字段的值加上接口本身的度量值之和,該值最小的接口為根端口。第三步,若該值仍相等,進一步比較Bridge ID。若一個接口收到的BPDU中的Bridge ID值最小,則該接口的角色為根端口。第四步,若Bridge ID相同,最后比較Port ID字段。先比較端口優先級,較小者為優,若端口優先級相同,再比較端口編號,較小者為優。由于同一設備上端口編號必不相同,故此步驟必定能選出跟端口。
第三,選舉指定端口。在一臺交換機上可以有多個指定端口,用于根橋發送BPDU,或者非根橋用來轉發根橋發來的BPDU。選舉辦法與根端口類似,最多經過4個步驟,即可選出指定端口。與根端口選舉不同的地方是,在第二步中,僅比較CoP字段的值即可,無須加上接口本身的度量值。
第四,確定非指定端口。非指定端口為阻塞端口。非根橋上除了根端口和指定端口,其他端口都是非指定端口。
eNSP是華為官方的網絡仿真工具平臺,可對路由器、交換機等網絡設備進行軟件仿真,讓廣大網絡學習者可以在缺少網絡設備的情況下進行模擬實驗。在eNSP中使用2臺S5700作為匯聚層交換機、2臺S3700作為接入層交換機,接入層交換機AS1和AS2分別與匯聚層交換機連接,其拓撲結構如圖2所示。

圖 2 802.1s多生成樹協議仿真實驗拓撲圖
在以上拓撲中,接入層交換機AS1與匯聚層交換機DS1和DS2都有連接,DS1和DS2也有直連鏈路。三臺設備組成環形結構,若不開啟生成樹協議,將容易引起廣播風暴、MAC地址漂移等問題。
假設該網絡中有VLAN110、VLAN120、VLAN130、VLAN140等4個VLAN。為 了 充 分 利 用 鏈 路 帶寬,將DS1設置為VLAN110和VLAN130的主根網橋,VLAN120和VLAN140備份根網橋;將DS2設置為VLAN120和VLAN140的 主 根 網 橋,VLAN110和VLAN130備份根網橋。
第一,配置匯聚層交換機鏈路模式。在DS1和DS2上將彼此連接的鏈路接口,以及連接接入層交換機的接口配置成trunk模式,并放行相關的VLAN。配置如下,GE0/0/2和GE0/0/24的配置與GE0/0/1相同。

以上配置完成后,可用命令display port vlan 查看端口的vlan配置情況。
第二,配接入層交換機鏈路模式。在接入層交換機AS1和AS2上將上行鏈路配置為trunk模式,并放行相關VLAN。配置與上一步驟類似。可用命令display port vlan檢查trunk端口的狀態。
第三,創建VLAN。在各交換機上創建VLAN110、VLAN120、VLAN130和VLAN140。命令如下,以DS1為例。
[DS1]vlan batch 110 120 130 140
以上命令配置完成后,可用命令display vlan或display vlan summary查看VLAN信息。
第四,配置多生成樹協議。在各交換機上配置stp region-configuration。具體命令如下,只列出DS1的配置,DS2、AS1和AS2的配置與AS1類似。
[DS1]stp mode mstp
[DS1]stp region-configuration //進入MST域配置視圖
[DS1-mst-region]region-name gzgs //配 置MST域的域名為gzgs
[DS1-mst-region]revision-level 1 //配置MST域的修訂級別為1
[DS1-mst-region]instance 1 vlan 110 130 //配置實例1與VLAN的映射關系
[DS1-mst-region]instance 2 vlan 120 140 //配置實例2與VLAN的映射關系
[DS1-mst-region]active region-configuration //激活MST域配置
第五,配置根網橋。將DS1配置為多生成樹實例1的主根網橋,實例2的備份根網橋;將DS2配置為多生成樹實例2的主根網橋,實例1的備份根網橋。

第一,正常情況下的多生成樹協議運行情況。在DS1上使用display stp instance 1命令查看多生成樹協議實例1的狀態,如圖3所示。

圖 3 DS1上的多生成樹協議實例1的狀態
圖中顯示,DS1的MSTI 1的Bridge ID與RegRoot ID一致,同 MSTI Root Type也顯示Primary root,說明DS1為instance 1的根網橋。DS1的MSTI 2的Bridge ID與RegRoot ID不一致,優先級為4096,同時MSTI Root Type顯示Secondary root,說明DS1為instance 2的備份根網橋。
在AS1上使用display stp brief查看的多生成樹協議接口狀態。如圖4所示。

圖 4 AS1上的多生成樹協議接口狀態
圖中顯示AS1上與DS1相連的GE0/0/1接口為多生成樹協議實例1的根端口,同時與DS2相連的GE0/0/2接口為阻塞端口,即與實例1關聯的VLAN10和VLAN30的流量通過GE0/0/1轉發,而不能通過GE0/0/2接口轉發。表明此時物理上的環型鏈路,已被多生成樹協議從邏輯上進行了修剪,變成了樹型的網絡拓撲。
第二,模擬鏈路故障時,多生成樹協議的運行情況。在DS1上,進入GE0/0/1接口,并使用命令shutdown關閉接口。觀察多生成樹協議的運行情況,如圖5所示。

圖 5 關閉DS1的GE0/0/1接口后AS1上的生成樹協議端口角色變化
圖中顯示,由于DS1的GE0/0/1已關閉,導致該鏈路狀態變為down,故AS1的GE0/0/2接口角色從原來ALTE轉變為ROOT,端口狀態從原來的阻塞(DISGARDING)狀態轉變為轉發(FORWARDING)。由此可見,生成樹協議能根據鏈路狀態的變化,自動調整端口角色,以適應網絡拓撲的變更,提高網絡的可用性。
對802.1s多生成樹協議進行了分析,在eNSP模擬器上搭建了網絡拓撲,進行了多生成樹協議模擬仿真。完整配置命令較長,限于篇幅,只列出關鍵命令。仿真結果表明,802.1s多生成樹協議通過多個生成樹實例既保證了主備切換的高可靠性,又實現負載分擔的高利用率[4]。