程子敬,李 富,李 周
(北京衛星信息工程研究所 北京 100086)
以太網的環冗余在一定程度上解決了以太網的容錯問題,提高了以太網的可靠性。通過形成非常清晰和有效的冗余結構,用戶能夠獲得非常高的網絡利用率。冗余模式構造了一個簡單環,這個環保證了在一條數據鏈路故障的情況下數據的傳輸。許多快速的冗余算法為適應環冗余不斷出現,即使在需要改變網絡拓撲或增加設備的時候,這些算法和以太網環布局也能保證繼續進行生產操作,使得在網絡還在運作時也能保持和擴大網絡。
交換式高速以太網啟用環冗余的反應時間通常在50 ms~1 s范圍內,這意味著在一個設備出錯后,網絡短時間后再次被利用。但是某些場合中的工業以太網,會要求更高的可用性和不間斷運行。即使短暫的連接中斷,也可能會導致很大損失,例如在一些自動化,車輛,發電和配電系統。
在以太網環冗余的基礎上,提出一種高可靠并行環網冗余處理算法及其實現技術,結合冗余處理算法,可實現故障時的無縫切換,進一步提高了網絡的可靠性。
以太網環冗余技術有不同的標準,主要有生成樹協議和以RFC3619為基礎而衍生的各種環網專用協議。
生成樹保護[1-2]的基本思想十分簡單,自然界中生長的樹是不會出現環路的,如果網絡也能夠像一棵樹一樣生長就不會出現環路。所以,生成樹保護的根本目的是將一個存在物理環路的交換網絡變成一個沒有環路的邏輯樹型網絡,達到邏輯上裁剪冗余環路,同時物理上實現鏈路備份和路徑最優化。生成樹協議可應用于任意網格拓撲結構。基于通路成本和優先考慮,它實現了分布式計算一棵樹。通過阻塞網橋端口,建立活動的樹型拓撲。如果故障,那棵樹就重新配置,恢復時間通常在秒級,包括生成樹協議,快速生成樹協議和多生成樹協議。
IETF RFC3919[3-4]由于其簡單靈活的實現方式,已經被眾多設備制造商實現,并衍生出多個私有技術。核心思想都是基于標準MAC交換+改進的生成樹算法+以太網故障檢測機制+簡單環網控制協議。RFC3619僅限于環結構。環的主節點通過阻塞它的一個環上端口,將環型拓撲變為鏈型拓撲。出現故障后,之前阻塞的端口打開,重構時間是在100 ms范圍。
以太網環冗余技術在故障發生后的恢復時間一般在50 ms~1 s。但在某些重要的控制領域,即使不到1 s的連接中斷,也可能造成很大損失。嚴格的應用如同步驅動、機器人控制、電力變電站和其他,可能要求容忍時間小于10 ms或更少。這種情況下,傳統的以太網環冗余技術不能滿足要求。
針對單環網在高可靠應用場景中的不足,并行環網結合了環冗余的優點,進行雙網冗余,且雙網之間故障獨立。兩個環網不能用同一電源供電,且不能直接連接。每一幀在發送終端被復制,在兩個網絡傳輸。接收終端處理接收到的兩個相同幀,使兩個網絡對上層透明。這種網絡結構下,若一個局域網發生單點故障時,以太網環冗余技術可以保證本局域網正常工作。只要雙網中有一個網正常工作,通信就能夠正常進行,可以極大的提高網絡通信系統的可靠性。由于雙網同時運行,即使單網故障時,也可以無縫切換,不會發生丟包。
如圖1所示,環網A和環網B同時運行。終端包含雙以太網控制器和雙網絡端口,分別接入LAN_A和LAN_B。

圖1 并行環網結構Fig.1 Parallel ring structure
環網拓撲對于環路上任一鏈路的故障都提供了一定程度的冗余。環網拓撲正常通信的條件是所有交換機都正常工作,且至多只能有一條鏈路出現故障。因此環網鏈路可靠性表達式為:

其中:A為單條鏈路可用度表達式;N為環網中交換機之間的鏈路總數。
假設單個環網中交換機的個數為M(M=N),則單環網的可用性框圖如圖3所示。

圖2 單環網的可用性Fig.2 Availability of single ring
則并行環網通信系統的可用度為:

其中:

ASW為單臺交換機的可用度。
并行環網中,任意兩個終端正常通信的條件是兩個終端正常工作,至少一個環網工作正常且此環網與兩個終端間的鏈路工作正常。任意兩終端通信的可用度為:

其中AT為終端可用度。
并行雙環網結構提高了通信系統的可靠性,但存在以下問題:每一幀在發送終端被復制,在兩個網絡傳輸,則接收終端會收到兩個相同的幀。因此終端需要處理冗余幀,只接收其中一個。
為解決此問題,提出了冗余處理算法:
接收終端為LAN_A和LAN_B分別保持一個連續的序列號滑動丟棄窗口。窗口上界為 e(expectedSeq),下界為s(startSeq),c(currentSeq)表示當前收到的幀序列號。變量expectedSeqA為從LAN_A期望收到的下一幀序列號。變量expectedSeq_B為從LAN_B期望收到的下一幀序列號。

圖3 LAN_A的滑動丟棄窗口Fig.3 Sliding drop window of LAN_A
圖中,s為 startSeqA,c為 currentSeqA,e為 expectedSeqA。
1)接收終端初始化LAN_A和LAN_B的滑動丟棄窗口。
2)若從LAN_A上接收到的幀序號在LAN_B的丟棄窗口外,幀被保留。
LAN_B丟棄窗口變為0,startSeqB=expectedSeqB。
LAN_A丟棄窗口變為1,startSeqA=currentSeqA。
如果LAN_A的丟棄窗口達到最大值,需要增加startSeqA來減小丟棄窗口。
若從LAN_A上接收到的幀序號在LAN_B的丟棄窗口內,幀被丟棄。
LAN_A丟棄窗口變為0,startSeqA=currentSeqA+1。
LAN_B丟棄窗口的下界,startSeqB=currentSeqA+1。
無論是丟棄還是保留該幀,expectedSeqA=currentSeqA+1。
同理,LAN_B的丟棄窗口處理方法與此相同。
3)冗余處理算法返回處理結果:保留或丟棄。
本文在Linux平臺下實現冗余處理算法。Linux內核為用戶提供了虛擬網絡設備TUN/TAP[5],TUN/TAP為用戶空間程序提供了網絡數據包的發送和接收能力。TUN是一個虛擬的點對點三層設備,處理IP分組。TAP是虛擬以太網設備,工作在第二層,處理以太網幀。利用TUN/TAP驅動,可以將TCP/IP協議棧處理好的網絡分包傳給使用TUN/TAP驅動的冗余處理進程,由冗余處理進程重新處理后發到物理鏈路中。利用pcap library[6]進行二層網絡數據包的捕獲,為抓包軟件提供接口。
圖4為冗余處理程序與其它協議棧和應用的關系圖。終端的網卡1(ETHO)接入LAN_A,網卡2(ETH1)接入到LAN_B,通過原始套接字將接收到的幀提交到應用層冗余處理模塊進行處理,然后經過虛擬網絡設備被應用程序接收。發送的幀在冗余處理模塊被復制,在兩個網絡中傳輸。兩塊網卡配置為相同的MAC地址和IP地址,為虛擬網絡設備指定IP。

圖4 冗余處理的實現Fig.4 Redundancy processing
在圖2的拓撲結構中,終端1和終端2創建冗余處理進程,終端1利用局域網軟件飛鴿傳書向終端2傳輸文件,文件傳輸過程中,用WireShark抓包軟件監視終端1的數據包發送情況及終端2的數據包接收情況,驗證故障發生時,并行雙網是否能無縫切換。測試結果表明,在各種鏈路中斷情況下,只要鏈路1A、2A正常連接或1B、2B正常連接,終端2就能正確接收終端1發送的數據,丟包率為0。
并行雙環網在以太網環冗余的基礎上,進一步提高了網絡的可靠性,可實現單網故障時的無縫切換,丟包率為0,在高可靠性要求場合有良好應用前景。
[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]林滸,張樂,雷為民.虛擬局域網的設計與實現[J].小型微型計算機系統,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嵌入式嗅探器的設計與實現[J].計算機應用與軟件,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.