发明内容:
本发明的目的是提供一种快速自愈的变电站环网协议算法和实现方法,它结合了标准MAC交换,故障告警,故障处理和环网控制协议,通过环网控制协议将物理的环变为逻辑的链,从而避免了在环网上形成广播风暴。
为了解决背景技术所存在的问题,本发明是采用以下技术方案:一、环网算法即FRPS(Fast Ring Protection Switch)算法:它包含FRPS环、环端口、控制VLAN、业务VLAN、主节点、传输节点、控制帧。
所述的FRPS环:FRPS算法是针环网方式组网的以太网,FRPS算法必须运行在环网上,所以将FRPS环定义为运行了FRPS算法的以太环网。
所述的环端口:在以太环网上,每个节点都有2个端口连接在环上。这两个端口就称为环端口。
所述的控制VLAN:在FRPS算法中,应用了VLAN技术。环上所有环端口都会加入控制VLAN。控制VLAN上传输的是为了维护FRPS算法而生成的各种控制帧,但不传输其他以太网帧。
所述的业务VLAN:在FRPS环上,除了控制VLAN,还设置了业务VLAN。环网上的所有端口都加入业务VLAN。业务VLAN上传输的是各种数据报文和普通以太网帧。在正常工作状态下环上会有一个端口在业务VLAN上保持阻塞,这样就能避免环网上产生广播风暴。
所述的主节点:在FRPS环上的特殊节点。在正常工作状态下,这个节点负责阻塞环路,避免广播风暴的形成。在环网上出现故障时,主节点就将打开备份链路,实现保护切的功能。主节点的两个环端口分别称为主端口和从端口。正常状态下,从端口对业务VLAN保持阻塞;故障状态下,从端口解除对业务VLAN的阻塞。主端口在两种状态下都保持转发状态。
所述的传输节点:在FRPS环上除了主节点以外的其他节点都称为传输节点。在正常状态下,这传输节点的两个端口都不阻塞,而是保持在转发状态。当节点的端口出现故障,就会将故障端口阻塞。
所述的控制帧:在控制VLAN上传输的用于FRPS算法的报文。控制帧上包含当前节点的状态以及两个环端口的状态。每个节点都会定时发送控制帧到环上,控制帧在环上传输后,可使环上其他节点都得到发送节点的信息。这样的方式可以使每个节点都得到环上所有节点的信息。
FRPS算法的工作原理:在FRPS环上有一个主节点,这个主节点在初始时将从端口对业务VLAN设为阻塞,主端口在业务VLAN上设为转发状态。在控制VLAN上,所有端口都不阻塞都可以进行转发可能工作帧。其他传输节点在初始化时将两个环端口都设为转发状态。初始化后,节点都会生成控制帧,将自身的信息填入控制帧,包括端口状态信息,节点状态和节点角色。控制帧在环网上传输,最终所有节点都获得了环上主节点和传输节点的信息,并保存起来。为了防止控制帧的丢失,控制帧会定时发送。控制帧的定时发送可以使环上的节点获得发送节点的状态,如果发送节点出现故障,如断电,那么环上的节点就无法再收到这个节点的状态,经过一定时间后就会将这个节点的状态删除,也就是认为这个节点已经与FRPS环失去了联系。
在正常情况下,整个FRPS环上就只有一个环端口处于阻塞状态,这个就是主节点的端口处于阻塞状态。正是由于这个端口阻塞了业务VLAN,所以在业务VLAN上没有环路形成。
如果有节点存在端口处于阻塞状态,并且环上不存在故障端口同时又发现主节点的从端口处于阻塞状态,就会立即将阻塞端口打开。由于每个节点都能获得环上所有节点的状态,每个节点就可以根据获得的这些所有节点信息进行判断,并决定是否要需要采取动作。
当链路发生故障时,与故障相邻的节点会立即检测到故障,并将连接故障的端口设为阻塞状态。检测到端口故障的节点,称为故障节点。故障节点会立即将当前端口的状态通过控制帧发送出去,通知环上的传输节点和主节点。
环上的节点收到故障节点发出控制帧后,就会发现环上出现了故障端口,传输节点将节点状态从正常状态变为故障状态,并会立即刷新MAC地址表,并将这个控制帧发送出去。其他传输节点收到这个控制帧也进行相同的操作。
这个控制帧通过各个节点依次转发,最终传输到主节点。当主节点收到这个控制帧后,就会发现环上出现故障端口,原来的传输路径出现了故障,此时主节点就会立即打开从端口,使其进入转发状态,同时也刷新MAC地址表,将节点状态状态变为故障状态。这样主节点就启动了备份链路。同时环上的节点也因受到故障节点发送的控制帧,得知环上有故障端口,刷新了MAC地址表。经过主节点的这个操作就使原来的故障拓扑切换到新的拓扑上,实现了保护切换功能,此时新的拓扑就形成了。
为了防止故障节点发送的控制帧因故丢失,节点会定期发送携带端口状态和节点状态的控制帧。当收到同一个节点发送的相同的控制帧,节点只需转发,而不做任何处理。如果节点第一次收到某个节点控制帧,就会将其保存起来。如果节点收到某个节点发送的不同于之前的控制帧,则表明该节点的状态发生改变,此时,接收节点就会更新本地保存的发送节点的信息,并根据节点的具体改变,采取相应的操作。
当连接故障恢复时,端口就会立即检测到并通知节点。节点发现故障恢复后,仍保持恢复端口为阻塞状态,把端口状态值设为相应的值,并发送控制帧通知主节点。之所以把恢复端口仍设为阻塞状态而没有变为转发状态,是因为如果将恢复端口立即置为转发状态,那么会在环网形成回路,造成广播风暴。在传输节点的端口恢复时,主节点还没有得到端口恢复的消息,所以主节点的从端口还处于转发状态,如果立即将故障端口直接设为转发状态,那么FRPS环上的所有端口都将处于转发状态,这样就会形成回路,那么就会产生广播风暴。所以为了避免回路的形成,节点需要保持恢复端口为阻塞状态。
环上的其他传输节点收到故障恢复节点发送的控制帧时,更新本地保存的节点信息,由于发送节点的故障端口保持在阻塞状态,环上的传输拓扑还没有发送变化,接收节点不会进行其他设置,仅仅是将控制帧转发。
故障恢复节点发送的控制帧经过环上节点的逐个转发,最后到达主节点。当主节点收到这个控制帧时,立即更新本地保存的节点信息。同时主节点会检查本地保存的环节点信息,检查后发现环上节点不再有故障端口,就会立即将从端口设为阻塞状态,刷新地址表,将节点状态变正常状态。同时将主节点最新的端口状态通过控制发送出去。但是,如果当检查保存的所有节点信息后发现,环上还有节点的端口处于故障状态,那么主节点就必须保持从端口为转发状态,而不会对业务VLAN阻塞,因为此时环上还有故障端口,主节点的从端口必须为转发状态,不能回到正常状态。最后主节点将接收的控制帧继续转发,使环上的其他节点获得故障恢复节点的最新状态。
如果环上没有故障端口了,那么主节点就会在阻塞从端口后,在控制帧空将从端口状态设为对应的值,并发送出去。传输节点收到这个控制帧,立即更新本地保存的主节点的信息,可以发现环上的节点没有故障端口,并且主节点已经恢复到正常状态,那么传输节点也可以恢复到正常状态。此时传输节点就会刷新MAC地址表,重新学习新的拓扑,将节点状态设为正常状态,将两个环端口都设为转发状态。同时将端口的状态通过控制帧发送出去。当主节点这个报文传输到环上每个传输节点后,那么整个环路就又恢复到正常状态。对于故障恢复节点,在收到这个控制帧时,就会将解除恢复端口的阻塞,使两个端口都变为转发状态并刷新MAC地址表,学习网络拓扑。通过这个方式使得恢复的网络又能回到正常的状态。
二、本发明的实现方案如下:FRPS的实现是基于和内核空间进行通信来实现的。在内核空间,系统能够对底层的端口进行监控和设置,同时内核空间还能够对底层接收的数据包进行处理,筛选出FRPS协议的控制帧,并通知用户空间的处理程序来处理。在用户空间,FRPS协议的控制帧的发送需要先交给内核空间,再由内核空间来驱动底层硬件发送,并且FRPS协议在实现过程中也需要对端口进行直接的操作,如阻塞,打开阻塞,刷新MAC地址表和发送控制帧。
所以为了用户空间和内核空间的通信,采用了几种方式来达到FRPS协议所需的通信。第一利用netlink的方式来完成用户空间的kernel和FRPS协议的通信,实现控制帧由内核空间到达用户空间的传递。第二,将内核空间的一些端口设置函数进行封装,使得用户空间可以直接调用这些函数,实现对端口的直接控制,并且可以直接利用这些函数将控制报文发送到FRPS环上。在用户空间为了实现FRPS算法,采用了多进程处理的方式,为了满足进程间的通信使用了socket方式。
在用户空间为了实现FRPS算法,编写了3个程序,分别为FRPSenable程序,FRPSdisable程序和FRPSdaemon程序。FRPSenable程序完成了算法的主要功能,包括:节点的初始化,控制帧的生成和发送,控制帧的接收和对端口的控制。FRPSdisable程序用于终止FRPS算法的运行。FRPSdaemon程序实现了内核空间的直接通信,同时也实现了和FRPSenable程序的通信,可以说是FRPSenable和内核空间的沟通桥梁。。
FRPSenable程序完成了FRPS协议主要功能,从协议程序运行开始,首先判断节点是否为主节点,如果是主节点,进行变量初始化,就将其从端口对业务VLAN阻塞,主端口进入转发状态。如果节点为传输节点,也要先进行变量初始化,就将两个环断口都设为转发状态。在设置好端口状态后,就会立即发送一个控制帧,这个控制帧中包含着两个环端口的状态。在发送了控制帧后,就会运行控制帧发送线程和接受线程,直到结束为止。这个初始化的过程不仅包括各种变量的初始化也包括建立各个进程间的通信通道。
发送帧过程的作用是定时地将含有端口状态情况的控制帧发送出去。这个发送间隔定为5秒。这个时间间隔可以人为设定。利用这种定时发送控制帧的方式,可以避免控制帧丢失而无法再环上传播,而且利用这种定时控制帧可以使得环上的节点了解到环上存在的节点情况。
而接收帧过程的作用是接收从FRPSdaemon程序通过Socket方式发送给FRPSenable的控制帧。FRPSenable程序中的接收控制帧线程会根据接收的控制帧的类型进行相应的操作。
当节点收到的控制帧是其他节点发送的控制帧时,由于主节点和传输节点的区别,所以两者对控制帧的处理也存在着差别。
FRPSenable进程中完成了主节点和传输节点对控制帧的接收和处理过程。同时这个过程也是FRPS算法的功能的具体实现。
FRPSdaemon程序也采用了两个线程,分别为端口状态检测线程和接收从内核空间收到的控制帧线程。这个端口状态的变化监控,是利用硬件扫描的方式监控端口的状态,当端口的状态发生变化就会通知内核空间,当内核空间得到这个通知后就会立即利用netlink的方式通知到用户空间的FRPSdaemon程序。当FRPSdaemon程序得到这个消息后,就会将这个消息转化为控制帧的格式并发送给FRPSenable程序来进行处理。FRPSdaemon程序收到内核空从底层硬件接收到的控制帧并将这个控制帧中有用的信息剥离出来并转发给FRPSenable程序,让协议程序来处理。FRPSdaemon程序可以认为FRPSenable程序和内核空间的通信桥梁。
本发明具有以下有益效果:FRPS算法在环网上通过设置主节点,传输节点能够快速的确定备份端口和链路,不必通过漫长的选举过程,并略过监听状态,学习状态,直接进入转发状态,减少了故障时间。当环上出现故障时,传输节点可以从另外一个端口发送控制帧,通知环上的所有节点。在生成树算法中必须在根端口向跟网桥发送TCN报文。在RSTP中,仅当非边缘端口转为转发状态时,拓扑结构才会发生改变,而当节点出现断开时时,并不认为是拓扑发生改变,而在FRPS算法中,对环而言,如果出现链路断开,拓扑对于环上节点而言,是发生变化的,需要进行拓扑的切换和重新学习。
具体实施方式:
参看图2,本具体实施方式是采用以下技术方案:一、环网协议算法即FRPS(Fast Ring Protection Switch)算法:它包含FRPS环、环端口、控制VLAN、业务VLAN、主节点、传输节点、控制帧。
所述的FRPS环:FRPS算法是针环网方式组网的以太网,FRPS算法必须运行在环网上,所以将FRPS环定义为运行了FRPS算法的以太环网。
所述的环端口:在以太环网上,每个节点都有2个端口连接在环上。这两个端口就称为环端口。
所述的控制VLAN:在FRPS算法中,应用了VLAN技术。环上所有环端口都会加入控制VLAN。控制VLAN上传输的是为了维护FRPS算法而生成的各种控制帧,但不传输其他以太网帧。
所述的业务VLAN:在FRPS环上,除了控制VLAN,还设置了业务VLAN。环网上的所有端口都加入业务VLAN。业务VLAN上传输的是各种数据报文和普通以太网帧。在正常工作状态下环上会有一个端口在业务VLAN上保持阻塞,这样就能避免环网上产生广播风暴。
所述的主节点:在FRPS环上的特殊节点。在正常工作状态下,这个节点负责阻塞环路,避免广播风暴的形成。在环网上出现故障时,主节点就将打开备份链路,实现保护切的功能。主节点的两个环端口分别称为主端口和从端口。正常状态下,从端口对业务VLAN保持阻塞;故障状态下,从端口解除对业务VLAN的阻塞。主端口在两种状态下都保持转发状态。
所述的传输节点:在FRPS环上除了主节点以外的其他节点都称为传输节点。在正常状态下,这传输节点的两个端口都不阻塞,而是保持在转发状态。当节点的端口出现故障,就会将故障端口阻塞。
所述的控制帧:在控制VLAN上传输的用于FRPS算法的报文。控制帧上包含当前节点的状态以及两个环端口的状态。每个节点都会定时发送控制帧到环上,控制帧在环上传输后,可使环上其他节点都得到发送节点的信息。这样的方式可以使每个节点都得到环上所有节点的信息。
FRPS算法的工作原理:在FRPS环上有一个主节点,这个主节点在初始时将从端口对业务VLAN设为阻塞,主端口在业务VLAN上设为转发状态。在控制VLAN上,所有端口都不阻塞都可以进行转发可能工作帧。其他传输节点在初始化时将两个环端口都设为转发状态。初始化后,节点都会生成控制帧,将自身的信息填入控制帧,包括端口状态信息,节点状态和节点角色。控制帧在环网上传输,最终所有节点都获得了环上主节点和传输节点的信息,并保存起来。为了防止控制帧的丢失,控制帧会定时发送。控制帧的定时发送可以使环上的节点获得发送节点的状态,如果发送节点出现故障,如断电,那么环上的节点就无法再收到这个节点的状态,经过一定时间后就会将这个节点的状态删除,也就是认为这个节点已经与FRPS环失去了联系。
在正常情况下,整个FRPS环上就只有一个环端口处于阻塞状态,这个就是主节点的端口处于阻塞状态。正是由于这个端口阻塞了业务VLAN,所以在业务VLAN上没有环路形成。
如果有节点存在端口处于阻塞状态,并且环上不存在故障端口同时又发现主节点的从端口处于阻塞状态,就会立即将阻塞端口打开。由于每个节点都能获得环上所有节点的状态,每个节点就可以根据获得的这些所有节点信息进行判断,并决定是否要需要采取动作。
当链路发生故障时,与故障相邻的节点会立即检测到故障,并将连接故障的端口设为阻塞状态。检测到端口故障的节点,称为故障节点。故障节点会立即将当前端口的状态通过控制帧发送出去,通知环上的传输节点和主节点。
环上的节点收到故障节点发出控制帧后,就会发现环上出现了故障端口,传输节点将节点状态从正常状态变为故障状态,并会立即刷新MAC地址表,并将这个控制帧发送出去。其他传输节点收到这个控制帧也进行相同的操作。
这个控制帧通过各个节点依次转发,最终传输到主节点。当主节点收到这个控制帧后,就会发现环上出现故障端口,原来的传输路径出现了故障,此时主节点就会立即打开从端口,使其进入转发状态,同时也刷新MAC地址表,将节点状态状态变为故障状态。这样主节点就启动了备份链路。同时环上的节点也因受到故障节点发送的控制帧,得知环上有故障端口,刷新了MAC地址表。经过主节点的这个操作就使原来的故障拓扑切换到新的拓扑上,实现了保护切换功能,此时新的拓扑就形成了。
为了防止故障节点发送的控制帧因故丢失,节点会定期发送携带端口状态和节点状态的控制帧。当收到同一个节点发送的相同的控制帧,节点只需转发,而不做任何处理。如果节点第一次收到某个节点控制帧,就会将其保存起来。如果节点收到某个节点发送的不同于之前的控制帧,则表明该节点的状态发生改变,此时,接收节点就会更新本地保存的发送节点的信息,并根据节点的具体改变,采取相应的操作。
当连接故障恢复时,端口就会立即检测到并通知节点。节点发现故障恢复后,仍保持恢复端口为阻塞状态,把端口状态值设为相应的值,并发送控制帧通知主节点。之所以把恢复端口仍设为阻塞状态而没有变为转发状态,是因为如果将恢复端口立即置为转发状态,那么会在环网形成回路,造成广播风暴。在传输节点的端口恢复时,主节点还没有得到端口恢复的消息,所以主节点的从端口还处于转发状态,如果立即将故障端口直接设为转发状态,那么FRPS环上的所有端口都将处于转发状态,这样就会形成回路,那么就会产生广播风暴。所以为了避免回路的形成,节点需要保持恢复端口为阻塞状态。
环上的其他传输节点收到故障恢复节点发送的控制帧时,更新本地保存的节点信息,由于发送节点的故障端口保持在阻塞状态,环上的传输拓扑还没有发送变化,接收节点不会进行其他设置,仅仅是将控制帧转发。
故障恢复节点发送的控制帧经过环上节点的逐个转发,最后到达主节点。当主节点收到这个控制帧时,立即更新本地保存的节点信息。同时主节点会检查本地保存的环节点信息,检查后发现环上节点不再有故障端口,就会立即将从端口设为阻塞状态,刷新地址表,将节点状态变正常状态。同时将主节点最新的端口状态通过控制发送出去。但是,如果当检查保存的所有节点信息后发现,环上还有节点的端口处于故障状态,那么主节点就必须保持从端口为转发状态,而不会对业务VLAN阻塞,因为此时环上还有故障端口,主节点的从端口必须为转发状态,不能回到正常状态。最后主节点将接收的控制帧继续转发,使环上的其他节点获得故障恢复节点的最新状态。
如果环上没有故障端口了,那么主节点就会在阻塞从端口后,在控制帧空将从端口状态设为对应的值,并发送出去。传输节点收到这个控制帧,立即更新本地保存的主节点的信息,可以发现环上的节点没有故障端口,并且主节点已经恢复到正常状态,那么传输节点也可以恢复到正常状态。此时传输节点就会刷新MAC地址表,重新学习新的拓扑,将节点状态设为正常状态,将两个环端口都设为转发状态。同时将端口的状态通过控制帧发送出去。当主节点这个报文传输到环上每个传输节点后,那么整个环路就又恢复到正常状态。对于故障恢复节点,在收到这个控制帧时,就会将解除恢复端口的阻塞,使两个端口都变为转发状态并刷新MAC地址表,学习网络拓扑。通过这个方式使得恢复的网络又能回到正常的状态。
在FRPS环上为了保证环网上不形成回路,需要对端口进行阻塞操作,在故障出现时又需要将原来阻塞的端口变为转发状态,如果按照生产树协议算法,端口由监听状态到学习状态在到转发状态,这个时间非常长,所以需要能够使端口在需要的时候立即进入转发状态,而略过这些中间状态,同时还能避免广播风暴的产生。
在运行了FRPS算法的节点上,对端口的状态控制是根据端口现有状态和当前发生的事情来决定的,所以对端口的管理可以根据端口状态机来进行。在FRPS算法中,端口状态机如说明书附图2所示,状态转换条件如下:
A、断开状态到阻塞状态。端口使能,与其他端口连接;主节点上电从端口使能。
B、阻塞状态到到断开状态。端口断开,链路发生故障。
C、阻塞状态到转发状态。主节点认为环网发送故障;节点的端口恢复链接,主节点阻塞从端口后,节点恢复端口恢复转发状态。
D、转发状态到阻塞状态。主节点认为环上的故障恢复时从端口的动作。
E、转发状态到断开状态。端口端口,断电或链路故障。
F、断开状态到转发状态。端口使能,传输节点上电。
结合端口状态机,FRPS算法在运行时就可以进行相应的端口管理操作。当交换芯片运行FRPS算法时,主节点的的从端口进入阻塞状态,而主端口进入转发状态;传输节点的两个环端口都进入转发状态。通过这个操作,这个FRPS环上有一个端口处于阻塞状态,这个环上就不会发送广播风暴,同时主节点的从端口阻塞的链路作为冗余链路起到备份作用。当环网故障时,当某条链路因发送意外而断线,主节点发现后迅速将主节点从端口从断开状态进入转发状态,同时环上节点发现这个故障后都会立即刷新MAC地址表,从而形成新的链路,而与故障相连得端口因链路断开而进入端口状态。当故障修复后,与原故障链路相连的端口从断开状态进入阻塞状态,在主节点发现环网修复后将从端口从转发状态置为阻塞状态,并将通知节点将恢复的阻塞端口进入转发状态。
参看图3,本具体实施方式的实现方案如下:FRPS的实现是基于和内核空间进行通信来实现的。在内核空间,系统能够对底层的端口进行监控和设置,同时内核空间还能够对底层接收的数据包进行处理,筛选出FRPS协议的控制帧,并通知用户空间的处理程序来处理。在用户空间,FRPS协议的控制帧的发送需要先交给内核空间,再由内核空间来驱动底层硬件发送,并且FRPS协议在实现过程中也需要对端口进行直接的操作,如阻塞,打开阻塞,刷新MAC地址表和发送控制帧。
所以为了用户空间和内核空间的通信,采用了几种方式来达到FRPS协议所需的通信。第一利用netlink的方式来完成用户空间的kernel和FRPS协议的通信,实现控制帧由内核空间到达用户空间的传递。第二,将内核空间的一些端口设置函数进行封装,使得用户空间可以直接调用这些函数,实现对端口的直接控制,并且可以直接利用这些函数将控制报文发送到FRPS环上。在用户空间为了实现FRPS算法,采用了多进程处理的方式,为了满足进程间的通信使用了socket方式。
在用户空间为了实现FRPS算法,编写了3个程序,分别为FRPSenable程序,FRPSdisable程序和FRPSdaemon程序。FRPSenable程序完成了算法的主要功能,包括:节点的初始化,控制帧的生成和发送,控制帧的接收和对端口的控制。FRPSdisable程序用于终止FRPS算法的运行。FRPSdaemon程序实现了内核空间的直接通信,同时也实现了和FRPSenable程序的通信,可以说是FRPSenable和内核空间的沟通桥梁。。
参看图4,FRPSenable程序完成了FRPS协议主要功能,从协议程序运行开始,首先判断节点是否为主节点,如果是主节点,进行变量初始化,就将其从端口对业务VLAN阻塞,主端口进入转发状态。如果节点为传输节点,也要先进行变量初始化,就将两个环断口都设为转发状态。在设置好端口状态后,就会立即发送一个控制帧,这个控制帧中包含着两个环端口的状态。在发送了控制帧后,就会运行控制帧发送线程和接受线程,直到结束为止。这个初始化的过程不仅包括各种变量的初始化也包括建立各个进程间的通信通道。
参看图5,发送帧过程的作用是定时地将含有端口状态情况的控制帧发送出去。这个发送间隔定为5秒。这个时间间隔可以人为设定。利用这种定时发送控制帧的方式,可以避免控制帧丢失而无法再环上传播,而且利用这种定时控制帧可以使得环上的节点了解到环上存在的节点情况。
参看图6,接收帧过程的作用是接收从FRPSdaemon程序通过Socket方式发送给FRPSenable的控制帧。FRPSenable程序中的接收控制帧线程会根据接收的控制帧的类型进行相应的操作。
如果收到的控制帧为端口状态变化的控制帧,先判断端口状态的具体变化。当端口从Up变为Down,说明端口连接的链路出现故障了,此时节点就会将该端口设为阻塞状态,将其他非故障的环端口设为转发状态,同时更新节点的端口状态,刷新MAC地址表,并立即发送控制帧同时环上的其他节点;当端口由Down变成UP,则表明端口连接的链路重新恢复了连接,此时如果将端口直接变为转发状态就会造成回路,所以为了避免环路,就继续保持恢复连接的端口的阻塞状态,并更新节点的端口状态信息,立即发送控制帧通知环上的主节点,报告故障恢复。
当节点收到的控制帧是其他节点发送的控制帧时,由于主节点和传输节点的区别,所以两者对控制帧的处理也存在着差别。
参看图7,主节点收到这个控制后,先判断是否是主节点发送出去的,如果是,则将这个控制丢弃,不进行处理。如果收到的是其他节点发送的控制帧,那么就坚持这个节点的控制是否接收过,如果没有,那么就是第一次接受到这个节点的控制帧,此时就需要将这个节点的信息保存下来,包括节点的MAC地址,端口的状态。如果主节点接收过这个节点的控制帧,那么就会检查控制帧中的端口状态是否和主节点保存的该节点的端口状态一致,如果一致,就仅仅是转发该帧,不做其他处理。如果收到的控制帧中的信息和主节点保存的信息不一致,那么就需要进行下一步判断。
如果节点的端口状态中有某个端口的状态变为0,就表示这个节点的端口Down了,此时主节点就需要将原来阻塞的从端口打开然后,更新主节点状态,更新保存的节点信息,然后转发该帧。
如果节点的端口状态中有某个端口的状态为1,就表示这个端口被阻塞了,并且这个端口的连接的链路是正常的。此时主节点就会坚持在主节点保存的环上节点的端口状态,如果还有节点的端口处于故障状态,即状态为0,那么主节点就会保持从端口子在转发状态,并将该控制帧转发出去。当主节点发现环上节点都没有故障端口时,就会将从端口阻塞,并更新主节点的状态,刷新MAC地址表,发送控制帧通知环上其他节点。
参看图8,当传输接收到自己发送的控制帧时,就会将该帧丢弃,不做处理。当传输节点收到其他节点控制帧时会先转发,然后进行处理。当传输节点第一次收到其他节点发送的控制帧时,就会将这个节点的MAC地址,端口状态保存起来。如果不是第一次接收,那么就会比较接收的控制帧中的信息和保存的信息是否一致。如果一致表明发送节点的状态未发生变化,只需更新节点信息,不必做其他处理。当接收的节点状态和传输节点保存的状态不一样,此时节点就需要根据控制帧的信息进行对应处理。
如果发送节点端口由正常的状态变为故障状态,则传输节点会刷新MAC地址表,发送控制帧,将此时节点的状态发送出去,通知环上的节点。
如果发送节点的端口的状态为1,就判断发送节点是否为主节点。如果是主节点发送的,其从端口助于阻塞状态,主节点处于转发状态,则说明主节点已经确认环上没有故障节点,此时传输节点就会将两个端口都置于转发状态,并将节点的当前状态通过控制帧发送出去。如果控制帧是由传输节点发送的,那么传输节点只需保持原来的状态就可以,更新保持的节点信息就可以了。
FRPSenable进程中完成了主节点和传输节点对控制帧的接收和处理过程。同时这个过程也是FRPS算法的功能的具体实现
FRPSdaemon程序也采用了两个线程,分别为端口状态检测线程和接收从内核空间收到的控制帧线程。这个端口状态的变化监控,是利用硬件扫描的方式监控端口的状态,当端口的状态发生变化就会通知内核空间,当内核空间得到这个通知后就会立即利用netlink的方式通知到用户空间的FRPSdaemon程序。当FRPSdaemon程序得到这个消息后,就会将这个消息转化为控制帧的格式并发送给FRPSenable程序来进行处理。FRPSdaemon程序收到内核空从底层硬件接收到的控制帧并将这个控制帧中有用的信息剥离出来并转发给FRPSenable程序,让协议程序来处理。FRPSdaemon程序可以认为FRPSenable程序和内核空间的通信桥梁。
本具体实施方式具有以下有益效果:它结合了标准MAC交换,故障告警,故障处理和环网控制协议,通过环网控制协议将物理的环变为逻辑的链,从而避免了在环网上形成广播风暴。