论文部分内容阅读
摘要:交换机的环回检测功能主要用来检测交换机的用户端口是否发生了环路,及时上报环路告警,并通过关闭产生环路的端口来防止产生MAC地址漂移,导致其他用户业务受到影响。特别是在QINQ业务时,造成业务不通。本文主要介绍了一种新的环回检测方法,简称CTC环回检测法,这种新的环回检测法与传统的环回检测法相比,更加简单,易于实现,且降低了维护成本,并且能够兼容不同类型的交换机,具备极大的推广性。
关键词:环回;地址漂移;CTC环回检测法
一、问题的提出
环回即交换机下接的网络形成环的拓扑结构,环路会造成内网广播风暴,会消耗交换机设备大量的CPU处理时间或者线路带宽,严重时甚至可以造成设备死机,网络瘫痪。
为避免网络中出现环路,造成对业务的影响,需要设备具备环回检测的功能。一般的环回检测方法采用的是BPDU报文格式,而这类报文属于一种比较特殊的报文,其目的mac一般为01-80-C2-00-00-00,我们简单的将其称为传统模式的环回检测法。但有些设备,特别是一些简单的家庭网关终端设备无法识别该种报文,直接将该种类型的报文丢弃,造成环回检测失败。另外,一些设备在发环路检测报文的时候,并没有按照vlan来检测,这样同样会造成环路检测的失败,因此一种新的环回检测法应运而生,简称ctc模式环回检测法。该方法简单实用,几乎在所有类型的交换机上都可以推广,有一定的借鉴意义。
二、解决方法
为了提供一种能够检测网络中各种环路的方法,本文的CTC模式环回检测法在原来传统模式环回检测法的基础上做了如下几点改动:
(1)环回检测报文的目的mac由原来的BPDU格式改为了现在的广播mac,在没有其他规则的影响下,所有的交换机都可以转发广播报文,可以防止环回检測报文被交换机下挂的家庭网关设备丢弃;
(2)环回检测报文的以太网类型(ethernet type)由原来的0x8901改为可配置的任意类型,这样可以有效防止某些以太网类型的报文被cpu截取以作他用;
(3)CTC模式环回检测法,发送的环回检测报文既可以是untag类型(不带vlan标签),也可以是tag类型(带vlan标签),而原来传统模式下只支持untag类型的报文发送,因此CTC模式环回检测法可以更好地检测线路中的环路情况。
如果环回检测功能开启,交换机的CPU会定时向每个已经配置环回检测功能的端口发送环回检测报文,该环回检测报文的目的mac为全F的广播报文,源mac为交换机的系统mac,以太网类型可以配置为任意协议类型,一些标准里已经使用的协议类型除外。
环回检测示意图如上图所示,交换芯片收到环回检测报文以后,判断该报文的以太网类型是否和配置的以太网类型一致,如果是,送给CPU的环回检测模块处理;接着分析报文中的源mac是否为本设备的系统mac,如果是,则认为本设备中发生了环路,否则丢弃;再判断环回检测报文中的源单板的槽位号和源端口号和收到环路检测帧的单板的槽位和端口号是否一致,如果一致,则说明该端口发生了自环。当检测到环路以后,会向网管服务器发送Trap告警报文,Trap报文中带有该端口的全局端口号,然后根据用户是否启用了端口的环回检测功能来决定是否关闭该端口。
由于环回检测模块会不断地循环向各个端口发生环回检测报文,如果发送报文的频率过快,可能会导致底层硬件无法处理,所以发送完一个环回检测报文以后,适当延时,这个延时的时间通过实际测试的结果来得到,目前暂定为2s。由于环路检测的优先级较低,且每次最多只对24个用户口中配置环路检测的端口进行检测,所以开启环路检测功能对系统处理性能的影响比较小。
每个端口记录环路关闭/解闭/开启状态s,检测到解闭次数n,本次解闭的剩余时间t。当端口收到检测到环回报文以后,关闭该端口,将关闭/开启状态设置为:关闭状态;本次解闭的剩余时间设置为一个固定时延+检测到的解闭次数*一个固定的时延(即t=T+n*T,T可配置):
启用一个解闭定时器(timerT,1分钟间隔):
(1)如果该端口时开启状态,则继续下一个端口;
(2)如果用户关闭端口,则继续下一个端口;
(3)否则,如果解闭的剩余时间t!=0,则t=t- timerT;
(4)否则,如果是解闭状态,将s=开启;t=0;n=0;
(5)否则,将s=解闭中;t=T+n*T;n=n+1。
三、实践情况
测试步骤:
(1)设置环回检测模式为ctc:
(config)#loop-check mode ctc
(2)设置环回检测周期为2s:
(config)#loop-check interval 2 //2s为环回检测模块发送环回检测报文的周期
(3)设置发送环回检测报文的以太网类型:
(config)#loop-check eth-type 8903
(4)设置发送环回检测恢复时间间隔为5分钟:
(config)#loop-check recover-time 5
(5)端口配置vlan,并配置端口环回检测功能使能
(config)#interface range fei_0/1/1-8
(config-if)#switchport vlan 100 t //8个用户口同时配置vlan100
(config-if)#loop-check enable //8个用户口配置环回检测使能
如果此时fei_0/1/1与fei_0/1/2 口用网线连起来,我们可以观察到端口状态会在2s以后从up就变成了down。即cpu的环回检测模块每2s会依次往这8个用户端口发送环回检测报文,由于fei_0/1/1和fei_0/1/2用网线连起来了,则环回检测模块从fei_0/1/1出来的环回检测包,又从fei_0/1/2收了回来,导致cpu的环回检测模块又重新收到了0x8903,且源mac为设备带内mac,目的mac为全F,vlan为100的环回检测报文,因此cpu的环回检测模块会将这个报文的源端口,即fei_0/1/1端口强制关闭。如果人为操作该端口使其up,则直接调用交换芯片接口使其up,但是up以后,会再次检测到端口环回,环回检测模块又会将其端口关闭。如果人为不操作端口,则经过recover-time时间(解闭时间)以后,端口会再次up,但如果这时候网线依然是连接状态,则cpu的环回检测模块又会再次检测到端口环回,又会将端口关闭掉,这样,下次端口再次恢复up的时间将不再是recover-time 5分钟了,而是大于5分钟,因为这个时候会加上一个惩罚因子n,即上一节的步骤5中描述的场景,如果下次再检查到环回,则环回检测的解闭时间又大于上一次的解闭时间,因为惩罚因子从n又变成了n+1了。
四、总结
CTC模式环回检测法对比一般的传统环路检测法,可以兼容不同的终端设备,并且能够检测到多种网络拓扑下的环路,因此ctc模式环路检测法很好的拓展了环回检测的使用范围,且实现方法简单易于操作,在有同类需求的设备上有一定的借鉴意义。
(作者单位:中兴通讯南京研发中心)
关键词:环回;地址漂移;CTC环回检测法
一、问题的提出
环回即交换机下接的网络形成环的拓扑结构,环路会造成内网广播风暴,会消耗交换机设备大量的CPU处理时间或者线路带宽,严重时甚至可以造成设备死机,网络瘫痪。
为避免网络中出现环路,造成对业务的影响,需要设备具备环回检测的功能。一般的环回检测方法采用的是BPDU报文格式,而这类报文属于一种比较特殊的报文,其目的mac一般为01-80-C2-00-00-00,我们简单的将其称为传统模式的环回检测法。但有些设备,特别是一些简单的家庭网关终端设备无法识别该种报文,直接将该种类型的报文丢弃,造成环回检测失败。另外,一些设备在发环路检测报文的时候,并没有按照vlan来检测,这样同样会造成环路检测的失败,因此一种新的环回检测法应运而生,简称ctc模式环回检测法。该方法简单实用,几乎在所有类型的交换机上都可以推广,有一定的借鉴意义。
二、解决方法
为了提供一种能够检测网络中各种环路的方法,本文的CTC模式环回检测法在原来传统模式环回检测法的基础上做了如下几点改动:
(1)环回检测报文的目的mac由原来的BPDU格式改为了现在的广播mac,在没有其他规则的影响下,所有的交换机都可以转发广播报文,可以防止环回检測报文被交换机下挂的家庭网关设备丢弃;
(2)环回检测报文的以太网类型(ethernet type)由原来的0x8901改为可配置的任意类型,这样可以有效防止某些以太网类型的报文被cpu截取以作他用;
(3)CTC模式环回检测法,发送的环回检测报文既可以是untag类型(不带vlan标签),也可以是tag类型(带vlan标签),而原来传统模式下只支持untag类型的报文发送,因此CTC模式环回检测法可以更好地检测线路中的环路情况。
如果环回检测功能开启,交换机的CPU会定时向每个已经配置环回检测功能的端口发送环回检测报文,该环回检测报文的目的mac为全F的广播报文,源mac为交换机的系统mac,以太网类型可以配置为任意协议类型,一些标准里已经使用的协议类型除外。
环回检测示意图如上图所示,交换芯片收到环回检测报文以后,判断该报文的以太网类型是否和配置的以太网类型一致,如果是,送给CPU的环回检测模块处理;接着分析报文中的源mac是否为本设备的系统mac,如果是,则认为本设备中发生了环路,否则丢弃;再判断环回检测报文中的源单板的槽位号和源端口号和收到环路检测帧的单板的槽位和端口号是否一致,如果一致,则说明该端口发生了自环。当检测到环路以后,会向网管服务器发送Trap告警报文,Trap报文中带有该端口的全局端口号,然后根据用户是否启用了端口的环回检测功能来决定是否关闭该端口。
由于环回检测模块会不断地循环向各个端口发生环回检测报文,如果发送报文的频率过快,可能会导致底层硬件无法处理,所以发送完一个环回检测报文以后,适当延时,这个延时的时间通过实际测试的结果来得到,目前暂定为2s。由于环路检测的优先级较低,且每次最多只对24个用户口中配置环路检测的端口进行检测,所以开启环路检测功能对系统处理性能的影响比较小。
每个端口记录环路关闭/解闭/开启状态s,检测到解闭次数n,本次解闭的剩余时间t。当端口收到检测到环回报文以后,关闭该端口,将关闭/开启状态设置为:关闭状态;本次解闭的剩余时间设置为一个固定时延+检测到的解闭次数*一个固定的时延(即t=T+n*T,T可配置):
启用一个解闭定时器(timerT,1分钟间隔):
(1)如果该端口时开启状态,则继续下一个端口;
(2)如果用户关闭端口,则继续下一个端口;
(3)否则,如果解闭的剩余时间t!=0,则t=t- timerT;
(4)否则,如果是解闭状态,将s=开启;t=0;n=0;
(5)否则,将s=解闭中;t=T+n*T;n=n+1。
三、实践情况
测试步骤:
(1)设置环回检测模式为ctc:
(config)#loop-check mode ctc
(2)设置环回检测周期为2s:
(config)#loop-check interval 2 //2s为环回检测模块发送环回检测报文的周期
(3)设置发送环回检测报文的以太网类型:
(config)#loop-check eth-type 8903
(4)设置发送环回检测恢复时间间隔为5分钟:
(config)#loop-check recover-time 5
(5)端口配置vlan,并配置端口环回检测功能使能
(config)#interface range fei_0/1/1-8
(config-if)#switchport vlan 100 t //8个用户口同时配置vlan100
(config-if)#loop-check enable //8个用户口配置环回检测使能
如果此时fei_0/1/1与fei_0/1/2 口用网线连起来,我们可以观察到端口状态会在2s以后从up就变成了down。即cpu的环回检测模块每2s会依次往这8个用户端口发送环回检测报文,由于fei_0/1/1和fei_0/1/2用网线连起来了,则环回检测模块从fei_0/1/1出来的环回检测包,又从fei_0/1/2收了回来,导致cpu的环回检测模块又重新收到了0x8903,且源mac为设备带内mac,目的mac为全F,vlan为100的环回检测报文,因此cpu的环回检测模块会将这个报文的源端口,即fei_0/1/1端口强制关闭。如果人为操作该端口使其up,则直接调用交换芯片接口使其up,但是up以后,会再次检测到端口环回,环回检测模块又会将其端口关闭。如果人为不操作端口,则经过recover-time时间(解闭时间)以后,端口会再次up,但如果这时候网线依然是连接状态,则cpu的环回检测模块又会再次检测到端口环回,又会将端口关闭掉,这样,下次端口再次恢复up的时间将不再是recover-time 5分钟了,而是大于5分钟,因为这个时候会加上一个惩罚因子n,即上一节的步骤5中描述的场景,如果下次再检查到环回,则环回检测的解闭时间又大于上一次的解闭时间,因为惩罚因子从n又变成了n+1了。
四、总结
CTC模式环回检测法对比一般的传统环路检测法,可以兼容不同的终端设备,并且能够检测到多种网络拓扑下的环路,因此ctc模式环路检测法很好的拓展了环回检测的使用范围,且实现方法简单易于操作,在有同类需求的设备上有一定的借鉴意义。
(作者单位:中兴通讯南京研发中心)