MAC地址学习方法、网关设备及存储介质
技术领域
本申请涉及通信技术领域,尤其涉及一种MAC地址学习方法、网关设备及存储介质。
背景技术
随着计算机及其互联技术的迅速发展,以太网成为了迄今为止普及率最高的短距离二层计算机网络。而以太网的核心部件就是以太网交换机。交换机工作于OSI参考模型的第二层,即数据链路层。当交换机收到一个帧的时候,先查看自己维护的MAC地址表中是否有帧中的源MAC地址。如果没有源MAC地址,则将源MAC地址、VLAN、端口放入这个表中;如果有源MAC地址,在该表中查找目的MAC地址,如果有匹配项,则按照表项中的端口号进行转发;如果没有,则转发到该VLAN内的除入进口之外的其它所有端口。
在带有交换芯片的交换机中,MAC地址学习和老化是由交换芯片完成的。设备的MAC学习能力通常受限于交换芯片的MAC容量,而MAC容量更大的交换芯片价格也比较昂贵,不利于控制交换机的研发成本。
发明内容
本申请实施例提供一种MAC地址学习方法、网关设备及存储介质,能够利用CPU进行MAC地址学习,学习更灵活,可靠性和安全性更高。
第一方面,本申请实施例提供了一种MAC地址学习方法,应用于网关设备中,所述网关设备包括中央处理器CPU,所述方法包括:
所述CPU根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量;
在接收到第一报文后,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址;
根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习;
若所述第一源MAC地址需要学习,则在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量时,生成包含所述第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至所述MAC学习消息队列中,以对所述MAC学习消息队列中的MAC学习消息进行源MAC地址学习;
定时扫描老化链,以对所述老化链中的MAC老化消息进行源MAC地址老化;
在检测到所述MAC学习消息队列中的消息总个数达到所述全局MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量时,将扫描所述老化链的定时时长由第一预设时长缩短至第二预设时长。
可选的,所述根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习,包括:
检测所述CPU存储的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老化消息的标记修改为第二识别码,并读取所述老化链中的下一个MAC老化消息;
若所述第二MAC老化消息的标记为第二识别码,则删除所述老化链中的所述第二MAC老化消息,并检测所述第二MAC老化消息的属性是否正确;
若正确,则从预设的MAC地址表中删除所述第二源MAC地址对应的条目,并根据所述MAC地址表,同步更新所述MAC转发表。
可选的,所述方法还包括:
在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量时,将扫描所述老化链的定时时长由所述第二预设时长恢复至所述第一预设时长。
可选的,所述方法还包括:
在检测到所述MAC学习消息队列中的消息总个数达到所述MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量时,调整学习需求;根据调整后的学习需求,重新确定所述VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量。
第二方面,本申请实施例还提供了一种网关设备,包括中央处理器CPU,所述CPU用于:
根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量;
在接收到第一报文后,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址;
根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习;
若所述第一源MAC地址需要学习,则在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量时,生成包含所述第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至所述MAC学习消息队列中,以对所述MAC学习消息队列中的MAC学习消息进行源MAC地址学习;
定时扫描老化链,以对所述老化链中的MAC老化消息进行源MAC地址老化;
在检测到所述MAC学习消息队列中的消息总个数达到所述全局MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量时,将扫描所述老化链的定时时长由第一预设时长缩短至第二预设时长。
第三方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质中存储有多条指令,所述指令适于由处理器加载以执行上述MAC地址学习方法。
本申请提供的MAC地址学习方法、网关设备及存储介质,使CPU根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,在接收到第一报文后,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址,根据CPU存储的MAC转发表检测到第一报文中的第一源MAC地址需要学习,且预设的MAC学习消息队列中的消息总个数未达到MAC学习数量,且MAC学习消息队列中第一VLAN标识对应的消息个数未达到VLAN对应的MAC学习数量,且MAC学习消息队列中入端口对应的消息个数未达到端口对应的MAC学习数量时,生成包含第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至MAC学习消息队列中,以对MAC学习消息队列中的MAC学习消息进行源MAC地址学习。本申请利用CPU进行MAC地址学习,无需使用交换芯片,且无需CPU与交换芯片进行交互,有效控制交换机的研发成本,且提高学习效率,另外MAC转发表存储在CPU中,避免交换芯片中MAC容量过小导致学习能力较差的问题,从而提高学习能力,而且根据不同的学习需求分别限制VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,可靠性和安全性更高,在MAC学习消息队列中的消息个数达到相应的MAC学习数量时,缩短老化链扫描的定时时长,以尽快释放MAC转发表的存储空间,以便继续进行源MAC地址学习,提高学习灵活性。
附图说明
下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其它有益效果显而易见。
图1为本申请实施例提供的MAC地址学习方法的流程示意图。
图2为本申请实施例提供的MAC地址学习方法的另一流程示意图。
图3为本申请实施例提供的MAC地址学习装置的结构示意图。
图4为本申请实施例提供的网关设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参阅图1,图1是本申请实施例提供的MAC地址学习方法的流程示意图,所述MAC地址学习方法应用于网关设备中,网关设备包括中央处理器CPU,所述MAC地址学习方法可以包括步骤101至105:
101、CPU根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量。
本申请实施例中,学习需求可以由用户预先设置,该学习需求可以为用户预先估计的最低学习需求量,CPU根据用户预先设置的学习需求先确定初始的MAC(Media AccessControl,媒体访问控制)学习数量,其中MAC学习数量包括VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,若具体应用时实际学习需求大于用户预先设置的学习需求,用户还可调整学习需求,使CPU重新确定MAC学习数量,或者CPU还可自动调整MAC学习数量,以保证高效、灵活地实现MAC地址学习。
学习需求与MAC学习数量呈正相关,学习需求量越大, CPU确定的MAC学习数量越大,学习需求量越小, CPU确定的MAC学习数量越小。在一个实施方式中,CPU可以预先设置学习需求与MAC学习数量的映射关系表,CPU在获取学习需求后,从映射关系表中查找该学习需求对应的MAC学习数量。
在另一个实施方式中,CPU可以结合学习需求和设备性能来确定MAC学习数量,其中设备性能可以包括VLAN(Virtual Local Area Network,虚拟局域网)数、端口数、CPU存储空间大小等等。CPU可以预先设置学习需求、设备性能与MAC学习数量的映射关系表,CPU在获取学习需求后,先确定设备性能,然后从映射关系表中查找该学习需求和设备性能所对应的MAC学习数量。
102、在接收到第一报文后,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址。
本申请实施例中,网关设备在接收到报文后,直接将报文传输至CPU进行处理。网关设备中可以不再设置交换芯片,降低网关设备的成本,而且无需再将报文先传输至交换芯片,再由交换芯片上报给CPU,而是CPU直接接收报文进行处理,有效提高学习效率。
报文中携带有VLAN ID和源MAC地址,MAC转发表为VLAN ID、源MAC地址和端口的对应关系表,MAC转发表的大小与CPU确定的全局MAC学习数量相匹配。CPU每接收到一个报文,则获取该报文的入端口,以及该报文中的VLAN标识(即VLAN ID)和源MAC地址。
103、根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习。
根据报文中的VLAN ID和源MAC地址,查找MAC转发表,以判断是否需要对报文进行源MAC地址学习。由于网关设备中不再设置交换芯片,因此MAC转发表存储在CPU中,而CPU的内存远大于交换芯片的MAC容量,CPU中存储的MAC转发表的表项数量可以远大于交换芯片中存储的MAC转发表的表项数量,而MAC转发表的表项数量与MAC学习能力相关,因此本实施例将MAC转发表存储在CPU中能够有效提高MAC学习能力。
具体地,步骤103中的所述根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习,包括:检测所述CPU存储的MAC转发表中是否存在所述第一源MAC地址对应的条目;若不存在,则确定所述第一源MAC地址需要学习;若存在,则检测所述第一报文的入端口与所述MAC转发表中的所述第一源MAC地址对应的端口是否一致;若一致,则确定所述第一源MAC地址不需要学习;若不一致,则确定所述第一源MAC地址需要学习。
第一报文中携带有第一VLAN ID和第一源MAC地址,CPU在接收到第一报文后,获取报文中的第一VLAN ID和第一源MAC地址,并以第一VLAN ID和第一源MAC地址为键值查询MAC转发表,若MAC转发表中不具有第一VLAN ID和第一源MAC地址对应的条目,则表明MAC转发表中不具有第一源MAC地址对应的端口,第一源MAC地址需要学习;若MAC转发表中具有第一VLAN ID和第一源MAC地址对应的条目,则获取MAC转发表中第一源MAC地址对应的端口,为了检测MAC漂移,还需进一步检测第一报文的入端口与MAC转发表中第一源MAC地址对应的端口是否一致,若一致,表明未发生MAC漂移,第一源MAC地址无需学习,根据二层转发流程正常转发报文即可,若不一致,则表明发生MAC漂移,第一源MAC地址需要学习。
104、若所述第一源MAC地址需要学习,则在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量时,生成包含所述第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至所述MAC学习消息队列中,以对所述MAC学习消息队列中的MAC学习消息进行源MAC地址学习。
本申请实施例中,由于CPU已设置MAC学习数量,因此在确定第一报文中的第一源MAC地址需要学习后,还需对预设的MAC学习消息队列中相关消息个数进行检测,MAC学习消息队列中可容纳的最多消息个数与全局MAC学习数量相匹配,即MAC学习消息队列中的消息总个数不能超过全局MAC学习数量。另外,为了提高设备的安全性和可靠性,还需对预设的MAC学习消息队列中单个VLAN对应的消息个数和单个端口对应的消息个数进行检测,以保证MAC学习消息队列中每个VLAN对应的消息个数都不超过VLAN对应的MAC学习数量,且MAC学习消息队列中每个端口对应的消息个数都不超过端口对应的MAC学习数量。
若第一源MAC地址需要学习,且MAC学习消息队列中的消息总个数达到全局MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量,则表明实际学习需求大于用户预先设置的学习需求,CPU可以自动调整学习需求,以重新确定MAC学习数量,后续可以根据重新确定的MAC学习数量进行源MAC地址学习。其中,CPU调整学习需求的调整量可以预先设置,调整量过高可能会占用过多CPU内存,调整量过低可能会导致学习需求的频繁调整,因此可以设置一个最优调整量,使CPU内存的占用与调整频率达到一个平衡。
在每次重新确定MAC学习数量后,先根据CPU内存大小确定最大MAC学习数量,并检测重新确定的MAC学习数量是否超过最大MAC学习数量,若未超过最大MAC学习数量,则采用重新确定的MAC学习数量作为最终MAC学习数量进行后续MAC学习,若超过最大MAC学习数量,则采用最大MAC学习数量作为最终MAC学习数量进行后续MAC学习。
本申请实施例中,若第一源MAC地址需要学习,且预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量,则根据第一报文生成第一MAC学习消息,第一MAC学习消息可以包括第一报文的入端口、第一VLAN ID和第一源MAC地址。将第一MAC学习消息添加至MAC学习消息队列中,以等待进行MAC地址学习。
本申请实施例中,MAC学习消息队列中均为需要学习的MAC学习消息,因此从MAC学习消息队列的队头开始,逐一对MAC学习消息队列中MAC学习消息进行源MAC地址学习。
本实施例设置MAC消息队列缓存需要学习的MAC学习消息,以避免MAC学习消息无法得到及时处理,同时可以通过MAC学习消息队列控制MAC学习数量,避免无限制的学习占用过多CPU内存。
具体地,步骤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学习消息从MAC学习消息队列中删除,并进一步检测该MAC学习消息中的源MAC地址是否需要学习。例如,在读取MAC学习消息队列中的第二MAC学习消息(第二MAC学习消息是根据第二报文生成的,第二MAC学习消息包括第二报文中的第二VLAN ID和第二源MAC地址)后,先检测第二源MAC地址是否有效,若第二源MAC地址全为0,则表明可能有人恶意攻击,第二源MAC地址无效,无需对第二源MAC地址进行学习,丢弃第二MAC学习消息。若第二源MAC地址不为0,则表明第二源MAC地址有效,根据第二源MAC地址,查询MAC查重表,MAC查重表为VLAN ID、源MAC地址和端口的对应关系表,若MAC查重表中具有第二VLAN ID和第二源MAC地址对应的条目,则表明第二源MAC地址已处于等待学习的状态,由于学习能力有限,还未对所有需要学习的源MAC地址进行学习,因此无需再重复添加第二源MAC地址进行学习,即无需再将第二源MAC地址添加至MAC查重表中,继续从MAC学习消息队列中读取下一个MAC消息。若MAC查重表中不具有第二VLAN ID和第二源MAC地址对应的条目,则在MAC查重表中添加第二VLAN ID和第二源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转发表。
CPU可以设置一个定时器,例如每隔300毫秒扫描学习链,先检查学习链上是否有MAC学习消息,若学习链上的MAC学习消息的个数为0,表明没有源MAC地址需要学习,若学习链上的MAC学习消息的个数不为0,则从学习链的链头开始遍历MAC学习消息。逐一读取学习链中的MAC学习消息,且每读取一个MAC学习消息,将该MAC学习消息从学习链中删除,同时在MAC查重表中删除该MAC学习消息中的源MAC地址对应的条目,并进一步对该MAC学习消息进行检测,以判断是否对该MAC学习消息中的源MAC地址进行学习。例如,在读取学习链中的第三MAC学习消息(第三MAC学习消息是根据第三报文生成的,第三MAC学习消息包括第三报文中的第三VLAN ID和第三源MAC地址)后,检测第三MAC学习消息的属性是否正确,其中属性包括端口、VLAN、MAC等信息,例如检测第三MAC学习消息中的端口所属VLAN是否正确等,若第三MAC学习消息的属性不正确,则丢弃第三MAC学习消息,继续读取学习链中的下一个MAC学习消息;若第三MAC学习消息的属性正确,则根据第三VLAN ID和第三源MAC地址,查询MAC地址表,MAC地址表为VLAN ID、源MAC地址和端口的对应关系表,若MAC地址表中具有第三VLAN ID和第三源MAC地址对应的条目,表明第三源MAC地址已完成学习,但由于处理能力有限,在接收到第三报文时还未及时更新MAC转发表,因此无需再重复学习第三源MAC地址,即丢弃第三MAC学习消息,若MAC地址表中不具有第三VLAN ID和第三源MAC地址对应的条目,表明第三源MAC地址还未学习,因此对第三源MAC地址进行学习,并在MAC地址表中添加第三VLAN ID和第三源MAC地址对应的条目。MAC地址表更新后,同步更新MAC转发表,即在MAC转发表中同步添加第三VLAN ID和第三源MAC地址对应的条目。
105、定时扫描老化链,以对所述老化链中的MAC老化消息进行源MAC地址老化。
进一步地,所述方法还包括:在所述第一源MAC不需要学习,或者所述第一源MAC地址完成学习后,生成包含所述第一源MAC地址的第一MAC老化消息;将所述第一MAC老化消息添加至老化链中;定时扫描所述老化链,以对所述老化链中的MAC老化消息进行源MAC地址老化。
需要说明的是,CPU在接收到报文后,若报文中的源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老化消息,且每读取一个MAC老化消息,检测该MAC老化消息的标记,若该MAC老化消息的标记为第一识别码,如1,则将该MAC老化消息的标记修改为第二识别码,如0,并等待下一次的定时扫描;若该MAC老化消息的标记为第二识别码,如0,则从老化链中删除该MAC老化消息,以对该MAC老化消息中的源MAC地址进行老化。
具体地,所述对所述第二MAC老化消息中的第二源MAC地址进行老化,包括:检测所述第二MAC老化消息的属性是否正确;若正确,则从预设的MAC地址表中删除所述第二源MAC地址对应的条目;根据所述MAC地址表,同步更新所述MAC转发表。
在第二MAC老化消息(第二MAC老化消息是根据第二报文生成的)需要老化时,检测第二MAC老化消息的属性是否正确,其中属性包括端口、VLAN、MAC等信息,若第二MAC老化消息的属性不正确,则丢弃第二MAC老化消息,即不对第二MAC老化消息中的第二源MAC地址进行老化;若第三MAC学习消息的属性正确,则从MAC地址表中删除第二VLAN ID和第二源MAC地址对应的条目。MAC地址表更新后,同步更新MAC转发表,即在MAC转发表中同步删除第二VLAN ID和第二源MAC地址对应的条目,完成第二源MAC地址的老化。
106、在检测到所述MAC学习消息队列中的消息总个数达到所述全局MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量时,将扫描所述老化链的定时时长由第一预设时长缩短至第二预设时长。
CPU可以设置一个定时器,每隔一定时长扫描一次老化链,从老化链的链头开始遍历MAC老化消息,其中定时器的间隔时长可以动态调整。具体地,所述方法还包括:在检测到所述MAC学习消息队列中的消息总个数达到所述MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量时,将扫描所述老化链的定时时长由第一预设时长缩短至第二预设时长;在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述第一MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述第二MAC学习数量时,将扫描所述老化链的定时时长由所述第二预设时长恢复至所述第一预设时长。
需要说明的是,在MAC学习消息队列中的消息个数达到相应的MAC学习数量时,缩短老化链扫描的定时时长,例如定时时长默认为300毫秒(即第一预设时长),缩短后的第二预设时长可以为250毫秒。老化链扫描的定时时长缩短后,可以缩短源MAC地址的老化时间,加速无用源MAC地址的老化,释放MAC转发表的存储空间,提高设备的学习能力。在MAC学习消息队列中的消息个数未达到相应的MAC学习数量时,可以恢复源MAC地址的老化时间,以避免源MAC地址的频繁老化和学习。
由上述可知,本申请提供的MAC地址学习方法,能够使CPU根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,在接收到第一报文后,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址,根据CPU存储的MAC转发表检测到第一报文中的第一源MAC地址需要学习,且预设的MAC学习消息队列中的消息总个数未达到MAC学习数量,且MAC学习消息队列中第一VLAN标识对应的消息个数未达到VLAN对应的MAC学习数量,且MAC学习消息队列中入端口对应的消息个数未达到端口对应的MAC学习数量时,生成包含第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至MAC学习消息队列中,以对MAC学习消息队列中的MAC学习消息进行源MAC地址学习。本申请利用CPU进行MAC地址学习,无需使用交换芯片,且无需CPU与交换芯片进行交互,有效控制交换机的研发成本,且提高学习效率,另外MAC转发表存储在CPU中,避免交换芯片中MAC容量过小导致学习能力较差的问题,从而提高学习能力,而且根据不同的学习需求分别限制VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,可靠性和安全性更高,在MAC学习消息队列中的消息个数达到相应的MAC学习数量时,缩短老化链扫描的定时时长,以尽快释放MAC转发表的存储空间,以便继续进行源MAC地址学习,提高学习灵活性。
参见图2,是本申请实施例提供的MAC地址学习方法的另一流程示意图,该MAC地址学习方法应用于网关设备,网关设备包括中央处理器CPU,该MAC地址学习方法的具体流程可以如下:
201、CPU根据学习需求确定MAC学习数量,MAC学习数量包括VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量。
202、在接收到报文后,检测MAC转发表中是否存在报文中的源MAC地址对应的条目,若是,则执行步骤203,若否,则执行步骤204。
其中,报文中携带源MAC地址和VLAN ID。
203、检测报文的入端口与MAC转发表中的源MAC地址对应的端口是否一致,若是,则执行步骤218,若否,则执行步骤204。
204、检测MAC学习消息队列中的消息个数是否达到相应的MAC学习数量,若是,则执行步骤205,若否,则执行步骤206。
其中,MAC学习消息队列中的消息个数包括报文中VLAN ID对应的消息个数、报文的入端口对应的消息个数和消息总个数。分别检测报文中VLAN ID对应的消息个数是否达到VLAN对应的MAC学习数量,检测报文中端口对应的消息个数是否达到端口对应的MAC学习数量,以及检测消息总个数是否达到全局MAC学习数量,若均判定为是,则执行步骤205,否则(即任一检测为否),则执行步骤206。
205、调整学习需求,并返回步骤201。
需要说明的是,在检测MAC学习消息队列中的消息个数达到相应的MAC学习数量时,还可调整老化链扫描的定时时长,例如将定时时长由第一预设时长(默认定时时长)缩短至第二预设时长;在检测MAC学习消息队列中的消息个数未达到相应的MAC学习数量时,将定时时长由第二预设时长恢复至第一预设时长。
206、生成包含源MAC地址的MAC学习消息,并添加至MAC学习消息队列中。
207、读取并删除MAC学习消息队列中的MAC学习消息。
208、检测MAC学习消息中的源MAC地址是否有效,若是,则执行步骤209,若否,则返回步骤207。
209、检测MAC查重表中是否存在源MAC地址对应的条目,若是,则执行步骤210,若否,则执行步骤212。
210、检测报文的入端口与MAC查重表中源MAC地址对应的端口是否一致,若是,则返回步骤207,若否,则执行步骤211。
211、将MAC查重表中源MAC地址对应的端口修改为报文的入端口,并返回步骤207。
212、在MAC查重表中添加源MAC地址对应的条目,并将MAC学习消息添加至学习链中。
213、定时扫描学习链。
214、读取并删除学习链中的MAC学习消息。
215、检测MAC学习消息的属性是否正确,若是,则执行步骤216,若否,则返回步骤214。
216、检测MAC地址表中是否存在MAC学习消息中源MAC地址对应的条目,若是,则返回步骤214,若否,则执行步骤217。
217、在MAC地址表中添加源MAC地址对应的条目,并同步更新MAC转发表。
218、生成包含源MAC地址的MAC老化消息,并添加至老化链中,设置MAC老化消息的标记为1。
219、定时扫描老化链。
220、读取老化链中的MAC老化消息,并检测MAC老化消息的标记,若标记为1,则执行步骤221,若标记为0,则执行步骤222。
221、将MAC老化消息的标记修改为0,并返回步骤219。
222、删除老化链中的MAC老化消息。
223、检测MAC老化消息的属性是否正确,若是,则执行步骤224,若否,则返回步骤220。
224、从MAC地址表中删除源MAC地址对应的条目,并更新MAC转发表。
本申请实施例利用CPU进行MAC地址学习,无需使用交换芯片,有效控制交换机的研发成本,而且根据不同的学习需求设置MAC学习数量,学习更加灵活,可靠性更高。
根据上述实施例所描述的方法,本实施例将从MAC地址学习装置的角度进一步进行描述,该MAC地址学习装置具体可以作为独立的实体来实现,也可以集成在网关设备中。
请参阅图3,图3具体描述了本申请实施例提供的MAC地址学习装置,该MAC地址学习装置可以包括驱动模块31、转发模块32、表项管理模块33、协议模块34。
表项管理模块33用于根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量。
驱动模块31用于接收第一报文,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址。
转发模块32用于根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习;若所述第一源MAC地址需要学习,则在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量时,生成包含所述第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至所述MAC学习消息队列中。
表项管理模块33还用于从MAC学习消息队列中读取MAC学习消息。
协议模块34用于对读取的MAC学习消息中的源MAC地址进行学习。
在一些实施例中,转发模块32还用于:检测CPU存储的MAC转发表中是否存在所述第一源MAC地址对应的条目;若不存在,则确定所述第一源MAC地址需要学习;若存在,则检测所述第一报文的入端口与所述MAC转发表中的所述第一源MAC地址对应的端口是否一致;若一致,则确定所述第一源MAC地址不需要学习;若不一致,则确定所述第一源MAC地址需要学习。
在一些实施例中,转发模块32还用于在将第一MAC学习消息添加至MAC学习消息队列中时,向表项管理模块33发送通知消息。
表项管理模块33还用于根据通知消息,从MAC学习消息队列中读取MAC学习消息;在读取所述MAC学习消息队列中的第二MAC学习消息时,从所述MAC学习消息队列中删除所述第二MAC学习消息,并检测所述第二MAC学习消息中的第二源MAC地址是否有效;若无效,则读取所述MAC学习消息队列中的下一个MAC学习消息;若有效,则检测预设的MAC查重表中是否存在所述第二源MAC地址对应的条目;若存在所述第二源MAC地址对应的条目,则读取所述MAC学习消息队列中的下一个MAC学习消息;若不存在所述第二源MAC地址对应的条目,则在所述MAC查重表中添加所述第二源MAC地址对应的条目,并将所述第二MAC学习消息添加至学习链中。
在一些实施例中,表项管理模块33还用于若存在所述第二源MAC地址对应的条目,则检测所述第二MAC学习消息对应的第二报文的入端口与所述MAC查重表中所述第二源MAC地址对应的端口是否一致;若一致,则读取所述MAC学习消息队列中的下一个MAC学习消息;若不一致,则将所述MAC查重表中所述第二源MAC地址对应的端口修改为所述第二报文的入端口,读取所述MAC学习消息队列中的下一个MAC学习消息。
在一些实施例中,表项管理模块33还用于定时扫描所述学习链,逐一读取所述学习链中的MAC学习消息;在读取所述学习链中的第三MAC学习消息时,将所述第三MAC学习消息从所述学习链中删除,在MAC查重表中删除第三源MAC地址对应的条目;按照协议模块34的要求将第三MAC学习消息进行封装和打包,并将封装和打包好的第三MAC学习消息发送给协议模块34。
协议模块34还用于检测所述第三MAC学习消息的属性是否正确;若正确,则检测预设的MAC地址表中是否存在所述第三MAC学习消息中的第三源MAC地址对应的条目,若不存在,则在所述MAC地址表中添加所述第三源MAC地址对应的条目,并将添加的信息发送给表项管理模块33;若不正确,则丢弃第三MAC学习消息。
表项管理模块33还用于根据添加的信息,在MAC转发表中添加第三源MAC地址对应的条目。
在一些实施例中,表项管理模块33还用于在所述第一源MAC不需要学习,或者所述第一源MAC地址完成学习后,生成包含所述第一源MAC地址的第一MAC老化消息;将所述第一MAC老化消息添加至老化链中,并设置第一MAC老化消息的标记为第一识别码;定时扫描所述老化链,逐一读取所述老化链中的MAC老化消息;在读取所述老化链中的第二MAC老化消息时,检测所述第二MAC老化消息的标记;若所述第二MAC老化消息的标记为第一识别码,则将所述第二MAC老化消息的标记修改为第二识别码,并读取所述老化链中的下一个MAC老化消息;若所述第二MAC老化消息的标记为第二识别码,则删除所述老化链中的所述第二MAC老化消息,并将第二MAC老化消息按照协议模块34的要求进行封装和打包,将封装和打包后的第二MAC老化消息发送给协议模块34。
在一些实施例中,表项管理模块33还用于在检测到所述MAC学习消息队列中的消息总个数达到所述MAC学习数量,或者所述MAC学习消息队列中所述第一VLAN标识对应的消息个数达到所述VLAN对应的MAC学习数量,或者所述MAC学习消息队列中所述入端口对应的消息个数达到所述端口对应的MAC学习数量时,将扫描所述老化链的定时时长由第一预设时长缩短至第二预设时长;在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述第一MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述第二MAC学习数量时,将扫描所述老化链的定时时长由所述第二预设时长恢复至所述第一预设时长。
协议模块34还用于检测所述第二MAC老化消息的属性是否正确;若正确,则从预设的MAC地址表中删除所述第二源MAC地址对应的条目,并将删除的信息发送给表项管理模块33;若不正确,则丢弃所述第二MAC老化消息。
表项管理模块33还用于根据删除的信息,删除MAC转发表中第二源MAC地址对应的条目。
由上述可知,本申请提供的MAC地址学习装置,使CPU根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,在接收到第一报文后,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址,根据CPU存储的MAC转发表检测到第一报文中的第一源MAC地址需要学习,且预设的MAC学习消息队列中的消息总个数未达到MAC学习数量,且MAC学习消息队列中第一VLAN标识对应的消息个数未达到VLAN对应的MAC学习数量,且MAC学习消息队列中入端口对应的消息个数未达到端口对应的MAC学习数量时,生成包含第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至MAC学习消息队列中,以对MAC学习消息队列中的MAC学习消息进行源MAC地址学习。本申请利用CPU进行MAC地址学习,无需使用交换芯片,且无需CPU与交换芯片进行交互,有效控制交换机的研发成本,且提高学习效率,另外MAC转发表存储在CPU中,避免交换芯片中MAC容量过小导致学习能力较差的问题,从而提高学习能力,而且根据不同的学习需求分别设置VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量,学习更加灵活,可靠性和安全性更高。
另外,本申请实施例还提供一种网关设备。如图4所示,电子设备400包括中央处理器CPU 401、存储器402。其中,CPU 401与存储器402电性连接。
CPU 401是网关设备400的控制中心,利用各种接口和线路连接整个网关设备的各个部分,通过运行或加载存储在存储器402内的应用程序,以及调用存储在存储器402内的数据,执行网关设备的各种功能和处理数据,从而对网关设备进行整体监控。
在本实施例中,图3所示的驱动模块31、转发模块32、表项管理模块33、协议模块34可以是存储在存储器402中的应用程序。网关设备400中的CPU 401运行存储在存储器402中的驱动模块31、转发模块32、表项管理模块33、协议模块34,从而实现各种功能。当表项管理模块33被CPU 401执行时,用于根据学习需求确定VLAN对应的MAC学习数量、端口对应的MAC学习数量和全局MAC学习数量。当驱动模块31被CPU 401执行时,用于接收第一报文,获取所述第一报文的入端口以及所述第一报文中携带的第一VLAN标识和第一源MAC地址。当转发模块32被CPU 401执行时,用于根据所述CPU存储的MAC转发表,检测所述第一报文中的第一源MAC地址是否需要学习;若所述第一源MAC地址需要学习,则在检测到预设的MAC学习消息队列中的消息总个数未达到所述全局MAC学习数量,且所述MAC学习消息队列中所述第一VLAN标识对应的消息个数未达到所述VLAN对应的MAC学习数量,且所述MAC学习消息队列中所述入端口对应的消息个数未达到所述端口对应的MAC学习数量时,生成包含所述第一源MAC地址、所述第一VLAN标识和所述入端口的第一MAC学习消息,并添加至所述MAC学习消息队列中。当表项管理模块33被CPU 401执行时,还用于从MAC学习消息队列中读取MAC学习消息。当协议模块34被CPU 401执行时,用于对读取的MAC学习消息进行源MAC地址学习。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被中央处理器CPU进行加载,以执行本发明实施例所提供的任一种MAC地址学习方法中的步骤。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种MAC地址学习方法中的步骤,因此,可以实现本发明实施例所提供的任一种MAC地址学习方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
综上该,虽然本申请已以优选实施例揭露如上,但上述优选实施例并非用以限制本申请,本领域的普通技术人员,在不脱离本申请的精神和范围内,均可作各种更动与润饰,因此本申请的保护范围以权利要求界定的范围为准。