SDN中的流表发送方法及OpenFlow控制器与流程

文档序号:12623704阅读:658来源:国知局
本发明实施例涉及网络技术,尤其涉及一种SDN中的流表发送方法及OpenFlow控制器。
背景技术
::软件定义网络(SoftwareDefinedNetworking,SDN)的特征在于将网络的控制平面与数据平面相分离,SDN网络的一个典型代表是开放流(OpenFlow)网络。OpenFlow将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机和OpenFlow控制器来共同完成,从而实现了数据转发和控制的分离。在SDN中,当数据流的第一个数据包到达交换机时,交换机将其以一种packet-in的形式转发给OpenFlow控制器,OpenFlow控制器根据数据流的信息为该数据流选择合适的转发路径,并将流表下发到转发路径上的所有OpenFlow交换机。目前SDN中采用最多的流表发送方法是“从后向前”的发送方法。图1是现有技术中的一种在软件定义网络SDN中流表发送方法示意图。如图1所示,C表示OpenFlow控制器,S1,S2和S3为3台支持SDN的OpenFlow交换机。假设C为该数据流确定的转发路径为S1→S2→S3,为了建立该路径,C按照“从后向前”的顺序下发流表,假设C处理每个流表下发任务需要耗费1个时间单元,C在时刻0给S3发送流表,在时刻1给S2下发流表,在时刻2给S1下发流表,C与S3之间的链路时延为1个时间单元,C与S2之间的链路时延为5个时间单元,C与S1之间的链路时延为1个时间单元,因此,S3在时刻1接收并建立完流表项,S2在时刻6接收并建立完流表项,S1在时刻3接收并建立完流表项,其中,每个OpenFlow交换机接收到流表项到建立流表项的时间忽略,S1在时刻3将等待的数据流发送给S2,而S2在时刻6才能建立完流表项,因此,数据流无法在S2处得到及时处理。由上可知,现有技术中流表发送按照从后向前的发送策略,流建立延迟较长,其中,流建立延迟是指第一个数据包发出,到该数据包经过所有的OpenFlow交换机到达终点的时间。技术实现要素:本发明实施例提供一种SDN中的流表发送方法及OpenFlow控制器,可以解决数据流在某个交换机处等待建立流表而得不到及时处理的技术问题,降低数据流建立延迟。第一方面,本发明实施例提供一种SDN中的流表发送方法,所述SDN中包括开放流OpenFlow控制器以及多个用于转发数据流的OpenFlow交换机,所述方法由所述SDN网络中的OpenFlow控制器执行,所述方法包括:根据所述OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向所述各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,其中,FlowMod消息有多个,FlowMod消息用于向OpenFlow交换机发送流表项;根据各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序;根据确定的所述各FlowMod消息的发送顺序,分别向所述多个OpenFlow交换机发送FlowMod消息。结合第一方面,在第一方面的第一种可能的实现方式中,所述根据所述OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及所述多个OpenFlow交换机之间的链路时延,分别计算待向所述各OpenFlow交换机发送的FlowMod消息的紧急程度包括:分别根据E(α)=Max[(E(β)+dcβ),dcβ]+dβα-dcα计算获得待向所述各OpenFlow交换机发送的FlowMod消息的紧急程度,其中,E(α)用于表示向OpenFlow交换机α发送的FlowMod消息紧急程度,E(β)用于表示向OpenFlow交换机α的上一跳OpenFlow交换机β发送的FlowMod消息的紧急程度,dcβ用于表示所述OpenFlow控制器与所述OpenFlow交换机β的链路时延,dβα用于表示所述OpenFlow交换机β到所述OpenFlow交换机α的链路时延,dcα用于表示所述OpenFlow控制器与所述OpenFlow交换机α的链路时延,E(β)+dcβ用于表示所述数据流从第一个OpenFlow交换机开始到达所述OpenFlow交换机β的最早时间,Max[E(β)+dcβ,dcβ]用于表示所述OpenFlow交换机β开始转发所述数 据流的最早时间。结合第一方面,第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序包括:按照所述各FlowMod消息的紧急程度由高到低的顺序确定所述各FlowMod消息的发送顺序。结合第一方面,第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,当所述待转发的数据流为至少两条数据流时,所述根据计算的各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序,包括:根据计算的至少两条数据流的各FlowMod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列,所述全局调度队列用于确定所述各FlowMod消息的发送顺序。结合第一方面的第三种可能的实现方式,在第一方面第四种可能的实现方式中,所述根据计算的至少两条数据流的各FlowMod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列,包括:将所述至少两条数据流的FlowMod消息排列成第一队列,其中,在所述第一队列中,所述各FlowMod消息按照其所属的数据流的优先级从高到低的顺序排列,且属于同一优先级的数据流中的FlowMod消息按照紧急程度从高到低的顺序排列,同一个数据流中的所述各FlowMod消息的优先级相同;创建初始全局调度队列,所述初始全局调度队列为空队列;将所述第一队列中的所述至少两条数据流的FlowMod消息依次分别插入所述初始全局调度队列以获得所述全局调度队列。结合第一方面的第四种可能的实现方式,在第一方面第五种可能的实现方式中,所述将所述第一队列中的所述至少两条数据流的FlowMod消息依次分别插入所述初始全局调度队列以获得所述全局调度队列包括:对所述第一队列中的每一个FlowMod消息分别执行如下操作直到将所述第一队列中的所有FlowMod消息依次插入所述初始全局调度队列为止:遍历所述初始全局调度队列,将第一FlowMod消息插入第一个紧急程度值大于所述第一FlowMod消息的紧急程度值的FlowMod消息之前,其中,FlowMod消息的紧急程度值越大该FlowMod消息的紧急程度越低,其中,所述第一FlowMod消息为所述第一队列中的任意一个FlowMod消息;更新插入所述 第一FlowMod消息后的初始全局调度队列中的FlowMod消息的紧急程度值。结合第一方面的第五种可能的实现方式,在第一方面第六种可能的实现方式中,所述更新插入所述第一FlowMod消息后的初始全局调度队列中的FlowMod消息的紧急程度值包括:若所述第一FlowMod消息对应的OpenFlow交换机为所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则将所述初始全局调度队列中排在所述第一FlowMod消息之前的所有FlowMod消息的紧急程度值更新为最低值,并将所述全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值;或若所述第一FlowMod消息对应的OpenFlow交换机不是所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则根据所述初始全局调度队列中已插入的第二FlowMod消息与所述第一FlowMod消息之间的所有数据流的FlowMod消息的个数降低所述第一FlowMod消息的紧急程度值,并将所述初始全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值,其中,所述第二FlowMod消息与所述第一FlowMod消息属于同一个数据流,且所述第二FlowMod消息为所述第一FlowMod消息所属的数据流中已插入所述初始全局调度队列中的第一个FlowMod消息。第二方面,本发明实施例还提供一种开放流OpenFlow控制器,包括:计算模块,用于根据所述OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向所述各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,其中,FlowMod消息有多个,FlowMod消息用于向OpenFlow交换机发送流表项;处理模块,用于根据各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序;发送模块,用于根据确定的所述各FlowMod消息的发送顺序,分别向所述多个OpenFlow交换机发送FlowMod消息。结合第二方面,在第二方面的第一种可能的实现方式中,所述计算模块具体用于分别根据E(α)=Max[(E(β)+dcβ),dcβ]+dβα-dcα计算获得待向所述各OpenFlow交换机发送的FlowMod消息的紧急程度,其中,E(α)用于表示向 OpenFlow交换机α发送的FlowMod消息紧急程度,E(β)用于表示向OpenFlow交换机α的上一跳OpenFlow交换机β发送的FlowMod消息的紧急程度,dcβ用于表示所述OpenFlow控制器与所述OpenFlow交换机β的链路时延,dβα用于表示所述OpenFlow交换机β到所述OpenFlow交换机α的链路时延,dcα用于表示所述OpenFlow控制器与所述OpenFlow交换机α的链路时延,E(β)+dcβ用于表示所述数据流从第一个OpenFlow交换机开始到达所述OpenFlow交换机β的最早时间,Max[E(β)+dcβ,dcβ]用于表示所述OpenFlow交换机β开始转发所述数据流的最早时间。结合第二方面,第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述处理模块具体用于按照所述各FlowMod消息的紧急程度由高到低的顺序确定所述各FlowMod消息的发送顺序。结合第二方面,第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,当所述待转发的数据流为至少两条数据流时,所述处理模块具体用于根据计算的至少两条数据流的各FlowMod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列,所述全局调度队列用于确定所述各FlowMod消息的发送顺序。结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述处理模块具体用于将所述至少两条数据流的FlowMod消息排列成第一队列,其中,在所述第一队列中,所述各FlowMod消息按照其所属的数据流的优先级从高到低的顺序排列,且属于同一优先级的数据流中的FlowMod消息按照紧急程度从高到低的顺序排列,同一个数据流中的所述各FlowMod消息的优先级相同;创建初始全局调度队列,所述初始全局调度队列为空队列;将所述第一队列中的所述至少两条数据流的FlowMod消息依次分别插入所述初始全局调度队列以获得所述全局调度队列。结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述处理模块具体用于:对所述第一队列中的每一个FlowMod消息分别执行如下操作直到将所述第一队列中的所有FlowMod消息依次插入所述初始全局调度队列为止:遍历所述初始全局调度队列,将第一FlowMod消息插入第一个紧急程度值大于所述第一FlowMod消息的紧急程度值的FlowMod消息之前,其中,FlowMod 消息的紧急程度值越大该FlowMod消息的紧急程度越低,其中,所述第一FlowMod消息为所述第一队列中的任意一个FlowMod消息;更新插入所述第一FlowMod消息后的初始全局调度队列中的FlowMod消息的紧急程度值。结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述处理模块具体用于:若所述第一FlowMod消息对应的OpenFlow交换机为所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则将所述初始全局调度队列中排在所述第一FlowMod消息之前的所有FlowMod消息的紧急程度值更新为最低值,并将所述全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值;或若所述第一FlowMod消息对应的OpenFlow交换机不是所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则根据所述初始全局调度队列中已插入的第二FlowMod消息与所述第一FlowMod消息之间的所有数据流的FlowMod消息的个数降低所述第一FlowMod消息的紧急程度值,并将所述初始全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值,其中,所述第二FlowMod消息与所述第一FlowMod消息属于同一个数据流,且所述第二FlowMod消息为所述第一FlowMod消息所属的数据流中已插入所述初始全局调度队列中的第一个FlowMod消息。本发明实施例提供的一种SDN中的流表发送方法及OpenFlow控制器,通过OpenFlow控制器与各OpenFlow交换机之间的链路时延以及多个OpenFlow交换机之间的链路时延,分别计算待向各OpenFlow交换机发送的FlowMod消息的紧急程度,根据各FlowMod消息的紧急程度确定各FlowMod消息的发送顺序,根据确定的各FlowMod消息的发送顺序,分别向多个OpenFlow交换机发送FlowMod消息,从而解决了数据流在某个交换机处等待建立流表而得不到及时处理的技术问题,降低了数据流建立延迟。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实 施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例的附图。图1为现有技术中的一种在软件定义网络SDN中流表发送方法的示意图;图2为本发明实施例提供的一种SDN中的流表发送方法的流程图;图3为本发明实施例提供的又一种SDN中的流表发送方法中的全局调度队列获取方法的流程图;图4为本发明实施例提供的又一种SDN中的流表发送方法中的全局调度队列获取方法的流程图;图5为本发明实施例提供的又一种SDN流表发送方法示意图;图6为本发明实施例提供的一种SDN中的OpenFlow控制器的结构示意图;图7为本发明实施例提供的又一种SDN中的OpenFlow控制器的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。本发明实施例提供的方法应用于软件定义网络(SoftwareDefinedNetworking,SDN)中,其典型代表是OpenFlow网络,该网络包括OpenFlow控制器和OpenFlow交换机,OpenFlow交换机主要由流表,安全通道以及OpenFlow协议三部分组成。OpenFlow控制器的作用就是对网络中的数据包进行路由选择,并且将流表下发到路径上的OpenFlow交换机。其中,一个OpenFlow交换机可以包含一个或多个流表,流表由多个流表项组成,每个流表项就是一个转发规则。流表的维护是通过OpenFlow控制器下发相应的OpenFlow消息来实现,本发明实施例中以FlowMod消息为例,FlowMod消息为OpenFlow消息的一种消息类型,由OpenFlow控制器下发给OpenFlow交换机,FlowMod消息用于向OpenFlow交换机发送流表项。在SDN网络中,当数据流的数据包到达OpenFlow交换机时,OpenFlow 交换机将其以一种packet-in的形式转发给OpenFlow控制器,OpenFlow控制器根据其所包含的信息,为该数据流选择合适的传输路径,并将流表下发到路径上的各OpenFlow交换机。其中,packet-in消息是OpenFlow协议中的一种消息类型,用于OpenFlow交换机将packet以及产生这个消息的原因发送给OpenFlow控制器。在本发明实施例中,消息产生的原因是流表缺失。图2为本发明实施例提供的一种SDN中的流表发送方法的流程图。如图2所示,软件定义网络SDN中包括开放流OpenFlow控制器以及多个用于转发数据流的OpenFlow交换机,所述方法由所述SDN网络中的OpenFlow控制器执行。本实施例的方法可以包括:步骤101:根据OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,其中,FlowMod消息有多个,FlowMod消息用于向OpenFlow交换机发送流表项。本步骤中,OpenFlow控制器收到某个数据流的packet-in消息后,为该数据流选择合适的传输路径,并将流表下发到路径上的各OpenFlow交换机,具体的,本实施例将流修改FlowMod消息下发到路径上的各OpenFlow交换机,其中,FlowMod消息有多个,FlowMod消息用于向OpenFlow交换机发送流表项。本步骤中按照FlowMod消息的紧急程度发送FlowMod消息,具体获取FlowMod消息的紧急程度的方法为,根据OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,该紧急程度可以自己定义。其中,OpenFlow控制器与各OpenFlow交换机之间的链路时延以及多个OpenFlow交换机之间的链路时延由SDN网络决定。步骤102:根据各FlowMod消息的紧急程度确定各FlowMod消息的发送顺序。本步骤中,根据上一步计算的各个FlowMod消息的紧急程度,确定各FlowMod消息的发送顺序。默认的按照先发送紧急程度高的FlowMod消息。步骤103:根据确定的各FlowMod消息的发送顺序,分别向多个OpenFlow交换机发送FlowMod消息。在本步骤中,OpenFlow控制器根据上一步确定的各FlowMod消息的发送顺序分别向多个OpenFlow交换机发送FlowMod消息。本实施例的SDN中的流表发送方法,通过根据OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,根据计算的FlowMod消息的紧急程度发送FlowMod消息,从而有效解决了数据流在路径上的某个OpenFlow交换机处等待建立流表而得不到及时处理的技术问题,降低了数据流的建立延迟。进一步地,所述根据所述OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及所述多个OpenFlow交换机之间的链路时延,分别计算待向所述各OpenFlow交换机发送的FlowMod消息的紧急程度包括:分别根据E(α)=Max[(E(β)+dcβ),dcβ]+dβα-dcα计算获得待向所述各OpenFlow交换机发送的FlowMod消息的紧急程度,其中,E(α)用于表示向OpenFlow交换机α发送的FlowMod消息紧急程度,E(β)用于表示向OpenFlow交换机α的上一跳OpenFlow交换机β发送的FlowMod消息的紧急程度,dcβ用于表示所述OpenFlow控制器与所述OpenFlow交换机β的链路时延,dβα用于表示所述OpenFlow交换机β到所述OpenFlow交换机α的链路时延,dcα用于表示所述OpenFlow控制器与所述OpenFlow交换机α的链路时延,E(β)+dcβ用于表示所述数据流从第一个OpenFlow交换机开始到达所述OpenFlow交换机β的最早时间,Max[E(β)+dcβ,dcβ]用于表示所述OpenFlow交换机β开始转发所述数据流的最早时间。上述各FlowMod消息的紧急程度的定义如下:E(emergency)=数据流到达OpenFlow交换机的预期时间-数据流的FlowMod消息通路延迟。例如,数据流到达OpenFlow交换机的预期时间是3个时间单位后,而数据流的FlowMod消息通路延迟为1个时间单位,那么该消息的紧急程度为2,即其必须在2个时间单位内发出,才能保证数据流的顺利通过。其中“数据流到达OpenFlow交换机的预期时间”是从OpenFlow控制器完成路由计算开始,按照“从前到后”的顺序建立路由,并假设路径上所有OpenFlow交换机都不发生tablemiss的情况。例如,如图1所示,OpenFlow控制器计算完成路径后,首先给S1下发FlowMod消息。那么,数据流预期到达S2的时间即为2(dc1+d12)。又因为dc2=5, 所以其紧急程度为-3。下面我们使用数学的方式给紧急程度作更严格的定义:1、如果当前OpenFlow交换机为路径上的第一个OpenFlow交换机,则E=0。2、否则,假设当前OpenFlow交换机为α,上一跳OpenFlow交换机为β,那么当前OpenFlow交换机的紧急程度E(α)=Max[(E(β)+dcβ),dcβ]+dβα-dcα。其中E(β)+dcβ表示数据流到达β的最早时间,Max[E(β)+dcβ,dcβ]表示OpenFlow交换机β开始转发数据流的最早时间。进一步地,当所述待转发的数据流为一条数据流时,所述根据各FlowMod消息的紧急程度确定各FlowMod消息的发送顺序,包括:按照所述各FlowMod消息的紧急程度由高到低的顺序确定各FlowMod消息的发送顺序。具体的,若当前SDN网络中存在一条待转发的数据流时,根据计算得到的各FlowMod消息的紧急程度,对各FlowMod消息按照紧急程度从高到低进行排序,排序结果确定为FlowMod消息的发送顺序。进一步地,当所述待转发的数据流为至少两条数据流时,根据所述各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序,包括:根据计算的至少两条数据流的各FlowMod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列,所述全局调度队列用于确定所述各FlowMod消息的发送顺序。具体的,当存在多条数据流时,根据各FlowMod消息所在数据流的优先级和各FlowMod消息的紧急程度,获取全局调度队列中,该全局调度队列确定了各FlowMod消息的发送顺序,全局调度队列用来存储FlowMod消息的队列,此处可以为循环队列,使队列空间能重复使用。本实施例的SDN中的流表发送方法,根据计算的至少两条数据流的各FlowMod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列,根据全局调度队列中各FlowMod消息的顺序发送FlowMod消息,从而可以在不影响高优先级数据流的情况下可以将低优先级数据流尽早发送出去,并有效降低数据流的建立延迟。图3为本发明实施例提供的又一种SDN中的流表发送方法中的全局调度队列获取方法流程图,如图3所示,上述根据计算的至少两条数据流的各Flow Mod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列包括:步骤201:将至少两条数据流的FlowMod消息排列成第一队列,其中,在第一队列中,各FlowMod消息按照其所属的数据流的优先级从高到低的顺序排列,且属于同一优先级的数据流中的FlowMod消息按照紧急程度从高到低的顺序排列,同一个数据流中的各FlowMod消息的优先级相同;步骤202:创建初始全局调度队列,初始全局调度队列为空队列;在本步骤中,创建全局调度队列可以采用数组实现,也可以采用链表实现,此处不做限制,创建完成后,初始化队列为空,以便于执行插入FlowMod消息操作。步骤203:将第一队列中的所述至少两条数据流的FlowMod消息依次分别插入初始全局调度队列以获得全局调度队列。本实施例的SDN中的流表发送方法,通过创建并获取用于确定FlowMod消息发送顺序的全局调度队列,从而可以在不影响高优先级数据流的情况下可以将低优先级数据流尽早发送出去,并有效降低流建立延迟。图4为本发明实施例提供的又一种SDN中的流表发送方法中的全局调度队列获取方法流程图。实际应用中,在图3中的步骤203中,OpenFlow控制器在获取至少两条数据流的多个FlowMod消息的发送顺序的过程中可以采用如图4所示的方法。具体的,OpenFlow控制器可以对所述第一队列中的每一个FlowMod消息分别执行如下操作直到将所述第一队列中的所有FlowMod消息依次插入所述初始全局调度队列为止:步骤301:遍历初始全局调度队列,将第一FlowMod消息插入第一个紧急程度值大于第一FlowMod消息的紧急程度值的FlowMod消息之前,其中,FlowMod消息的紧急程度值越大该FlowMod消息的紧急程度越低,其中,第一FlowMod消息为所述第一队列中的任意一个FlowMod消息;步骤302:更新插入第一FlowMod消息后的初始全局调度队列中的FlowMod消息的紧急程度值。本实施例的SDN中的流表发送方法,通过将FlowMod消息依次分别插入初始全局调度队列来获得所述全局调度队列,从而可以在不影响高优先级数据流的情况下可以将低优先级数据流尽早发送出去,并有效降低数据流的 建立延迟。进一步地,上述步骤302中更新插入所述第一FlowMod消息后的初始全局调度队列中的FlowMod消息的紧急程度值包括:若所述第一FlowMod消息对应的OpenFlow交换机为所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则将所述初始全局调度队列中排在所述第一FlowMod消息之前的所有FlowMod消息的紧急程度值更新为最低值,并将所述全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值;或若所述第一FlowMod消息对应的OpenFlow交换机不是所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则根据所述初始全局调度队列中已插入的第二FlowMod消息与所述第一FlowMod消息之间的所有数据流的FlowMod消息的个数降低所述第一FlowMod消息的紧急程度值,并将所述初始全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值,其中,所述第二FlowMod消息与所述第一FlowMod消息属于同一个数据流,且所述第二FlowMod消息为所述第一FlowMod消息所属的数据流中已插入所述初始全局调度队列中的第一个FlowMod消息。其中,FlowMod消息对应的OpenFlow交换机为接收OpenFlow控制器发送的对应FlowMod消息的OpenFlow交换机,例如图1中FlowMod1,FlowMod2,FlowMod3消息分别对应的OpenFlow交换机为S1,S2,S3。上述的最低值、预设值此处不做限制,可以设定最低值为0,预设值为1。当最低值为0,预设值为1时,具体更新方法如下:1、若当前插入的FlowMod消息对应的OpenFlow交换机为路径上的第一个OpenFlow交换机,那么该FlowMod消息之前的所有FlowMod消息的紧急程度值更新为0。2、否则,当FlowMod遇到自身数据流的第一个FlowMod消息开始,每向后移动一个位置,紧急程度值减1。3、对于插入新FlowMod消息导致的所有向后移动的FlowMod消息,其紧急程度值减1。图5为本发明实施例提供的又一种SDN流表发送方法示意图,图5以三 条数据流为例进行说明。具体过程如下:网络中存在三条数据流:Fa,Fb,Fc。其中Fa的优先级高于Fb,Fb的优先级高于Fc。OpenFlow控制器同时收到这三条数据流的packetin消息,并为每条数据流确定了路由路径。对于Fa,路径为S1→S2→S3,FlowMod消息为FlowMod1,FlowMod2,FlowMod3。对于Fb,路径为S4→S5→S6,FlowMod消息为FlowMod4,FlowMod5,FlowMod6。对于Fc,路径为S7→S8→S9,FlowMod消息为FlowMod7,FlowMod8,FlowMod9。网络状态如图中链路上的标示所示。1、首先为每个FlowMod消息计算紧急程度:对于FlowMod1,因为OpenFlow交换机S1为路径上的第一个OpenFlow交换机,所以E(FlowMod1)=0;对于FlowMod2,E(FlowMod2)=dc1+d12-dc2=1+1-5=-3;对于FlowMod3,E(FlowMod3)=Max[(E(FlowMod2)+dc2),dc2]+d23-dc3=MAX(2,5)+1-1=5;对于FlowMod4,因为OpenFlow交换机S4为路径上的第一个OpenFlow交换机,所以E(FlowMod4)=0;对于FlowMod5,E(FlowMod5)=dc4+d45-dc5=10+1-2=9;对于FlowMod6,E(FlowMod6)=Max[(E(FlowMod5)+dc5),dc5]+d56-dc6=MAX(11,2)+4-1=14;对于FlowMod7,因为OpenFlow交换机S7为路径上的第一个OpenFlow交换机,所以E(FlowMod7)=0;对于FlowMod8,E(FlowMod8)=dc7+d78-dc8=1+2-5=-2;对于FlowMod9,E(FlowMod9)=Max[(E(FlowMod8)+dc8),dc8]+d89-dc9=MAX(3,5)+3-10=-2。2、针对每个数据流,对FlowMod消息排序:对于Fa,FlowMod2→FlowMod1→FlowMod3;对于Fb,FlowMod4→FlowMod5→FlowMod6;对于Fc,FlowMod9→FlowMod8→FlowMod7;3、将FlowMod消息插入全局调度队列:首先插入FlowMod2(-3),括号内为该消息当前的紧急程度值,其中,Flow Mod消息的紧急程度值越大该FlowMod消息的紧急程度越低。因为,在插入FlowMod2之前,全局队列为空,所以此时创建初始全局调度队列;插入FlowMod1:遍历初始全局调度队列,找到第一个紧急程度值大于其自身紧急程度值的消息,并将FlowMod1插入该消息之前。因为当前队列中所有消息(只有FlowMod2)的紧急程度值都不大于FlowMod1的紧急程度值0,所以FlowMod1被插入队尾。当前队列为FlowMod2→FlowMod1;更新队列中消息的紧急程度值。因为FlowMod1对应的OpenFlow交换机为路径上的第一OpenFlow交换机,所以FlowMod1之前的所有消息将紧急程度值更新为0,即FlowMod2的紧急程度值更新为0。此时,队列为FlowMod2(0)→FlowMod1(0);插入FlowMod3:同样FlowMod3被插入队尾。因为FlowMod3不是头OpenFlow交换机的消息,所以其在找到自身数据流的第一消息(FlowMod2)开始,每向后遍历一个消息,其紧急程度值减1。所以最终的队列为FlowMod2(0)→FlowMod1(0)→FlowMod3(3);插入FlowMod4:找到第一个紧急程度值大于0的消息FlowMod3,并插入其前方。并且因为FlowMod3向后移动一位,所以紧急程度值减1。此时队列为FlowMod2(0)→FlowMod1(0)→FlowMod4(0)→FlowMod3(2);插入FlowMod5:E(FlowMod5)初始值为9,遍历到FlowMod4时,更新为8;因为仍然大于FlowMod3的紧急程度值,所以继续后移,并更新为7。此时队列为FlowMod2(0)→FlowMod1(0)→FlowMod4(0)→FlowMod3(2)→FlowMod5(7);插入FlowMod6:原理同上,最终队列为FlowMod2(0)→FlowMod1(0)→FlowMod4(0)→FlowMod3(2)→FlowMod5(7)→FlowMod6(11);插入FlowMod9:原理同上,最终队列为FlowMod2(0)→FlowMod1(0)→FlowMod4(0)→FlowMod9(-2)→FlowMod3(1)→FlowMod5(6)→FlowMod6(10);插入FlowMod8:原理同上,最终队列为FlowMod2(0)→FlowMod1(0)→FlowMod4(0)→FlowMod9(-2)→FlowMod8(-3)→FlowMod3(0)→FlowMod5(5)→FlowMod6(9);插入FlowMod7:原理同上,最终队列为FlowMod2(0)→Flow Mod1(0)→FlowMod4(0)→FlowMod9(0)→FlowMod8(0)→FlowMod3(0)→FlowMod7(0)→FlowMod5(4)→FlowMod6(8);按照上述全局调度队列发送FlowMod消息,最终每个数据流的建立时间为:Fa:6,Fb:17,Fc:13。如果按照现有方案从后到前发送FlowMod消息的顺序来操作,那么每个数据流的建立时间为:Fa:7,Fb:20,Fc:16。本实施例的流表发送方法,通过基于FlowMod消息的优先级和紧急程度的两级调度机制,以及FlowMod消息插入全局调度队列的方法和执行插入步骤后更新每个FlowMod消息紧急程度的方法,流的建立时间可以获得显著优化。当流的数据增多后,优化的效果将会更明显。图6为本发明实施例提供的一种SDN中的OpenFlow控制器的结构示意图。如图6所示,该OpenFlow控制器包括:计算模块11,用于根据所述OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向所述各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,其中,FlowMod消息有多个,FlowMod消息用于向OpenFlow交换机发送流表项;处理模块12,用于根据各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序;发送模块13,用于根据确定的所述各FlowMod消息的发送顺序,分别向所述多个OpenFlow交换机发送FlowMod消息。本实施例的OpenFlow控制器,计算模块根据OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,处理模块根据各FlowMod消息的紧急程度确定各FlowMod消息的发送顺序,发送模块根据确定的FlowMod消息的发送顺序发送FlowMod消息,从而解决了数据流在某个OpenFlow交换机处等待建立流表而得不到及时处理的技术问题,降低了数据流建立延迟。可选地,所述计算模块具体用于分别根据E(α)=Max[(E(β)+dcβ),dcβ]+dβα-dcα计算获得待向所述各OpenFlow交换机发送的FlowMod消息的紧急程度,其中,E(α)用于表示向OpenFlow交换机α发送的FlowMod消息紧急程度,E(β)用于表示向OpenFlow交换机α的上一跳 OpenFlow交换机β发送的FlowMod消息的紧急程度,dcβ用于表示所述OpenFlow控制器与所述OpenFlow交换机β的链路时延,dβα用于表示所述OpenFlow交换机β到所述OpenFlow交换机α的链路时延,dcα用于表示所述OpenFlow控制器与所述OpenFlow交换机α的链路时延,E(β)+dcβ用于表示所述数据流从第一个OpenFlow交换机开始到达所述OpenFlow交换机β的最早时间,Max[E(β)+dcβ,dcβ]用于表示所述OpenFlow交换机β开始转发所述数据流的最早时间。进一步地,所述处理模块具体用于按照所述各FlowMod消息的紧急程度由高到低的顺序确定所述各FlowMod消息的发送顺序。进一步地,当所述待转发的数据流为至少两条数据流时,所述处理模块具体用于根据计算的至少两条数据流的各FlowMod消息的紧急程度以及所述至少两条数据流的优先级获取全局调度队列,所述全局调度队列用于确定所述各FlowMod消息的发送顺序。进一步地,所述处理模块具体用于将所述至少两条数据流的FlowMod消息排列成第一队列,其中,在所述第一队列中,所述各FlowMod消息按照其所属的数据流的优先级从高到低的顺序排列,且属于同一优先级的数据流中的FlowMod消息按照紧急程度从高到低的顺序排列,同一个数据流中的所述各FlowMod消息的优先级相同;创建初始全局调度队列,所述初始全局调度队列为空队列;将所述第一队列中的所述至少两条数据流的FlowMod消息依次分别插入所述初始全局调度队列以获得所述全局调度队列。本实施例提供的OpenFlow控制器,可以用于执行上述本发明提供的方法实施例,其实现原理和技术效果类似,此处不再赘述。进一步地,所述处理模块具体用于对所述第一队列中的每一个FlowMod消息分别执行如下操作直到将所述第一队列中的所有FlowMod消息依次插入所述初始全局调度队列为止:遍历所述初始全局调度队列,将第一FlowMod消息插入第一个紧急程度值大于所述第一FlowMod消息的紧急程度值的FlowMod消息之前,其中,FlowMod消息的紧急程度值越大该FlowMod消息的紧急程度越低,其中,所述第一FlowMod消息为所述第一队列中的任意一个FlowMod消息;更新插入所述第一FlowMod消息后的初始全局调度队列中的FlowMod消息的紧急程度值。本实施例提供的OpenFlow控制器,可以用于执行前述本发明实施例提供的SDN中的流表发送方法的技术方案,其实现原理和技术效果类似,此处不再赘述。进一步地,所述处理模块具体用于若所述第一FlowMod消息对应的OpenFlow交换机为所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则将所述初始全局调度队列中排在所述第一FlowMod消息之前的所有FlowMod消息的紧急程度值更新为最低值,并将所述全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值;或若所述第一FlowMod消息对应的OpenFlow交换机不是所述第一FlowMod消息所属的数据流的转发路径上的第一个OpenFlow交换机,则根据所述初始全局调度队列中已插入的第二FlowMod消息与所述第一FlowMod消息之间的所有数据流的FlowMod消息的个数降低所述第一FlowMod消息的紧急程度值,其中,所述第二FlowMod消息与所述第一FlowMod消息属于同一个数据流,并将所述初始全局调度队列中位于所述第一FlowMod消息之后的所有FlowMod消息的紧急程度值降低预设值,且所述第二FlowMod消息为所述第一FlowMod消息所属的数据流中已插入所述初始全局调度队列中的第一个FlowMod消息。图7为本发明实施例提供的又一种SDN中的OpenFlow控制器的结构示意图,所述SDN中的OpenFlow控制器1400包括通信接口1401、存储器1403和处理器1402,其中,通信接口1401、处理器1402、存储器1403、通过总线1404相互连接;总线1404可以是外设部件互连标准(peripheralcomponentinterconnect,简称PCI)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。所述通信接口1401用于与OpenFlow交换机通信。存储器1403,用于存放程序。具体地,程序可以包括程序代码,所述程 序代码包括计算机操作指令。存储器1403可能包含随机存取存储器(randomaccessmemory,简称RAM),也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。处理器1402,用于执行存储器1403所存放的程序,实现本发明前述方法实施例的方法:包括:所述SDN中包括开放流OpenFlow控制器以及多个用于转发数据流的OpenFlow交换机,所述方法由所述SDN网络中的OpenFlow控制器执行,所述方法包括:根据所述OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及所述多个OpenFlow交换机之间的链路时延,分别计算待向所述各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,其中,FlowMod消息有多个,FlowMod消息用于向OpenFlow交换机发送流表项;根据各FlowMod消息的紧急程度确定所述各FlowMod消息的发送顺序;根据确定的所述各FlowMod消息的发送顺序,分别向所述多个OpenFlow交换机发送FlowMod消息。、上述的处理器1402可以是通用处理器,包括中央处理器(CentralProcessingUnit,简称CPU)、网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。本实施例的OpenFlow控制器,计算模块根据OpenFlow控制器与各OpenFlow交换机之间的链路时延,以及多个OpenFlow交换机之间的链路时延,分别计算待向各OpenFlow交换机发送的流修改FlowMod消息的紧急程度,处理模块根据各FlowMod消息的紧急程度确定各FlowMod消息的发送顺序,发送模块根据确定的FlowMod消息的发送顺序发送FlowMod消息,从而解决了数据流在某个OpenFlow交换机处等待建立流表而得不到及时处理的技术问题,降低了数据流建立延迟。本发明实施例还提供一种数据处理的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储 介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-AccessMemory,RAM)、固态硬盘(SolidStateDisk,SSD)或者非易失性存储器(non-volatilememory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求书以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1