本发明涉及数据通信
技术领域:
,尤其涉及一种mac地址的处理方法及装置。
背景技术:
:计算机网络传输数据的过程中,交换机是非常重要的设备。交换机基于介质访问控制层(mediaaccesscontrol,mac)地址表来完成报文的转发。交换机的交换芯片常通过哈希映射的方式来实现mac地址表项的二层存储。即,通过预设的哈希算法以mac地址映射的哈希值为索引,将映射到该哈希值mac地址表项存储在该哈希值对应的存储空间(哈希桶)下。然而,采用哈希算法可能会出现哈希冲突,即不同的mac地址表项会映射到同一哈希桶。但每个哈希值的哈希桶都是有限的,如果不缓解哈希冲突,哈希桶很容易出现溢出的情况。目前的方式中,为了缓解哈希冲突,便将一部分mac地址表项添加到交换芯片的访问控制列表(accesscontrollists,acl)。上述方式对acl的资源占用较多,acl也是交换芯片的稀缺资源,会造成acl的存储空间不足。技术实现要素:本发明提供一种mac地址的处理方法及装置,解决了现有技术中对acl的资源占用较多,会造成acl的空间较为紧张的问题。第一方面,本发明提供一种mac地址的处理方法,包括:获取待转发报文的源介质访问控制mac地址和第一接收端口标识;确定所述第一接收端口标识对应的端口类型;若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一虚拟局域网vlan标识,在mac地址表中查找所述源mac地址和所述第一vlan标识对应的第一mac地址表项,所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法;若在所述mac地址表中未查找到所述第一mac地址表项,则在接收端口标识与mac地址子表的第一对应关系中查找所述第一接收端口标识对应的第一mac地址子表,在所述第一mac地址子表中建立所述第一mac地址表项;以及,定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,将容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中。上述方法中,在获取了待转发报文的源mac地址和第一接收端口标识后,确定所述第一接收端口标识对应的端口类型,若确定所述端口类型为物理端口,便进一步确定所述第一vlan标识以及查找第一mac地址表项,在未查找到时,则查找第一mac地址子表,并在所述第一mac地址表中建立所述第一mac地址表项,由于所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法,因此映射到的哈希链表更加随机,降低了整体哈希冲突的分布,而且定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,从而保证每个mac地址子表的每个哈希链表存储的mac地址表项数量都控制在设定阈值内,该方式并不需要消耗acl空间,在缓解哈希冲突的基础上,不会造成acl的空间较为紧张的情况。可选的,将容量超过所述设定阈值的哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中,具体包括:确定容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项;确定每个超出mac地址表项是否存在选定mac地址子表;针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中;针对不存在选定mac地址子表的第二超出mac地址表项,从所述第一哈希链表中删除所述第二超出mac地址表项。上述方法中,确定每个超出mac地址表项是否存在选定mac地址子表后,针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中,从而可以均衡哈希链表间的存储空间,即便不存在,也从所述第一哈希链表中删除所述第二超出mac地址表项,从而保证第一哈希链表的容量不超过设定阈值。可选的,确定每个超出mac地址表项是否存在选定mac地址子表,具体包括:针对每个超出mac地址表项,执行:确定mac地址子表序列中位于当前超出mac地址表项所属的第二mac地址子表之后且相邻的mac地址子表,得到候选mac地址子表;采用所述候选mac地址子表的哈希算法确定所述当前超出mac地址表项对应的第三哈希链表;确定所述第三哈希链表的容量是否超过所述设定阈值;若确定所述第三哈希链表的容量超过所述设定阈值,则确定所述候选mac地址子表是否是所述mac地址子表序列中的最后一个,若确定所述候选mac地址子表是所述mac地址子表序列中的最后一个,则丢弃所述当前超出mac地址表项;若确定所述候选mac地址子表不是所述mac地址子表排序中的最后一个,则将所述mac地址子表序列中位于所述候选mac地址子表之后且相邻的mac地址子表替换所述候选mac地址子表,并执行所述采用所述候选mac地址子表的哈希算法确定当前超出mac地址表项对应的第三哈希链表的步骤;若确定所述第三哈希链表的容量未超过所述设定阈值,则确定所述候选mac地址子表为选定mac地址子表。上述方法中,针对每个超出mac地址表项,按照所述mac地址子表序列,依次执行所述采用所述候选mac地址子表的哈希算法确定当前超出mac地址表项对应的第三哈希链表的步骤,从而充分利用了所述候选mac地址子表中各哈希链表的空间,并在充分利用的基础上,确定超出mac地址表项可以存放的选定mac地址子表。可选的,还包括:若确定所述端口类型为物理端口,则在所述第一mac地址子表中查找所述待转发报文的目的mac地址;若在所述第一mac地址子表中查找到所述目的mac地址,则根据所述第一mac地址子表中所述目的mac地址对应的第二mac地址表项转发所述待转发报文;若在所述第一mac地址子表中未查找到所述目的mac地址,则在重定向环回口与mac地址子表的第二对应关系中查找所述第一mac地址子表对应的第一重定向环回口;若在所述第二对应关系中查找到所述第一重定向环回口,则通过所述第一重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。上述方式中,所述端口类型为物理端口时,直接在所述第一mac地址子表中查找所述待转发报文的目的mac地址,查找到便直接根据对应的第二mac地址表项转发所述待转发报文,即便未查找到也通过所述第一重定向环回口转发所述待转发报文,或者泛洪所述待转发报文,作为未查找到时的备份处理方案,从而在不需要消耗acl空间的基础上,处理所述待转发报文。可选的,还包括:若确定所述端口类型为环回口,则在所述第一对应关系中查找所述第一接口端口标识对应的第二mac地址子表;在所述第二mac地址子表中查找所述待转发报文的目的mac地址;若在所述第二mac地址子表中查找到所述目的mac地址,则根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文;若在所述第二mac地址子表中未查找到所述目的mac地址,则在重定向环回口与mac地址子表的第二对应关系中查找所述第二mac地址子表对应的第二重定向环回口;若在所述第二对应关系中查找到所述第二重定向环回口,则通过所述第二重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第二重定向环回口,则泛洪所述待转发报文。上述方法中,若确定所述端口类型为环回口,便在所述第二对应关系中查找所述第二重定向环回口,若查找到便直接根据第三mac地址表项转发所述待转发报文,即便未查找到,也可以直接通过第二对应关系,查找第二重定向环回口,如果查找到可以通过所述第二重定向环回口转发所述待转发报文,显然又会再次执行查找第一接口标识对应的第二地址子表的过程,直至查找到对应的第三mac地址表项,或者循环查找重定向口一直未查找到第三mac地址表项,泛洪所述待转发报文,作为未查找到时的备份处理方案,从而在不需要消耗acl空间的基础上,处理所述待转发报文。第二方面,本发明提供一种mac地址的处理装置,包括:获取模块,用于获取待转发报文的源mac地址和第一接收端口标识;确定模块,用于确定所述第一接收端口标识对应的端口类型;查找模块,用于若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一虚拟局域网vlan标识,在mac地址表中查找所述源mac地址和所述第一vlan标识对应的第一mac地址表项,所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法;若在所述mac地址表中未查找到所述第一mac地址表项,则在接收端口标识与mac地址子表的第一对应关系中查找所述第一接收端口标识对应的第一mac地址子表,在所述第一mac地址子表中建立所述第一mac地址表项;以及,处理模块,用于定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,将容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中。可选的,所述处理模块具体用于:确定容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项;确定每个超出mac地址表项是否存在选定mac地址子表;针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中;针对不存在选定mac地址子表的第二超出mac地址表项,从所述第一哈希链表中删除所述第二超出mac地址表项。可选的,所述处理模块具体用于:针对每个超出mac地址表项,执行:确定mac地址子表序列中位于当前超出mac地址表项所属的第二mac地址子表之后且相邻的mac地址子表,得到候选mac地址子表;采用所述候选mac地址子表的哈希算法确定所述当前超出mac地址表项对应的第三哈希链表;确定所述第三哈希链表的容量是否超过所述设定阈值;若确定所述第三哈希链表的容量超过所述设定阈值,则确定所述候选mac地址子表是否是所述mac地址子表序列中的最后一个,若确定所述候选mac地址子表是所述mac地址子表序列中的最后一个,则丢弃所述当前超出mac地址表项;若确定所述候选mac地址子表不是所述mac地址子表排序中的最后一个,则将所述mac地址子表序列中位于所述候选mac地址子表之后且相邻的mac地址子表替换所述候选mac地址子表,并执行所述采用所述候选mac地址子表的哈希算法确定当前超出mac地址表项对应的第三哈希链表的步骤;若确定所述第三哈希链表的容量未超过所述设定阈值,则确定所述候选mac地址子表为选定mac地址子表。可选的,若所述确定模块确定所述端口类型为物理端口,则所述查找模块还用于:在所述第一mac地址子表中查找所述待转发报文的目的mac地址;若所述查找模块在所述第一mac地址子表中查找到所述目的mac地址,则所述处理模块还用于:根据所述第一mac地址子表中所述目的mac地址对应的第二mac地址表项转发所述待转发报文;若所述查找模块在所述第一mac地址子表中未查找到所述目的mac地址,则所述处理模块还用于:在重定向环回口与mac地址子表的第二对应关系中查找所述第一mac地址子表对应的第一重定向环回口;若所述查找模块在所述第二对应关系中查找到所述第一重定向环回口,则所述处理模块还用于:通过所述第一重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。可选的,若所述确定模块确定所述端口类型为环回口,则所述查找模块还用于:在所述第一对应关系中查找所述第一接口端口标识对应的第二mac地址子表;在所述第二mac地址子表中查找所述待转发报文的目的mac地址;若所述查找模块在所述第二mac地址子表中查找到所述目的mac地址,则所述处理模块还用于:根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文;若所述查找模块在所述第二mac地址子表中未查找到所述目的mac地址,则所述处理模块还用于:在重定向环回口与mac地址子表的第二对应关系中查找所述第二mac地址子表对应的第二重定向环回口;若所述查找模块在所述第二对应关系中查找到所述第二重定向环回口,则所述处理模块还用于:通过所述第二重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第二重定向环回口,则泛洪所述待转发报文。上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及各个可选的方法。第四方面,本发明提供一种计算机可读存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及各个可选的方法。本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种mac地址的处理方法对应的流程示意图;图2为本发明实施例提供的一种mac地址的处理方法中多个mac地址子表划分的示意图;图3为本发明实施例提供的一种mac地址的处理方法中将所述第一超出mac地址表项移至所述第二哈希链表的示意图;图4为本发明实施例提供的一种mac地址的处理方法对应的具体流程示意图;图5为本发明实施例提供的一种mac地址的处理装置对应的结构示意图。具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。mac地址转发表:存放用于指导以太网报文转发的地址表项。acl:acls(accesscontrollists,访问控制列表),也有称为tcam表,俗称为防火墙,在有的文档中还称之为包过滤。通过定义一些规则对网络设备接口上的数据报文进行控制:允许通过、丢弃。目前的方式中,对于因为mac地址哈希冲突而无法安装到mac地址表的mac地址表项,一般安装到交换芯片的acl,从而缓解冲突。但是,acl也是交换芯片的稀缺资源。这种将哈希冲突的mac地址表项安装到acl中的方式,对acl的资源占用较多,会造成acl的空间较为紧张。为此,如图1所示,本发明提供一种mac地址的处理方法。步骤101:获取待转发报文的源mac地址和第一接收端口标识。步骤102:确定所述第一接收端口标识对应的端口类型。步骤103:若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一vlan标识,在mac地址表中查找所述源mac地址和所述第一vlan标识对应的第一mac地址表项。所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法。步骤104:若在所述mac地址表中未查找到所述第一mac地址表项,则在接收端口标识与mac地址子表的第一对应关系中查找所述第一接收端口标识对应的第一mac地址子表,在所述第一mac地址子表中建立所述第一mac地址表项。步骤105:定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,将容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中。步骤101~步骤105的方法中,如图2所示,举例来说,将整块mac地址表(即图中的mac地址转发表)划分为n个mac地址子表(图2中简称为子表),n为大于1的正整数,所述至少两个mac地址子表采用不同的哈希(hash)算法,降低hash冲突概率,如mac地址子表0(图2中简称为子表0)使用哈希算法0,如ctc16l;如mac地址子表1(图2中简称为子表1)使用哈希算法1,如ctc16u,mac地址子表n(图2中简称为子表n)使用哈希算法n,ctc32u。需要说明的是,上述方式可以根据交换芯片的hash算法特性及报文特征,灵活调整子表个数,对应hash算法及子表容量,使冲突率降到最小值。在进行表项分配时,可以设置子表大小需避免等比划分,如划分给子表0的大小推荐为总mac地址表容量的预设比例,如(70%)。其它子表依次递减,以提高首次查表的命中率。步骤101~步骤105的方法适用于mac地址冲突率大,但是又要求mac地址容量能够接近交换芯片硬件容量(也就是说mac地址存储充分利用了交换芯片硬件容量)的场景,以及适用于acl资源紧缺,不允许冲突的mac地址大量占用acl资源的场景。步骤101~步骤105的方法中,通过将整块mac地址表划分为n个mac地址子表的方式,即将mac地址转发表划分为不同子表,每个子表采用不同的hash算法进行mac地址表硬件安装;在部分交换芯片mac地址冲突率大,且acl资源较少的情况下,可以通过该方案实现降低mac地址冲突,提升mac地址表利用率。步骤101~步骤105的方法中,各个子表可以绑定子表标识(classid),如l2classid0。为不同子表绑定不同classid,举例来说,子表和子表标识的绑定关系如下(其中n可以灵活设置,如设置为4个):子表号子表标识(classid)子表0l2classid0子表1l2classid1……子表nl2classidn表1子表与子表标识的绑定关系进一步地,各个子表可以绑定接收端口标识,不同的接收端口可用设置不同的端口类型,端口类型可以包括物理端口和环回口(环回口用loopback表示,如loopback1,即环回口1)。举例来说,如表2所示,子表和接收端口标识的绑定关系(第一对应关系)如下:子表号接收端口标识子表0物理端口子表1loopback1……子表nloopbackn表2子表与接收端口标识的绑定关系显然,结合表1和表2,子表标识和接收端口标识也有相应的绑定关系。举例来说,在步骤101中,获取到了待转发报文的源mac地址,第一接收端口标识为l2classid0,步骤102中,所对应的端口类型为物理端口,步骤103中一种可能的实现过程如下:确定所述第一接收端口标识l2classid0所属的第一vlan标识为vlanid0,在mac地址表中查找所述源mac地址和vlanid0对应的第一mac地址表项,即为mac地址表项0。若在所述mac地址表中未查找到所述第一mac地址表项,举例来说,步骤104可能实现的过程为:因为l2classid0绑定的第一mac地址子表为子表0,在子表0中建立第一mac地址表项。一种可选实施方式中,步骤105中将容量超过所述设定阈值的哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表(可简称为移表过程)中的具体方式可以为:步骤1051:确定容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项。步骤1052:确定每个超出mac地址表项是否存在选定mac地址子表。步骤1053:针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中。步骤1054:针对不存在选定mac地址子表的第二超出mac地址表项,从所述第一哈希链表中删除所述第二超出mac地址表项。举例来说,第一mac地址子表为子表0,当子表0中第一哈希链表中的地址表项超过第一哈希链表70%容量(即设定阈值)时,触发移表过程,即步骤1051~步骤1054。步骤1051具体实现过程可以为:在子表0的第一哈希链表超过70%容量时,对于超过70%容量的多余的mac地址表项部分,cpu将多余的mac地址表项部分取出,即为各个超出mac地址表项。举例来说,第一超出mac地址表项存在选定mac地址子表,且选定mac地址子表为子表1时,步骤1053具体实现过程可以为:根据子表1的hash算法重新计算后确定出第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中,即将所述第一超出mac地址表项安装到子表1,同时删除子表0中的所述第一超出mac地址表项。具体来说,如图3所示,所述第一超出mac地址表项为k,那么便将k移入所述第二哈希链表(图3中的2002)。另一种情况下,第二超出mac地址表项并不存在选定mac地址子表,那么便从所述第一哈希链表中删除所述第二超出mac地址表项。需要说明的是,上述过程仅以子表0为例说明,事实上,每个子表都有类似的轮询过程。上述移表过程中,步骤1052具体可以为:针对每个超出mac地址表项,执行:步骤(1):确定mac地址子表序列中位于当前超出mac地址表项所属的第二mac地址子表之后且相邻的mac地址子表,得到候选mac地址子表。步骤(2):采用所述候选mac地址子表的哈希算法确定所述当前超出mac地址表项对应的第三哈希链表。步骤(3):确定所述第三哈希链表的容量是否超过所述设定阈值。步骤(4):若确定所述第三哈希链表的容量超过所述设定阈值,则确定所述候选mac地址子表是否是所述mac地址子表序列中的最后一个,若确定所述候选mac地址子表是所述mac地址子表序列中的最后一个,则丢弃所述当前超出mac地址表项;若确定所述候选mac地址子表不是所述mac地址子表排序中的最后一个,则将所述mac地址子表序列中位于所述候选mac地址子表之后且相邻的mac地址子表替换所述候选mac地址子表,并执行步骤(2)。步骤(5):若确定所述第三哈希链表的容量未超过所述设定阈值,则确定所述候选mac地址子表为选定mac地址子表。举例来说,上述步骤(4)的具体过程如下:如果子表1中第一哈希链表超过70%容量(即设定阈值)时,则继续尝试子表2,一直到子表n;如果冲突率依然超过子表n中70%容量(即设定阈值),则取出该第一哈希链表中其他的mac地址表项,重复上面的步骤进行尝试安装。一种可能的实现方式如下:步骤(i):若确定所述端口类型为物理端口,则在所述第一mac地址子表中查找所述待转发报文的目的mac地址。步骤(ii):若在所述第一mac地址子表中查找到所述目的mac地址,则根据所述第一mac地址子表中所述目的mac地址对应的第二mac地址表项转发所述待转发报文。步骤(iii):若在所述第一mac地址子表中未查找到所述目的mac地址,则在重定向环回口与mac地址子表的第二对应关系中查找所述第一mac地址子表对应的第一重定向环回口;若在所述第二对应关系中查找到所述第一重定向环回口,则通过所述第一重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。步骤(i)~步骤(iii)所针对的一种情形是,当所述待转发报文要转发时,在所述第一mac地址子表中查找所述待转发报文的目的mac地址,从而根据目的mac地址转发,查找到便按照步骤(ii)的过程的按照第二mac地址表项执行转发。进一步地,步骤(iii)可通过以下过程实现:设备初始化时,可以设置子表与重定向环回口的绑定关系,即第二对应关系,具体如表3所示:子表号重定向环回口子表0loopback1子表1……loopbackn子表n空表3子表与重定向环回口的绑定关系具体可以根据子表数量创建相应数量的acl条目和接收端口标识,通过acl实现自动化动作。可以将“在子表中未命中mac地址”设置为匹配域。格式可以为:子表标识且hit=0,其中hit=0表示未命中。举例来说,l2classid0且hit=0,表示在子表0中未命中mac地址。将动作域设置为重定向到环回口(如loopback1),从而通过acl引流,重新匹配。acl对应匹配域和动作域如表4所示:表4acl对应匹配域和动作域举例来说,所述第一mac地址子表为子表0,第二对应关系中,子表0对应的第一重定向环回口为loopback1,那么便通过loopback1转发所述待转发报文;另一种可能的情形为,若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。进一步地,还可以采用如下可选实施方式:步骤(a):若确定所述端口类型为环回口,则在所述第一对应关系中查找所述第一接口端口标识对应的第二mac地址子表;步骤(b):在所述第二mac地址子表中查找所述待转发报文的目的mac地址。步骤(c):若在所述第二mac地址子表中查找到所述目的mac地址,则根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文。步骤(d):若在所述第二mac地址子表中未查找到所述目的mac地址,则在重定向环回口与mac地址子表的第二对应关系中查找所述第二mac地址子表对应的第二重定向环回口;若在所述第二对应关系中查找到所述第二重定向环回口,则通过所述第二重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第二重定向环回口,则泛洪所述待转发报文。需要说明的是,上述步骤(a)~步骤(d)可以通过以下过程实现:若在所述第一mac地址子表(子表0)中未查找到所述目的mac地址,则进入acl引流的流程,具体实现过程中,交换芯片会携带子表0之前绑定的classid=0及hit=0字段进入acl引流的流程,acl表项匹配命中后,将报文利用二层重定向引流到loopback1口。以此类推,子表1、子表2直至子表n执行上述acl引流的流程,重复上面所述目的mac地址的查找步骤,如果未命中则根据acl对应的动作域引流到对应的接收端口。最终当命中l2classidn且hit=0这条匹配域时(即在所述第二对应关系中未查找到所述第二重定向环回口),将待匹配报文做泛洪处理。通过acl实现不同的mac地址子表查找,通过不同mac子表关联不同接收端口标识,当命中指定接收端口标识的子表时取消acl引流,实现破环技术,防止陷入死循环。上述方式下,结合acl引流方法实现多级mac地址查找技术,实现了降低mac地址冲突的概率,从而提升了mac地址转发表的利用率。综上所述,一种可能的实现方式中,本发明提供的mac地址的处理可以如图4所示。首先划分硬件子表(mac地址表),每个mac地址子表关联不同的hash算法,之后便进行源mac地址的学习。具体可以按照步骤101~步骤105的方式以及可选方式,进行源mac地址的学习,建立源mac地址相应的mac表项,并存储到相应的mac地址子表中。进一步地,可以对目的mac地址查找(即对目的mac地址在所述第二mac地址子表的查找)。如果查到,则进行单播转发,单播转发具体为:根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文。如果没有查到,则确定所述目的mac地址是否命中环回口(loopback)。具体来说,可以首先确定所述目的mac地址是否命中指定的子表标识,若未命中,则确定所述目的mac地址未命中环回口,否则,命中的子表标识对应的环回口,便是命中的环回口。如果未命中,则泛洪转发待转发报文。如果命中,则将待转发报文引流到命中的环回口,重新触发目的mac地址查找步骤。如图5所示,本发明提供一种mac地址的处理装置,包括:获取模块501,用于获取待转发报文的源mac地址和第一接收端口标识;确定模块502,用于确定所述第一接收端口标识对应的端口类型;查找模块503,用于若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一虚拟局域网vlan标识,在mac地址表中查找所述源mac地址和所述第一vlan标识对应的第一mac地址表项,所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法;若在所述mac地址表中未查找到所述第一mac地址表项,则在接收端口标识与mac地址子表的第一对应关系中查找所述第一接收端口标识对应的第一mac地址子表,在所述第一mac地址子表中建立所述第一mac地址表项;以及,处理模块504,用于定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,将容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中。可选的,所述处理模块504具体用于:确定容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项;确定每个超出mac地址表项是否存在选定mac地址子表;针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中;针对不存在选定mac地址子表的第二超出mac地址表项,从所述第一哈希链表中删除所述第二超出mac地址表项。可选的,所述处理模块504具体用于:针对每个超出mac地址表项,执行:确定mac地址子表序列中位于当前超出mac地址表项所属的第二mac地址子表之后且相邻的mac地址子表,得到候选mac地址子表;采用所述候选mac地址子表的哈希算法确定所述当前超出mac地址表项对应的第三哈希链表;确定所述第三哈希链表的容量是否超过所述设定阈值;若确定所述第三哈希链表的容量超过所述设定阈值,则确定所述候选mac地址子表是否是所述mac地址子表序列中的最后一个,若确定所述候选mac地址子表是所述mac地址子表序列中的最后一个,则丢弃所述当前超出mac地址表项;若确定所述候选mac地址子表不是所述mac地址子表排序中的最后一个,则将所述mac地址子表序列中位于所述候选mac地址子表之后且相邻的mac地址子表替换所述候选mac地址子表,并执行所述采用所述候选mac地址子表的哈希算法确定当前超出mac地址表项对应的第三哈希链表的步骤;若确定所述第三哈希链表的容量未超过所述设定阈值,则确定所述候选mac地址子表为选定mac地址子表。可选的,若所述确定模块502确定所述端口类型为物理端口,则所述查找模块503还用于:在所述第一mac地址子表中查找所述待转发报文的目的mac地址;若所述查找模块503在所述第一mac地址子表中查找到所述目的mac地址,则所述处理模块504还用于:根据所述第一mac地址子表中所述目的mac地址对应的第二mac地址表项转发所述待转发报文;若所述查找模块503在所述第一mac地址子表中未查找到所述目的mac地址,则所述处理模块504还用于:在重定向环回口与mac地址子表的第二对应关系中查找所述第一mac地址子表对应的第一重定向环回口;若所述查找模块503在所述第二对应关系中查找到所述第一重定向环回口,则所述处理模块504还用于:通过所述第一重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。可选的,若所述确定模块502确定所述端口类型为环回口,则所述查找模块503还用于:在所述第一对应关系中查找所述第一接口端口标识对应的第二mac地址子表;在所述第二mac地址子表中查找所述待转发报文的目的mac地址;若所述查找模块503在所述第二mac地址子表中查找到所述目的mac地址,则所述处理模块504还用于:根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文;若所述查找模块503在所述第二mac地址子表中未查找到所述目的mac地址,则所述处理模块504还用于:在重定向环回口与mac地址子表的第二对应关系中查找所述第二mac地址子表对应的第二重定向环回口;若所述查找模块503在所述第二对应关系中查找到所述第二重定向环回口,则所述处理模块504还用于:通过所述第二重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第二重定向环回口,则泛洪所述待转发报文。基于同一发明构思,本发明实施例还提供了一种计算机设备,包括程序或指令,当所述程序或指令被执行时,如本发明实施例提供的mac地址的处理方法及任一可选方法被执行。基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,包括程序或指令,当所述程序或指令被执行时,如本发明实施例提供的mac地址的处理方法及任一可选方法被执行。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页1 2 3 
技术特征:1.一种mac地址的处理方法,其特征在于,包括:
获取待转发报文的源介质访问控制mac地址和第一接收端口标识;
确定所述第一接收端口标识对应的端口类型;
若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一虚拟局域网vlan标识,在mac地址表中查找所述源mac地址和所述第一vlan标识对应的第一mac地址表项,所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法;
若在所述mac地址表中未查找到所述第一mac地址表项,则在接收端口标识与mac地址子表的第一对应关系中查找所述第一接收端口标识对应的第一mac地址子表,在所述第一mac地址子表中建立所述第一mac地址表项;以及,
定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,将容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中。
2.如权利要求1所述的方法,其特征在于,将容量超过所述设定阈值的哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中,具体包括:
确定容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项;
确定每个超出mac地址表项是否存在选定mac地址子表;
针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中;
针对不存在选定mac地址子表的第二超出mac地址表项,从所述第一哈希链表中删除所述第二超出mac地址表项。
3.如权利要求2所述的方法,其特征在于,确定每个超出mac地址表项是否存在选定mac地址子表,具体包括:
针对每个超出mac地址表项,执行:
确定mac地址子表序列中位于当前超出mac地址表项所属的第二mac地址子表之后且相邻的mac地址子表,得到候选mac地址子表;
采用所述候选mac地址子表的哈希算法确定所述当前超出mac地址表项对应的第三哈希链表;
确定所述第三哈希链表的容量是否超过所述设定阈值;
若确定所述第三哈希链表的容量超过所述设定阈值,则确定所述候选mac地址子表是否是所述mac地址子表序列中的最后一个,若确定所述候选mac地址子表是所述mac地址子表序列中的最后一个,则丢弃所述当前超出mac地址表项;若确定所述候选mac地址子表不是所述mac地址子表排序中的最后一个,则将所述mac地址子表序列中位于所述候选mac地址子表之后且相邻的mac地址子表替换所述候选mac地址子表,并执行所述采用所述候选mac地址子表的哈希算法确定当前超出mac地址表项对应的第三哈希链表的步骤;
若确定所述第三哈希链表的容量未超过所述设定阈值,则确定所述候选mac地址子表为选定mac地址子表。
4.如权利要求1所述的方法,其特征在于,还包括:
若确定所述端口类型为物理端口,则在所述第一mac地址子表中查找所述待转发报文的目的mac地址;
若在所述第一mac地址子表中查找到所述目的mac地址,则根据所述第一mac地址子表中所述目的mac地址对应的第二mac地址表项转发所述待转发报文;
若在所述第一mac地址子表中未查找到所述目的mac地址,则在重定向环回口与mac地址子表的第二对应关系中查找所述第一mac地址子表对应的第一重定向环回口;若在所述第二对应关系中查找到所述第一重定向环回口,则通过所述第一重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。
5.如权利要求1-4任一所述的方法,其特征在于,还包括:
若确定所述端口类型为环回口,则在所述第一对应关系中查找所述第一接口端口标识对应的第二mac地址子表;
在所述第二mac地址子表中查找所述待转发报文的目的mac地址;
若在所述第二mac地址子表中查找到所述目的mac地址,则根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文;
若在所述第二mac地址子表中未查找到所述目的mac地址,则在重定向环回口与mac地址子表的第二对应关系中查找所述第二mac地址子表对应的第二重定向环回口;若在所述第二对应关系中查找到所述第二重定向环回口,则通过所述第二重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第二重定向环回口,则泛洪所述待转发报文。
6.一种mac地址的处理装置,其特征在于,包括:
获取模块,用于获取待转发报文的源mac地址和第一接收端口标识;
确定模块,用于确定所述第一接收端口标识对应的端口类型;
查找模块,用于若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一虚拟局域网vlan标识,在mac地址表中查找所述源mac地址和所述第一vlan标识对应的第一mac地址表项,所述mac地址表包括至少两个mac地址子表,所述至少两个mac地址子表采用不同的哈希算法;若在所述mac地址表中未查找到所述第一mac地址表项,则在接收端口标识与mac地址子表的第一对应关系中查找所述第一接收端口标识对应的第一mac地址子表,在所述第一mac地址子表中建立所述第一mac地址表项;以及,
处理模块,用于定期轮询所述第一mac地址子表中的各个哈希链表的容量是否超过设定阈值,将容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项移至所述至少两个mac地址子表中除所述第一mac地址子表之外的选定mac地址子表中。
7.如权利要求6所述的装置,其特征在于,所述处理模块具体用于:
确定容量超过所述设定阈值的第一哈希链表中的各个超出mac地址表项;
确定每个超出mac地址表项是否存在选定mac地址子表;
针对存在选定mac地址子表的第一超出mac地址表项,采用所述选定mac地址子表的哈希算法确定所述第一超出mac地址表项对应的第二哈希链表,将所述第一超出mac地址表项移至所述第二哈希链表中;
针对不存在选定mac地址子表的第二超出mac地址表项,从所述第一哈希链表中删除所述第二超出mac地址表项。
8.如权利要求7所述的装置,其特征在于,所述处理模块具体用于:
针对每个超出mac地址表项,执行:
确定mac地址子表序列中位于当前超出mac地址表项所属的第二mac地址子表之后且相邻的mac地址子表,得到候选mac地址子表;
采用所述候选mac地址子表的哈希算法确定所述当前超出mac地址表项对应的第三哈希链表;
确定所述第三哈希链表的容量是否超过所述设定阈值;
若确定所述第三哈希链表的容量超过所述设定阈值,则确定所述候选mac地址子表是否是所述mac地址子表序列中的最后一个,若确定所述候选mac地址子表是所述mac地址子表序列中的最后一个,则丢弃所述当前超出mac地址表项;若确定所述候选mac地址子表不是所述mac地址子表排序中的最后一个,则将所述mac地址子表序列中位于所述候选mac地址子表之后且相邻的mac地址子表替换所述候选mac地址子表,并执行所述采用所述候选mac地址子表的哈希算法确定当前超出mac地址表项对应的第三哈希链表的步骤;
若确定所述第三哈希链表的容量未超过所述设定阈值,则确定所述候选mac地址子表为选定mac地址子表。
9.如权利要求6所述的装置,其特征在于,
若所述确定模块确定所述端口类型为物理端口,则所述查找模块还用于:在所述第一mac地址子表中查找所述待转发报文的目的mac地址;
若所述查找模块在所述第一mac地址子表中查找到所述目的mac地址,则所述处理模块还用于:
根据所述第一mac地址子表中所述目的mac地址对应的第二mac地址表项转发所述待转发报文;
若所述查找模块在所述第一mac地址子表中未查找到所述目的mac地址,则所述处理模块还用于:
在重定向环回口与mac地址子表的第二对应关系中查找所述第一mac地址子表对应的第一重定向环回口;
若所述查找模块在所述第二对应关系中查找到所述第一重定向环回口,则所述处理模块还用于:
通过所述第一重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第一重定向环回口,则泛洪所述待转发报文。
10.如权利要求6-9任一所述的装置,其特征在于,
若所述确定模块确定所述端口类型为环回口,则所述查找模块还用于:
在所述第一对应关系中查找所述第一接口端口标识对应的第二mac地址子表;在所述第二mac地址子表中查找所述待转发报文的目的mac地址;
若所述查找模块在所述第二mac地址子表中查找到所述目的mac地址,则所述处理模块还用于:
根据所述第二mac地址子表中所述目的mac地址对应的第三mac地址表项转发所述待转发报文;
若所述查找模块在所述第二mac地址子表中未查找到所述目的mac地址,则所述处理模块还用于:
在重定向环回口与mac地址子表的第二对应关系中查找所述第二mac地址子表对应的第二重定向环回口;
若所述查找模块在所述第二对应关系中查找到所述第二重定向环回口,则所述处理模块还用于:
通过所述第二重定向环回口转发所述待转发报文;若在所述第二对应关系中未查找到所述第二重定向环回口,则泛洪所述待转发报文。
技术总结本发明公开了一种MAC地址的处理方法及装置,其中方法为:获取待转发报文的源介质访问控制MAC地址和第一接收端口标识;确定所述第一接收端口标识对应的端口类型;若确定所述端口类型为物理端口,则确定所述第一接收端口标识所属的第一虚拟局域网VLAN标识,在MAC地址表中查找所述源MAC地址和所述第一VLAN标识对应的第一MAC地址表项;若未查找到,则所述第一MAC地址表项,则在接收端口标识与MAC地址子表的第一对应关系中查找所述第一接收端口标识对应的第一MAC地址子表,在所述第一MAC地址子表中建立所述第一MAC地址表项;定期轮询所述第一MAC地址子表中的各个哈希链表的容量是否超过设定阈值。
技术研发人员:黄涛
受保护的技术使用者:锐捷网络股份有限公司
技术研发日:2020.11.30
技术公布日:2021.03.12