一种哈希冲突的处理方法、装置及交换设备与流程

文档序号:13882515阅读:582来源:国知局
一种哈希冲突的处理方法、装置及交换设备与流程

本发明涉及网络通信技术领域,特别涉及一种mac地址哈希冲突的处理方法、装置及交换设备。



背景技术:

mac地址(媒体接入控制地址),也被称为物理地址或硬件地址。它是与网络硬件相关联的固定序列号,由网络设备制造商生产时写在硬件内部。交换机或者其他二层设备的转发是基于mac地址表来进行的。它通过建立一张包含源mac地址,vlanid(虚拟局域网标识号),port(设备端口号)的转发表,并根据该转发表来实现报文的转发。

mac地址表最初采用顺序表的结构存储mac地址,当mac地址发生变化时,即添加或删除mac地址时,为了保持mac地址表的有序性,mac地址表会出现表项移动。当mac地址表存储的内容较多时,移动与查找就变得复杂,此时报文无法达到线速,查找效率也较低下。后期的芯片,mac地址表多采用哈希表格式存储mac地址表项。当进行mac地址学习时,芯片会根据报文的源mac地址和vlanid使用特定的哈希算法得到哈希桶的编号,然后把mac地址存储到该桶中。通过哈希表存储mac地址表项可以有效提高查表效率,但是同时也产生了哈希冲突的问题。

假如一个哈希桶能存储n个mac地址,当它装满n个mac地址后,一个正在被学习的mac地址根据哈希算法获得的存储编号依然为该哈希桶时,就无法存储到该哈希桶中,此种情况即为哈希冲突。如何在满足性能要求的前提下,降低哈希冲突发生的概率已成为业界亟需解决的问题。

通常情况下,交换芯片中mac地址硬件表的容量越大,mac地址产生冲突的概率就越小。现有的应对哈希冲突的方案主要有以下两类:

方案一,优化mac地址硬件表的存储算法,降低哈希冲突发生的概率。然而,交换芯片内部的硬件对用户是封闭的,想要通过改变硬件的存储算法以降低哈希冲突发生的概率基本难以实现。

方案二,升级硬件,使用mac地址硬件表容量更大的交换芯片或者外挂tcam等。该方案的实现存在以下问题:第一,更换交换芯片的成本较高,芯片厂家不一定能提供符合用户需求的芯片产品;第二,外挂tcam会存在与交换芯片的兼容性问题,并且同样需要用户修改硬件。

关于相关技术在解决哈希冲突时所造成的需要修改硬件以及增加硬件成本的问题,现有技术没有提出有效的解决方案。



技术实现要素:

本发明实施例提出了一种哈希冲突处理方法、装置及交换设备,以解决现有技术在应对哈希冲突时所造成的需要修改硬件以及成本增加的问题。

为了解决上述技术问题,本发明实施例提供了一种哈希冲突处理方法,包括:

确定发生哈希冲突的媒体接入控制mac地址;

将所述mac地址的表项信息存储于交换芯片的用户自定义转发表l2_user_entry中;

在接收到以所述mac地址为目的地址的报文时,通过从所述l2_user_entry表中查询所述mac地址的表项信息进行报文转发。

进一步的,确定所述发生哈希冲突的媒体接入控制mac地址包括:

通过查询访问控制列表acl确定mac地址学习失败的报文;

解析得到所述报文携带的源mac地址;

判断所述交换芯片的mac地址硬件表中是否存储所述源mac地址的表项信息,在判断结果为否的情况下,确定所述源mac地址发生哈希冲突。

进一步的,将所述mac地址的表项信息存储于所述交换芯片的l2_user_entry表中包括:

判断所述l2_user_entry表中是否存储所述mac地址的表项信息;

在判断结果为否的情况下,将所述mac地址的表项信息存储于所述l2_user_entry表中。

进一步的,在将所述mac地址的表项信息存储于所述交换芯片的l2_user_entry表中之后,所述方法还包括:

为所述mac地址设置老化时间周期以及老化时间标识位,将所述老化时间标识位置为1;

在第一个所述老化时间周期之内,在未接收到以所述mac地址为源地址的报文的情况下,将所述老化时间标识位复位为0;

在第二个所述老化时间周期之内,在未接收到以所述mac地址为源地址的报文的情况下,删除所述mac地址的表项信息。

进一步的,所述方法还包括:

在第二个所述老化时间周期之内,在接收到以所述mac地址为源地址的报文的情况下,将所述老化时间标识位置为1。

进一步的,所述mac地址的表项信息为mac地址信息、端口信息、虚拟局域网vlanid信息。

本发明实施例还公开了一种哈希冲突处理装置,包括:

确定模块,用于确定发生哈希冲突的媒体接入控制mac地址;

存储模块,用于将所述mac地址的表项信息存储于交换芯片的用户自定义转发表l2_user_entry中;

转发模块,用于在接收到以所述mac地址为目的地址的报文时,通过从所述l2_user_entry表中查询所述mac地址的表项信息进行报文转发。

进一步的,所述确定模块包括:

确定子模块,用于通过查询访问控制列表acl确定mac地址学习失败的报文;

解析子模块,用于解析得到所述报文携带的源mac地址;

第一判断子模块,用于判断所述交换芯片的mac地址硬件表中是否存储所述源mac地址,在判断结果为否的情况下,确定所述源mac地址发生哈希冲突。

进一步的,所述存储模块包括:

第二判断子模块,用于判断所述l2_user_entry表中是否存储所述mac地址的表项信息;

存储子模块,用于在判断结果为否的情况下,将所述mac地址的表项信息存储于所述l2_user_entry表中。

本发明实施例还公开了一种交换设备,具有上述任一项所述的装置。

本发明实施例通过将发生哈希冲突的mac地址存储于交换芯片已有的硬件表中,从而实现了在不修改硬件设计,不增加硬件成本的前提下,有效缓解mac地址的哈希冲突。

附图说明

图1是根据本发明实施例的一种哈希冲突处理方法流程图;

图2是根据本发明实施例的一种mac地址查询方法流程图;

图3是根据本发明实施例的一种哈希冲突处理装置框图一;

图4是根据本发明实施例的一种哈希冲突处理装置框图二;

图5是根据本发明实施例的一种哈希冲突处理装置框图三;

图6是根据本发明实施例的一种哈希冲突处理装置框图四。

具体实施方式

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

本发明实施例提供了一种哈希冲突处理方法,通过检测确定发生哈希冲突的mac地址,并将该地址存储于交换芯片中除mac地址硬件表以外的用户自定义转发表中,在下一次接收到以该mac地址为目的地址的报文时,就可以查询用户自定义转发表中的信息进行报文转发。图1是根据本发明实施例的一种哈希冲突处理方法流程图,如图1所示,该哈希冲突处理方法包括以下处理步骤:

步骤s102,确定发生哈希冲突的媒体接入控制mac地址;

步骤s104,将该mac地址的表项信息存储于交换芯片的用户自定义转发表l2_user_entry中;

l2_user_entry表是存储于交换芯片内部的硬件表,基本功能为存储生成树协议问候数据包bpdu(bridgeprotocoldataunit),并在网桥间进行信息交换。与mac地址硬件表相同,l2_user_entry表可以转发报文,因此可以利用其空闲存储空间存储发生哈希冲突的mac地址信息,并在下一次接收到以该mac地址为目的地址的报文时,查询l2_user_entry表中的信息进行报文转发。

步骤s106,在接收到以该mac地址为目的地址的报文时,通过从该l2_user_entry表中查询该mac地址的表项信息进行报文转发。

在进行mac地址查询的时候可以先查找l2_user_entry表,如果查找到该mac地址,则依据其表项信息进行报文转发;否则,继续查找mac地址硬件表。

图2是根据本发明实施例的一种报文转发方法流程图,如图2所示,该方法包括以下处理步骤:

步骤s202,解析接收到的报文,获取该报文携带的目的mac地址;

步骤s204,查询l2_user_entry表;

步骤s206,判断表中是否存储该目的mac地址,在判断结果为是的情况下,执行步骤s208,在判断结果为否的情况下,执行步骤s210;

步骤s208,依据该l2_user_entry表中存储的该目的mac地址的表项信息转发报文;

步骤s210,查询mac地址硬件表;

步骤s212,判断该表中是否存储该目的mac地址,在判断结果为是的情况下,执行步骤s214,在判断结果为否的情况下,执行步骤s216;

步骤s214,依据该mac地址硬件表中存储的该目的mac地址的表项信息转发报文;

步骤s216,洪泛该报文。

进一步的,确定该发生哈希冲突的媒体接入控制mac地址的方法包括步骤:通过查询访问控制列表acl确定mac地址学习失败的报文;解析得到该报文携带的源mac地址;判断该交换芯片的mac地址硬件表中是否存储该源mac地址的表项信息,在判断结果为否的情况下,确定该源mac地址发生哈希冲突。

访问控制列表acl中存储有查表状态信息,该查表状态信息会标记出对应的mac地址是学习成功还是学习失败,通过查询该查表状态信息就可以确定mac地址学习失败的报文。

通过解析得到上述报文携带的源mac地址,并查询mac地址硬件表上述源mac地址的存储情况,可以进一步确定由于哈希冲突所导致的学习失败的mac地址,排除由于mac地址漂移等原因所造成的学习失败的mac地址。

进一步的,将该mac地址的表项信息存储于该交换芯片的l2_user_entry表中可以包括:判断该l2_user_entry表中是否存储该mac地址的表项信息;在判断结果为否的情况下,将该mac地址的表项信息存储于该l2_user_entry表中。

通过判断l2_user_entry表中的mac地址存储情况,可以防止同一个发生哈希冲突的mac地址被重复存储。可以通过直接查询l2_user_entry表的方式判断表中是否存储了上述的mac地址,但是直接查询l2_user_entry表需要读取硬件,读取硬件的时间一般较长,效率也较低。因此,可以维护一张新的软件表,将已存储于l2_user_entry表的mac地址表项信息再次记录到该软件表中,通过查询软件表中记录的信息判断l2_user_entry表中是否存储了上述的mac地址,该方法相较于直接查询硬件表而言效率更高。

进一步的,在将该mac地址的表项信息存储于该交换芯片的l2_user_entry表中之后,该方法还包括:为该mac地址设置老化时间周期以及老化时间标识位,将该老化时间标识位置为1;在第一个该老化时间周期之内,在未接收到以该mac地址为源地址的报文的情况下,将该老化时间标识位复位为0;在第二个该老化时间周期之内,在未接收到以该mac地址为源地址的报文的情况下,删除该mac地址的表项信息。

进一步的,在将该老化时间标识位复位为0之后,在第二个该老化时间周期之内,在接收到以该mac地址为源地址的报文的情况下,将该老化时间标识位置为1。

通常情况下,l2_user_entry表不提供mac硬件老化机制,需要通过软件的方式进行mac地址的老化。通过上述老化步骤,可以及时删除一些不必要的mac地址,为其他发生哈希冲突需要被存储的mac地址预留存储的空间。

上述的mac地址的表项信息可以为mac地址信息、端口信息、虚拟局域网vlanid信息。

本发明还公开了一种哈希冲突处理装置,图3是根据本发明实施例的一种哈希冲突处理装置框图一,如图3所示,该装置包括:

确定模块32,用于确定发生哈希冲突的媒体接入控制mac地址;

存储模块34,用于将该mac地址的表项信息存储于交换芯片的用户自定义转发表l2_user_entry中;

转发模块36,用于在接收到以该mac地址为目的地址的报文时,通过从该l2_user_entry表中查询该mac地址的表项信息进行报文转发。

图4是根据本发明实施例的一种哈希冲突处理装置框图二,如图4所示,该确定模块32包括:

确定子模块42,用于通过查询访问控制列表acl确定mac地址学习失败的报文;

解析子模块44,用于解析得到该报文携带的源mac地址;

第一判断子模块46,用于判断该交换芯片的mac地址硬件表中是否存储该源mac地址,在判断结果为否的情况下,确定该源mac地址发生哈希冲突。

图5是根据本发明实施例的一种哈希冲突处理装置框图三,如图5所示,该存储模块34包括:

第二判断子模块52,用于判断该l2_user_entry表中是否存储该mac地址的表项信息;

存储子模块54,用于在判断结果为否的情况下,将该mac地址的表项信息存储于该l2_user_entry表中。

图6是根据本发明实施例的一种哈希冲突处理装置框图四,如图6所示,该装置还包括:

老化模块62,用于在将该mac地址的表项信息存储于该交换芯片的l2_user_entry表中之后,为该mac地址设置老化时间周期以及老化时间标识位,将该老化时间标识位置为1;

在第一个该老化时间周期之内,在未接收到以该mac地址为源地址的报文的情况下,将该老化时间标识位复位为0;

在第二个该老化时间周期之内,在未接收到以该mac地址为源地址的报文的情况下,删除该mac地址的表项信息。

进一步的,该老化模块62还用于:

在第二个该老化时间周期之内,在接收到以该mac地址为源地址的报文的情况下,将该老化时间标识位置为1。

本发明还公开了一种交换设备,具有上述的任意一种装置。该交换设备可以是交换机、路由器或其他交换设备。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1