程子敬,李 富,李 周
(北京卫星信息工程研究所 北京 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.