用于软件定义网络中的流管理的系统和方法

文档序号:7993905阅读:172来源:国知局
用于软件定义网络中的流管理的系统和方法
【专利摘要】本发明的一个实施例提供了中了一种用于促进交换机中的流定义管理的系统。在操作期间,该系统识别通用流定义,该通用流定义指定并非特定于该交换机的任何输入端口的流。该系统还在流查找数据结构中存储基于所述通用流定义的一个或多个端口特定流规则,其中每个端口特定流规则对应于能够处理数据流的相应端口。
【专利说明】用于软件定义网络中的流管理的系统和方法
【技术领域】
[0001]本公开内容涉及网络管理。更特定地,本公开内容涉及用于高效管理软件定义网络中的流定义的方法和系统。
【背景技术】
[0002]因特网的指数增长已经使其成为异质数据流的普及的运载介质。这种异质性已经造成对带宽的日益增长的需求。结果,设备供应商相竞构建具有多用途功能(诸如使用软件定义数据流)的更大且更快的交换机,从而高效地移动更多的流量。然而,交换机的复杂性不可能无限地增长。它受到诸如物理空间、功耗和设计复杂性等一些因素的限制。另外,具有更高和多用途功能的交换机通常更为复杂和昂贵。
[0003]软件定义流为数据通信网络中的新范式。任何支持软件定义流的网络可以称为软件定义网络。软件定义网络的示例可以是开放流网络,其中网络管理员可以配置交换机如何基于可跨过不同网络协议层而被定义的数据流而运作。软件定义网络分离了用于控制单独网络装置(例如,路由器和交换机)所需的智力并且将控制机制卸载到远程控制器装置(经常为单机服务器或终端设备)。因此,软件定义网络在管理网络中的数据流方面提供了完整的控制和灵活性。
[0004]尽管对软件定义流的支持给网络带来许多期望特征,但是在流定义的管理中一些问题仍未解决。例如,由于软件定义网络重新定义传统数据流管理,软件定义网络与当前网络架构的共存会是挑战性的。

【发明内容】

[0005]本发明的一个实施例提供一种用于促进交换机中的流定义管理的系统。在操作期间,该系统识别通用流定义,该通用流定义指定并非特定于交换机的任何输入端口的流。该系统还在流查找数据结构中存储基于通用流定义的一个或多个端口特定流规则,其中每个端口特定流规则对应于能够处理数据流的相应端口。
[0006]在此实施例的一个变型中,该系统包括内容可寻址存储器(CAM),其中流查找数据结构存储于该CAM中。
[0007]在此实施例的一个变型中,该系统包括流表,所述流表可配置成存储通用流定义与指示该通用流定义并非特定于任何输入端口的标记。
[0008]在此实施例的一个变型中,该交换机为具有开放流功能的交换机。
[0009]在此实施例的一个变型中,该系统维持用于能够处理数据流的相应端口的每端口链表。该链表中的节点指示用于适用于该端口的流定义的流标识符。另外,链表中的节点按照相应流定义的优先级顺序被排序。
[0010]在另一变型中,该系统存储一个或多个流定义与一个或多个相应流标识符在流表中。
[0011]在另一变型中,流表中的相应条目存储流定义。此外,该系统基于用于所述流定义的流标识符来计算散列值,并且使用该散列值作为该条目的索引。
[0012]在另一变型中,该系统更新流定义。在此更新中,该系统遍历用于与待更新的流定义关联的端口的每端口链表,以定位用于待更新的流定义的流标识符。此外,该系统确定优先级低于所定位的流标识符的一个或多个流标识符。该系统随后在流查找数据结构中改写与所确定的流标识符关联的流规则,由此在更新之后保留用于该端口的流规则的优先级顺序。
【专利附图】

【附图说明】
[0013]图1A图示根据本发明实施例的示例性软件定义网络。
[0014]图1B图示根据本发明实施例的软件定义网络中的示例性交换机。
[0015]图2图示根据本发明实施例的具有软件定义网络的通用流定义的每端口扩展的示例性流表。
[0016]图3图示根据本发明实施例的如何能够将图2中的流规则存储于CAM。
[0017]图4A图示根据本发明实施例的用于软件定义网络的流定义的示例性端口链。
[0018]图4B图示根据本发明实施例的与每端口链有关的通用流定义。
[0019]图5A给出的流程图图示了根据本发明实施例的初始化每端口链和相应流表的过程。
[0020]图5B给出的流程图图示了根据本发明实施例的使用流ID插入新流定义的过程。
[0021]图6给出的流程图图示了根据本发明实施例的软件定义网络中的交换机使用流标识符更新流定义的过程。
[0022]图7图示根据本发明实施例的软件定义网络中的示例性交换机。
[0023]在各图中,相似的附图标记指代相同的附图元件。
【具体实施方式】
[0024]给出以下描述以使得任何本领域技术人员均能够制作和利用本发明,并且该描述是在具体应用及其要求的上下文中提供的。本领域技术人员将容易想到对所公开实施例的各种更改,并且此处定义的一般原理可以应用于其它实施例和应用而不背离本发明的精神和范围。因而,本发明不局限于所示出的各实施例,而是符合与权利要求书一致的最宽范围。
[0025]概述
[0026]在本发明的实施例中,促进交换机中常规端口与支持软件定义流的端口的共存以及改进软件定义网络中更新流定义的效率的问题通过下述措施来解决:(I)将非端口特定(通用)流规则转换为一个或多个端口特定流规则;以及(2)提供指向流规则的指针的每端口链表,由此允许在每端口的基础上更新流定义。
[0027]通常,期望将软件定义网络中交换机的端口分为两个逻辑群组。一个逻辑群组支持传统包转发,而另一个群组支持基于软件定义流的转发。理想地,交换机应将阻止软件基流定义(诸如使用开放流的那些定义)进入预留用于传统包转发的端口。然而,利用现有技术,并未指定输入端口的流定义通常被应用到交换机的所有端口,而不管它是配置用于传统包转发还是用于软件定义流转发。因此,利用这种非端口特定(也称为“通用”)流定义,可能会出现错误转发决定。
[0028]现有软件定义网络架构面对的第二问题在于,用于整个交换机的流定义典型地按照优先级顺序被维持在单个链表中。当网络管理员需要更新规则定义(即添加、删除或改变)时,交换机需要遍历整个链表以识别该更新的位置。另外,由于流定义典型地存储于内容可寻址存储器(CAM),用于每个流定义的物理存储位置对应于定义的优先级。因此,如果流定义的优先级改变(或者如果它正被添加或删除),需要在CAM改写具有较低优先级的所有流定义,使得它们的新存储位置反应优先级顺序的改变。此更新机制的效率低,特别是当流定义的数目变得庞大时尤为如此。
[0029]此处描述的针对上述问题的解决方案具有两重性。第一,对于通用的非端口特定流定义,系统将此通用流定义转换为配置成执行软件定义流转发的、针对所有端口的一个或多个端口特定规则。结果,预留用于常规包转发的端口不再受制于该软件基流定义。第二,对于配置成执行软件定义流转发的每个端口,每端口的优先级-排序的链表存储指向仅仅与该端口关联的流定义的指针。因此,当流定义被添加、删除或更改时,系统只需要遍历每端口链表以CAM中定位需要改变的流定义。结果,与流定义更新关联的开销量可以显著地降低。
[0030]在本公开中,术语“软件定义网络”是指通过指定与流定义中的流关联的动作来促进对相应数据流的控制的网络。耦合到软件定义网络的控制器利用流定义在软件定义网络中提供相应交换机,该控制器可以是服务器。流定义可以包括优先级值,指定流的规则,以及针对流的动作(例如,转发端口或“丢弃”)。流定义的规则例如可以指定{输入端口,VLANID,MACSA,MACDA,以太网类型,IP SA,IP DA, IP协议,TCP源端口,TCP目的端口 }的十元组中的任何值组合。其它包报头字段也可以包括在流规则中。取决于其特异性,流规则可以对应于网络中的一个或多个流。一旦将相应包匹配到规则,软件定义网络中的交换机采取包括在相应流定义中的动作。软件定义网络的示例包括,但不限于,如在开放联网基金会(ONF)规范”开放流交换机规范”中所描述的开放流,所述规范可在http://www.0penflow.0rg/documents/openf low-spec-vl.1.0.pdf 获得,且其通过弓 I用被结合于此。
[0031]在本公开中,软件定义网络中的、能够处理软件定义流的交换机被称为“软件可定义的”交换机。这种软件可定义交换机可以包括处理软件定义流的端口,并且包括预留用于常规包转发(例如,层-2/以太网交换,或IP路由)的端口,这种端口在本公开中被称为“常规端口”。流定义典型地包括该定义可适用的一个或多个软件可定义输入端口。经由任何端口到达的任何流均可潜在地为所述通用流定义的匹配物。
[0032]在一些实施例中,软件定义网络为互联结构交换机(fabric switch)并且软件定义网络中的相应交换机为该互联结构交换机的成员交换机。该互联结构交换机可以是以太网互联结构交换机。在以太网互联结构交换机中,按照任意拓扑耦合的任何数目的交换机可以在逻辑上作为单个交换机操作。任何新交换机可以按照“即插即用”模式加入或离开该互联结构交换机,而不需要任何手动配置。对于终端设备而言,互联结构交换机看上去为单个逻辑交换机。
[0033]尽管使用基于开放流的示例给出本公开,本发明的实施例不限于网络定义开放流或具体开放系统互连参考模型(0SI参考模型)层。在本公开中,术语“软件定义网络”在通用含义中被使用,并且可以指代基于软件定义的规则而促进数据流的交换的任何网络。术语“流定义”也在通用含义中被使用,并且可以指代识别属于特定流的帧和/或指示交换机应如何处理该帧的任何规则。
[0034]术语“终端设备”可以指代主机,常规层-2交换机或任何其它类型的网络装置。附加地,终端设备可以耦合到远离网络的其它交换机或主机。终端设备也可以是许多网络装置进入该网络的聚集点。
[0035]术语“帧”指代可以跨过网络一起被传输的一组比特。“帧”不应解读为将本发明实施例限制到层-2网络。“帧”可以由指代一组比特的其它术语(诸如“包”、“单元”或“数据报”)来替代。
[0036]术语“交换机”在通用含义中被使用,并且它可以指代在任何网络层中操作的任何单独的或互联结构交换机。“交换机”不应解读为将本发明实施例限制到层-2网络。可以将流量转发到终端设备的任何装置均可以称为“交换机”。“交换机”的示例包括但不限于层-2交换机、层-3路由器、TRILL RBridge, FC路由器或FC交换机。
[0037]术语“以太网互联结构交换机”指代形成单个可扩展的逻辑交换机的许多互连的物理交换机。在互联结构交换机中,任何数目的交换机可以按照任意拓扑连接,并且整组交换机一起起到一个单个逻辑交换机的功能。此特征使得有可能使用许多更小的不昂贵的交换机来构造大的互联结构交换机,该互联结构交换机从外部可以被视为单个逻辑交换机。
[0038]网络和夺换机架构
[0039]如上所述,在软件定义网络中的交换机中,通用流定义可以应用到软件可定义端口或常规端口。结果,危及了软件可定义端口和常规端口之间的隔离,并且交换机可能不期望地基于通用流定义而转发常规流量。典型地,一旦从控制器接收到流定义,软件定义网络中的常规交换机使用单个数据结构(诸如主链表)来存储所有端口的所有流定义。在硬件(例如CAM)中,相应流规则典型地基于流定义的相应优先级被存储。当控制器发送指令给交换机以添加新流定义或更新(即删除或更改)现有流定义时,交换机添加、删除或更改主链表中的相应流定义。然而,要进行删除或更改,交换机搜寻整个主链表从而找到流定义。此外,由于流规则也基于相应优先级而存储于CAM(由于系统使用存储于CAM的流规则用于实时包处理),因此要添加或删除新流定义,交换机搜寻整个表从而找到该流定义的适当位置并且必须移动CAM中所有优先级低于所添加或删除的流定义的条目。另外,如果现有流定义的优先级改变,必须对CAM中所有受到影响的条目进行同样的位置移动。结果,在需要更改流定义时,交换机引发显著的改写开销,尽管所更改的流定义可能仅仅涉及所有软件可定义端口的子集。
[0040]为了解决此问题,软件定义网络中的交换机将通用流定义与交换机中的所有软件可定义端口关联,并且将多个端口特定流规则(对应于每个软件可定义端口)存储于CAM中。一旦从控制器接收到通用流定义,交换机识别交换机中的软件可定义端口,并且通过将相应端口索引插入到流规则的“输入端口 ”字段来创建用于相应软件可定义端口的流规则。以此方式,交换机将通用流定义扩展到对应于软件可定义端口的多个端口特定流规则。这种扩展保证常规端口与软件可定义端口的隔离。结果,交换机仅仅将流定义应用到软件定义的端口。
[0041 ] 交换机还创建每端口链表(也称为“每端口链”),所述每端口链表为与用于相应软件可定义端口的流定义(即,以该端口作为输入端口的流定义)对应的指针或标识符的列表。在一些实施例中,交换机创建用于每个流定义的流标识符(或流ID)。交换机将流定义以及其相应流标识符存储于表(在本公开中称为“流表”)中。交换机将给定端口的流定义的流标识符存储于相应每端口链中。换言之,每端口链中的每个链环为流ID。此外,相应每端口链基于每个链环的优先级(即相应流定义的优先级)被排序。因此,当流定义需要被更新时,交换机可以遍历所关联的端口的每端口链,沿着链识别优先级低于正被更新的流定义的流ID,并且在CAM中仅仅改写对应于那些受到影响的流ID的流规则。结果,交换机可以避免不必要地改写CAM中与受到影响的端口不相关的条目,并且因此避免用于那些未受到影响的端口的不必要的停工时间。另外,由于流定义存储于流表中,并且每个端口仅仅维持仅仅包括流ID的每端口链,如果流定义与多个输入端口关联(例如通用流定义),交换机可以只是在流表中存储通用定义与设置的”通用-流标记”一次,并且在多个每端口链中使用同一流ID。
[0042]在一些实施例中,流表为散列表并且流ID可以被用作散列关键字以生成散列值,该散列值随后被用作流表的索引从而映射到流定义。此外,由于每端口链基于流定义的优先级被排序,每个链在该链中的位置固有地携带了优先级信息。此外,对于对应于每端口链中的链环的流规则,这些流规则在CAM中的存储位置也按照相同优先级顺序排序。以此方式,当交换机针对进入的包执行CAM查找时,由CAM返回的查找结果自动地反应具有最高优先级的匹配流规则。注意,假定通用流定义已经被转换为用于单独端口的多个端口特定流规则,则存储于CAM的流规则全部是端口特定的。另外,取决于具体实现,更大或更小的数值优先级值可以对应于更高或更低的优先级。在一个实施例中,交换机不在流表中存储所扩展的通用流定义(即,多个端口特定流定义,每个端口特定流定义用于不同软件可定义端口)。相反,交换机仅仅在流表中存储通用流定义与设置的通用-流标记(以将通用流定义与其它端口特定定义区分开)一次,并且将相应流ID插入相应端口链。
[0043]图1A图示根据本发明实施例的示例性软件定义网络。异构软件定义网络100包括常规交换机101和104。还包括能够处理软件定义流的交换机102、103、105和106。交换机102、103、105和106为软件可定义交换机。控制器120逻辑耦合到网络100中的相应软件可定义交换机。注意,控制器120可以物理上耦合到交换机的仅仅一个子集。在此示例中,控制器120分别经由物理链接122和124而耦合到交换机103和106。终端设备112经由软件可定义交换机105而耦合到网络100。
[0044]软件可定义交换机102包括一个或多个软件可定义端口。交换机102使用其软件可定义端口来耦合其它软件可定义交换机103、105和106。类似地,软件可定义交换机103、105和106还使用它们的相应软件可定义端口来耦合其它软件可定义交换机。交换机102还包括耦合到常规交换机101和104的常规端口。在操作期间,控制器120将流定义发送到交换机102、103、104和105。交换机102接收流定义并且检查该流定义是否为通用流定义。如果是,经由任何端口到达交换机102的任何流可能潜在地为通用流定义的匹配物。
[0045]为了保证软件可定义端口和常规端口之间的隔离,并且避免基于通用流定义转发常规流量,在交换机102中基于通用流定义生成多个端口特定流规则,每个软件可定义端口一个端口特定流规则。在一些实施例中,交换机102通过将相应软件可定义端口作为输入端口添加到通用流定义而创建这些新的流规则。交换机102随后将通用流定义与设置的通用-流标记插入在本地流表中,并且将所生成的端口特定流规则写到其本地CAM。类似地,一旦接收到通用流定义,交换机103、105和106也将通用流定义与通用-流标记插入它们的相应本地流表中,并且将所生成的端口特定流规则存储于它们的相应CAM。交换机102、103、105和106因而总是将流定义应用到来自软件可定义端口的流,并且避免将该流定义应用到从常规端口接收到的流量。
[0046]在一些实施例中,网络100中的相应软件可定义交换机创建用于相应软件可定义端口的流定义的每端口链。例如,软件可定义交换机103创建用于耦合交换机102、105和106的软件可定义端口的每端口链。交换机103基于流定义的优先级对每端口链排序。当交换机103从控制器120接收流定义时,交换机103创建用于该流定义的流ID并且将流定义及其相应流ID存储于流表中。此外,交换机103将用于该端口的流定义的流ID存储于相应每端口链中。交换机103中的流表可以是散列表,其中流ID为用于在流表中定位相应流定义的散列关键字。类似地,软件可定义交换机102、105和106还将流定义存储于散列表中并且将相应流ID存储于本地每端口链中。
[0047]图1B图示根据本发明实施例的软件定义网络中的示例性交换机。在此示例中,软件可定义交换机105分别经由软件可定义端口 155、156和157而耦合到其它软件可定义交换机102、103和106。交换机105还包括常规端口 151、152和153,他们并并非软件可定义的,并且分别耦合常规交换机101和104以及终端设备112。在操作期间,控制器120将流定义发送到交换机105。如果流定义为通用流定义,交换机105通过基于通用流定义创建用于每个端口 155、156和157的端口特定流规则而扩展通用流定义。交换机105随后将通用流定义与设置的通用-流标记存储于流表160,并且将所生成的每端口流规则存储于CAM161。交换机105因而仅仅将通用流定义应用到经由端口 155、156和157进入的流。
[0048]另外,交换机105还分别创建用于端口 155、156和157的每端口链165、166和167。每端口链165、166和167基于与相应端口关联的流定义的优先级被排序。当交换机105从控制器120接收流定义(或者通用或端口特定)时,交换机105创建用于该流定义的流ID。交换机105将流定义和相应流ID存储于流表160中。交换机105随后按照排序的顺序将流ID插入相应每端口链。假设该流定义是用于端口 155。交换机105将流ID存储于每端口链165。如果该流定义为通用流定义,交换机105将流ID存储于每端口链165、166和167。以此方式,交换机105可以存储通用流定义仅仅一次。
[0049]在操作期间,交换机105经由端口 155从交换机102接收帧。交换机105提取帧的报头信息并且在CAM161中执行查找。存储端口特定流规则的CAM161返回指示具有最高优先级的匹配流定义的结果。注意,由于通用流定义在CAM161中被存储为多个端口特定流规则,通用流定义被自动地包括在CAM查找中。交换机105识别并且执行匹配流定义中指定的动作。
[0050]通用流定义扩展
[0051]在图1B的示例中,流表160可以包括对应于多个流定义的多个条目。图2图示了根据本发明实施例的具有软件定义网络的通用流定义的每端口扩展的示例性流表。在此示例中,交换机105的流表160中的每个条目包括下述字段:索引字段210、流ID字段212、流规则字段214、通用流定义标记字段214、动作字段216以及优先级字段218。携带其它流相关信息的附加字段也可以包括在该流表160中。
[0052]索引字段210存储每个条目(即流定义)的索引。在一个实施例中,给定条目的索引为用于相应流定义的流ID的散列值。流ID字段212存储用于给定条目的流ID。流规则字段214存储需要被匹配以识别具体流的特定报头字段值。流规则可以包括下述中的一种或多种:输入端口(in-port),层-2源地址,层_2目的地址,层_2帧类型,VLANID,层-3源地址,层-3目的地址,层_4(例如传输层)协议,层-4源地址以及层-4目的地址。
[0053]通用流定义标记字段214存储用于每个条目的一比特标记,以指示该流定义是否为适用于所有软件可定义端口的通用定义。动作字段216存储针对给定流将采取的动作,诸如输出端口(“out-port”)或“丢弃(drop)”。在一个实施例中,动作字段216可以存储指向“动作表”(未示出)的指针,该动作表含有描述流的更复杂操作的信息。优先级字段218存储与每个流定义关联的优先级值。
[0054]在此示例中,流定义251、252和253分别与由它们的相应流规则202、204和206的“输入端口”字段所指定的输入端口 155、157和156关联。如果帧的报头字段匹配于规则202、204或206中指定的内容,则交换机将该帧分别转发到每个流定义的动作字段中所指定的端口 157、156或155。
[0055]对于每个非通用流定义,正如其通用流定义标记214中的“O”所指示,相应流规则被存储于交换机的CAM以供线速查找。CAM中这些规则的位置在每端口基础上反应了它们的优先级顺序。
[0056]流表160还可以包括通用流定义254,其不在其相应流规则208中指定具体输入端口(如通配符所指示)。通用流定义254在动作字段216中指定输出端口 156。在一个实施例中,交换机105通过创建用于每个软件可定义端口(即端口 155、156和157)的新端口特定流规则,来扩展通用流定义254的流规则208。新创建的规则208-1、208-2和208-3每个分别指定端口 155、156和157作为它们的相应输入端口。交换机105随后基于针对每个输入端口的它们优先级顺序而将规则208-1、208-2和208-3存储于其CAM。注意,所扩展的规则208-1、208-2和208-3都从通用流定义254得到相同的优先级值(“19”)。假定较大的优先级值指示较高的优先级。因此,在CAM中,对于与输入端口 155关联的所有流规则,规则208-1(优先级19)存储在规则202 (优先级10)之前。然而,对于与输入端口156关联的所有流规则,规则208-2(优先级19)存储在规则206 (优先级23)后面。类似地,对于与输入端口 157关联的所有流规则,规则208-3 (优先级19)存储在规则204 (优先级37)后面。
[0057]图3图示了根据本发明实施例的可以如何将图2中的流规则存储于CAM中。在此示例中,CAM中的较低存储位置对应于流规则的较高的优先级。注意,并非整个流规则集合均按照严格优先级顺序存储。然而,对于所有与给定输入端口关联的规则,这些规则的存储位置保留它们的优先级顺序。例如,规则208-1存储在规则206下面,尽管规则208-1的优先级低于规则206的优先级。然而,规则208-1和规则206与不同输入端口关联,因此它们在CAM中的相对位置不影响查找(由于帧可能从一个输入端口到达并且因此可能仅仅匹配这两个规则其中之一)。然而,对于与同一输入端口关联的规则,例如规则208-1和规则202,它们在CAM中的相对位置保留它们的优先级顺序(即,规则208-1存储在规则202下面,因为规则208-1具有更高优先级)。用于每个输入端口的规则的优先级顺序由每端口链维持,这将在下文描述。
[0058]毎端口链[0059]如前所述,在常规交换机中,所有流规则基于交换机范围的优先级顺序而存储于CAM中。由于在添加、删除流规则或流规则改变其优先级时,CAM中优先级比所改变规则低的所有规则均需要被改写到新位置,所以这种配置导致大量开销。本发明的实施例通过使用每端口链而缓解这一问题,其中该每端口链为按照它们的优先级顺序排序的流ID的端口特定链表。这些每端口链跟踪用于具体端口的所有流规则的优先级顺序。当端口的流规则需要改变时,仅需在CAM中改写用于由每端口链指示的端口的优先级较低的那些规则。
[0060]图4A图示了根据本发明实施例的用于软件定义网络的流定义的示例性每端口链。在此示例中,交换机400中的流表450包括流定义451、452、453、454、455、456、457和458,其分别具有流 ID471、472、473、474、475、476、477 和 478 以及优先级值 403、404、408、409、411、412、421和438。注意,并未示出流表450的所有字段。
[0061]交换机400创建分别用于本地软件可定义端口 485、486和487的每端口链495、496和497。每端口链495包括分别基于相应流定义456、455、454和453的优先级值被排序的流ID476、475、474和473。类似地,每端口链496包括分别基于相应流定义457、454和452的优先级值被排序的流ID477、474和472。每端口链497包括分别基于相应流定义458、454和451的优先级值被排序的流ID478、474和471。
[0062]在操作期间,交换机400接收流定义(例如流定义455)的更新,该更新改变流定义的优先级。交换机400首先搜寻流表450以识别流定义455的流ID,该流ID为流ID475。交换机400随后识别出该流定义455与端口 485关联。作为应答,交换机400遍历每端口链495以识别流ID475的位置以及受该更新影响的流ID。在更新之后,每端口链495将具有新优先级顺序。交换机400随后在CAM中改写对应于受到影响的流ID的所有流规则。注意,CAM改写仅仅影响与端口 485关联的规则。因此,在这种规则更新期间,CAM可以保持针对未受到影响的端口功能。业务中断因此可以显著地降低。
[0063]图4B图示了根据本发明实施例的与每端口链有关的通用流定义。假定流定义454为通用流定义,相应流ID474被包括在每端口链495、496和497中。注意,如前文结合图2和3所述,流定义454对应于存储于CAM的多个端口特定流规则。当交换机需要更新流定义454时,系统首先确定流定义454为通用定义。系统随后遍历针对每个端口的每端口链,以识别受到影响的流ID,并且根据需要改写CAM中所有受到影响的流规则。
[0064]在图1B的示例中,交换机105首先初始化流表160中用于流定义的每端口链165、166和167。交换机105随后使用流表160以及每端口链165、166和167对流定义执行所需的操作(例如添加、删除和更新)。图5A给出的流程图图示了根据本发明实施例的初始化每端口链和相应流表的过程。在操作期间,交换机首先初始化用于流ID生成器的种子(操作502)。流ID生成器的示例包括但不限于随机数生成器以及有顺数生成器。
[0065]交换机随后识别交换机中的软件可定义端口(操作504)。在一些实施例中,网络管理员将交换机的端口的子集分配为软件可定义端口。例如,网络管理员可以针对端口的子集使能开放流从而将端口分配为软件可定义的。交换机随后创建用于相应软件可定义端口的每端口链(操作506)。每端口链可以是链表或双链表。交换机随后创建用于存储流定义的流表(操作508)。注意,交换机在流表中创建单独条目,以用于相应流定义。在一些实施例中,流表为散列表并且流ID可以被用作散列关键字。
[0066]图5B给出的流程图图示了根据本发明实施例的使用流ID插入新流定义的过程。在操作期间,交换机从控制器接收流定义(操作552)。交换机随后生成流ID (操作554)。此流ID对于交换机可以本地的。对于同一流定义,不同交换机可以具有不同本地流ID。交换机将流ID作为关键字应用到散列函数以生成散列值(操作556)。交换机随后将流定义与流ID存储为流表条目中的条目(操作558)。该散列值为此条目的索引。
[0067]接着,交换机检查流定义是否为通用流定义(操作562)。如果是,则交换机基于流定义的优先级将流ID插入与所有软件可定义端口关联的每端口链中(操作564)。此外,交换机将此通用流定义扩展到多个端口特定流规则。交换机随后将这些新规则存储于CAM中并且改写CAM中所有受到影响的规则(S卩,其位置受新规则影响的规则)(操作565)。如果流并非通用流定义,交换机识别与该流定义关联的输入端口(操作566)。交换机随后基于流定义的优先级将流ID插入交换机中与识别端口关联的每端口链(操作568)。接着,交换机将流规则写到CAM中,并且改写用于相应端口的所有受到影响的规则(操作569)。
[0068]图6给出的流程图图示根据本发明实施例的更新流定义的过程。更新流定义可以包括删除或更改流定义。在操作期间,交换机从控制器接收对现有流定义的更新(操作602)。作为应答,交换机识别与该流定义关联的(多个)端口(操作604)。如果流定义为通用流定义,则该流定义与交换机中的所有软件可定义端口关联。交换机还例如通过搜寻流表而识别与流定义关联的流ID(操作606)。交换机在与所识别的端口(多个)关联的每端口链(多个)中定位包括该流ID的链表节点(多个)(操作608)。
[0069]交换机随后检查更新类型(操作612)。如果更新类型为”删除”,交换机移除所定位的流表条目,从CAM中移除该流规则,并且在CAM中改写受到影响的流规则(在系统在操作608中遍历每端口链之后而识别出的流规则)(操作632)。交换机随后从相应每端口链移除链表节点(多个)(操作634)。
[0070]如果操作为”更改”,交换机更改识别流表条目(操作614)并且检查流定义的优先级是否被更改(操作616)。如果优先级被更改,交换机基于流定义的优先级值对相应每端口链(多个)进行重新排序(操作622)。交换机随后在CAM中改写受到影响的规则(基于在操作608中识别的受到影响的流ID)(操作624)。
[0071 ] 在一些实施例中,相应每端口链为双链表。交换机可以将指向流表条目的指针存储于相应每端口链中。交换机可以使用流ID(例如,散列流ID)从流表获得流定义并且在流表条目中使用存储于相应每端口链的指针而直接删除该流定义。由于相应每端口链为双链表,更加容易维持指针并且从每端口链删除流表条目,同时维持每端口链的健全。
[0072]示例性交换机
[0073]图7图示根据本发明实施例的软件定义网络中的示例性交换机。在此示例中,交换机700包括多个通信端口 702、流定义管理模块730、关联模块732、包处理器710和存储装置750。包处理器710还包括CAM711。通信端口 702中的一个或多个为软件可定义端口。这些软件可定义端口可以是开放流使能的。交换机700经由软件定义流接收软件定义的数据流。在操作期间,流定义管理模块730识别通用流定义。此通用流定义可以是从控制器接收的新流定义或者已经存储于本地流表中。流表可以存在于存储装置750中。关联模块732将通用流定义与交换机700的相应软件可定义端口关联,并且基于通用流定义而创建与相应软件可定义端口关联的新流定义。在一些实施例中,关联模块732可以将新流定义存储于流表中。[0074]在一些实施例中,交换机700包括流ID模块720、散列模块721、每端口链管理模块740和流表管理模块760。在操作期间,流ID模块720生成用于经由通信端口 702其中之一接收的流定义的流ID。此流定义可以与软件可定义端口关联。每端口链管理模块740创建用于相应软件可定义端口的每端口链。与软件可定义端口关联的每端口链的节点含有流ID。流表管理模块760将流定义和流ID存储于流表中的条目内。散列模块721基于流ID计算散列值并且使用散列值作为该条目的索引。每端口链管理模块740基于与流定义关联的优先级值对每端口链进行排序。如果流定义被更改(例如更新或删除),每端口链管理模块740阻止流表管理模块760对与此软件可定义端口不关联的流定义排序。
[0075]—旦经由软件可定义端口接收到帧,包处理器710检查所接收的帧与流定义是否匹配。流表管理模块760使用流定义的流ID来识别与软件可定义端口关联的流表条目。此流表可以是散列表并且流表管理模块760可以使用流ID作为散列关键字(多个)进行重新排序从而找到该流表条目。如果交换机700配备有每端口链管理模块740,当流定义管理模块730识别出通用流定义时,每端口链管理模块740将包括通用流的流ID的表节点插入交换机700中的相应每端口链中。
[0076]在一些实施例中,交换机700可以维持互联结构交换机中的成员资格。交换机700在存储装置750中维持配置数据库,该配置数据库维持互联结构交换机中相应交换机的配置状态。交换机700维持用于联结其它交换机的互联结构交换机的状态。在这种场景下,通信端口 702可以包括用于互联结构交换机内通信的交换机间通信信道。此交换机间通信信道可以经由常规通信端口并且基于任何开放或专用格式来实施。
[0077]注意,上述模块可以在硬件中实施,也可以在软件中实施。在一个实施例中,这些模块可以实施于计算机可执行的指令,所述计算机可执行指令存储于耦合到交换机700中的一个或多个处理器的存储器。这些指令在被执行时致使处理器(多个)执行前述功能。
[0078]概而言之,本发明的实施例提供了一种交换机以及一种用于高效管理软件定义网络中的流定义的方法。在一个实施例中,交换机包括一个或多个软件可定义端口,流定义管理模块以及关联模块。软件可定义端口可以接收软件定义的数据流。在操作期间,流定义管理模块识别软件定义网络的通用流定义。通用流定义未与交换机的进入端口关联。关联模块将通用流定义与交换机的相应软件可定义端口关联。
[0079]此处描述的方法和过程可以实施为代码和/或数据,所述代码和/或数据可以存储于计算机可读取的非瞬时性存储介质中。当计算机系统读取和执行存储在计算机可读取的非瞬时性存储介质上的该代码和/或数据时,计算机系统执行实施为数据结构和代码并且存储在该介质内的所述方法和过程。
[0080]此处描述的方法和过程可以由硬件模块或设备执行和/或包括在其中。这些模块或设备可以包括但不限于专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)、在特定时间执行特定软件模块或代码片段的专用或共享处理器,和/或现在已知或以后开发的其它可编程逻辑装置。当该硬件模块或设备被启动时,它们执行包括在它们之中的方法和过程。
[0081]仅仅是出于图示和说明的目的而给出对本发明实施例的前述描述。它们并非旨在穷举或者限制本公开内容。因此,本领域技术人员将容易想到许多修改和变型。本发明的范围将由所附权利要求书定义。
【权利要求】
1.一种交换机,包括: 流定义管理模块,所述流定义管理模块可配置成识别通用流定义,所述通用流定义指定并非特定于所述交换机的任何输入端口的流;以及 流查找数据结构,所述流查找数据结构可配置成存储基于所述通用流定义的一个或多个端口特定流规则,其中每个端口特定流规则对应于能够处理数据流的相应端口。
2.根据权利要求1所述的交换机,还包括内容可寻址存储器(CAM),其中所述流查找数据结构存储于所述CAM中。
3.根据权利要求1所述的交换机,还包括流表,所述流表可配置成存储所述通用流定义与指示所述通用流定义并非特定于任何输入端口的标记。
4.根据权利要求1所述的交换机,其中所述交换机为具有开放流功能的交换机。
5.根据权利要求1所述的交换机,还包括用于能够处理数据流的相应端口的每端口链表; 其中所述链表中的节点指示用于适用于所述端口的流定义的流标识符;以及 其中所述链表中的节点按照相应流定义的优先级顺序被排序。
6.根据权利要求5 所述的交换机,还包括流表,所述流表可配置成存储一个或多个流定义与一个或多个相应流标识符。
7.根据权利要求6所述的交换机,其中所述流表中的相应条目存储流定义; 其中所述交换机还包括散列计算模块,所述散列计算模块可配置成基于用于所述流定义的所述流标识符来计算散列值;以及 其中所述散列值被用作所述条目的索引。
8.根据权利要求6所述的交换机,还包括流定义更新模块,所述流定义更新模块可配置成更新流定义;以及 其中在更新所述流定义时,所述流定义更新模块可配置成: 遍历用于与待更新的所述流定义关联的端口的每端口链表,以定位用于待更新的所述流定义的流标识符; 确定优先级低于所定位的所述流标识符的一个或多个流标识符;以及 在所述流查找数据结构中改写与所确定的所述流标识符关联的所述流规则,由此在更新之后保留用于所述端口的所述流规则的所述优先级顺序。
9.一种方法,包括: 识别通用流定义,所述通用流定义指定并非特定于交换机的任何输入端口的流;以及 在流查找数据结构中存储基于所述通用流定义的一个或多个端口特定流规则,其中每个端口特定流规则对应于能够处理数据流的相应端口。
10.根据权利要求9所述的方法,其中所述流查找数据结构存储于CAM中。
11.根据权利要求9所述的方法,还包括在流表中存储所述通用流定义与指示所述通用流定义并非特定于任何输入端口的标记。
12.根据权利要求9所述的方法,其中所述交换机为具有开放流功能的交换机。
13.根据权利要求9所述的方法,还包括维持用于能够处理数据流的相应端口的每端口链表; 其中所述链表中的节点指示用于适用于所述端口的流定义的流标识符;以及其中所述链表中的节点按照相应流定义的所述优先级顺序被排序。
14.根据权利要求13所述的方法,还包括在流表中存储一个或多个流定义与一个或多个相应流标识符。
15.根据权利要求14所述的方法,其中所述流表中的相应条目存储流定义; 其中所述方法还包括基于用于所述流定义的所述流标识符,计算散列值;以及 其中所述散列值被用作所述条目的索引。
16.根据权利要求14所述的方法,还包括通过下述操作来更新流定义: 遍历用于与待更新的所述流定义关联的端口的每端口链表,以定位用于待更新的所述流定义的流标识符; 确定优先级低于所定位的所述流标识符的一个或多个流标识符;以及 在所述流查找数据结构中改写与所确定的流标识符关联的流规则,由此在所述更新之后保留用于所述端口的所述流规则的所述优先级顺序。
17.一种交换机装置,包括: 流定义管理装置,其用于识别通用流定义,该通用流定义指定并非特定于该交换机的任何输入端口的流;以及 流查找装置,其用于基于所述通用流定义存储一个或多个端口特定流规则,其中每个端口特定流规则对应于能够处理数据流的相应端口。
18.根据权利要求17所述的交换机装置,还包括: 每端口链表装置,其用于存储用于能够处理数据流的相应端口的流标识符。
19.根据权利要求17所述的交换机装置,还包括流表装置,其用于存储所述通用流定义与指示所述通用流定义并非特定于任何输入端口的标记。
20.根据权利要求17所述的交换机装置,还包括流定义更新装置,所述流定义更新装置用于更新流定义。
【文档编号】H04L12/741GK104012052SQ201280064571
【公开日】2014年8月27日 申请日期:2012年11月8日 优先权日:2011年11月10日
【发明者】K·T·阿南萨帕德玛纳布哈, V·阿加瓦尔, E·S·P·钦萨拉帕蒂 申请人:博科通讯系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1