一种基于子流表分割的流表存储优化方法及装置与流程

文档序号:11410852阅读:203来源:国知局
一种基于子流表分割的流表存储优化方法及装置与流程
本发明涉及软件定义网络领域,尤其涉及一种基于子流表分割的流表存储优化方法及装置。
背景技术
:软件定义网络定义了一种控制平面与数据平面解耦合的新型网络架构,网络转发设备中的控制功能被移除出来,成为简单的转发单元。控制平面和数据平面之间通过标准化的接口进行交互,通常,将该接口称为南向接口。openflow协议就是一种在软件定义网络中被广泛接受的南向接口。控制器和网络转发设备之间采用openflow协议进行交互,控制器将规则下发到转发设备中,转发设备将其存储到流表中,一条规则对应流表中的一个表项,然后转发设备通过查询流表匹配字段,根据指令完成对数据包的动作,包括丢弃、转发和将数据包发送到控制器等。如图1所示,openflow流表存储在内存中。由于功能扩展,随着openflow版本的演进,openflow流表中的匹配字段不断增加,同时也增加了流表的复杂度。流表大小急剧增加,流表的存储成为一个亟需解决的问题。现有方案中,将流表根据匹配字段的共存关系和冲突关系分割成数张子流表。设d={fi|1≤i≤d}表示流表t中的一条流表项ri的d个匹配字段。那么,共存关系定义如下:coe={(fi,fj)|fi∈d,fj∈d,如果fi存在,则fj必然存在,如果fi不存在则fj也不存在}例如openflow定义的匹配字段ip_src和ip_dst,tcp_src和tcp_dst都是共存关系。冲突关系定义为:col={(fi,fj)|fi∈d,fj∈d,fi与fj不能同时存在}例如tcp_src和udp_src就是互斥关系。根据冲突关系与共存关系,对流表进行初始分割,直至子流表数大于等于限定阈值k,并将初始流表中的表项添加到子流表中存储。在流表更新的过程中,如果子流表中的表项条数超出限定阈值n,则对子流表进行分割操作。如果子流表的个数超过限定阈值k,则对子流表进行合并操作。在整个过程中,没有考虑表项之间的优先级与依赖关系,尽管节省了存储空间,但增加了查找匹配的时间开销。技术实现要素:为解决上述技术问题,本发明实施例提供了一种基于子流表分割的流表存储优化方法及装置。本发明实施例提供的基于子流表分割的流表存储优化方法,包括:根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量;合并相同的流类别向量,并统计出各个流类别向量对应的权重;根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,所述最优流类别向量集合覆盖所述流表中的所有匹配字段;根据所述最优流类别向量集合以及表项依赖图谱进行子流表分割,将所述表项划分到所述子流表中进行存储。本发明实施例中,所述根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量,包括:建立流类别向量,所述流类别向量包括所述流表中的所有匹配字段;针对每一个表项,当所述表项中的匹配字段为空,则将所述流类别向量中对应的匹配字段设置为第一值;当所述表项中的匹配字段不为空,则将所述流类别向量中对应的匹配字段设置为第二值,所述第一值与所述第二值不同。本发明实施例中,所述合并相同的流类别向量,并统计出各个流类别向量对应的权重,包括:合并相同的流类别向量,将合并成同一流类别向量的数目作为该流类别向量对应的权重。本发明实施例中,所述根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,包括:合并相同的流类别向量,建立流类别向量矩阵建立流类别矩阵;从所述流类别矩阵中提取任意k个流类别向量,得到多组流类别向量集合;所述流类别向量集合能够覆盖流表中的所有匹配字段;k小于等于所有的流类别向量数目;从所述多组流类别向量集合中,选择权重最大的一组流类别向量集合作为最优流类别向量集合。本发明实施例中,所述表项依赖图谱包括如下信息:表项的优先级信息和表项之间的依赖关系。本发明实施例中,所述方法还包括:计算得到表项依赖图谱;根据所述表项依赖图谱,将具有依赖关系的表项存储到同一子流表中;或者,对所述表项依赖图谱进行更新,将新下发的表项存储到对应的子流表中。本发明实施例提供的基于子流表分割的流表存储优化装置,包括:确定单元,用于根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量;合并单元,用于合并相同的流类别向量,并统计出各个流类别向量对应的权重;选择单元,用于根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,所述最优流类别向量集合覆盖所述流表中的所有匹配字段;分割存储单元,用于根据所述最优流类别向量集合以及表项依赖图谱进行子流表分割,将所述表项划分到所述子流表中进行存储。本发明实施例中,所述确定单元,还用于建立流类别向量,所述流类别向量包括所述流表中的所有匹配字段;针对每一个表项,当所述表项中的匹配字段为空,则将所述流类别向量中对应的匹配字段设置为第一值;当所述表项中的匹配字段不为空,则将所述流类别向量中对应的匹配字段设置为第二值,所述第一值与所述第二值不同。本发明实施例中,所述合并单元,还用于合并相同的流类别向量,将合并成同一流类别向量的数目作为该流类别向量对应的权重。本发明实施例中,所述选择单元,还用于根据所有的流类别向量,合并相同的流类别向量,建立流类别向量矩阵;从所述流类别矩阵中提取任意k个流类别向量,得到多组流类别向量集合;所述流类别向量集合能够覆盖流表中的所有匹配字段;k小于等于所有的流类别向量数目;从所述多组流类别向量集合中,选择权重最大的一组流类别向量集合作为最优流类别向量集合。本发明实施例中,所述表项依赖图谱包括如下信息:表项的优先级信息和表项之间的依赖关系。本发明实施例中,所述装置还包括:更新单元,用于计算得到表项依赖图谱;根据所述表项依赖图谱,将具有依赖关系的表项存储到同一子流表中;或者,对所述表项依赖图谱进行更新,将新下发的表项存储到对应的子流表中。本发明实施例的技术方案中,根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量;合并相同的流类别向量,并统计出各个流类别向量对应的权重;根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,所述最优流类别向量集合覆盖所述流表中的所有匹配字段;根据所述最优流类别向量集合以及表项依赖图谱进行子流表分割,将所述表项划分到所述子流表中进行存储。此外,流表更新时,计算得到表项依赖图谱;根据所述表项依赖图谱,将具有依赖关系的表项存储到同一子流表中;或者,对所述表项依赖图谱进行更新,将新下发的表项存储到对应的子流表中。可见,本发明实施例引入流表表项的流类别向量,然后将一张流表分割成数张子流表,从而降低各个流表的维度,达到压缩流表存储空间的目的。本发明实施例还充分考虑了流表分割及表项更新所要考虑的流表表项的优先级及依赖性关系问题。通过本发明实施例的方案,可以有效地压缩流表存储空间,并提高流表的查找匹配效率。附图说明图1为软件定义网络中网络转发设备架构;图2为本发明实施例的基于子流表分割的流表存储优化方法的流程示意图;图3为流表t及其流类别矩;图4为流类别权重表;图5为表1流表的流规则间的依赖关系;图6为本发明实施例提供的基于子流表分割的流表存储优化装置的结构组成示意图。具体实施方式为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。本发明实施例中,引入流类别向量α={f1,f2,...,fk},其中,f1到fk为流表t中的所有匹配字段。对于一条流表项ri,如果fi不为空,那么将fi置为1,反之置为0。例如一张流表的匹配字段为{eth_src,eth_src,ip_src,ip_dst,tcp_src,tcp_dst}。那么二层交换的以太网分组的匹配字段只需包含二层的信息,其流类别向量可以表示为{1,1,0,0,0,0},三层路由的流类别向量表示为{0,0,1,1,0,0}。合并相同的流类别向量,生成流类别向量矩阵g,并引入流类别权重的概念,根据权重,选取一个最优的包含k个流类别向量的集合set,该集合能够覆盖流表中的所有匹配字段。以set为依据将分割为k个子流表。在流表分割过程中,由于表项之间优先级不同,且每条表项之间存在一定的关联性,即流表是许多规则集合的集合,一个规则集合是一些相互依赖的流表项的集合。引入表项的依赖图谱,将相互依赖的表项存储到同一子流表中。当新增表项时,首先更新依赖图谱,再将新的表项存储到对应的子流表。这样做可以提高表项匹配的速度,提高执行效率。此外,在流表表项更新过程中,当子流表中的表项条数超出限定阈值n,则对子流表进行分割。本发明实施例提出了一种基于子流表分割的流表存储优化方法,即引入流表表项的流类别向量,将一张流表分割成数张子流表,从而降低各个流表的维度,达到压缩流表存储空间的目的。本发明实施例还充分考虑了流表分割及表项更新所要考虑的流表表项的优先级及依赖性关系问题。通过对本发明实施例的实施,可以有效地压缩流表存储空间,并提高流表的查找匹配效率。本发明实施例的方案以openflow1.3为基准。图2为本发明实施例的基于子流表分割的流表存储优化方法的流程示意图,如图2所示,所述基于子流表分割的流表存储优化方法包括以下步骤:步骤201:根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量。本发明实施例中,所述根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量,包括:建立流类别向量,所述流类别向量包括所述流表中的所有匹配字段;针对每一个表项,当所述表项中的匹配字段为空,则将所述流类别向量中对应的匹配字段设置为第一值;当所述表项中的匹配字段不为空,则将所述流类别向量中对应的匹配字段设置为第二值,所述第一值与所述第二值不同。具体地,设流表t={ri|1≤i≤n},引入表项的流类别向量α={f1,f2,…,fk}(k≤40,openflow1.3中包含40个匹配字段,其中,13个为必选字段,27个为可选字段),其中f1到fk为t中所包含的匹配字段。那么对于一条流而言,若其某个匹配字段fi不为空,那么将fi置为1,反之将fi置为0。例如假设流表所有匹配字段为{eth_src,eth_src,ip_src,ip_dst,tcp_src,tcp_dst}。那么二层交换的以太网分组的匹配字段只需包含二层的信息,其流类别向量可以表示为{1,1,0,0,0,0},三层路由的流类别向量表示为{0,0,1,1,0,0}。而对于acl而言,若其要过滤掉所有的http请求,那么四层的流规则设置为{tcp_dst=80,action:drop}即可,其流类别向量为{0,0,0,0,0,1}。由于只有f=1的匹配字段才携带有效的信息。因此,可以利用流表分割的方式,将不同流类别的表项划分到不同的子流表中存储。步骤202:合并相同的流类别向量,并统计出各个流类别向量对应的权重;根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,所述最优流类别向量集合覆盖所述流表中的所有匹配字段。本发明实施例中,所述合并相同的流类别向量,并统计出各个流类别向量对应的权重,包括:合并相同的流类别向量,将合并成同一流类别向量的数目作为该流类别向量对应的权重。本发明实施例中,所述根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,包括:根据所有的流类别向量,合并相同的流类别向量,建立流类别向量矩阵;从所述流类别矩阵中提取任意k个流类别向量,得到多组流类别向量集合;所述流类别向量集合能够覆盖流表中的所有匹配字段;k小于等于所有的流类别向量数目;从所述多组流类别向量集合中,选择权重最大的一组流类别向量集合作为最优流类别向量集合。具体地,如图3所示,流表中的序号index=1的表项r的流类别向量为α1={1,1,0,0,0}。遍历流表t的n个表项,获取流表的类型矩阵g,那么流表t的所有流类别可以表示为:g=[α1,α2,...,αm]t(其中m≤n)那么对于图3中的流表t而言,可以看到index=1的流和index=3的流的流类别相同,它们均可以用α1来表示,其流类别矩阵g=[α1,α2,α3,α4]t,如图3所示。设每个流类别向量的权重w的初始值均为0,然后遍历流表t,每遇到一个流类别向量为αi的流,那么αi的权重就加1,当遍历流表t结束时就可以得到一个流类别向量所对应的权重表,例如图4所示。从流类别矩阵g中取出k个流类别向量的所有set,并从中选取权重最大的set作为最优set。set={α1,α2,...,αk}(其中k≤m)集合set中的所有的流类别需要能够覆盖流表t的所有的匹配字段并满足以下条件:流类别矩阵g中除了set所包含的流类别向量外,剩余的流类别向量都可以被set中的流表类型包含。其数学表示为:步骤203:根据所述最优流类别向量集合以及表项依赖图谱进行子流表分割,将所述表项划分到所述子流表中进行存储。本发明实施例中,所述表项依赖图谱包括如下信息:表项的优先级信息和表项之间的依赖关系。本发明实施例中,所述方法还包括:计算得到表项依赖图谱;根据所述表项依赖图谱,将具有依赖关系的表项存储到同一子流表中;或者,对所述表项依赖图谱进行更新,将新下发的表项存储到对应的子流表中。具体地,为了方便讨论,本提案中把表项的更新分为两个阶段,第一个阶段是网络设备初始化时,openflow控制器为了减少和交换机交互的流量而预先将一张流表下发到openflow交换机中。本提案讨论如何将流表中的表项添加到各个已经分割好的子流表中。第二个阶段是交换机收到新的流请求而查询不到匹配表项时与控制器交互,然后控制器将新的表项下发到openflow交换机。由于流表的组织结构对控制器是透明的,控制器下发的无疑是符合流表存储结构的表项,如何将该流表项更新到子流表中也是要讨论的问题。openflow流表的表项ra和rb间的依赖关系d(ra,rb)定义为:即存在一个分组被ra,rb匹配,但优先级在priority(ra)和priority(rb)之间的表项均不匹配该分组。那么表项ra的依赖集合d(ra),即为对d(ra)中的任意表项r而言,d(ra,r)均成立。d(ra)={r|(r∈t)∧d(ra,r)}因此,一张流表可以用依赖集合图来表示。以表1的流表为例。rulematchactionr10000forwardport1r211**forwardport2r3000*forwardport3r41*1*forwardport4r50**0forwardport5r610*1droppacket表1由上述依赖关系的定义可知,表1中,r1,r3和r5组成相互依赖的规则集合,而r2,r4和r6组成另外一个规则集合。表项依赖图可以表示为图5所示。由图5可知,依赖图谱是个无环图。采用这个方法,表项的更新就变得很简明,在第一阶段openflow交换机初始化预装流表时,可以计算得到流表的依赖关系图谱。然后将相互依赖的表项存储到同一子流表中。而第二阶段的表项的实时更新,首先对依赖图谱进行更新,然后再将新下发的表项存储到对应的子流表。此外,当某个子流表的表项个数大于其门限值n,则对其进行分割,以进一步压缩存储空间。如果子流表的流类别向量只有一种,那么构造一个匹配字段一致的新子流表,然后从此往后将新更新的此类流表项都添加到其中。但是,如果子流表包含多种类型的流表项,那么就按照前述的思路分割子流表。图6为本发明实施例提供的基于子流表分割的流表存储优化装置的结构组成示意图,如图6所示,所述装置包括:确定单元61,用于根据流表中的匹配字段是否为空,确定所述流表中各个表项的流类别向量;合并单元62,用于合并相同的流类别向量,并统计出各个流类别向量对应的权重;选择单元63,用于根据各个流类别向量对应的权重,从所有流类别向量中选择一组最优流类别向量集合,所述最优流类别向量集合覆盖所述流表中的所有匹配字段;分割存储单元64,用于根据所述最优流类别向量集合以及表项依赖图谱进行子流表分割,将所述表项划分到所述子流表中进行存储。本发明实施例中,所述确定单元61,还用于建立流类别向量,所述流类别向量包括所述流表中的所有匹配字段;针对每一个表项,当所述表项中的匹配字段为空,则将所述流类别向量中对应的匹配字段设置为第一值;当所述表项中的匹配字段不为空,则将所述流类别向量中对应的匹配字段设置为第二值,所述第一值与所述第二值不同。本发明实施例中,所述合并单元62,还用于合并相同的流类别向量,将合并成同一流类别向量的数目作为该流类别向量对应的权重。本发明实施例中,所述选择单元63,还用于根据所有的流类别向量,合并相同的流类别向量,建立流类别向量矩阵;从所述流类别矩阵中提取任意k个流类别向量,得到多组流类别向量集合;所述流类别向量集合能够覆盖流表中的所有匹配字段;k小于等于所有的流类别向量数目;从所述多组流类别向量集合中,选择权重最大的一组流类别向量集合作为最优流类别向量集合。本发明实施例中,所述表项依赖图谱包括如下信息:表项的优先级信息和表项之间的依赖关系。本发明实施例中,所述装置还包括:更新单元65,用于计算得到表项依赖图谱;根据所述表项依赖图谱,将具有依赖关系的表项存储到同一子流表中;或者,对所述表项依赖图谱进行更新,将新下发的表项存储到对应的子流表中。本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。在本发明所提供的几个实施例中,应该理解到,所揭露的方法和智能设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。另外,在本发明各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1