一种地址自学习的方法、装置及交换机与流程

文档序号:15521425发布日期:2018-09-25 19:33阅读:433来源:国知局
本发明涉及通信领域,具体而言,涉及一种地址自学习的方法、装置及交换机。
背景技术
::openflow(开放流)网络采用控制平面与转发平面相分离的架构,图1是根据相关技术的openflow网络组件架构示意图。如图1所示,openflow网络的控制平面由openflow控制器来实现,openflow网络的转发平面由openflow交换机来实现,openflow控制器与openflow交换机之间运行openflow协议;openflow控制器利用openflow协议向openflow交换机下发包含多个条目(entry)的流表(flowtable)和多种类型的组表(grouptable),流表参数包括匹配字段(matchfields)和包含动作(actions)的指令(instructions)等,组表参数包括组类型(grouptype)和动作集(actionbuckets)等,从而达到控制数据转发的目的,实现了数据转发和路由控制的分离。根据openflow协议规范的规定,openflow交换机如果接收到没有匹配流表的报文,则会把该报文封装在packet_in消息中发送给openflow控制器处理。按事先设定好的规则处理完后,openflow控制器会向openflow交换机下发匹配该报文的流表,这样后续的同类报文就能够匹配到新下发的流表并由openflow交换机根据流表和组表自主完成报文的转发。现有openflow协议规范定义的报文处理流程是一种无状态的流程,所有的状态信息都存储在openflow控制器中,这样做的一个劣势就是openflow交换机的反应速度不够快,同时也给openflow控制器以及openflow控制器与openflow交换机之间的控制通道带来了较大的压力。所以,业界提出了一种被称为开放状态(openstate)的技术方案来改进现有openflow协议规范,使得openflow交换机自身能够存储一些状态信息并在不依赖于控制器的情况下自主更新相关状态。图2是相关技术中openstate技术方案的示意图,如图2所示,openstate技术方案引入了新的状态表(statetable),状态表由openflow控制器下发到openflow交换机,状态表包含两个参数:匹配键值(matchkey)和状态值(state),其中,匹配键值表示的是键值提取器(keyextractor)根据从报文中提取的一些字段组合而成的键值,状态值则附加在匹配状态表成功的报文上,与报文一道进入流表(flowtable),流表在现有openflow协议规范定义的流表匹配字段基础上增加了状态值(state)为新的匹配字段,另外流表针对匹配成功的报文增加了设置状态(set-state)的动作(action),该动作可以设置新的状态值(next_state),新的状态值与另一个键值提取器(keyextractor)从报文中提取出的键值一道用于更新状态表,这样就实现了openflow交换机所存储状态信息的自动更新。现有网络中有两种地址自学习的功能,一种是媒质接入控制(mediaaccesscontrol,简称为mac)地址自学习功能,用于基于mac地址转发的网络中,网络设备通过学习所接收报文的源mac地址与入端口的对应关系,生成新的mac地址转发表或更新已有的mac地址转发表;另一种是待封装外层地址自学习功能,用于层叠网(overlaynetwork)中,边缘网络设备通过学习所接收报文的外层源地址与内层源地址的映射关系,生成新的外层地址封装表或更新已有的外层地址封装表。层叠网是一种应用广泛的网络类型,图3是根据相关技术的层叠网的网络结构示意图,如图3所示,层叠网中包含边缘节点和中间节点两种不同类型的网络设备,用户设备通过连接边缘节点以接入层叠网,层叠网的特点是边缘节点会针对所有通过用户侧端口进入层叠网的报文添加外层封装,外层封装中包含用于中间节点转发的外层源地址和外层目的地址,其中外层源地址指向添加外层封装的本地边缘节点,外层目的地址指向远端边缘节点,而添加外层封装前的报文的源地址和目的地址在添加外层封装后作为内层源地址和内层目的地址仍携带在报文中。远端边缘节点通过网络侧端口接收到添加了外层封装的报文后,会对报文的外层源地址与内层源地址之间的映射关系进行自学习,并把这种地址间映射关系保存下来,作为该边缘节点给后续的从本边缘节点进入层叠网的报文添加外层封装的依据,这也就是前述的待封装外层地址自学习功能。业界提出的openstate技术方案通过对openflow协议规范的扩展,虽然能够支持mac地址自学习功能,但是仍无法支持层叠网所需的待封装外层地址自学习功能,目前也尚未提出有效的解决方案。技术实现要素:本发明实施例中提供了一种地址自学习的方法、装置及交换机,以至少解决相关技术中openflow网络由于不支持两层地址的获取和使用而无法支持层叠网所需的待封装外层地址自学习功能的问题。根据本发明的一个实施例,提供了一种地址自学习的方法,包括:从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;根据所述第一动作指示信息将与所述第一报文对应的第一源地址拷贝到第一状态变量中;根据所述第一状态变量更新用于地址自学习的状态表,其中,所述状态表中存储有与所述第一报文对应的第二源地址及所述第一源地址二者之间的映射关系;根据更新后的所述状态表更新预设表,其中,所述预设表用于存储所述地址自学习的结果。可选地,根据所述第一状态变量更新用于地址自学习的状态表包括:从所述第一报文中提取出所述第一报文的所述第二源地址;根据所述第二源地址及所述第一状态变量更新所述状态表。可选地,根据所述第二源地址及所述第一状态变量更新所述状态表包括:在所述状态表中查找所述第二源地址;在未查找到所述第二源地址的情况下,在所述状态表中创建与所述第二源地址对应的状态条目,其中,所创建的所述状态条目用于记录所述第二源地址及与所述第一状态变量中携带的所述第一源地址之间的所述映射关系。可选地,在所述状态表中查找所述第二源地址之后,还包括:在查找到所述第二源地址的情况下,判断在所述状态表中存储的与所述第二源地址匹配的第三源地址,与所述第一状态变量中携带的所述第一源地址是否相同;在所述状态表中与所述第二源地址匹配的所述第三源地址,与所述第一状态变量中携带的所述第一源地址不同时,将所述状态表中的所述第三源地址替换为所述第一源地址。可选地,根据更新后的所述状态表更新预设表包括:在所述预设表中生成与更新后的所述状态表中的所述第二源地址对应的匹配字段;将更新后的所述状态表中的所述第一源地址,嵌入到所述预设表中与所述匹配字段对应的第二动作指示信息中,其中,所述第二动作指示信息用于指示按照所述第一源地址执行预定操作。可选地,在根据更新后的所述状态表更新预设表之后,还包括:接收第二报文,其中,所述第二报文的目的地址和与所述第一报文对应的所述第二源地址相同;根据与所述目的地址对应的匹配字段从所述预设表中获取所述第二动作指示信息;根据所述第二动作指示信息的指示,按照所述第一源地址对所述第二报文执行所述预定操作。可选地,按照所述第一源地址对所述第二报文执行所述预定操作包括:按照所述第一源地址封装所述第二报文;或者,按照所述第一源地址输出所述第二报文。可选地,在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,还包括:接收开放流控制器下发的所述流表,所述状态表和所述预设表;在根据更新后的所述状态表更新预设表之后,还包括:向所述开放流控制器上报更新后的所述预设表。可选地,所述预设表为以下之一:第二流表、组表。根据本发明的另一个实施例,提供了一种地址自学习的装置,包括:第一获取模块,用于从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;拷贝模块,用于根据所述第一动作指示信息将与所述第一报文对应的第一源地址拷贝到第一状态变量中;第一更新模块,用于根据所述第一状态变量更新用于地址自学习的状态表,其中,所述状态表中存储有与所述第一报文对应的第二源地址及所述第一源地址二者之间的映射关系;第二更新模块,用于根据更新后的所述状态表更新预设表,其中,所述预设表用于存储所述地址自学习的结果。可选地,所述第一更新模块,还用于从所述第一报文中提取出所述第一报文的所述第二源地址;根据所述第二源地址及所述第一状态变量更新所述状态表。可选地,所述第一更新模块包括:查找单元,用于在所述状态表中查找所述第二源地址;创建单元,用于在未查找到所述第二源地址的情况下,在所述状态表中创建与所述第二源地址对应的状态条目,其中,所创建的所述状态条目用于记录所述第二源地址及与所述第一状态变量中携带的所述第一源地址之间的所述映射关系。可选地,所述第一更新模块还包括:判断单元,用于在所述状态表中查找所述第二源地址之后,在查找到所述第二源地址的情况下,判断在所述状态表中存储的与所述第二源地址匹配的第三源地址,与所述第一状态变量中携带的所述第一源地址是否相同;替换单元,用于在所述状态表中与所述第二源地址匹配的所述第三源地址,与所述第一状态变量中携带的所述第一源地址不同时,将所述状态表中的所述第三源地址替换为所述第一源地址。可选地,所述第二更新模块,还用于在所述预设表中生成与更新后的所述状态表中的所述第二源地址对应的匹配字段;将更新后的所述状态表中的所述第一源地址,嵌入到所述预设表中与所述匹配字段对应的第二动作指示信息中,其中,所述第二动作指示信息用于指示按照所述第一源地址执行预定操作。可选地,所述装置还包括:第一接收模块,用于在根据更新后的所述状态表更新预设表之后,接收第二报文,其中,所述第二报文的目的地址和与所述第一报文对应的所述第二源地址相同;第二获取模块,用于根据与所述目的地址对应的匹配字段从所述预设表中获取所述第二动作指示信息;执行模块,用于根据所述第二动作指示信息的指示,按照所述第一源地址对所述第二报文执行所述预定操作。可选地,所述执行模块,还用于按照所述第一源地址封装所述第二报文;或者,按照所述第一源地址输出所述第二报文。可选地,所述装置还包括:第二接收模块,用于在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,接收开放流控制器下发的所述流表,所述状态表和所述预设表;上报模块,用于在根据更新后的所述状态表更新预设表之后,向所述开放流控制器上报更新后的所述预设表。根据本发明的又一个实施例,提供了一种交换机,包括:处理器和存储器,其中,所述处理器,用于从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;根据所述第一动作指示信息将与所述第一报文对应的第一源地址拷贝到第一状态变量中;根据所述第一状态变量更新用于地址自学习的状态表,其中,所述状态表中存储有与所述第一报文对应的第二源地址及所述第一源地址二者之间的映射关系;根据更新后的所述状态表更新预设表,其中,所述预设表用于存储所述地址自学习的结果;所述存储器,用于存储所述第一流表、所述状态表和所述预设表。可选地,所述处理器,还用于从所述第一报文中提取出所述第一报文的所述第二源地址;根据所述第二源地址及所述第一状态变量更新所述状态表。可选地,所述处理器,还用于在所述状态表中查找所述第二源地址;在未查找到所述第二源地址的情况下,在所述状态表中创建与所述第二源地址对应的状态条目,其中,所创建的所述状态条目用于记录所述第二源地址及与所述第一状态变量中携带的所述第一源地址之间的所述映射关系。可选地,所述处理器,还用于在所述状态表中查找所述第二源地址之后,在查找到所述第二源地址的情况下,判断在所述状态表中存储的与所述第二源地址匹配的第三源地址,与所述第一状态变量中携带的所述第一源地址是否相同;在所述状态表中与所述第二源地址匹配的所述第三源地址,与所述第一状态变量中携带的所述第一源地址不同时,将所述状态表中的所述第三源地址替换为所述第一源地址。可选地,所述处理器,还用于在所述预设表中生成与更新后的所述状态表中的所述第二源地址对应的匹配字段;将更新后的所述状态表中的所述第一源地址,嵌入到所述预设表中与所述匹配字段对应的第二动作指示信息中,其中,所述第二动作指示信息用于指示按照所述第一源地址执行预定操作。可选地,所述交换机还包括:第一传输装置,其中,所述传输装置,用于在根据更新后的所述状态表更新预设表之后,接收第二报文,其中,所述第二报文的目的地址和与所述第一报文对应的所述第二源地址相同;所述处理器,还用于根据与所述目的地址对应的匹配字段从所述预设表中获取所述第二动作指示信息;根据所述第二动作指示信息的指示,按照所述第一源地址对所述第二报文执行所述预定操作。可选地,所述处理器,还用于按照所述第一源地址封装所述第二报文;或者,按照所述第一源地址输出所述第二报文。可选地,所述交换机还包括:第二传输装置,其中,所述第二传输装置,用于在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,接收开放流控制器下发的所述流表,所述状态表和所述预设表;在根据更新后的所述状态表更新预设表之后,向所述开放流控制器上报更新后的所述预设表。根据本发明的又一个实施例,还提供了一种存储介质。该存储介质设置为存储用于执行以下步骤的程序代码:从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;根据所述第一动作指示信息将与所述第一报文对应的第一源地址拷贝到第一状态变量中;根据所述第一状态变量更新用于地址自学习的状态表,其中,所述状态表中存储有与所述第一报文对应的第二源地址及所述第一源地址二者之间的映射关系;根据更新后的所述状态表更新预设表,其中,所述预设表用于存储所述地址自学习的结果。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:根据所述第一状态变量更新用于地址自学习的状态表包括:从所述第一报文中提取出所述第一报文的所述第二源地址;根据所述第二源地址及所述第一状态变量更新所述状态表。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:根据所述第二源地址及所述第一状态变量更新所述状态表包括:在所述状态表中查找所述第二源地址;在未查找到所述第二源地址的情况下,在所述状态表中创建与所述第二源地址对应的状态条目,其中,所创建的所述状态条目用于记录所述第二源地址及与所述第一状态变量中携带的所述第一源地址之间的所述映射关系。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:在所述状态表中查找所述第二源地址之后,还包括:在查找到所述第二源地址的情况下,判断在所述状态表中存储的与所述第二源地址匹配的第三源地址,与所述第一状态变量中携带的所述第一源地址是否相同;在所述状态表中与所述第二源地址匹配的所述第三源地址,与所述第一状态变量中携带的所述第一源地址不同时,将所述状态表中的所述第三源地址替换为所述第一源地址。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:根据更新后的所述状态表更新预设表包括:在所述预设表中生成与更新后的所述状态表中的所述第二源地址对应的匹配字段;将更新后的所述状态表中的所述第一源地址,嵌入到所述预设表中与所述匹配字段对应的第二动作指示信息中,其中,所述第二动作指示信息用于指示按照所述第一源地址执行预定操作。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:在根据更新后的所述状态表更新预设表之后,还包括:接收第二报文,其中,所述第二报文的目的地址和与所述第一报文对应的所述第二源地址相同;根据与所述目的地址对应的匹配字段从所述预设表中获取所述第二动作指示信息;根据所述第二动作指示信息的指示,按照所述第一源地址对所述第二报文执行所述预定操作。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:按照所述第一源地址对所述第二报文执行所述预定操作包括:按照所述第一源地址封装所述第二报文;或者,按照所述第一源地址输出所述第二报文。可选地,存储介质还设置为存储用于执行以下步骤的程序代码:在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,还包括:接收开放流控制器下发的所述流表,所述状态表和所述预设表;在根据更新后的所述状态表更新预设表之后,还包括:向所述开放流控制器上报更新后的所述预设表。通过本发明,通过第一流表获取第一源地址信息,通过用于地址自学习的状态表获取到第一源地址和第二源地址之间的映射关系,再由状态表去更新存储地址自学习结果的预设表,由于使用了三张表,通过用于地址自学习的状态表进行内层和外层两个源地址的学习,可以支持两层地址的获取和使用,因此,可以解决相关技术中openflow网络由于不支持两层地址的获取和使用而无法支持层叠网所需的待封装外层地址自学习功能的问题,达到有效进行地址自学习的效果。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据相关技术的openflow网络组件架构示意图;图2是相关技术中openstate技术方案的示意图;图3是根据相关技术的层叠网的网络结构示意图;图4是本发明实施例的地址自学习的方法的交换机的硬件结构框图;图5是根据本发明实施例的地址自学习的方法的流程图;图6是根据本发明优选实施例的地址自学习的方法的流程示意图;图7是根据本发明优选实施例的实现mac地址自学习功能的示意图;图8是根据本发明优选实施例的实现待封装外层地址自学习功能的示意图;图9是根据本发明实施例的地址自学习的装置的结构框图一;图10是根据本发明实施例的地址自学习的装置中第一更新模块96的结构框图一;图11是根据本发明实施例的地址自学习的装置中第一更新模块96的结构框图二;图12是根据本发明实施例的地址自学习的装置的结构框图二;图13是根据本发明实施例的地址自学习的装置的结构框图三;图14是根据本发明实施例的交换机的结构框图一;图15是根据本发明实施例的交换机的结构框图二;图16是根据本发明实施例的交换机的结构框图三。具体实施方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。实施例1本申请实施例1所提供的方法实施例可以在交换机、交换机、计算机终端或者类似的运算装置中执行。以运行在交换机上为例,图4是本发明实施例的地址自学习的方法的交换机的硬件结构框图。如图4所示,交换机40可以包括一个或多个(图中仅示出一个)处理器42(处理器42可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器44、以及用于通信功能的传输装置46。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,交换机40还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。存储器44可用于存储应用软件的软件程序以及模块,如本发明实施例中的地址自学习的方法对应的程序指令/模块,处理器42通过运行存储在存储器44内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器44可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器44可进一步包括相对于处理器42远程设置的存储器,这些远程存储器可以通过网络连接至交换机40。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。传输装置46用于经由一个网络接收或者发送数据。上述的网络具体实例可包括交换机40的通信供应商提供的无线网络。在一个实例中,传输装置46包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置46可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。在本实施例中提供了一种运行于上述交换机的地址自学习的方法,图5是根据本发明实施例的地址自学习的方法的流程图,如图5所示,该流程包括如下步骤:步骤s502,从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;步骤s504,根据第一动作指示信息将与第一报文对应的第一源地址拷贝到第一状态变量中;步骤s506,根据第一状态变量更新用于地址自学习的状态表,其中,状态表中存储有与第一报文对应的第二源地址及第一源地址二者之间的映射关系;步骤s508,根据更新后的状态表更新预设表,其中,预设表用于存储地址自学习的结果。通过上述步骤,通过第一流表获取第一源地址信息,通过用于地址自学习的状态表获取到第一源地址和第二源地址之间的映射关系,再由状态表去更新存储地址自学习结果的预设表,解决了相关技术中openflow网络由于不支持两层地址的获取和使用而无法支持层叠网所需的待封装外层地址自学习功能的问题,使得能够有效地进行地址自学习。可选地,上述步骤的执行主体可以为交换机、终端等,但不限于此。可选地,第一源地址可以是第一报文的入端口,或者是报文的外层源地址;第二源地址可以是第一报文的媒体接入控制(mediaaccesscontrol,简称为mac)地址,也可以是第一报文的内层源地址。可选地,在步骤s506中,可以采用多种方式更新状态表,例如,可以从第一报文中提取出第一报文的第二源地址,根据第二源地址及第一状态变量更新状态表。在进行第二源地址的获取时,可以使用键值提取器从第一报文中提取出该报文的第二源地址。可选地,在根据第二源地址及第一状态变量更新状态表时,可以通过如下方式进行状态表的更新:在状态表中查找第二源地址,查找的结果可以有两种,如下:在未查找到第二源地址的情况下,在状态表中创建与第二源地址对应的状态条目,其中,所创建的状态条目用于记录第二源地址及与第一状态变量中携带的第一源地址之间的映射关系;在查找到第二源地址的情况下,判断在状态表中存储的与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址是否相同;在状态表中与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址不同时,将状态表中的第三源地址替换为第一源地址;在状态表中与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址不同时,可以不对状态表进行处理。可选地,在步骤s508中,可以采用多种方式更新预设表,例如,可以在预设表中生成与更新后的状态表中的第二源地址对应的匹配字段;将更新后的状态表中的第一源地址,嵌入到预设表中与匹配字段对应的第二动作指示信息中,其中,第二动作指示信息用于指示按照第一源地址执行预定操作。可选地,在根据更新后的状态表更新预设表之后,还可以接收第二报文,其中,第二报文的目的地址和与第一报文对应的第二源地址相同;根据与目的地址对应的匹配字段从预设表中获取第二动作指示信息;根据第二动作指示信息的指示,按照第一源地址对第二报文执行预定操作。由于第二报文的目的地址与第二源地址相同,则与目的地址对应的匹配字段和与第二源地址对应的匹配字段是相同的,根据与目的地址对应的匹配字段从预设表中获取的动作指示信息,即为前述第二动作指示信息。可选地,按照第一源地址对第二报文执行预定操作可以有多种方式,例如,可以按照第一源地址封装第二报文,例如,可以给第二报文添加外层封装并使用第一源地址作为报文的目的地址;还可以按照第一源地址输出第二报文,例如,从第一源地址输出,也就是将第二报文从第一源地址输出。可选地,前述第一流表,状态表和预设表可以由openflow控制器接收的,例如,在步骤s502之前,可以接收开放流控制器(openflow控制器)下发的第一流表,状态表和预设表;而在步骤s508之后,还可以向开放流控制器上报更新后的预设表。上述接收操作的时机可以根据需要进行设定,例如,第一流表,状态表和预设表下发可以是基于本设备(例如,openflow交换机)发送的请求消息进行的,或者是根据预先设定的发送周期进行的,又或者是openflow控制器根据交换机当前的状态(网络情况、处理效率等)主动下发的。预设表的上报可以是更新以后立即进行的,也可以是周期性进行的,还可以是满足预设条件(时间条件、网络条件、设备的资源占用条件等)后进行的。可选地,预设表可以是第二流表,还可以是组表。具体的预设表的类型根据基于上述实施例及优选实施方式,为说明方案的整个流程交互,在本优选实施例中,提供了一种地址自学习的方法。在本优选实施例中所提供的地址自学习的方法,通过以下方式实现地址自学习:控制器向网络设备下发获取报文状态信息的流表、地址自学习状态表和存储地址自学习结果的流表;网络设备接收的报文首先会进到获取报文状态信息的流表进行处理,该流表会把报文的状态信息拷贝到新状态,然后使用新状态和报文源地址对地址自学习状态表进行更新;利用地址自学习状态表各条目的匹配键值与状态值对存储地址自学习结果的流表进行更新。下面结合图6对本发明优选实施例的地址自学习的方法进行说明。如图6所示,该地址自学习的方法具体包括以下步骤:步骤a,控制器向网络设备下发获取报文状态信息的流表、地址自学习状态表和存储地址自学习结果的流表。获取报文状态信息的流表(作用同前述第一流表)用于把报文相关的状态信息(例如,报文的入端口,报文的外层源地址,作用同前述第一源地址)拷贝到新状态(作用同前述状态信息变量),该流表的匹配字段为“需要地址自学习的报文”,相应的动作为“拷贝报文状态信息到新状态(next_state)”(作用同前述第一动作指示信息);地址自学习状态表(作用同前述用于地址自学习的状态表)用于记录报文源地址信息(作用同前述第二源地址)和获取报文状态信息的流表所获取的报文状态信息,该状态表的匹配键值为报文源地址,状态值为报文状态信息;地址自学习状态表利用匹配键值和状态值对存储地址自学习结果的流表进行更新,存储地址自学习结果的流表(作用同前述预设表)的匹配字段为“包含匹配键值的匹配字段”,相应的动作为“以状态值为参数的动作”(作用同前述第二动作指示信息)。步骤b,网络设备接收的报文首先会进到获取报文状态信息的流表进行处理,该流表会把报文的状态信息拷贝到新状态,然后使用新状态和报文源地址对地址自学习状态表进行更新。报文(作用同前述第一报文)进到获取报文状态信息的流表后,使用匹配字段“需要地址自学习的报文”进行匹配,例如,如果采用通配符作为匹配字段,则表明所有进入网络设备的报文都要进行地址自学习。对于匹配成功的报文,执行动作“拷贝报文状态信息到新状态”把报文的状态信息拷贝到新状态,而键值提取器会从报文中提取出报文源地址,然后用报文源地址和新状态对地址自学习状态表进行更新,这样一来,地址自学习状态表就记录了地址自学习所获取的报文源地址信息和报文状态信息。步骤c,利用地址自学习状态表各条目的匹配键值与状态值对存储地址自学习结果的流表进行更新。地址自学习状态表各条目的匹配键值与状态值分别记录了地址自学习所获取的报文源地址信息和报文状态信息,利用匹配键值与状态值对存储地址自学习结果的流表进行更新,也就是用地址自学习状态表的匹配键值去更新存储地址自学习结果的流表中的匹配键值,用地址自学习状态表的状态值去更新存储地址自学习结果的流表中的状态值。如果地址自学习状态表某个条目的匹配键值是存储地址自学习结果的流表中不存在的,则在存储地址自学习结果的流表中增加新的流表条目;如果地址自学习状态表某个条目的匹配键值是存储地址自学习结果的流表中存在的,则不会增加新的流表条目,而是更新存储地址自学习结果的流表中的已有流表条目。每当存储地址自学习结果的流表得到更新后,网络设备需要向控制器上报更新后的流表。下面结合两个实例对本优选实施例的地址自学习的方法进行说明。实例1图7是根据本发明优选实施例的实现mac地址自学习功能的示意图。如图7所示,在本实例中,openflow控制器与openflow交换机执行的步骤如下:步骤1,openflow控制器向openflow交换机下发获取报文入端口信息的流表、地址自学习状态表和存储地址自学习结果的流表。获取报文入端口信息的流表的匹配字段为“通配符”,相应的动作为“拷贝<报文的入端口>到新状态”;地址自学习状态表的匹配键值为“报文的源mac地址”,状态值为“报文的入端口”;存储地址自学习结果的流表的匹配字段为“<报文的目的mac地址>”,相应的动作为“从<报文的出端口>输出”。步骤2,openflow交换机接收的报文首先会进到获取报文入端口信息的流表进行处理,该流表会把报文的入端口信息拷贝到新状态,然后使用新状态和报文的源mac地址对地址自学习状态表进行更新。报文进到获取报文入端口信息的流表后,使用匹配字段“通配符”进行匹配,也即所有进入openflow交换机的报文都会匹配成功,对于匹配成功的报文,执行动作“拷贝<报文的入端口>到新状态”把报文的入端口信息拷贝到新状态,报文的入端口就是该流表所获取的报文相关状态信息,而键值提取器会从报文中提取出报文的源mac地址,然后用报文的源mac地址和入端口对地址自学习状态表进行更新,这样,地址自学习状态表就记录了地址自学习所获取的报文的源mac地址和报文的入端口。步骤3,利用地址自学习状态表各条目的匹配键值与状态值对存储地址自学习结果的流表进行更新。地址自学习状态表各条目的匹配键值与状态值分别记录了地址自学习所获取的报文的源mac地址和报文的入端口,利用匹配键值与状态值对存储地址自学习结果的流表进行更新,也就是用地址自学习状态表的报文的源mac地址去更新存储地址自学习结果的流表中的匹配字段<报文的目的mac地址>(作用同前述匹配字段),用地址自学习状态表的报文的入端口去更新存储地址自学习结果的流表中的动作参数<报文的出端口>,达到从<报文的出端口>把报文转发出去的目的。如果地址自学习状态表某个条目的报文的源mac地址是存储地址自学习结果的流表的匹配字段中不存在的,则在存储地址自学习结果的流表中增加新的流表条目,并使用地址自学习状态表中的报文的源mac地址和报文的入端口来更新上述新增的流表条目;如果地址自学习状态表某个条目的报文的源mac地址是存储地址自学习结果的流表的匹配字段中存在的,则不会增加新的流表条目,而是直接使用地址自学习状态表中的报文的入端口来更新存储地址自学习结果的流表中的已有流表条目。每当存储地址自学习结果的流表得到更新后,openflow交换机需要向openflow控制器上报更新后的流表。实例2图8是根据本发明优选实施例的实现待封装外层地址自学习功能的示意图。如图8所示,在本实例中,openflow控制器与作为层叠网边缘节点的openflow交换机要执行如下步骤:步骤1,openflow控制器向openflow交换机下发获取报文外层源地址信息的流表、地址自学习状态表和存储地址自学习结果的流表。获取报文外层源地址信息的流表的匹配字段为“报文的入端口为网络侧端口”,相应的动作为“拷贝<报文的外层源地址>到新状态”;地址自学习状态表的匹配键值为“报文的内层源地址”,状态值为“报文的外层源地址”;存储地址自学习结果的流表的匹配字段为“报文的入端口为用户侧端口+<报文的目的地址>”,也就是同时满足报文的入端口为用户侧端口和报文的目的地址为某个取值,相应的动作为“给报文添加外层封装并使用<报文的外层目的地址>作为报文的外层目的地址”。步骤2,openflow交换机接收的报文首先会进到获取报文外层源地址信息的流表进行处理,该流表会把报文的外层源地址信息拷贝到新状态,然后使用新状态和报文的内层源地址对地址自学习状态表进行更新。报文进到获取报文入端口信息的流表后,使用匹配字段“报文的入端口为网络侧端口”进行匹配,也即openflow交换机从网络侧端口接收的报文会匹配成功,对于匹配成功的报文,执行动作“拷贝<报文的外层源地址>到新状态”把报文的外层源地址信息拷贝到新状态,报文的外层源地址就是该流表所获取的报文相关状态信息,而键值提取器会从报文中提取出报文的内层源地址,然后用报文的内层源地址和外层源地址对地址自学习状态表进行更新,这样,地址自学习状态表就记录了地址自学习所获取的报文的内层源地址和报文的外层源地址。步骤3,利用地址自学习状态表各条目的匹配键值与状态值对存储地址自学习结果的流表进行更新。地址自学习状态表各条目的匹配键值与状态值分别记录了地址自学习所获取的报文的内层源地址和报文的外层源地址,利用匹配键值与状态值对存储地址自学习结果的流表进行更新,也就是用地址自学习状态表的报文的内层源地址去更新存储地址自学习结果的流表中的<报文的目的地址>,用地址自学习状态表的报文的外层源地址去更新存储地址自学习结果的流表中的动作参数<报文的外层目的地址>。如果地址自学习状态表某个条目的报文的内层源地址是存储地址自学习结果的流表的匹配字段中不存在的,则在存储地址自学习结果的流表中增加新的流表条目,并使用地址自学习状态表中的报文的内层源地址和报文的外层源地址来更新上述新增的流表条目;如果地址自学习状态表某个条目的报文的内层源地址是存储地址自学习结果的流表的匹配字段中存在的,则不会增加新的流表条目,而是直接使用地址自学习状态表中的报文的外层源地址来更新存储地址自学习结果的流表中的已有流表条目。每当存储地址自学习结果的流表得到更新后,openflow交换机需要向openflow控制器上报更新后的流表。此外,除了使用流表来存储地址自学习结果之外,也可以使用组表来存储地址自学习结果。使用组表的一个优势是可以同时存储一个报文的目的地址与多个封装后报文的外层目的地址的映射关系,因此,可以支持地址自学习所获取的报文源地址与获取的多个报文状态的对应,这在层叠网的待封装外层地址自学习功能中是有可能需要的。通过本发明优选实施例的上述技术方案,通过使用流表和状态表分别获取到报文的两个源地址,使得openflow网络可同时支持基于mac转发网络所需的mac地址自学习功能和层叠网所需的待封装外层地址自学习功能。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。实施例2在本实施例中还提供了一种地址自学习的装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图9是根据本发明实施例的地址自学习的装置的结构框图一,如图9所示,该装置包括:第一获取模块92,用于从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;拷贝模块94,连接至上述第一获取模块92,用于根据第一动作指示信息将与第一报文对应的第一源地址拷贝到第一状态变量中;第一更新模块96,连接至上述拷贝模块94,用于根据第一状态变量更新用于地址自学习的状态表,其中,状态表中存储有与第一报文对应的第二源地址及第一源地址二者之间的映射关系;第二更新模块98,连接至上述第一更新模块96,用于根据更新后的状态表更新预设表,其中,预设表用于存储地址自学习的结果。可选地,第一更新模块96,还可以用于从第一报文中提取出第一报文的第二源地址;根据第二源地址及第一状态变量更新状态表。图10是根据本发明实施例的地址自学习的装置中第一更新模块96的结构框图一,如图10所示,该第一更新模块96包括:查找单元102,用于在状态表中查找第二源地址;创建单元104,连接至上述查找单元102,用于在未查找到第二源地址的情况下,在状态表中创建与第二源地址对应的状态条目,其中,所创建的状态条目用于记录第二源地址及与第一状态变量中携带的第一源地址之间的映射关系。图11是根据本发明实施例的地址自学习的装置中第一更新模块96的结构框图二,如图11所示,该第一更新模块96还包括:判断单元112,连接至上述查找单元102,用于在状态表中查找第二源地址之后,在查找到第二源地址的情况下,判断在状态表中存储的与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址是否相同;替换单元114,连接至上述判断单元112,用于在状态表中与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址不同时,将状态表中的第三源地址替换为第一源地址。可选地,第二更新模块98,还可以用于在预设表中生成与更新后的状态表中的第二源地址对应的匹配字段;将更新后的状态表中的第一源地址,嵌入到预设表中与匹配字段对应的第二动作指示信息中,其中,第二动作指示信息用于指示按照第一源地址执行预定操作。图12是根据本发明实施例的地址自学习的装置的结构框图二,如图12所示,该装置除包括图9所示的所有模块外,还包括:第一接收模块122,用于在根据更新后的状态表更新预设表之后,接收第二报文,其中,第二报文的目的地址和与第一报文对应的第二源地址相同;第二获取模块124,连接至上述第一接收模块122,用于根据与目的地址对应的匹配字段从预设表中获取第二动作指示信息;执行模块126,连接至上述第二获取模块124,用于根据第二动作指示信息的指示,按照第一源地址对第二报文执行预定操作。可选地,执行模块126,还可以用于按照第一源地址封装第二报文;或者,按照第一源地址输出第二报文。图13是根据本发明实施例的地址自学习的装置的结构框图三,如图13所示,该装置除包括图9所示的所有模块外,还包括:第二接收模块132,用于在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,接收开放流控制器下发的流表,状态表和预设表;上报模块134,连接至上述第二接收模块132,用于在根据更新后的状态表更新预设表之后,向开放流控制器上报更新后的预设表。可选地,上述预设表可以为以下之一:第二流表、组表。需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。实施例3在本实施例中还提供了一种交换机,该交换机用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。图14是根据本发明实施例的交换机的结构框图一,如图14所示,该装置包括:处理器142和存储器144,其中,处理器142,用于从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;根据第一动作指示信息将与第一报文对应的第一源地址拷贝到第一状态变量中;根据第一状态变量更新用于地址自学习的状态表,其中,状态表中存储有与第一报文对应的第二源地址及第一源地址二者之间的映射关系;根据更新后的状态表更新预设表,其中,预设表用于存储地址自学习的结果;存储器144,与上述处理器142相连,用于存储第一流表、状态表和预设表。处理器142,还用于从第一报文中提取出第一报文的第二源地址;根据第二源地址及第一状态变量更新状态表。可选地,处理器142,还用于在状态表中查找第二源地址;在未查找到第二源地址的情况下,在状态表中创建与第二源地址对应的状态条目,其中,所创建的状态条目用于记录第二源地址及与第一状态变量中携带的第一源地址之间的映射关系。可选地,处理器142,还用于在状态表中查找第二源地址之后,在查找到第二源地址的情况下,判断在状态表中存储的与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址是否相同;在状态表中与第二源地址匹配的第三源地址,与第一状态变量中携带的第一源地址不同时,将状态表中的第三源地址替换为第一源地址。可选地,处理器142,还用于在预设表中生成与更新后的状态表中的第二源地址对应的匹配字段;将更新后的状态表中的第一源地址,嵌入到预设表中与匹配字段对应的第二动作指示信息中,其中,第二动作指示信息用于指示按照第一源地址执行预定操作。图15是根据本发明实施例的交换机的结构框图二,如图15所示,该装置除包括图14所示的所有模块外,还包括:第一传输装置152,其中,第一传输装置152,用于在根据更新后的状态表更新预设表之后,接收第二报文,其中,第二报文的目的地址和与第一报文对应的第二源地址相同;处理器142,连接至上述第一传输装置152,还用于根据与目的地址对应的匹配字段从预设表中获取第二动作指示信息;根据第二动作指示信息的指示,按照第一源地址对第二报文执行预定操作。可选地,处理器142,还用于按照第一源地址封装第二报文;或者,按照第一源地址输出第二报文。图16是根据本发明实施例的交换机的结构框图三,如图16所示,该装置除包括图14所示的所有模块外,还包括:第二传输装置162,其中,第二传输装置162,用于在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,接收开放流控制器下发的流表,状态表和预设表;在根据更新后的状态表更新预设表之后,向开放流控制器上报更新后的预设表。可选地,上述预设表可以为以下之一:第二流表、组表。实施例4本发明的实施例中还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:s1,从第一流表中获取与接收到的第一报文匹配的第一动作指示信息;s2,根据第一动作指示信息将与第一报文对应的第一源地址拷贝到第一状态变量中;s3,根据第一状态变量更新用于地址自学习的状态表,其中,状态表中存储有与第一报文对应的第二源地址及第一源地址二者之间的映射关系;s4,根据更新后的状态表更新预设表,其中,预设表用于存储地址自学习的结果。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:根据第一状态变量更新用于地址自学习的状态表包括:s1,从第一报文中提取出第一报文的第二源地址;s2,根据第二源地址及第一状态变量更新状态表。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:根据第二源地址及第一状态变量更新状态表包括:s1,在状态表中查找第二源地址;s2,在未查找到第二源地址的情况下,在状态表中创建与第二源地址对应的状态条目,其中,所创建的状态条目用于记录第二源地址及与第一状态变量中携带的第一源地址之间的映射关系。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在状态表中查找第二源地址之后,还包括:s1,在查找到第二源地址的情况下,判断在状态表中存储的与第二源地址匹配的第三地址,与第一状态变量中携带的第一源地址是否相同;s2,在状态表中与第二源地址匹配的第三地址,与第一状态变量中携带的第一源地址不同时,将状态表中的第三地址替换为第一源地址。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:根据更新后的状态表更新预设表包括:s1,在预设表中生成与更新后的状态表中的第二源地址对应的匹配字段;s2,将更新后的状态表中的第一源地址,嵌入到预设表中与匹配字段对应的第二动作指示信息中,其中,第二动作指示信息用于指示按照第一源地址执行预定操作。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在根据更新后的状态表更新预设表之后,还包括:s1,接收第二报文,其中,第二报文的目的地址和与第一报文对应的第二源地址相同;s2,根据与目的地址对应的匹配字段从预设表中获取第二动作指示信息;s3,根据第二动作指示信息的指示,按照第一源地址对第二报文执行预定操作。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:按照第一源地址对第二报文执行预定操作包括:s1,按照第一源地址封装第二报文;或者s2,按照第一源地址输出第二报文。可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:s1,在从第一流表中获取与接收到的第一报文匹配的第一动作指示信息之前,还包括:接收开放流控制器下发的流表,状态表和预设表;s2,在根据更新后的状态表更新预设表之后,还包括:向开放流控制器上报更新后的预设表。可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例中的方法步骤。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1