程子敬,李 富,李 周
(北京衛(wèi)星信息工程研究所 北京 100086)
以太網(wǎng)的環(huán)冗余在一定程度上解決了以太網(wǎng)的容錯(cuò)問(wèn)題,提高了以太網(wǎng)的可靠性。通過(guò)形成非常清晰和有效的冗余結(jié)構(gòu),用戶能夠獲得非常高的網(wǎng)絡(luò)利用率。冗余模式構(gòu)造了一個(gè)簡(jiǎn)單環(huán),這個(gè)環(huán)保證了在一條數(shù)據(jù)鏈路故障的情況下數(shù)據(jù)的傳輸。許多快速的冗余算法為適應(yīng)環(huán)冗余不斷出現(xiàn),即使在需要改變網(wǎng)絡(luò)拓?fù)浠蛟黾釉O(shè)備的時(shí)候,這些算法和以太網(wǎng)環(huán)布局也能保證繼續(xù)進(jìn)行生產(chǎn)操作,使得在網(wǎng)絡(luò)還在運(yùn)作時(shí)也能保持和擴(kuò)大網(wǎng)絡(luò)。
交換式高速以太網(wǎng)啟用環(huán)冗余的反應(yīng)時(shí)間通常在50 ms~1 s范圍內(nèi),這意味著在一個(gè)設(shè)備出錯(cuò)后,網(wǎng)絡(luò)短時(shí)間后再次被利用。但是某些場(chǎng)合中的工業(yè)以太網(wǎng),會(huì)要求更高的可用性和不間斷運(yùn)行。即使短暫的連接中斷,也可能會(huì)導(dǎo)致很大損失,例如在一些自動(dòng)化,車輛,發(fā)電和配電系統(tǒng)。
在以太網(wǎng)環(huán)冗余的基礎(chǔ)上,提出一種高可靠并行環(huán)網(wǎng)冗余處理算法及其實(shí)現(xiàn)技術(shù),結(jié)合冗余處理算法,可實(shí)現(xiàn)故障時(shí)的無(wú)縫切換,進(jìn)一步提高了網(wǎng)絡(luò)的可靠性。
以太網(wǎng)環(huán)冗余技術(shù)有不同的標(biāo)準(zhǔn),主要有生成樹(shù)協(xié)議和以RFC3619為基礎(chǔ)而衍生的各種環(huán)網(wǎng)專用協(xié)議。
生成樹(shù)保護(hù)[1-2]的基本思想十分簡(jiǎn)單,自然界中生長(zhǎng)的樹(shù)是不會(huì)出現(xiàn)環(huán)路的,如果網(wǎng)絡(luò)也能夠像一棵樹(shù)一樣生長(zhǎng)就不會(huì)出現(xiàn)環(huán)路。所以,生成樹(shù)保護(hù)的根本目的是將一個(gè)存在物理環(huán)路的交換網(wǎng)絡(luò)變成一個(gè)沒(méi)有環(huán)路的邏輯樹(shù)型網(wǎng)絡(luò),達(dá)到邏輯上裁剪冗余環(huán)路,同時(shí)物理上實(shí)現(xiàn)鏈路備份和路徑最優(yōu)化。生成樹(shù)協(xié)議可應(yīng)用于任意網(wǎng)格拓?fù)浣Y(jié)構(gòu)。基于通路成本和優(yōu)先考慮,它實(shí)現(xiàn)了分布式計(jì)算一棵樹(shù)。通過(guò)阻塞網(wǎng)橋端口,建立活動(dòng)的樹(shù)型拓?fù)?。如果故障,那棵?shù)就重新配置,恢復(fù)時(shí)間通常在秒級(jí),包括生成樹(shù)協(xié)議,快速生成樹(shù)協(xié)議和多生成樹(shù)協(xié)議。
IETF RFC3919[3-4]由于其簡(jiǎn)單靈活的實(shí)現(xiàn)方式,已經(jīng)被眾多設(shè)備制造商實(shí)現(xiàn),并衍生出多個(gè)私有技術(shù)。核心思想都是基于標(biāo)準(zhǔn)MAC交換+改進(jìn)的生成樹(shù)算法+以太網(wǎng)故障檢測(cè)機(jī)制+簡(jiǎn)單環(huán)網(wǎng)控制協(xié)議。RFC3619僅限于環(huán)結(jié)構(gòu)。環(huán)的主節(jié)點(diǎn)通過(guò)阻塞它的一個(gè)環(huán)上端口,將環(huán)型拓?fù)渥優(yōu)殒溞屯負(fù)?。出現(xiàn)故障后,之前阻塞的端口打開(kāi),重構(gòu)時(shí)間是在100 ms范圍。
以太網(wǎng)環(huán)冗余技術(shù)在故障發(fā)生后的恢復(fù)時(shí)間一般在50 ms~1 s。但在某些重要的控制領(lǐng)域,即使不到1 s的連接中斷,也可能造成很大損失。嚴(yán)格的應(yīng)用如同步驅(qū)動(dòng)、機(jī)器人控制、電力變電站和其他,可能要求容忍時(shí)間小于10 ms或更少。這種情況下,傳統(tǒng)的以太網(wǎng)環(huán)冗余技術(shù)不能滿足要求。
針對(duì)單環(huán)網(wǎng)在高可靠應(yīng)用場(chǎng)景中的不足,并行環(huán)網(wǎng)結(jié)合了環(huán)冗余的優(yōu)點(diǎn),進(jìn)行雙網(wǎng)冗余,且雙網(wǎng)之間故障獨(dú)立。兩個(gè)環(huán)網(wǎng)不能用同一電源供電,且不能直接連接。每一幀在發(fā)送終端被復(fù)制,在兩個(gè)網(wǎng)絡(luò)傳輸。接收終端處理接收到的兩個(gè)相同幀,使兩個(gè)網(wǎng)絡(luò)對(duì)上層透明。這種網(wǎng)絡(luò)結(jié)構(gòu)下,若一個(gè)局域網(wǎng)發(fā)生單點(diǎn)故障時(shí),以太網(wǎng)環(huán)冗余技術(shù)可以保證本局域網(wǎng)正常工作。只要雙網(wǎng)中有一個(gè)網(wǎng)正常工作,通信就能夠正常進(jìn)行,可以極大的提高網(wǎng)絡(luò)通信系統(tǒng)的可靠性。由于雙網(wǎng)同時(shí)運(yùn)行,即使單網(wǎng)故障時(shí),也可以無(wú)縫切換,不會(huì)發(fā)生丟包。
如圖1所示,環(huán)網(wǎng)A和環(huán)網(wǎng)B同時(shí)運(yùn)行。終端包含雙以太網(wǎng)控制器和雙網(wǎng)絡(luò)端口,分別接入LAN_A和LAN_B。
圖1 并行環(huán)網(wǎng)結(jié)構(gòu)Fig.1 Parallel ring structure
環(huán)網(wǎng)拓?fù)鋵?duì)于環(huán)路上任一鏈路的故障都提供了一定程度的冗余。環(huán)網(wǎng)拓?fù)湔Mㄐ诺臈l件是所有交換機(jī)都正常工作,且至多只能有一條鏈路出現(xiàn)故障。因此環(huán)網(wǎng)鏈路可靠性表達(dá)式為:
其中:A為單條鏈路可用度表達(dá)式;N為環(huán)網(wǎng)中交換機(jī)之間的鏈路總數(shù)。
假設(shè)單個(gè)環(huán)網(wǎng)中交換機(jī)的個(gè)數(shù)為M(M=N),則單環(huán)網(wǎng)的可用性框圖如圖3所示。
圖2 單環(huán)網(wǎng)的可用性Fig.2 Availability of single ring
則并行環(huán)網(wǎng)通信系統(tǒng)的可用度為:
其中:
ASW為單臺(tái)交換機(jī)的可用度。
并行環(huán)網(wǎng)中,任意兩個(gè)終端正常通信的條件是兩個(gè)終端正常工作,至少一個(gè)環(huán)網(wǎng)工作正常且此環(huán)網(wǎng)與兩個(gè)終端間的鏈路工作正常。任意兩終端通信的可用度為:
其中AT為終端可用度。
并行雙環(huán)網(wǎng)結(jié)構(gòu)提高了通信系統(tǒng)的可靠性,但存在以下問(wèn)題:每一幀在發(fā)送終端被復(fù)制,在兩個(gè)網(wǎng)絡(luò)傳輸,則接收終端會(huì)收到兩個(gè)相同的幀。因此終端需要處理冗余幀,只接收其中一個(gè)。
為解決此問(wèn)題,提出了冗余處理算法:
接收終端為L(zhǎng)AN_A和LAN_B分別保持一個(gè)連續(xù)的序列號(hào)滑動(dòng)丟棄窗口。窗口上界為 e(expectedSeq),下界為s(startSeq),c(currentSeq)表示當(dāng)前收到的幀序列號(hào)。變量expectedSeqA為從LAN_A期望收到的下一幀序列號(hào)。變量expectedSeq_B為從LAN_B期望收到的下一幀序列號(hào)。
圖3 LAN_A的滑動(dòng)丟棄窗口Fig.3 Sliding drop window of LAN_A
圖中,s為 startSeqA,c為 currentSeqA,e為 expectedSeqA。
1)接收終端初始化LAN_A和LAN_B的滑動(dòng)丟棄窗口。
2)若從LAN_A上接收到的幀序號(hào)在LAN_B的丟棄窗口外,幀被保留。
LAN_B丟棄窗口變?yōu)?,startSeqB=expectedSeqB。
LAN_A丟棄窗口變?yōu)?,startSeqA=currentSeqA。
如果LAN_A的丟棄窗口達(dá)到最大值,需要增加startSeqA來(lái)減小丟棄窗口。
若從LAN_A上接收到的幀序號(hào)在LAN_B的丟棄窗口內(nèi),幀被丟棄。
LAN_A丟棄窗口變?yōu)?,startSeqA=currentSeqA+1。
LAN_B丟棄窗口的下界,startSeqB=currentSeqA+1。
無(wú)論是丟棄還是保留該幀,expectedSeqA=currentSeqA+1。
同理,LAN_B的丟棄窗口處理方法與此相同。
3)冗余處理算法返回處理結(jié)果:保留或丟棄。
本文在Linux平臺(tái)下實(shí)現(xiàn)冗余處理算法。Linux內(nèi)核為用戶提供了虛擬網(wǎng)絡(luò)設(shè)備TUN/TAP[5],TUN/TAP為用戶空間程序提供了網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和接收能力。TUN是一個(gè)虛擬的點(diǎn)對(duì)點(diǎn)三層設(shè)備,處理IP分組。TAP是虛擬以太網(wǎng)設(shè)備,工作在第二層,處理以太網(wǎng)幀。利用TUN/TAP驅(qū)動(dòng),可以將TCP/IP協(xié)議棧處理好的網(wǎng)絡(luò)分包傳給使用TUN/TAP驅(qū)動(dòng)的冗余處理進(jìn)程,由冗余處理進(jìn)程重新處理后發(fā)到物理鏈路中。利用pcap library[6]進(jìn)行二層網(wǎng)絡(luò)數(shù)據(jù)包的捕獲,為抓包軟件提供接口。
圖4為冗余處理程序與其它協(xié)議棧和應(yīng)用的關(guān)系圖。終端的網(wǎng)卡1(ETHO)接入LAN_A,網(wǎng)卡2(ETH1)接入到LAN_B,通過(guò)原始套接字將接收到的幀提交到應(yīng)用層冗余處理模塊進(jìn)行處理,然后經(jīng)過(guò)虛擬網(wǎng)絡(luò)設(shè)備被應(yīng)用程序接收。發(fā)送的幀在冗余處理模塊被復(fù)制,在兩個(gè)網(wǎng)絡(luò)中傳輸。兩塊網(wǎng)卡配置為相同的MAC地址和IP地址,為虛擬網(wǎng)絡(luò)設(shè)備指定IP。
圖4 冗余處理的實(shí)現(xiàn)Fig.4 Redundancy processing
在圖2的拓?fù)浣Y(jié)構(gòu)中,終端1和終端2創(chuàng)建冗余處理進(jìn)程,終端1利用局域網(wǎng)軟件飛鴿傳書(shū)向終端2傳輸文件,文件傳輸過(guò)程中,用WireShark抓包軟件監(jiān)視終端1的數(shù)據(jù)包發(fā)送情況及終端2的數(shù)據(jù)包接收情況,驗(yàn)證故障發(fā)生時(shí),并行雙網(wǎng)是否能無(wú)縫切換。測(cè)試結(jié)果表明,在各種鏈路中斷情況下,只要鏈路1A、2A正常連接或1B、2B正常連接,終端2就能正確接收終端1發(fā)送的數(shù)據(jù),丟包率為0。
并行雙環(huán)網(wǎng)在以太網(wǎng)環(huán)冗余的基礎(chǔ)上,進(jìn)一步提高了網(wǎng)絡(luò)的可靠性,可實(shí)現(xiàn)單網(wǎng)故障時(shí)的無(wú)縫切換,丟包率為0,在高可靠性要求場(chǎng)合有良好應(yīng)用前景。
[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]Etrame network’Ethernet automatic protection switching version[S].2003.
[4]G.8032.ITU-T Q9-SGl5.ethernet ring protection overview[S].2008.
[5]林滸,張樂(lè),雷為民.虛擬局域網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2007,28(9):1596-1598.LIN Hu,ZHANG Le,LEI Wei-min.Design and implementation of virtural lan[J].Journal of Chinese Computer Systems,2007,28(9):1596-1598.
[6]于躍,朱程榮.基于Linux嵌入式嗅探器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2007,24(6):162-164.YU Yue,ZHU Cheng-rong.The design of embedded sniffer ba-sed on LINUX[J].Computer Applications and Software,2007,24(6):162-164.