具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明媒体接入控制地址的学习方法一个实施例的流程图,如图1所示,该媒体接入控制地址的学习方法可以包括:
步骤101,根据接收的报文的关键字段生成键值,并根据该键值获得该键值对应的索引值。
具体地,根据接收的报文的关键字段生成键值可以为:网络侧设备提取接收的报文的MAC地址和VLAN,然后根据MAC地址和/或VLAN生成上述键值。但是本实施例并不仅限于此,网络侧设备也可根据其他字段生成键值,本实施例对键值的生成方式不作限定。
具体地,根据该键值获得该键值对应的索引值可以为:网络侧设备对该键值进行哈希运算,获得该键值对应的索引值;当然本实施例也并不仅限于此,网络侧设备也可以采用其他算法对键值进行运算,获得该键值对应的索引值,本实施例对此不作限定。
步骤102,根据预设的迭代次数对上述索引值进行线性随机迭代。
步骤103,根据第一次迭代获得的迭代索引值在MAC地址池中查找第一次迭代获得的迭代索引值对应的MAC地址。
步骤104,如果在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地址的冲突问题,并且无需改动硬件,实现方便。
图2为本发明媒体接入控制地址的学习方法另一个实施例的流程图,如图2所示,该媒体接入控制地址的学习方法可以包括:
步骤201,根据接收的报文的关键字段生成键值(key)。
具体地,例如可以为:key[47:0]=MAC,key[60:48]=VLAN。
步骤202,对key进行Hash运算,获得哈希索引(Hash index)值。
本实施例中,Hash函数一般为CRC32或CRC16,其中,CRC为循环冗余码校验(Cyclical Redundancy Check)的简称;
举例来说,对于MAC=0x1122334455,VLAN=10的key,其CRC32的结果为0x1fe;此处由于实际系统的深度为2k,因此这里只取CRC32的结果的低11比特。即对步骤201中的key进行Hash运算,获得的Hash index值是0x1fe。
步骤203,根据预设的迭代次数,对上一步获得的Hash index值进行线性随机迭代,获得迭代索引值。
本实施例选用如下的线性随机迭代算法进行示例:
bucket=HashValue(上一步获得的Hash index值); (1)
Iter(n次){bucket=(5×bucket)+1+HashValue;HashValue>>=5};(2)
式(2)中,Iter(n次)表示进行n次迭代,n为预设的迭代次数;bucket表示每次迭代获得的迭代索引值;
其中,第一次迭代获得的迭代索引值为0x3f5;
需要说明的是,这里选取的线性随机迭代算法仅是一个示例,在实际实现时可以根据仿真和场景不同选取不同的线性随机迭代算法,本实施例对此不作限定。
步骤204,根据第一次迭代获得的迭代索引值在MAC地址池中查找与该第一次迭代获得的迭代索引值对应的MAC地址。就是到0x3f5这块MAC地址空间去找是否有与第一次迭代获得的迭代索引值对应的MAC地址,这块MAC地址空间一般存4个或8个MAC地址。
步骤205,根据查找结果,进行后续操作。
具体地,(1)如果在MAC地址池中查找到与第一次迭代获得的迭代索引值对应的MAC地址,则中止当前的迭代操作,并在查找到的MAC地址对应的表项需要更新时,在学习该MAC地址的位置更新该MAC地址对应的表项;
(2)如果在MAC地址池中没有查找到与第一次迭代获得的迭代索引值对应的MAC地址,则确定该MAC地址池中是否还有空闲MAC地址空间,并继续进行迭代操作,如果迭代操作进行到预设的最大迭代次数,仍未在该MAC地址池中查找到与迭代获得的迭代索引值对应的MAC地址且确定该MAC地址池中还有空闲MAC地址空间时,则在该MAC地址池中第一个出现空闲MAC地址空间的位置学习上述接收的报文的MAC地址;
(3)如果在MAC地址池中没有查找到与第一次迭代获得的迭代索引值对应的MAC地址,则确定该MAC地址池中是否还有空闲MAC地址空间,并继续进行迭代操作,如果迭代操作进行到预设的最大迭代次数,仍未在MAC地址池中查找到与迭代获得的迭代索引值对应的MAC地址且该MAC地址池中已无空闲MAC地址空间,则返回学习失败响应。
步骤206,上述操作完成之后,对报文进行状态更新并进行后续处理。
本发明实施例提供的媒体接入控制地址的学习方法,通过对MAC地址空间的随机分布来达到减少MAC地址冲突的目的,能够在性能和效率上灵活可配,适应场景广泛;可以应用在中小规模带宽的系统,如50G左右的网络处理器(Network Processor;以下简称:NP)或特殊应用集成电路(ApplicationSpecific Integrated Circuit;以下简称:ASIC)交换系统中,由于该交换系统注重MAC地址的冲突解决率,因此可以将迭代次数设置得大一些;而在注重线速交换带宽的系统,如200G交换芯片中,可以将迭代次数设置得小一些,而设置迭代次数不需要改动硬件,只需通过软件进行相应配置即可;本发明实施例中采用的线性随机算法可以灵活配置,另外,本发明实施例提供的方法可以适用于因特网协议(Internet Protocol;以下简称:IP)地址学习等采用Hash算法进行地址查找的系统,并且本发明实施例提供的方法在硬件实现上也比较简单。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图3为本发明网络侧设备一个实施例的结构示意图,本实施例中的网络侧设备可以实现本发明图1所示实施例的流程图,如图3所示,该网络侧设备可以包括:
生成模块31,用于根据接收的报文的关键字段生成键值;
获得模块32,用于根据生成模块31生成的键值获得该键值对应的索引值;
迭代模块33,用于根据预设的迭代次数对获得模块32获得的索引值进行线性随机迭代;
查找模块34,用于根据迭代模块33第一次迭代获得的迭代索引值在MAC地址池中查找第一次迭代获得的迭代索引值对应的MAC地址;
确定模块35,用于当查找模块34在MAC地址池中没有查找到与第一次迭代获得的迭代索引值对应的MAC地址时,确定该MAC地址池中是否还有空闲MAC地址空间,并指示迭代模块33继续进行迭代操作;
学习模块36,用于当迭代操作进行到预设的最大迭代次数,查找模块34仍未在MAC地址池中查找到与迭代模块33迭代获得的迭代索引值对应的MAC地址且确定模块35确定上述MAC地址池中还有空闲MAC地址空间时,在MAC地址池中第一个出现空闲MAC地址空间的位置学习接收的报文的MAC地址。
本实施例中,该网络侧设备可以为交换机或路由器等,本实施例对此不作限定。
上述实施例中,生成模块31根据接收的报文的关键字段生成键值,并由获得模块32获得该键值对应的索引值,然后迭代模块33根据预设的迭代次数对该索引值进行线性随机迭代,查找模块34根据迭代模块33第一次迭代获得的迭代索引值在MAC地址池中查找第一次迭代获得的迭代索引值对应的MAC地址,最后学习模块36根据查找模块34的查找结果学习接收的报文的MAC地址;本实施例通过线性随机迭代方法完成MAC地址的随机分布,迭代深度灵活可控,从而可以实现MAC地址空间的充分利用,最大限度的解决MAC地址的冲突问题,并且无需改动硬件,实现方便。
图4为本发明网络侧设备另一个实施例的结构示意图,与图3所示的网络侧设备相比,不同之处在于,图4所示的网络侧设备中,还可以包括:
响应模块37,用于当查找模块34在MAC地址池中没有查找到与第一次迭代获得的迭代索引值对应的MAC地址,并且迭代操作进行到预设的最大迭代次数,查找模块34仍未在MAC地址池中查找到与迭代模块33迭代获得的迭代索引值对应的MAC地址且确定模块35确定MAC地址池中已无空闲MAC地址空间时,返回学习失败响应。
中止模块38,用于当查找模块34在所述MAC地址池中查找到与第一次迭代获得的迭代索引值对应的MAC地址时,中止当前的迭代操作;
更新模块39,用于在上述MAC地址对应的表项需要更新时,在学习上述MAC地址的位置更新该MAC地址对应的表项。
本实施例中,生成模块31可以包括:
提取子模块311,用于提取接收的报文的MAC地址和VLAN;
键值生成子模块312,用于根据提取子模块311提取的MAC地址和/或VLAN生成上述键值。但是本实施例并不仅限于此,键值生成子模块312也可以根据提取子模块311提取的其他字段生成上述键值,本实施例对键值的生成方式不作限定。
具体地,本实施例中,获得模块32可以对上述键值进行哈希运算,获得该键值对应的索引值;当然本实施例也并不仅限于此,获得模块32也可以采用其他算法对键值进行运算,获得该键值对应的索引值,本实施例对此不作限定。
上述网络侧设备通过线性随机迭代方法完成MAC地址的随机分布,从而可以实现MAC地址空间的充分利用,并可以最大限度的解决MAC地址的冲突问题。
图5为本发明网络侧设备再一个实施例的结构示意图,如图5所示,该网络侧设备可以包括:输入端口模块51、数据包解析模块52、哈希功能模块53、MAC地址池54,MAC管理模块55、线性随机迭代模块56、状态更新及下一步处理模块57和输出模块58。
其中,输入端口模块51,用于接收来自用户的报文,并对接收的报文进行相应的合法性检查。
数据包解析模块52,用于对输入端口模块51接收到的报文进行解析,确定报文类型并提取报文的关键字段,例如MAC地址、VLAN、IP地址和端口等字段,并根据提取的关键字段生成键值,实现本发明图3所示实施例中生成模块31,以及图4所示实施例中提取子模块311和键值生成子模块312的功能。
哈希功能模块53,用于对数据包解析模块52生成的键值进行Hash运算,获得哈希索引值,实现本发明图3和图4所示实施例中获得模块32的功能;其中Hash函数可以采用CRC32或CRC16等,本实施例对此不作限定。
MAC地址池54,用于保存MAC地址;MAC地址池54涉及桶深概念,桶深是指对应同一哈希索引值所能存储的MAC地址的最大数目,桶深的选取需要考虑查找效率和冲突率因素。桶越深,MAC地址学习和查找时需要比较的次数相对较多,对整个系统转发性能会有影响;桶越浅,MAC地址学习时冲突的概率就会比较大,因此实际应用中桶深一般为8或4;
线性随机迭代模块56,用于根据预先设定的迭代次数,对哈希功能模块53获得的哈希索引值通过线性随机算法进行迭代,获得迭代索引值;实现本发明图3和图4所示实施例中迭代模块33和学习模块36,以及图4所示实施例中响应模块37、中止模块38和更新模块39的功能。
MAC管理模块55,用于根据线性随机迭代模块56每次获得的迭代索引值在MAC地址池54中查找该迭代索引值对应的MAC地址,并将查找结果返回线性随机迭代模块56;实现本发明图3和图4所示实施例中查找模块34和确定模块35的功能。
具体地,如果MAC管理模块55在MAC地址池中查找到与线性随机迭代模块56第一次迭代获得的迭代索引值对应的MAC地址,则线性随机迭代模块56可以中止当前的迭代操作,并在查找到的MAC地址对应的表项需要更新时,在学习该MAC地址的位置更新该MAC地址对应的表项;或者,
如果MAC管理模块55没有在MAC地址池中查找到与线性随机迭代模块56第一次迭代获得的迭代索引值对应的MAC地址,则确定该MAC地址池中是否还有空闲MAC地址空间,并指示线性随机迭代模块56继续进行迭代操作,如果迭代操作进行到预设的最大迭代次数,MAC管理模块55仍未在该MAC地址池中查找到与迭代获得的迭代索引值对应的MAC地址且确定该MAC地址池中还有空闲MAC地址空间时,则线性随机迭代模块56在该MAC地址池中第一个出现空闲MAC地址空间的位置学习上述接收的报文的MAC地址;或者,
如果MAC管理模块55没有在MAC地址池中查找到与线性随机迭代模块56第一次迭代获得的迭代索引值对应的MAC地址,则确定该MAC地址池中是否还有空闲MAC地址空间,并指示线性随机迭代模块56继续进行迭代操作,如果迭代操作进行到预设的最大迭代次数,MAC管理模块55仍未在MAC地址池中查找到与迭代获得的迭代索引值对应的MAC地址且该MAC地址池中已无空闲MAC地址空间,则线性随机迭代模块56返回学习失败响应。
状态更新及下一步处理模块57,用于在线性随机迭代模块56的操作完成之后,对接收的报文进行状态更新并进行后续处理。
输出模块58,用于输出状态更新及下一步处理模块57处理之后的报文。
上述网络侧设备,通过对MAC地址空间的随机分布来达到减少MAC地址冲突的目的,硬件实现方式简单,能够在性能和效率上灵活可配,适应场景广泛;可以应用在中小规模带宽的系统,如50G左右的NP或ASIC交换系统中,由于该交换系统注重MAC地址的冲突解决率,因此可以将迭代次数设置得大一些;而在注重线速交换带宽的系统,如200G交换芯片中,可以将迭代次数设置得小一些,而设置迭代次数不需要改动硬件,只需通过软件进行相应配置即可;本实施例中采用的线性随机算法可以灵活配置,另外,本实施例提供的网络侧设备可以适用于IP地址学习等采用Hash算法进行地址查找的系统。
图6为本发明通信系统一个实施例的结构示意图,如图6所示,该通信系统可以包括:网络侧设备61和与该网络侧设备61连接的至少一个用户设备62。
本实施例中,用户设备62可以向网络侧设备61发送报文;
网络侧设备61,用于接收用户设备62发送的报文,并可以根据接收的报文的关键字段生成键值,并根据该键值获得该键值对应的索引值;根据预设的迭代次数对该索引值进行线性随机迭代;根据第一次迭代获得的迭代索引值在MAC地址池中查找第一次迭代获得的迭代索引值对应的MAC地址;如果在MAC地址池中没有查找到与第一次迭代获得的迭代索引值对应的MAC地址,则确定该MAC地址池中是否还有空闲MAC地址空间,并继续进行迭代操作,如果迭代操作进行到预设的最大迭代次数,仍未在MAC地址池中查找到与迭代获得的迭代索引值对应的MAC地址且确定该MAC地址池中还有空闲MAC地址空间时,则在MAC地址池中第一个出现空闲MAC地址空间的位置学习接收的报文的MAC地址。具体地,该网络侧设备61可以通过本发明图3、图4或图5所示实施例提供的网络侧设备实现,该网络侧设备61可以为交换机或路由器等,本实施例对此不作限定。
本实施例中,网络侧设备61与用户设备62之间的交互可以参考本发明方法实施例的描述,在此不再赘述。
上述系统通过线性随机迭代方法完成MAC地址的随机分布,迭代深度灵活可控,从而可以实现MAC地址空间的充分利用,最大限度的解决MAC地址的冲突问题,并且无需改动硬件,实现方便。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。