摘 要: 在STP基礎上提出了一種快速的環路保護算法。該算法能夠提供毫秒級的環路消除和故障恢復能力且開銷小。最后介紹了該算法在硬件上的實現。
關鍵詞: 冗余鏈路;環路保護;STP
交換式以太網已廣泛應用到工廠、煤礦、電力等場所。為了提高網絡可靠性,網絡需要具備冗余鏈路。交換網絡環路為交換網絡提供冗余鏈路,消除了由于單點故障而引起的網絡中斷,但同時形成數據環路,會引發二層交換網絡的廣播風暴,導致網絡癱瘓[1]。
為了解決冗余鏈路引起的問題,環路保護技術應運而生。生成樹協議STP(IEEE 802.1D,Spanning Tree Protocol)通過阻塞冗余端口進行鏈路備份,使得網絡中斷后可在30 s~60 s內恢復。為了縮短網絡自愈時間,IEEE又提出了與STP兼容的快速生成樹協議RSTP (Rapid Spanning Tree Protocol),其收斂時間為秒級[2]。
本文在分析STP這種主流的環路保護技術的基礎上,提出了快速環路保護技術(RRP)。針對環型拓撲,RRP克服了傳統STP自愈時間長的缺點,可達到毫秒級的網絡自愈時間,而且復雜度低,便于實現。
1 生成樹工作原理及其缺點
STP是將一個存在物理環路的交換網絡變成一個沒有環路的邏輯樹型網絡,實現在邏輯上裁剪冗余環路,同時在物理上實現鏈路備份和路徑最優化。STP通過Config-BPDU數據包來構造樹型網絡,通過Tcn-BPDU來通告網絡拓撲變化。STP算法步驟如下:
(1)選舉根節點。擁有最小標識的節點將成為根節點。選舉過程開始時,所有節點都聲明自己是根。當節點的一個端口收到高優先級的Config-BPDU時,就在該端口保存這些信息,同時向所有端口更新并傳播信息。如果收到比自己低優先級的Config-BPDU,節點就丟棄該信息。根節點的所有端口置為轉發狀態。
(2)確定根端口。對每個非根節點,選擇一個到根節點路徑最短的端口作為此節點的根端口。所有根端口置為轉發狀態。
(3)確定指定端口。多個節點連接到同一網段時,代價最小的節點被稱為指定節點,取指定節點在此網段上的一個端口作為指定端口。指定端口通過逐個考查與端口相連的網段來確定,選擇指定端口的依據首先是路徑成本,路徑成本低的端口將成為指定端口。所有指定端口置為轉發狀態。
(4)等待拓撲變化。若根節點故障,其余各節點的每個端口都收不到Config-BPDU數據包,則等待Config-BPDU數據包的計時器都超時,都認為自己是根節點,開始重新構建樹型網絡,重復步驟(1)~(3)。
通過對STP工作原理的分析,找到STP自愈時間長的幾個原因:
(1)每個節點端口角色確定復雜。節點有根端口、指定端口和阻塞端口3種角色。各節點的端口不停地發送和接收Config-BPDU。每個端口根據收到的BPDU數據包不斷更新端口配置信息,計算出根端口、指定端口和阻塞端口。根端口和指定端口還要經過2個Forward Delay Time才能進入轉發狀態。
(2)根節點沒有主動的故障偵測能力,這導致STP對拓撲結構的改變響應緩慢。拓撲變化時,發現拓撲變化的節點向根節點方向發送Tcn-BPDU,通告過程中存在多次應答,等到根節點收到Tcn-BPDU后發送攜帶拓撲改變標志位的Config-BPDU,通知其他節點刷新MAC地址表,確立新路徑。新選出的根端口和指定端口也要經過2個Forward Delay Time才能進入轉發狀態。
2 RRP算法設計及實現
交換機端口對數據的處理無非是丟棄或轉發,因此可以將交換機端口狀態分為阻塞和轉發兩種。根交換節點是網絡的邏輯中心而非物理中心,為了提高拓撲改變的反應速度,根交換節點需要自發故障檢測,而不依賴其他交換節點的故障通告。
2.1 快速環路保護算法(RRP)
(1)選擇根節點。根節點是環網狀態主動檢測機制的發起者,也是網絡拓撲發生改變后執行操作的決策者。初始時,各交換節點在hello-timer的作用下定時從兩個級聯端口發送環路健康檢測報文,即hello報文,交換節點收到報文后,進行優先級判斷,選擇出根交換機,ID越小,優先級越高。如果收到報文的ID比自己的ID小,表明自己為傳輸節點,從另一端口轉發收到的報文,自己不再發送hello報文;如果收到報文的ID比自己的ID大,就丟棄此報文;如果收到自己的報文,說明自己為根節點,表明有環,阻塞自己一個端口,定時發送hello報文。
(2)根節點環路檢測。根節點定時從兩個級聯端口發送hello報文來檢測環路健康狀況。若根節點能收到自己的hello報文,則表明環路是完整的;如果在wait-timer內收不到hello報文,就認為環網發生鏈路故障。
(3)故障發現。若設備或鏈路發生故障,與故障鏈路相連的端口置為阻塞狀態。根節點收不到自己發出的hello報文,wait-timer超時,表明環路不完整,出現故障,根節點把之前阻塞的端口打開,同時發送flush報文,通知其他傳輸節點更新地址轉發表。傳輸節點收到根節點的flush報文后,刷新地址轉發表,重新進行地址學習。
(4)故障恢復。故障消除后,根節點重新收到自己發出的hello報文,表明環路存在,根節點阻塞自己一個級聯端口。由于拓撲發生變化,根節點發出flush報文,通知其他交換節點刷新地址表,與恢復鏈路相連的兩端口置為轉發狀態。
(5)根節點失效檢測。若根節點發生故障,傳輸節點收不到hello報文,wait-timer超時,各傳輸節點均阻塞端口,開始發送hello報文,重新選出一個根節點。
圖1描述了RRP算法的實現過程。圖1(a)中各節點向兩個方向發送hello報文。圖1(b)中由于B1的ID最小,被選為根節點,(B1,P1)阻塞,環路消除。圖1(c)中節點B3和B4間發生故障,(B3,P1)和(B4,P0)阻塞,根節點收不到hello報文,wait-timer超時,(B1,P1)置為轉發,并向兩方向發送flush報文。圖1(d)中各節點收到flush報文后,刷新地址表,B1定時發送hello報文。圖1(e)中節點B3和B4間故障修復,(B3,P1)和(B4,P0)仍保持阻塞,B1收到自己的hello報文,意識到環路的存在,重新阻塞端口(B1,P1),并向兩方向發送flush報文。圖1(f)中節點B3和B4收到根節點的flush報文后,把(B3,P1)和(B4,P0)置為轉發態,根節點定時發送hello報文。網絡拓撲重新收斂。

2.2 RRP算法的硬件實現
本文基于穩定拓撲的以太環網保護切換方案定義了2種端口狀態、9種節點狀態和8類事件,使用狀態機可以靈活實現狀態的轉移和事件的處理。
(1)端口狀態
PS0:阻塞,端口只處理協議控制報文,不接收或轉發數據,不進行地址學習;
PS1:轉發,端口接收并轉發數據,處理協議控制報文,開始地址學習。
(2)節點狀態
S0:IDLE,環上端口阻塞;
S1:根節點,環上端口一個轉發,一個阻塞,未成環狀態,發送flush報文;
S2:根節點,環上端口一個轉發,一個阻塞,成環狀態,發送flush報文;
S3:非根節點,環上端口轉發;
S4:根節點,環上端口一個轉發,一個阻塞,未成環狀態;
S5:根節點,環上端口一個轉發,一個阻塞,成環狀態;
S6:根節點,環上端口一個轉發,一個阻塞,未成環狀態,發送hello報文;
S7:根節點,環上端口一個轉發,一個阻塞,成環狀態,發送hello報文;
S8:根節點,環上端口阻塞,發送hello報文。
(3)事件
E1:收到低優先級的hello報文;
E2:收到同優先級的hello報文;
E3:收到高優先級的hello報文;
E4:收到flush報文;
E5:hello-timer超時;
E6:wait-timer超時;
E7:flush報文發送完畢;
E8:hello報文發送完畢。
(4)RRP算法的實現框圖如圖2所示。

交換機將收到的RRP報文存放在緩沖隊列中,有高優先級、低優先級和同優先級3種類型。接收報文的同時,計時器超時事件也可能同時發生,對于發生的組合事件,需要判斷事件優先級再進行相應處理。報文處理模塊將要發送的RRP報文寫入端口的FIFO中,同時控制地址轉發表的刷新、端口的阻塞和轉發控制。
兩個計時器的值可調,其中hello-timer設為10 ms,wait-timer設為20 ms。Modelsim仿真結果表明,消除數據環路的時間和單點故障后的保護切換時間均在40 ms內。Synplify綜合結果表明,在150萬門的芯片上實現該算法需要占用2%的資源。這說明RRP能夠提供快速的保護切換能力且開銷小。
報文處理模塊的狀態機如圖3所示。

局域網中的冗余鏈路提高了網絡可靠性,但引起了數據環路。本文在分析傳統STP算法缺點及其原因的基礎上,提出了一種快速環路保護方法,其實現復雜度低,可提供毫秒級的保護切換。該算法已用硬件實現,實驗表明,該算法能夠提供快速的保護倒換能力且開銷小,具有良好的應用前景。
參考文獻
[1] IEEE 802.1D 2004. Media Access Control (MAC)Bridges[S]. 2003.
[2] IEEE Std 802.1W 2001. Media Access Control(MAC)Bridges Amendment 2:Rapid Reconfiguration[S]. 2001.
[3] 宋燁,朱杰.STP協議實驗測試與仿真測試的比較和研究[J].電子測量技術,2007,30(5):129-132.
[4] 沈一波,石旭剛,張勝,等.基于穩定拓撲的以太環網保護[J].微型機與應用,2009,28(21):53-56.
[5] 吉萌,詹翊春,余少華.以太環網的路徑保護和恢復算法的研究和實現[J].小型微型計算機系統,2006,27(4):596-599.
