《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 以太網(wǎng)快速環(huán)網(wǎng)保護(hù)算法的設(shè)計(jì)和實(shí)現(xiàn)
以太網(wǎng)快速環(huán)網(wǎng)保護(hù)算法的設(shè)計(jì)和實(shí)現(xiàn)
來源:微型機(jī)與應(yīng)用2012年第13期
李 富,程子敬,李 周
(北京衛(wèi)星信息工程研究所,北京 100086)
摘要: 在STP基礎(chǔ)上提出了一種快速的環(huán)路保護(hù)算法。該算法能夠提供毫秒級(jí)的環(huán)路消除和故障恢復(fù)能力且開銷小。最后介紹了該算法在硬件上的實(shí)現(xiàn)。
Abstract:
Key words :

摘  要:STP基礎(chǔ)上提出了一種快速的環(huán)路保護(hù)算法。該算法能夠提供毫秒級(jí)的環(huán)路消除和故障恢復(fù)能力且開銷小。最后介紹了該算法在硬件上的實(shí)現(xiàn)。
關(guān)鍵詞: 冗余鏈路;環(huán)路保護(hù);STP

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

2.2 RRP算法的硬件實(shí)現(xiàn)
 本文基于穩(wěn)定拓?fù)涞囊蕴h(huán)網(wǎng)保護(hù)切換方案定義了2種端口狀態(tài)、9種節(jié)點(diǎn)狀態(tài)和8類事件,使用狀態(tài)機(jī)可以靈活實(shí)現(xiàn)狀態(tài)的轉(zhuǎn)移和事件的處理。
?。?)端口狀態(tài)
 PS0:阻塞,端口只處理協(xié)議控制報(bào)文,不接收或轉(zhuǎn)發(fā)數(shù)據(jù),不進(jìn)行地址學(xué)習(xí);
 PS1:轉(zhuǎn)發(fā),端口接收并轉(zhuǎn)發(fā)數(shù)據(jù),處理協(xié)議控制報(bào)文,開始地址學(xué)習(xí)。
?。?)節(jié)點(diǎn)狀態(tài)
 S0:IDLE,環(huán)上端口阻塞;    
 S1:根節(jié)點(diǎn),環(huán)上端口一個(gè)轉(zhuǎn)發(fā),一個(gè)阻塞,未成環(huán)狀態(tài),發(fā)送flush報(bào)文;
 S2:根節(jié)點(diǎn),環(huán)上端口一個(gè)轉(zhuǎn)發(fā),一個(gè)阻塞,成環(huán)狀態(tài),發(fā)送flush報(bào)文;
 S3:非根節(jié)點(diǎn),環(huán)上端口轉(zhuǎn)發(fā);
 S4:根節(jié)點(diǎn),環(huán)上端口一個(gè)轉(zhuǎn)發(fā),一個(gè)阻塞,未成環(huán)狀態(tài);
 S5:根節(jié)點(diǎn),環(huán)上端口一個(gè)轉(zhuǎn)發(fā),一個(gè)阻塞,成環(huán)狀態(tài);
 S6:根節(jié)點(diǎn),環(huán)上端口一個(gè)轉(zhuǎn)發(fā),一個(gè)阻塞,未成環(huán)狀態(tài),發(fā)送hello報(bào)文;
 S7:根節(jié)點(diǎn),環(huán)上端口一個(gè)轉(zhuǎn)發(fā),一個(gè)阻塞,成環(huán)狀態(tài),發(fā)送hello報(bào)文;
 S8:根節(jié)點(diǎn),環(huán)上端口阻塞,發(fā)送hello報(bào)文。
 (3)事件
 E1:收到低優(yōu)先級(jí)的hello報(bào)文;    
 E2:收到同優(yōu)先級(jí)的hello報(bào)文;
 E3:收到高優(yōu)先級(jí)的hello報(bào)文;    
 E4:收到flush報(bào)文;
 E5:hello-timer超時(shí);        
 E6:wait-timer超時(shí);
 E7:flush報(bào)文發(fā)送完畢;            
 E8:hello報(bào)文發(fā)送完畢。
 (4)RRP算法的實(shí)現(xiàn)框圖如圖2所示。

 

 

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

 局域網(wǎng)中的冗余鏈路提高了網(wǎng)絡(luò)可靠性,但引起了數(shù)據(jù)環(huán)路。本文在分析傳統(tǒng)STP算法缺點(diǎn)及其原因的基礎(chǔ)上,提出了一種快速環(huán)路保護(hù)方法,其實(shí)現(xiàn)復(fù)雜度低,可提供毫秒級(jí)的保護(hù)切換。該算法已用硬件實(shí)現(xiàn),實(shí)驗(yàn)表明,該算法能夠提供快速的保護(hù)倒換能力且開銷小,具有良好的應(yīng)用前景。
參考文獻(xiàn)
[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協(xié)議實(shí)驗(yàn)測(cè)試與仿真測(cè)試的比較和研究[J].電子測(cè)量技術(shù),2007,30(5):129-132.
[4] 沈一波,石旭剛,張勝,等.基于穩(wěn)定拓?fù)涞囊蕴h(huán)網(wǎng)保護(hù)[J].微型機(jī)與應(yīng)用,2009,28(21):53-56.
[5] 吉萌,詹翊春,余少華.以太環(huán)網(wǎng)的路徑保護(hù)和恢復(fù)算法的研究和實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(4):596-599.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。