发明内容
本发明公开了在EOC设备上实现环路检测的方法,本发明采用的技术方案如下:
一种在EOC设备上实现环路检测的方法,其具体包含以下步骤:局端管理设备依序设定每个用户终端的标志符,在局端管理设备发送的协议报文中添加对于不同用户终端的标志符,每个用户终端接收到报文后,通过报文过滤机制,只让符合本用户终端标志符的协议报文通过,其他的协议报文丢弃;当局端管理设备接收到环路返回的协议报文时,检查报文中的标志符就知道是哪台用户终端下的用户产生了环路。
优选地,所述方法还包括:关闭产生环路的用户终端。
优选地,所述用户终端的标识符为用户终端的MAC地址。
优选地,所述局端管理设备发送出报文混合流,每条报文的目的MAC是FF:FF:FF:FF:FF:FF,源MAC是局端管理设备设定的各个用户终端的MAC地址。
优选地,所述报文过滤过通过设置用户终端交换芯片的MAC地址表,指定丢弃源MAC进行报文过滤,实现只让符合本用户终端标志符的协议报文通过。
优选地,所述指定丢弃源MAC的方法具体为:在MAC地址表中添加除本用户终端外的所有源MAC地址表项,并设置丢弃匹配这些源MAC的报文。
优选地,所述报文过滤过通过EOC芯片提供的报文过滤机制,实现只让符合本用户终端标志符的协议报文通过。
优选地,所述报文过滤过通过交换芯片提供的ACL或QOS进行报文的过滤。
所述方法还包括产生环路的用户终端丢弃其它所有报文只让环路检测报文通过,并限制该用户终端的上行速度;并在局端管理设备上设置档案记录当前产生环路的用户终端,并监听该用户终端收到的环路检测报文,若连续一段时间都没有收到该用户终端环路检测的报文,则让该用户终端能够正常接收所有报文并取消上行速度限制,否则继续限制该用户终端的报文和上行速度。
优选地,所述方法还包括对每个用户终端历史环路的状态进行监控,若某个终端在当前一定时间内连续产生多次环路,则发送出警告信息,并且不再自动恢复该设备限制。
综上所述,由于采用了上述技术方案,本发明的有益效果是:使得在所有的EOC系统中都可以实现环路检测,不需要专门的EOC芯片来识别报文的源用户终端,降低了系统的成本,同时提高了检测的效率和实用性。另外及时关闭存在环路的用户终端,避免所有的用户都受到环路的影响,降低了系统风险。而采用本发明的源MAC地址表的方式进行,便于实现,简单易行,不增加系统的成本。
具体实施方式
下面结合附图,对本发明作详细的说明。
本发明公开了一种在EOC设备上实现环路检测的方法,其具体包含以下步骤:局端管理设备依序设定每个用户终端的标志符,在局端管理设备发送的协议报文中添加对于不同用户终端的标志符,每个用户终端接收到报文后,通过报文过滤机制,只让符合本用户终端标志符的协议报文通过,其他的协议报文丢弃;当局端管理设备接收到环路返回的协议报文时,检查报文中的标志符就知道是哪台用户终端下的用户产生了环路。上述方法使得在所有的EOC系统中都可以实现环路检测,不需要专门的EOC芯片来识别报文的源用户终端,降低了系统的成本,同时提高了检测的效率和实用性。
为了便于实现,采用如下表所示的10个用户终端,分别用不同的MAC地址作为用户终端的标志符。
用户终端编号 |
对应MAC地址 |
1 |
00:23:1F:FF:FF:01 |
2 |
00:23:1F:FF:FF:02 |
3 |
00:23:1F:FF:FF:03 |
4 |
00:23:1F:FF:FF:04 |
5 |
00:23:1F:FF:FF:05 |
6 |
00:23:1F:FF:FF:06 |
7 |
00:23:1F:FF:FF:07 |
8 |
00:23:1F:FF:FF:08 |
9 |
00:23:1F:FF:FF:09 |
10 |
00:23:1F:FF:FF:0A |
如图1所示的本发明的报文传输方法示意图,报文流从局端管理设备发出,经过用户终端接收,最后到用户设备接收的流程,标志局端管理设备发送出的报文流。从用户设备发出的报文流经过用户终端接收,最后到局端管理设备接收的流程,标志由环路返回的报文流。以用户终端1产生环路为例,局端管理设备发送出多种报文混合流,如共包括10条报文流,每条报文的目的MAC是FF:FF:FF:FF:FF:FF,源MAC是上表中所规定的各个用户终端对应的MAC地址。在第2个位置,即用户终端的入口处,通过设置用户终端交换芯片的MAC地址表,指定丢弃源MAC非本用户终端MAC地址00:23:1F:FF:FF:01的报文,即丢弃源MAC为00:23:1F:FF:FF:02 ~ 00:23:1F:FF:FF:0A 范围内的报文,通过上述地址表的方式,在不增加系统任何成本的情况下快速识别出需要丢弃的报文。在这个位置也可以采用EOC芯片提供的报文过滤机制,实现只让符合本用户终端标志符的协议报文通过。这样经过第2个位置到达第3个位置时,只有源MAC为00:23:1F:FF:FF:01的报文达到了用户网络,经由第4个位置用户网络的环路,这条报文最终回到了局端管理设备(第5个位置)。局端管理设备检查收到报文的源MAC,查询记录的用户终端MAC地址,就可知道产生环路的用户终端是第1个,从而将用户终端 1关闭,避免对其他用户终端下的用户产生影响。
用户终端中源MAC地址表的设置方式具体为:以用户终端1为例,在MAC地址表中添加9条表项,其中MAC_ADDR[47:0]字段分别填写00:23:1F:FF:FF:02 ~ 00:23:1F:FF:FF:0A,在FILTER_INFO字段设置为2’b01,即丢弃匹配这些源MAC的报文,PORT_ID字段均设置为用户终端连接局端管理设备的端口,即3’b110。采用这样在MAC地址表中添加除本用户终端外的所有MAC地址表项,并设置丢弃匹配这些源MAC的报文。快速识别出需要丢弃的报文并进行相应的处理,增加了系统的运行速度。
在局端管理设备中关键软件数据结构为
typedef struct _cpe_pass_mac_s{
int cpe_id;
char mac[6];
}用户终端_pass_mac_t;
用户终端_pass_mac_t Loop_Detect_用户终端_MAC[MAX_用户终端_NUM];
上面的实施例中,是通过上表中的源MAC地址配合用户终端交换芯片的MAC地址表丢弃源MAC进行报文过滤。然而也可通过报文协议类型,报文自定义字段等字段来区分用户终端,在用户终端端也可通过用户终端的EOC芯片提供的过滤功能或者交换芯片提供的ACL,QOS等功能进行报文的过滤。
环路检测系统在检测到用户终端的环路并将其关闭后,需要在用户终端的环路消失后重新打开用户终端,让其能够重新接入网络中。当前的环路检测系统中,在检测到某个用户终端产生环路后,都是直接将该用户终端关闭,然后等待一定时间后再将该用户终端打开,若此时仍然检测到该用户终端有环路,则再次将该用户终端关闭,如此重复直到用户终端上的环路消失后,才能正确接入网络中。每次恢复等待的时间可以设置,一般是从几十秒到几个小时不等,但是不论恢复时间设置为多长都有一些问题。如果恢复时间设置的很短,例如1分钟,而用户终端下的环路又是长期存在的(例如刻意的网络攻击),那么每隔1分钟,网络就会受到环路的冲击,导致整个网络不停地震荡。如果恢复时间设置的比较长,例如1小时,那么对于短期偶然性的环路则会造成比较大的影响,例如用户安装家用路由器时不小心接错网线导致环路,然后立即就断开了环路,但却要等待1个小时后才能上网。
为了解决该问题,我们使用一种新的环路检测恢复的方法。该方法能够实时检测用户终端上环路是否消失,在确认环路消失且用户终端的网络稳定后立即将用户终端接入网络中。同时还能检测网络攻击,并屏蔽盖攻击。具体方法如下所述。
优选地,在知道产生环路的用户终端是第1个后,并不是将用户终端直接关闭,而是让用户终端丢弃其它所有报文只让环路检测报文通过,即:让源MAC地址是00:23:1F:FF:FF:01的报文能够通过该用户终端,并限制该用户终端的上行速度,如为5PPS。这样只要环路还存在,局端管理设备就能一直收到环路检测的报文,同时由于流量极小网络不会受到环路的影响。我们在局端管理设备上建立一个档案,记录当前产生环路的用户终端,并监听该终端收到的环路检测报文,若连续一段时间(例如5分钟)都没有收到环路检测的报文,则说明该用户终端上的环路已经消失且网络处于稳定状态。则将让该用户能够正常接收所有报文。同时还要对每个用户终端历史环路的状态进行监控,若某个终端在当前一定时间内连续产生多次环路(例如半个小时内产生5次)则认为存在网络攻击,发送出警告信息,并且不再自动恢复该设备。
例如:将用户终端1的所有端口设置成阻塞模式,在该模式下端口会丢弃所有的普通报文,然后我们设置一条ACL表项,让源MAC地址是00:23:1F:FF:FF:01的报文能够通过该用户终端,并将用户终端1的上行速度限制为5PPS,即每秒最多收5个报文。此时用户终端1下的环路已经不会对网络造成任何影响了,同时局端管理设备还会一直收到用户终端1发来的环路检查报文。我们在局端管理设备上建立一个表项记录每个用户终端最近5次产生环路的时间和恢复时间:
|
环路时间1 |
恢复时间1 |
环路时间2 |
恢复时间2 |
.... ....直到第5次 |
终端1 |
2012/3/2
9:21:45 |
2012/3/2
9:30:28 |
2012/3/2
9:31:01 |
2012/3/2
9:40:18 |
.... .... |
如上表所示用户终端1在2012年3月2日早上9点21分45秒的时候被检测出产生了环路。然后用户终端1被设置为阻塞状态,只能收到环路检测报文。从9:21到9:25这一段时间内,管理局端设备都还能一直收到源MAC为00:23:1F:FF:FF:01的环路检测报文,此时用户终端1处于环路状态,从9:25到9:30这一段时间内,管理局端设备没有收到任何源MAC为00:23:1F:FF:FF:01的环路检测报文,因此认为用户终端1下的环路已经消失,则将用户终端1恢复正常,将端口设置为转发状态,并取消上行限速。此时用户终端1能够正常地接入网络。但仅仅过了1分钟,在9点31分28秒的时候,再次检查到了环路,于是重复上面的过程。一直到第5次的时候,此时已经记录了5次产生环路的信息,我们计算如下时间:
总时间 = (环路时间5 - 恢复时间4)+(环路时间4 - 恢复时间3)+(环路时间3 - 恢复时间2)+(环路时间2 - 恢复时间1)
若计算出的总时间小于2个小时,则认为用户终端1受到攻击,则发出警告信息,并不再自动恢复用户终端1。
使用该方式可以在环路消失的5分钟内恢复用户终端,且能检测到刻意的网络攻击并进行屏蔽。
在局端管理设备中关键软件数据结构为
typedef struct _cpe_loop_record_s{
int cpe_id;
char loop_mac[6];
Time loop_time[5];
Time restore_time[5];
}cpe_loop_record_t;
cpe_loop_record_t Loop_Record[MAX_CPE_NUM];
上面的实施例中是通过设置端口的生成树状态(阻塞或转发)以及交换芯片的ACL来实现丢弃普通报文,转发环路检测报文的。然而也可通过EOC芯片提供的过滤功能或者交换芯片提供的MAC地址表或者通过软件过滤等等其它方法来实现报文的过滤功能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。