一种Openflow消息执行方法及装置与流程

文档序号:12789425阅读:225来源:国知局
一种Openflow消息执行方法及装置与流程

本发明涉及网络通信技术领域,尤其涉及一种Openflow消息执行方法及装置。



背景技术:

SDN(Software Defined Networks,软件定义网络)是一种新型的网络创新架构,通过控制平面和数据平面分离,实现网络流量的灵活控制。在SDN网络中,控制器通过Openflow消息控制交换设备进行业务处理。

当控制器利用Bundle机制触发交换设备批量执行Openflow消息时,Openflow消息的执行顺序由Openflow消息添加到Bundle缓存中的先后顺序决定,这使得一些重要业务的Openflow消息可能晚于普通业务的Openflow消息被执行,业务处理不够优化,甚至可能会影响到已有业务的稳定性。



技术实现要素:

本发明的目的在于提供一种Openflow消息执行方法及装置,用以按照优先级执行Bundle缓存中的Openflow消息。

为实现上述发明目的,本发明提供了如下技术方案:

本发明提供一种Openflow消息执行方法,应用于交换设备,所述方法包括:

在接收到控制器发送的携带Openflow消息和Openflow消息的优先级的Bundle添加消息时,将所述Bundle添加消息携带的Openflow消息添加到所述Bundle添加消息对应的Bundle缓存中,并标记该添加的Openflow消息的优先级;

在接收到所述控制器发送的针对所述Bundle缓存的Bundle执行消息时,对所述Bundle缓存中标记了优先级的Openflow消息按照优先级进行排序;

按照排序后从高到低的优先级顺序执行所述Bundle缓存中标记了优先级的Openflow消息。

本发明还提供一种Openflow消息执行装置,应用于交换设备,所述装置包括:

标记单元,用于在接收到控制器发送的携带Openflow消息和Openflow消息的优先级的Bundle添加消息时,将所述Bundle添加消息携带的Openflow消息添加到所述Bundle添加消息对应的Bundle缓存中,并标记该添加的Openflow消息的优先级;

排序单元,用于在接收到所述控制器发送的针对所述Bundle缓存的Bundle执行消息时,对所述Bundle缓存中标记了优先级的Openflow消息按照优先级进行排序;

执行单元,用于按照排序后从高到低的优先级顺序执行所述Bundle缓存中标记了优先级的Openflow消息。

由以上描述可以看出,本发明对Bundle缓存中的Openflow消息设置了优先级,并基于Openflow消息的优先级顺序执行Bundle缓存中的Openflow消息,以确保重要业务的Openflow消息优先执行,达到业务处理的最优化。

附图说明

图1是本发明实施例示出的一种Openflow消息执行方法流程图;

图2是本发明实施例示出的一种SDN网络示意图;

图3是本发明实施例示出的交换设备的结构示意图;

图4是本发明实施例示出的一种Openflow消息执行装置的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本发明实施例提出一种Openflow消息执行方法,该方法通过设置Openflow消息的优先级,对Bundle缓存中的Openflow消息按照优先级顺序执行,以确保重要业务优先处理。

参见图1,为本发明Openflow消息执行方法的一个实施例流程图,该实施例对Openflow消息执行过程进行描述。

步骤101,在接收到控制器发送的携带Openflow消息和Openflow消息的优先级的Bundle添加消息时,将所述Bundle添加消息携带的Openflow消息添加到所述Bundle添加消息对应的Bundle缓存中,并标记该添加的Openflow消息的优先级。

在SDN网络中,控制器通过Openflow消息配置管理交换设备,例如,通过Openflow消息向交换设备下发流表项,以使交换设备基于流表项对业务流量进行转发。

本发明利用Bundle机制处理Openflow消息,具体为,控制器向交换设备发送Bundle创建消息(消息类型为OFPBCT_OPEN_REQUEST的OFPT_BUNDLE_CONTROL消息),交换设备根据Bundle创建消息本地创建对应Bundle缓存,当交换设备接收的Bundle创建消息中携带有优先级执行标记时,标记该创建的Bundle缓存支持优先级执行;反之,当交换设备接收的Bundle创建消息中未携带优先级执行标记时,表明该创建的Bundle缓存不支持优先级执行。

在完成Bundle缓存创建后,交换设备接收控制器发送的携带Openflow消息的Bundle添加消息(OFPT_BUNDLE_ADD_MESSAGE),将Bundle添加消息携带的Openflow消息添加到Bundle添加消息对应的Bundle缓存中。当接收的Bundle添加消息中还携带Openflow消息的优先级时,本地标记该添加到Bundle缓存中的Openflow消息的优先级。例如,控制器可根据业务的重要程度,为不同业务的Openflow消息设置不同的优先级,从而使交换设备为添加到Bundle缓存中的Openflow消息标记不同的优先级。

步骤102,在接收到所述控制器发送的针对所述Bundle缓存的Bundle执行消息时,对所述Bundle缓存中标记了优先级的Openflow消息按照优先级进行排序。

具体地,当交换设备接收到控制器发送的Bundle执行消息(消息类型为OFPBCT_COMMIT_REQUEST的OFPT_BUNDLE_CONTROL消息)时,首先判断该Bundle执行消息对应的Bundle缓存是否支持优先级执行,当Bundle执行消息对应的Bundle缓存不支持优先级执行时,可采用现有执行方式进行处理,在此不再赘述;当Bundle执行消息对应的Bundle缓存支持优先级执行时,对Bundle缓存中标记了优先级的Openflow消息按照优先级进行排序。

可见,本发明通过设置Bundle缓存的优先级执行标记,仅对支持优先级执行的Bundle缓存中的Openflow消息进行排序,提高了Openflow消息的执行效率。

步骤103,按照排序后从高到低的优先级顺序执行所述Bundle缓存中标记了优先级的Openflow消息。

本步骤中,交换设备优先执行高优先级的Openflow消息,再执行低优先级的Openflow消息,对优先级相同的Openflow消息按照添加到Bundle缓存中的先后顺序执行。

在执行完标记了优先级的Openflow消息后,若Bundle缓存中还存在未标记优先级的Openflow消息时,则对未标记优先级的Openflow消息按照添加到Bundle缓存中的先后顺序执行。

可见,本发明通过对支持优先级执行的Bundle缓存中的Openflow消息按照优先级顺序执行,以使重要业务得以优先处理。

此外,本发明还增加了Bundle删除消息(记为OFPT_BUNDLE_DELETE_MESSAGE)。当控制器要删除已添加到Bundle缓存中的Openflow消息时,可发送携带要删除的Openflow消息的标识的Bundle删除消息给交换设备,交换设备根据该Openflow消息的标识,查找Bundle缓存中具有相同标识的Openflow消息进行删除,使Bundle缓存中保留的是真正需要执行的Openflow消息,以降低交换设备反复执行增删操作的次数。

举例说明,比如控制器已向交换设备的Bundle缓存中添加了一个用于增加流表项的Openflow消息(记为Openflow流表添加消息),此时,网络中发生链路变化,控制器根据该链路变化确定需要取消已添加到Bundle缓存中的Openflow流表添加消息,现有技术中没有删除Bundle缓存中消息的机制,只能再向Bundle缓存中添加了一个删除流表项的Openflow消息(记为Openflow流表删除消息)。Bundle缓存被触发执行后,交换设备首先执行Openflow流表添加消息,向硬件资源中增加一个流表项,再执行Openflow流表删除消息,删除已添加的流表项。当网络中链路不稳定时,会导致交换设备的硬件转发层面出现大量流表项的增删。而本发明通过增加Bundle删除消息,可直接将Bundle缓存中的Openflow流表添加消息删除,该Openflow流表添加消息携带的流表项还未真正下发到硬件转发层面,因此,可避免对硬件转发层面流表项的频繁增删。

现以图2所示SDN网络为例,详细介绍Openflow消息执行过程。

图2所示SDN网络包括控制器Controller和交换设备SW1~SW6,控制器与交换设备之间通过Openflow协议进行信息交互。SW1下挂虚拟机VM1~VM100,SW6下挂虚拟机VM101~VM200。该SDN网络中部署了三种业务,按照重要程度划分依次为服务端业务、普通业务、其它业务,并预设服务端业务的Openflow消息的优先级为3;普通业务的Openflow消息的优先级为2;其它业务的Openflow消息的优先级为1。

假设,VM1~VM30、VM101~VM130部署普通业务;VM31~VM70、VM131~VM170部署服务端业务;剩余虚拟机部署其它业务。现以控制器通过Openflow消息向交换设备下发流表项为例,当前SDN网络处于稳定运行状态,各交换设备的硬件转发层面已存在指导数据转发的流表项。

实施例一:

在某一时刻SW1的端口S2down掉,导致SW1上虚拟机VM1~VM100的流表项都需要更新。

Controller针对此次端口down事件向SW1发送Bundle创建消息,在Bundle创建消息中(例如,flags字段)携带优先级执行标识。SW1根据该Bundle创建消息创建Bundle,记为Bundle1,并标记Bundle1支持优先级执行。

以Controller下发VM1的流表项为例,Controller向SW1发送针对Bundle1的Bundle添加消息,在Bundle添加消息中携带用于添加VM1的流表项的Openflow消息(记为Flow-Mod1),并在Bundle添加消息中携带Flow-Mod1的优先级,如前所述,VM1上部署的是普通业务,因此,Flow-Mod1的优先级为2。SW1接收Bundle添加消息后,将Bundle添加消息携带的Flow-Mod1添加到已创建的Bundle1中,并标记Flow-Mod1的优先级为2。同理,Controller针对每一个虚拟机的流表项发送Bundle添加消息,完成对应Flow-Mod消息的添加,记为Flow-Mod2~Flow-Mod100,并标记对应Flow-Mod消息的优先级。

Controller发送针对Bundle1的Bundle执行消息,SW1确认Bundle1支持优先级执行后,对Bundle1中标记了优先级的Flow-Mod消息按照Flow-Mod消息的优先级进行排序,优先执行高优先级的Flow-Mod消息。如前所述,VM31~VM70部署了服务端业务,对应Flow-Mod31~Flow-Mod70的优先级为3;VM1~VM30部署了普通业务,对应Flow-Mod1~Flow-Mod30的优先级为2;VM71~VM100部署了其它业务,对应Flow-Mod71~Flow-Mod100的优先级为1。因此,优先执行Flow-Mod31~Flow-Mod70,再执行Flow-Mod1~Flow-Mod30,最后执行Flow-Mod71~Flow-Mod100,即优先保证服务端业务对应流表项优先下发。

而现有技术中的Bundle机制按照Openflow消息添加到Bundle缓存中的先后顺序执行,若低优先级流表项的Openflow消息先添加到Bundle缓存中,则该低优先级流表项的Openflow消息先执行,该低优先级的流表项先下发到交换设备的硬件资源中,指导低优先级业务转发。若交换设备的硬件资源空间不足,后添加到Bundle缓存中的高优先级流表项的Openflow消息,在下发到硬件资源中时会覆盖已下发的低优先级流表项,造成已生效的低优先级业务中断。

而本发明的Bundle机制由于采用按照优先级从高到低的顺序执行Bundle缓存中的Openflow消息,因此,无论Openflow消息添加到Bundle缓存中的顺序如何,都优先执行高优先级的Openflow消息(本发明对携带高优先级流表项的Openflow消息设置高优先级),该高优先级流表项优先下发到交换设备的硬件资源中,指导高优先级业务转发。当交换设备的硬件资源空间不足时,后执行的低优先级的Openflow消息携带的是低优先级流表项,该低优先级流表项无法覆盖已下发的高优先级流表项,因此,不会中断当前正在运行的高优先级业务,提升了网络中业务的稳定性。

实施例二:

在某一时刻,SW1的端口S1从down变为up,Controller向SW1发送Bundle创建消息,SW1根据该Bundle创建消息创建Bundle1;Controller向SW1发送针对Bundle1的Bundle添加消息,在Bundle添加消息中携带用于下发虚拟机流表项的Flow-Mod消息,SW1将Flow-Mod消息添加到Bundle1中,具体描述可参见实例一,这里不再赘述。假设,Controller已通过Bundle添加消息在Bundle1中添加了Flow-Mod1~Flow-Mod60(对应VM1~VM60的流表项),此时,端口S1又从up变为down,则Controller针对已添加到Bundle1中的每一个Flow-Mod消息发送Bundle删除消息,在Bundle删除消息中携带已添加到Bundle1中的Flow-Mod消息的标识,例如,在Bundle删除消息中携带Flow-Mod1的标识,则SW1根据该标识删除Bundle1中的Flow-Mod1,同理,删除Bundle1中已添加的Flow-Mod2~Flow-Mod60。也就是说,在Controller向SW1发送Bundle执行消息之前,基于端口S1的变化,Controller可反复添加或删除Bundle1中的Flow-Mod消息。由于Bundle1中的Flow-Mod消息未真正执行,对应流表项未下发到硬件转发层面,因此,不会造成硬件转发层面流表项的频繁增删,更不会出现由于硬件流表项的删除导致大量Packet-in报文冲击控制器,在一定程度上,起到抑制链路震荡的作用。

与前述Openflow消息执行方法的实施例相对应,本发明还提供了Openflow消息执行装置的实施例。

本发明Openflow消息执行装置的实施例可以应用在交换设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器运行存储器中对应的计算机程序指令形成的。从硬件层面而言,如图3所示,为本发明Openflow消息执行装置所在设备的一种硬件结构图,除了图3所示的处理器以及非易失性存储器之外,实施例中装置所在的设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。

请参考图4,为本发明一个实施例中的Openflow消息执行装置的结构示意图。该Openflow消息执行装置包括标记单元401、排序单元402以及执行单元403,其中:

标记单元401,用于在接收到控制器发送的携带Openflow消息和Openflow消息的优先级的捆绑Bundle添加消息时,将所述Bundle添加消息携带的Openflow消息添加到所述Bundle添加消息对应的Bundle缓存中,并标记该添加的Openflow消息的优先级;

排序单元402,用于在接收到所述控制器发送的针对所述Bundle缓存的Bundle执行消息时,对所述Bundle缓存中标记了优先级的Openflow消息按照优先级进行排序;

执行单元403,用于按照排序后从高到低的优先级顺序执行所述Bundle缓存中标记了优先级的Openflow消息。

进一步地,

所述标记单元401在接收到控制器发送的携带Openflow消息和Openflow消息的优先级的Bundle添加消息之前,还用于当接收到所述控制器发送的携带优先级执行标记的Bundle创建消息时,本地创建Bundle缓存,并标记创建的Bundle缓存支持优先级执行;

所述排序单元402,具体用于若所述Bundle缓存支持优先级执行,则对所述Bundle缓存中标记了优先级的Openflow消息按照优先级进行排序。

进一步地,

所述执行单元403在按照排序后从高到低的优先级顺序执行所述Bundle缓存中标记了优先级的Openflow消息之后,还用于当所述Bundle缓存中还存在未标记优先级的Openflow消息时,对所述未标记优先级的Openflow消息按照添加到所述Bundle缓存中的先后顺序执行。

进一步地,所述装置还包括:

删除单元,用于接收所述控制器发送的对应所述Bundle缓存的Bundle删除消息,所述Bundle删除消息中携带要删除的Openflow消息的标识;根据所述Bundle删除消息携带的Openflow消息的标识,查询所述Bundle缓存中具有相同标识的Openflow消息进行删除。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

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

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