连通错误检测协议报文的发送方法以及转发设备
技术领域
本申请涉及网络通信技术领域,特别涉及一种连通错误检测协议报文的发送方法以及转发设备。
背景技术
CFD(Connectivity Fault Detection,连通错误检测)是一种二层网络中基于VLAN(Virtual Local Area Network,虚拟局域网)的端到端OAM(Operations,Administrationand Maintenance,操作、管理和维护)机制,主要用于在二层网络中检测链路连通性,以及在故障发生时确认故障并定位。
CFD的基本概念包括:
1、维护域
维护域(Maintenance Domain,MD)指明了连通错误检测所覆盖的网络,其边界是由配置在端口上的一系列维护端点所定义的。维护域以“维护域名”来标识。为了准确定位故障点,在维护域中引入了级别(层次)的概念。维护域共分为八级,用整数0~7来表示,数字越大级别越高,维护域的范围也就越大。不同的维护域之间可以相邻或嵌套,但不能交叉,且嵌套时只能由高级别维护域向低级别维护域嵌套,即低级别维护域必须包含在高级别维护域内部。
2、维护集
在维护域内根据需要可以配置多个维护集(MaintenanceAssociation,MA),每个维护集是维护域内一些维护点的集合。维护集以“维护域名+维护集名”来标识。维护集服务于一个VLAN,维护集中的维护点所发送的报文都带有该VLAN的标签,同时维护集中的维护点可以接收由本维护集中其它维护点发来的报文。
3、维护点
维护点(Maintenance Point,MP)配置在端口上,属于某个维护集,可分为维护端点(Maintenance association End Point,MEP)和维护中间点(Maintenance associationIntermediate Point,MIP)两种。维护端点具有方向性,分为外向MEP和内向MEP两种。维护端点的方向表明了维护域相对于该端口的位置。外向MEP是向它所在端口发送报文的。内向MEP不向它所在端口发送报文,而是向本设备的其它端口发送报文。在实际组网中,由于内向MEP不关注所依附的物理端口的up(正常)/down(故障)状态,不需要在所依附的物理端口上有实际的物理线连接,具有较强的灵活性,因此在实际应用中通常把MEP设置为内向型。
例如,图1是一种应用了CFD协议的实际网络模型图。在图1所示的网络中,Device A的端口Eth1/1上配置有某一个级别的MD、MA和服务实例,Device D的端口Eth1/3具有与Device A的Eth1/1相同的配置,即,配置有相同级别的相同MD、以及相同的MA和服务实例。为了要进行链路检测,进一步在Device A的端口Eth1/1上和Device D的端口Eth1/3上分别配置了一个内向MEP,例如,Device A的端口Eth1/1上配置的内向MEP为MEP 100,Device D的端口Eth1/3上配置的内向MEP为MEP200,这样便划定一个链接检测域:MD_A。MEP 100和MEP 200互为MEP邻居。
为了建立和维护MEP邻居关系,Device A上的内向MEP:MEP 100周期性地发送组播的CCM(Continuity Check Message,连接检测报文)报文,同样,Device D上的内向MEP:MEP 200也周期性地发送CCM报文。MEP 100在首次接收到MEP 200发来的CCM报文后,建立与MEP 200的MEP邻居关系,将MEP 200的状态设置为NORMAL(正常);后续,若在3.5个CCM报文发送周期内未接收到MEP 200发来的CCM报文,则MEP 100将MEP 200的状态设置为FAIL(失效),确认链路发生了故障,否则,MEP 200的状态一直处于正常状态,确认链路没有发生故障。同样,MEP200也会执行上述操作。通过上述CCM报文的发送和接收,内向MEP可以建立与远端的MEP邻居之间的MEP邻居关系,并维护MEP邻居的信息,以便后续实施相关的链路检测功能。
现有技术中,为了建立和维护MEP邻居关系(维护MEP邻居关系即实现了连续性检测CC),内向MEP会在同一VLAN内组播发送CCM报文,这就意味着内向MEP会向本设备上同一VLAN的其它端口发送CCM报文。这样,如果内向MEP所在的设备上处于同一VLAN的物理端口较多,则该设备就会产生大量的CCM报文进行发送。假设,一个MEP每秒可以发送300个CCM报文,每个CCM报文按照协议规定可以达到100字节的长度,那么,可以得出一个MEP每秒可以发出30K字节的数据流。那么,以图1为例,在Device A上的端口Eth1/2、Eth1/3和Eth1/4所属的VLAN与Eth1/1相同时,端口Eth1/1上配置的内向MEP:MEP 100会通过端口Eth1/2、Eth1/3和Eth1/4向外发送组播的CCM报文,且每个端口发送的CCM报文的流量可以达到30K字节/秒。发送的CCM报文的数据量是很大的。
并且,一个设备上配置的内向MEP通常不止一个,每一个内向MEP又可以通过与自身所在端口在同一VLAN的多个端口向外发送CCM报文,从而该设备需要处理和发送大量的CCM报文,加重了设备中的转发芯片及CPU的负担,降低了设备的性能;而且,大量的CCM报文被发送到了局域网中,也浪费了网络带宽。另外,网络中的其他设备接收到这些大量的CCM报文后,也需要对报文进行处理,因此,也增加了局域网中其他设备的负荷。
发明内容
本申请提供了一种连通错误检测协议报文的发送方法以及转发设备,以解决现有技术中存在的配置有内向MEP的设备需要处理和发送大量的CCM报文,加重了本设备中的转发芯片及CPU的负担,降低了设备的性能;发送到局域网中的大量的CCM报文也浪费了网络带宽;而且,网络中的其他设备接收到这些大量的CCM报文后,也需要对报文进行处理,增加了局域网中其他设备的负荷的问题。
本申请的技术方案如下:
一方面,提供了一种CFD协议报文的发送方法,该方法包括:
第一转发设备接收第二转发设备上的第二内向MEP发来的CFD协议报文,其中,第一转发设备上配置有第一内向MEP,第二内向MEP是第一内向MEP的MEP邻居,与第一内向MEP具有相同的MD级别、MD、MA和服务实例;
第一转发设备根据接收的CFD协议报文中携带的第二转发设备的MAC地址和第二内向MEP的标识,在第一内向MEP对应的CFD信息表中查找匹配表项,其中,CFD信息表用于记录第一内向MEP的各个MEP邻居的信息;
若未查找到匹配表项,则第一转发设备在该CFD信息表中增加第二内向MEP对应的表项,并在该表项中将第二内向MEP的状态设置为正常,其中,该表项中包括:第一端口标识、第二转发设备的MAC地址、第二内向MEP的标识、以及第二内向MEP的状态,第一端口标识是接收到该CFD协议报文的第一端口的标识;
当第一内向MEP要发送CFD协议报文时,若第二内向MEP的状态为正常,则第一转发设备按照该CFD信息表中第二内向MEP对应的表项,以单播的方式向第二转发设备发送CFD协议报文。
另一方面,还提供了一种转发设备,包括:
接收模块,用于接收第二转发设备上的第二内向MEP发来的CFD协议报文,其中,本设备上配置有第一内向MEP,第二内向MEP是第一内向MEP的MEP邻居,与第一内向MEP具有相同的MD级别、MD、MA和服务实例;
查找模块,用于根据接收模块接收的CFD协议报文中携带的第二转发设备的MAC地址和第二内向MEP的标识,在第一内向MEP对应的CFD信息表中查找匹配表项,其中,该CFD信息表用于记录第一内向MEP的各个MEP邻居的信息;
更新模块,用于在查找模块未查找到匹配表项时,在该CFD信息表中增加第二内向MEP对应的表项,并在该表项中将第二内向MEP的状态设置为正常,其中,该表项中包括:第一端口标识、第二转发设备的MAC地址、第二内向MEP的标识、以及第二内向MEP的状态,第一端口标识是接收到该CFD协议报文的第一端口的标识;
发送模块,用于在第一内向MEP要发送CFD协议报文时,若第二内向MEP的状态为正常,则按照该CFD信息表中第二内向MEP对应的表项,以单播的方式向第二转发设备发送CFD协议报文;
保存模块,用于保存第一内向MEP对应的CFD信息表。
在本申请的技术方案,可以减少内向MEP所在设备对于不必要的CFD协议报文的发送,减轻设备的CPU及转发芯片的负荷,提高设备的性能;并且,能够实现仅内向MEP所在的检测链路才需要处理CFD协议报文,节省了网络带宽,避免了局域网中的不在该链路上的其它设备接收并处理CFD协议报文,从而降低了这些其它设备的CPU使用率及设备负荷;同时,增强了内向MEP的灵活性。
附图说明
图1是一种应用了CFD协议的实际网络模型图;
图2是本申请的实施例一的CFD协议报文的发送方法的流程图;
图3是本申请的实施例一的封装后的CFD协议报文的格式示意图;
图4是图3中的Encapsulation Header的格式示意图;
图5是本申请的实施例三的转发设备的结构示意图。
具体实施方式
为了解决现有技术中存在的配置有内向MEP的设备需要处理和发送大量的CCM报文,加重了本设备中的转发芯片及CPU的负担,降低了设备的性能;发送到局域网中的大量的CCM报文也浪费了网络带宽;而且,网络中的其他设备接收到这些大量的CCM报文后,也需要对报文进行处理,增加了局域网中其他设备的负荷的问题,本申请的以下实施例提供了一种CFD协议报文的发送方法和一种可以应用该方法的转发设备,上述的方法和转发设备均针对的是组播的CFD协议报文的发送。本申请以下实施例的技术方案中,任意一个配置有CFD的内向MEP(称为第一内向MEP)的转发设备(称为第一转发设备)在首次接收到第一内向MEP的MEP邻居(称为第二内向MEP)发来的组播的CFD协议报文后,会将第二内向MEP的信息,包括:第一转发设备接收到该CFD协议报文的端口的标识(即入端口的标识)、该CFD协议报文中携带的第二转发设备(即第二内向MEP所在的设备)的MAC地址和第二内向MEP的标识等信息,作为第二内向MEP对应的表项添加到第一内向MEP对应的CFD信息表中,这样,当第一内向MEP要发送CFD协议报文时,第一转发设备就可以按照该CFD信息表中第二内向MEP对应的表项中包含的入端口的标识和第二转发设备的MAC地址,以单播方式发送CFD协议报文给第二转发设备。从而,通过第一内向MEP对应的CFD状态信息表,可以维护第一内向MEP的各个MEP邻居的信息,实时掌握邻居信息,包括:该MEP邻居发来的组播的CFD协议报文的入端口的标识、该MEP邻居所在设备的MAC地址等信息,在发送CFD协议报文时,就可以根据各个MEP邻居的上述信息,以单播方式向各个MEP邻居所在设备发送CFD协议报文,从而无需以组播的方式发送CFD协议报文。可以减少内向MEP所在设备对于不必要的CFD协议报文的发送,减轻了设备的CPU及转发芯片的负荷,提高了设备的性能;并且,实现了仅内向MEP所在的检测链路才需要处理CFD协议报文,节省了网络带宽,避免了局域网中的不在该链路上的其它设备接收并处理CFD协议报文,从而降低了这些其它设备的CPU使用率及设备负荷;同时,增强了内向MEP的灵活性。
实施例一
本申请的实施例一的CFD协议报文的发送方法中的CFD协议报文是组播报文,该方法可以由任意一个配置了CFD的转发设备来执行。本实施例中,组播的CFD协议报文可以是CCM(Continuity Check Message,连接检测报文),也可以是LTM(Linktrace Message,链路跟踪报文)和EAIS(Ethernet Alarm Indication Signal,以太网告警指示信号)报文等,本申请对此不做限定。
需要说明的是:下文中的第一转发设备可以是任意一个配置了CFD的转发设备,并不特指某一个转发设备,第一内向MEP可以是第一转发设备上配置的任意一个内向MEP,并不特指某一个内向MEP。
如图2所示,该CFD协议报文的发送方法包括以下步骤:
步骤S201,第一转发设备接收第二转发设备上的第二内向MEP发来的CFD协议报文,其中,第一转发设备上配置有第一内向MEP,第二内向MEP是第一内向MEP的MEP邻居,与第一内向MEP具有相同的MD级别、MD、MA和服务实例;
第一内向MEP与第二内向MEP互为MEP邻居,具有相同的MD级别、MD、MA和服务实例。
步骤S202,第一转发设备根据接收的CFD协议报文中携带的第二转发设备的MAC(Media Access Control,媒体访问控制)地址和第二内向MEP的标识(例如具体为MEP号),在第一内向MEP对应的CFD信息表中查找匹配表项,其中,该CFD信息表用于记录第一内向MEP的各个MEP邻居的信息;
例如,与第一内向MEP对应的CFD信息表的格式可以如表1或表2所示:
表1
表2
其中,在实际实施过程中,表1和表2中的端口的标识具体可以为端口号,MEP标识具体可以为MEP号。
在步骤S202中,第一转发设备根据接收的CFD协议报文中携带的第二转发设备的MAC地址和第二内向MEP的标识,在第一内向MEP对应的CFD信息表中查找匹配表项的方法可以包括以下步骤1-3:
步骤1:判断如表1或表2所示的CFD信息表的每一个表项中是否包含有接收的CFD协议报文中携带的第二转发设备的MAC地址和第二内向MEP的标识;
具体的,将每一个表项中包含的远端MAC与第二转发设备的MAC地址进行比较,并且,将该表项中包含的MEP标识与第二内向MEP的标识进行比较。
步骤2:若没有一个表项中包含有第二转发设备的MAC地址和第二内向MEP的标识,则确定未查找到匹配表项;
步骤3:若有一个表项中包含有第二转发设备的MAC地址和第二内向MEP的标识,则确定查找到了匹配表项。
步骤S203,判断是否查找到了匹配表项,若未查找到匹配表项,则进入步骤S204,否则,进入步骤S205;
步骤S204,第一转发设备在如表1或表2所示的CFD信息表中增加第二内向MEP对应的表项,并在该表项中将第二内向MEP的状态设置为正常(NORMAL);然后,进入步骤S206;
当与第一内向MEP对应的CFD信息表的格式如表1所示时,增加的第二内向MEP对应的表项如表3所示:
表3
在表3中,第二内向MEP对应的表项中包括:第一端口标识、第二转发设备的MAC地址、第二内向MEP的标识、以及第二内向MEP的状态NORMAL,其中,第一端口标识是第一转发设备接收到该CFD协议报文的第一端口的标识,即,该CFD协议报文的入端口的标识。
当与第一内向MEP对应的CFD信息表的格式如表2所示时,增加的第二内向MEP对应的表项如表4所示:
表4
与表3相比,在表4中,第二内向MEP对应的表项中除了包括第一端口标识、第二转发设备的MAC地址、第二内向MEP的标识、以及第二内向MEP的状态:NORMAL以外,还包括:第二内向MEP的MD级别、MD、MA和服务实例。
在实际实施过程中,与第一内向MEP对应的CFD信息表的格式也可以采用其他方式,CFD信息表中每一个表项中也可以包含其他的内容,本申请对此不做限定。
后续,若第一转发设备在第一预定时间段内未接收到第二内向MEP发来的CFD协议报文,此时该CFD协议报文可以是封装后的CFD协议报文,则第一转发设备就会在如表3或表4所示的第二内向MEP对应的表项中,将第二内向MEP的状态从NORMAL修改为失效(FAIL)。其中,第一预定时间段的具体值可以根据实际需要来预先设置。例如,当CFD协议报文是CCM报文时,第一预定时间段的值可以是3.5个CCM报文发送周期。
另外,为了节约CFD信息表的表项资源,在某一个MEP邻居的状态为FAIL的持续时间达到一定的阈值之后,就可以认为该MEP邻居不存在了,需要将该MEP邻居对应的表项删除。从而,在将第二内向MEP的状态修改为失效之后,若在第二预定时间段内仍未接收到第二内向MEP发来的CFD协议报文,即,第二内向MEP的状态处于FAIL的持续时间达到了第二预定时间段,则,第一转发设备就会删除CFD信息表中的第二内向MEP对应的表项,其中,第二预定时间段的值应该大于第一预定时间段的值。例如,当CFD协议报文是CCM报文时,第一预定时间段的值可以是3.5个CCM报文发送周期,第二预定时间段的值可以是10个CCM报文发送周期。
步骤S205,若该匹配表项中包含的状态为FAIL,则第一转发设备在该匹配表项中包含的端口标识(即,接收端口的标识)不是第一端口标识时,将该匹配表项中包含的状态更新为NORMAL、端口标识更新为第一端口标识,在该匹配表项中包含的端口标识是第一端口标识时,仅将该匹配表项中包含的状态更新为NORMAL;然后,进入步骤S206;
若第二内向MEP的状态为NORMAL,第一转发设备就不需要更新该匹配表项了;
在查找到的匹配表项中包含的状态为FAIL时,若该匹配表项中除了包含有第二转发设备的MAC地址和第二内向MEP的标识以外,还包含有第一端口标识,此时,确认该匹配表项就是第二内向MEP对应的表项,只需将对应的状态更新为NORMAL即可;若查找到的匹配表项中仅包含有第二转发设备的MAC地址和第二内向MEP的标识,而不包含第一端口标识,即,该匹配表项中包含的接收端口的标识与第一端口标识不同,则此时,确认该匹配表项是第二内向MEP对应的表项,但是接收端口发生了改变,需要将对应的状态更新为NORMAL以及将接收端口的标识更新为第一端口标识。
步骤S206,当第一内向MEP要发送CFD协议报文时,第一转发设备判断第二内向MEP的状态是否为NORMAL,若是,则进入步骤S207,否则,进入步骤S208;
步骤S207,第一转发设备按照CFD信息表中第二内向MEP对应的表项(如表3或表4所示),以单播的方式向第二转发设备发送CFD协议报文;
由于在如表3或表4的表项中,已经记录了第二内向MEP所在的第二转发设备的MAC地址、第一转发设备接收到第二内向MEP发来的CFD协议报文的端口的标识,因此,就可以根据这些信息来以单播的方式发送CFD协议报文给第二内向MEP了。从而,通过记录第一内向MEP的各个MEP邻居的信息,包括:该MEP邻居所在设备的MAC地址、接收到该MEP邻居发来的CFD协议报文的端口的标识等信息,可以按照单播的方式向各个MEP邻居发送CFD协议报文,而无需再采用组播的方式发送。
在步骤S207中,第一转发设备按照第二内向MEP对应的表项,以单播的方式向第二转发设备发送CFD协议报文的方法可以包括以下步骤1-2:
步骤1:第一转发设备为CFD协议报文封装报头,得到单播的封装后的CFD协议报文,其中,该报头中的源MAC地址为第一转发设备的MAC地址、目的MAC地址为第二内向MEP对应的表项中包含的第二转发设备的MAC地址;
例如,如图3所示,在CFD协议报文前封装一层报头(Encapsulation Header),该报头的长度可以为14字节。具体的,该报头的格式可以如图4所示,该报头中包括:目的MAC、源MAC和Type(类型)这3个字段,其中,目的MAC字段应该是MEP邻居所在设备的MAC地址,长度可以为6字节;源MAC应该是本设备的MAC地址,长度可以为6字节;Type字段表示该报文的类型,其值应该与CFD协议类型的Type值相同,如0x8902,长度可以为2字节。
步骤2:第一转发设备将如图3所示的封装后的CFD协议报文,通过第二内向MEP对应的表项中包含的第一端口标识所指示的第一端口发送出去。
当第二转发设备接收到该封装后的CFD协议报文后,就可以依次剥离Encapsulation Header,得到组播的CFD协议报文。
这样,通过上述的步骤1-2,要向MEP邻居发送的CFD协议报文便可以以单播方式、从接收到该MEP邻居发来的CFD协议报文的端口发送出去,从而实现了MEP邻居的正常建立和维护,并且避免了不必要的端口发送CFD协议报文。
步骤S208,第一转发设备仍然按照现有技术以组播的方式发送CFD协议报文。
在上述的方法中,在第一内向MEP和第二内向MEP刚刚配置好后,可以先按照现有技术以组播的方式发送CFD协议报文,在收到对方发来的CFD协议报文并将对方的信息记录到CFD信息表中后,即可按照上述的方法以单播的方式发送CFD协议报文了。
另外,第二转发设备也会按照上述方法增加第一内向MEP对应的表项,因此,会向第一转发设备发送单播的封装后的CFD协议报文,此时,第一转发设备也会接收到第二转发设备上的第二内向MEP发来的单播的封装后的CFD协议报文,此时,第一转发设备会剥除该封装后的CFD协议报文的报头(即,Encapsulation Header),得到其中的组播的CFD协议报文,之后,按照现有技术的流程进行处理即可,例如,维持第二内向MEP的正常状态。这里不再赘述。
本申请的技术方案中,可以依据MEP邻居的状态来动态地按照单播或组播方式发送CFD协议报文,在MEP邻居的状态为NORMAL时,按照该MEP邻居的信息封装CFD协议报文,并以单播方式发送;当该MEP邻居的状态为FAIL时,仍然按照现有的组播方式发送CFD协议报文。从而,在实现了MEP邻居的加入与维护的基础上,降低了由于链接检测报文扩散造成的链路中设备资源的消耗。
在实施实施过程中,第二内向MEP可以有多个,那么,第二内向MEP所在的第二转发设备也可以有多个,此时,针对每一个第二内向MEP均执行上述的步骤S201-S208即可。另外,第一转发设备上的内向MEP也可以有多个,此时,针对每一个内向MEP的每一个MEP邻居均执行上述的步骤S201-S208即可。
在第一转发设备上的内向MEP有多个时,各个内向MEP的CFD信息表可以整合为一张表,也可以每一个内向MEP对应一张CFD信息表,本申请对此不做限定。
在本实施例中,第一转发设备在没有获得第二内向MEP的信息之前,会首先发送组播的CFD协议报文;在获得并增加了第二内向MEP的表项、且第二内向MEP的状态为NORMAL时,就会发送单播的封装后的CFD协议报文;当第二内向MEP的状态变为FAIL后,又会发送组播的CFD协议报文;等到第二内向MEP的状态恢复为NORMAL后,第一转发设备又会发送单播的封装后的CFD协议报文。
实施例二
以图1所示的网络为例来进一步详细说明上述实施例一中的CFD协议报文的转发方法。在图1中的网络中,假设第一转发设备为DeviceA,Device A的端口Eth1/1上配置有第一内向MEP:MEP 100,MEP 100所属的VLAN是VLAN 100、MD级别为6、MD为MD_A、MA为MD_A+MA_C、服务实例为实例1;第二转发设备为DeviceD,Device D的端口Eth1/3上配置有第二内向MEP:MEP 200,MEP 200所属的VLAN是VLAN 100、MD级别为6、MD为MD_A、MA为MD_A+MA_C、服务实例为实例1。CFD协议报文为CCM报文。
场景一:MEP邻居建立
在该场景中,Device A执行的操作如下:
步骤S301,Device A接收到Device D上的MEP 200发来的CCM报文,其中,该CCM报文中携带有:作为源MAC的Device D的MAC(记为MAC-D),以及MEP 200的信息:200(MEP号)、MD级别6、MD_A、MD_A+MA_C、实例1;
步骤S302,DeviceA根据接收到的CCM报文中携带的MAC-D和MEP号200,在MEP 100对应的CFD信息表中查找匹配表项;
假设,Device A未查找到匹配表项。
步骤S303,Device A在该CFD信息表中增加一条MEP 200对应的表项,如表5所示,并在该表项中将MEP 200的状态设置为NORMAL;
表5
步骤S304,当MEP 100要发送CCM报文时,DeviceA判断如表5所示的表项中包含的状态是否为NORMAL,此时,判断结果为NORMAL;
步骤S305,Device A在CCM报文前封装一层如图3和4所示的报头,在该报头中,目的MAC是MAC-D、源MAC是MAC-A(Device A的MAC地址)、Type是CFD的Type:0x8902。然后,通过Eth1/3发送封装后的CCM报文。
同样,Device D也可以执行上述的步骤S301-S305。这样,MEP邻居之间的邻居关系依然能够建立和维护,且内向MEP发送的CCM报文将不会在整个局域网中扩散、减少了带宽浪费,从而避免了设备处理过多的不必要的CFD协议报文,提高了设备的性能。
由上可知,按照配置要求完成本端设备和远端设备的CFD配置,建立内向MEP的邻居链接后,本端设备需要维护一张CFD信息表,用于MEP邻居的信息的记录。若一个MEP邻居在建立后一直处于正常状态,该MEP邻居对应的表项不需要刷新。
场景二:链路故障
当MEP 100与MEP 200之间的链路发生了中断时,此时,Device A会执行如下步骤:
步骤S401,Device A在3.5倍的CCM发送时间间隔内,接收不到MEP 200发来的封装后的CCM报文;
步骤S402,Device A将如表5所示的MEP 200对应的表项中包含的状态修改为FAIL,如表6所示:
表6
步骤S403,当MEP 100要发送CCM报文时,Device A判断如表5所示的表项中包含的状态是否为NORMAL,此时,判断结果为FAIL;
步骤S404,DeviceA将按照现有技术,仍然以组播的方式发送CCM报文。
同样,Device D也会执行上述的步骤S401-S403。
由上可知,当MEP邻居处于失效状态时,仍然会按照现有技术发送CCM报文。
场景三、链路故障消除
链路故障消除后,MEP 100与MEP 200之间的MEP邻居关系重新建立。此时,Device A执行的步骤如下:
步骤S501,Device A接收到Device D上的MEP 200发来的CCM报文,其中,该CCM报文中携带有:作为源MAC的Device D的MAC(记为MAC-D),以及MEP 200的信息:200(MEP号)、MD级别6、MD_A、MD_A+MA_C、实例1;
步骤S502,DeviceA根据接收到的CCM报文中携带的MAC-D和MEP号200,在MEP 100对应的CFD信息表中查找匹配表项;
此时,Device A查找到如表6所示的匹配表项,匹配表项中包含的接收端口号、远端MAC以及MEP号分别与接收到CCM报文的端口号、CCM报文中携带的源MAC和MEP号完全相同。
步骤S503,Device A将如表6所示的表项中包含的状态更新为NORMAL,更新后的表项如表5所示;
步骤S504,当MEP 100要发送CCM报文时,Device A判断如表5所示的表项中包含的状态是否为NORMAL,此时,判断结果为NORMAL;
步骤S505,Device A在CCM报文前封装一层如图3和4所示的报头,在该报头中,目的MAC是MAC-D、源MAC是MAC-A(Device A的MAC地址)、Type是CFD的Type:0x8902。然后,通过Eth1/3发送封装后的CCM报文。
同样,Device D也可以执行上述的步骤S501-S505。
由上可知,对于仅仅是检测链路中断,而后重新正常链接的场景,端口在重新收到CCM报文后,设备会刷新CFD信息表,并筛查是否存在匹配表项。由于MEP邻居的信息没有任何变化(除了状态),因此,该MEP邻居能够重新正常建立。当该MEP邻居的状态正常时,设备将根据CFD状态信息表发送封装后的CCM报文。
场景四、链路迁移
在场景一中建立了MEP邻居关系之后,可能存在一些原因导致检测链路的接入端口发生了迁移,比如Device A的检测链路从Eth1/3迁移到Eth1/2。在此过程中,MEP200的状态的迁移顺序为:NORMAL→FAIL→NORMAL,在迁移到FAIL时,Device A按照现有技术发送CCM报文,当链路正常后,MEP200的状态再次变为NORMAL时,Device A执行的操作如下:
步骤S601,Device A从端口Eth1/2接收到Device D上的MEP 200发来的CCM报文,其中,该CCM报文中携带有:作为源MAC的Device D的MAC(记为MAC-D),以及MEP 200的信息:200(MEP号)、MD级别6、MD_A、MD_A+MA_C、实例1;
步骤S602,DeviceA根据接收到的CCM报文中携带的MAC-D和MEP号200,在MEP 100对应的CFD信息表中查找匹配表项;
此时,Device A查找到如表6所示的匹配表项,匹配表项中包含的远端MAC以及MEP号分别与CCM报文中携带的源MAC和MEP号完全相同。
但是,该匹配表项中包含的接收端口号Eth1/3与接收到CCM报文的端口号Eth1/2不同。
步骤S603,Device A将如表6所示的表项中包含的接收端口号更新为Eth1/2,将状态更新为NORMAL,更新后的表项如表7所示:
表7
步骤S604,当MEP 100要发送CCM报文时,Device A判断如表7所示的表项中包含的状态是否为NORMAL,此时,判断结果为NORMAL;
步骤S605,Device A在CCM报文前封装一层如图3和4所示的报头,在该报头中,目的MAC是MAC-D、源MAC是MAC-A(Device A的MAC地址)、Type是CFD的Type:0x8902。然后,通过Eth1/2发送封装后的CCM报文。
由上可知,由于检测链路中断或者其它原因,链路可能存在迁移到其它端口的情况,导致已有的MEP邻居重新加入。此时,该MEP邻居的信息中仅接收端口号发生了改变,此时,设备只需要更新接收端口号和状态即可。
实施例三
针对上述实施例一的方法,本申请的实施例三提供了一种可以应用该方法的转发设备,该转发设备可以是交换机等二层的转发设备,本申请对此不做限定。本实施例中的CFD协议报文是组播报文,具体可以是CCM、也可以是LTM和EAIS报文等,本申请对此不做限定。
如图5所示,该转发设备中包括以下模块:接收模块10、查找模块20、更新模块30、发送模块40和保存模块50;其中:
接收模块10,用于接收第二转发设备上的第二内向MEP发来的CFD协议报文,其中,本设备上配置有第一内向MEP,第二内向MEP是第一内向MEP的MEP邻居,与第一内向MEP具有相同的MD级别、MD、MA和服务实例;
查找模块20,用于根据接收模块10接收的CFD协议报文中携带的第二转发设备的MAC地址和第二内向MEP的标识,在第一内向MEP对应的CFD信息表中查找匹配表项,其中,该CFD信息表用于记录第一内向MEP的各个MEP邻居的信息;
更新模块30,用于在查找模块20未查找到匹配表项时,在CFD信息表中增加第二内向MEP对应的表项,并在该表项中将第二内向MEP的状态设置为正常,其中,该表项中包括:第一端口标识、第二转发设备的MAC地址、第二内向MEP的标识、以及第二内向MEP的状态,第一端口标识是接收到该CFD协议报文的第一端口的标识;
发送模块40,用于在第一内向MEP要发送CFD协议报文时,按照CFD信息表中第二内向MEP对应的表项,以单播的方式向第二转发设备发送CFD协议报文;
保存模块50,用于保存第一内向MEP对应的CFD信息表。
其中,发送模块40中进一步包括以下单元:封装单元和发送单元,其中:
封装单元,用于为CFD协议报文封装报头,得到单播的封装后的CFD协议报文,其中,该报头中的源MAC地址为第一转发设备的MAC地址、目的MAC地址为第二内向MEP对应的表项中包含的第二转发设备的MAC地址;
发送单元,用于将封装单元封装后的CFD协议报文,通过第二内向MEP对应的表项中包含的第一端口标识所指示的第一端口发送出去。
在第二转发设备增加了第一内向MEP对应的表项后,也会向本转发设备发送单播的封装后的CFD协议报文,此时,本转发设备就会接收到第二内向MEP发来的封装后的CFD协议报文,此时,本转发设备中还可以包括:剥除模块,其中,接收模块,还用于接收第二内向MEP发来的封装后的CFD协议报文;剥除模块,用于剥除接收模块接收的封装后的CFD协议报文的报头,得到组播的CFD协议报文。得到组播的CFD协议报文后,就可以按照现有技术进行处理,例如,维持第二内向MEP的正常状态。
另外,查找模块20中进一步包括单元:判断单元和确定单元,其中:
判断单元,用于判断CFD信息表的每一个表项中是否包含有接收的CFD协议报文中携带的第二转发设备的MAC地址和第二内向MEP的标识;
确定单元,用于在判断单元判断出没有一个表项中包含有第二转发设备的MAC地址和第二内向MEP的标识时,确定未查找到匹配表项;还用于在判断单元判断出有一个表项中包含有第二转发设备的MAC地址和第二内向MEP的标识时,确定查找到了匹配表项。
此外,后续,当接收模块10在第一预定时间段内未接收到第二内向MEP发来的CFD协议报文(该CFD协议报文可以是封装后的CFD协议报文)时,更新模块还用于在CFD信息表中的第二内向MEP对应的表项中,将第二内向MEP的状态修改为失效;
在查找模块20查找到了匹配表项,且该匹配表项中包含的状态为失效、端口标识不是第一端口标识时,更新模块还用于将该匹配表项中包含的状态更新为正常、端口标识更新为第一端口标识,以及,在查找模块20查找到了匹配表项,且该匹配表项中包含的状态为失效、端口标识是第一端口标识时,更新模块还用于将该匹配表项中包含的状态更新为正常;
为了节约CFD信息表中的表项资源,更新模块还用于在将第二内向MEP的状态修改为失效之后,当接收模块10在第二预定时间段内仍未接收到第二内向MEP发来的CFD协议报文时,删除CFD信息表中的第二内向MEP对应的表项,其中,第二预定时间段的值大于第一预定时间段的值。
综上,本申请以上实施例可以达到以下技术效果:
可以减少内向MEP所在设备对于不必要的CFD协议报文的发送,减轻了设备的CPU及转发芯片的负荷,提高了设备的性能;并且,实现了仅内向MEP所在的检测链路才需要处理CFD协议报文,节省了网络带宽,避免了局域网中的不在该链路上的其它设备接收并处理CFD协议报文,从而降低了这些其它设备的CPU使用率及设备负荷;同时,增强了内向MEP的灵活性。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。