检测软件定义网络(SDN)中的控制平面循环的机制的制作方法

文档序号:15742643发布日期:2018-10-23 22:33阅读:268来源:国知局
本发明的实施例涉及软件定义网络(SDN)领域,并且更具体地,涉及检测SDN网络中的控制平面循环。
背景技术
::软件定义网络(SDN)是一种采用分离式架构网络的计算机联网方法,其中转发(数据)平面与控制平面相分离。分离式架构网络的使用通过将网络的智力转移到监视交换机的一个或多个控制器中来简化实现转发平面的网络设备(例如,交换机)。SDN通过提供可编程网络基础设施来促进网络层的快速开放式创新。开放流(OpenFlow)是一种协议,它使SDN网络中的控制器和交换机能够相互通信。开放流支持对网络中的流量控制策略进行动态编程。开放流交换机向控制器发送数据包输入(Packet-In)消息,以将对数据包的控制转移到控制器。开放流交换机可能出于各种原因决定将对数据包的控制转移到控制器,所述原因如无效的生存时间(TTL)或处理数据包的匹配流条目的不可用性。控制器向交换机发送数据包输出(Packet-Out)消息,以指示交换机如何处理对数据包的进一步处理。数据包输出消息可以指示交换机通过开放流管道处理数据包,将数据包发送给特定组,或者在特定端口上输出数据包。数据包输出消息包含指定交换机应如何处理数据包的动作列表。所述动作列表可以包括例如数据包修改动作、组处理动作、以及指示交换机向特定端口输出数据包的输出动作。所述动作列表可以包括对OFPP_TABLE保留端口的输出动作,该动作指示交换机从第一个流表开始通过开放流管道(pipeline)处理数据包。在一些情况下,作为匹配流条目、表错失(tablemiss)或组桶(groupbucket)动作的结果,发送到OFPP_TABLE保留端口的数据包可能被转发回控制器(例如,作为数据包输入消息)。数据包输入消息和数据包输出消息的不正确使用可以创建控制平面循环,其中数据包在被发送到网络的数据路径中之后继续返回控制器。对于SDN网络,控制平面循环可能比数据平面循环更危险。通常,数据平面循环仅影响网络的一部分。然而,控制平面循环消耗控制器的宝贵的处理资源,这可能阻塞控制器并使整个SDN网络不可用。技术实现要素:一种由担当软件定义网络SDN中的控制器的网络设备执行的方法。所述方法检测SDN网络中的控制路径循环。所述方法包括从交换机接收数据包输入消息,其中所述数据包输入消息包括数据包。所述方法还包括:确定与数据包相关联的包标识符;基于与数据包相关联的包标识符来确定关键字;确定与关键字相关联的条目是否存在于循环检测高速缓存中;响应于确定与关键字相关联的条目存在于循环检测高速缓存中,更新与条目相关联的计数器值;以及响应于确定与条目相关联的计数器值达到阈值,确定所述数据包处于控制路径循环中。一种被配置为检测软件定义网络(SDN)中的控制路径循环的网络设备。所述网络设备担当SDN网络中的控制器。所述网络设备包括用于存储控制路径循环检测组件的非暂时性机器可读存储介质和通信耦合到非暂时性机器可读存储介质的处理器。处理器被配置为执行控制路径循环检测组件。控制路径循环检测组件被配置为从交换机接收数据包输入消息,其中数据包输入消息包括数据包。控制路径循环检测组件还被配置为:确定与数据包相关联的包标识符;基于与数据包相关联的包标识符来确定关键字;确定与关键字相关联的条目是否存在于循环检测高速缓存中;响应于与关键字相关联的条目存在于循环检测高速缓存中的确定,更新与条目相关联的计数器值;以及响应于与条目相关联的计数器值达到阈值的确定,确定数据包处于控制路径循环中。非暂时性机器可读介质具有存储在其中的计算机代码,所述计算机代码将由网络设备的一个或多个处理器的集合执行。当由网络设备执行计算机代码时,使网络设备执行用于检测软件定义网络(SDN)中的控制路径循环的操作。网络设备担当SDN网络中的控制器。操作包括:从交换机接收数据包输入消息,其中数据包输入消息包括数据包。操作还包括:确定与数据包相关联的包标识符;基于与数据包相关联的包标识符来确定关键字;确定与关键字相关联的条目是否存在于循环检测高速缓存中;响应于确定与关键字相关联的条目存在于循环检测高速缓存中,更新与所述条目相关联的计数器值;以及响应于确定与条目相关联的计数器值达到阈值,确定数据包处于控制路径循环中。附图说明通过参考用于说明本发明实施例的以下描述和附图,可以最好地理解本发明。附图中:图1是根据一些实施例的在其中可以执行控制路径循环检测的软件定义网络(SDN)的框图。图2是根据一些实施例的可能引起控制路径循环的编程有流条目的交换机的框图。图3是根据一些实施例的由控制器执行的使用基于数据包内的现有字段的值的包标识符来检测SDN网络中的控制路径循环的过程的流程图。图4是根据一些实施例的由控制器执行的使用控制器生成的包标识符来检测SDN网络中的控制路径循环的过程的流程图。图5A示出了根据一些实施例的示例性网络内的网络设备(ND)之间的连接性以及ND的三种示例性实现。图5B示出了根据一些实施例的用于实现专用网络设备的示例性方式。图5C示出了根据一些实施例的可以耦合虚拟网元(VNE)的各种示例性方式。图5D示出了根据一些实施例的在每个ND上具有单一网元(NE)的网络,且在该直观方案中,对比了(传统路由器常用的)传统分布式方案与用于维护可达性和转发信息(也被称为网络控制)的集中式方案。图5E示出了根据一些实施例的以下简单情况:每一个ND实现单一NE,但是集中式控制平面已经将不同ND中的多个NE抽象为(以表示)虚拟网络之一中的单一NE。图5F示出了根据一些实施例的以下情况:在不同ND上实现多个VNE,并且所述多个VNE彼此耦合,以及集中式控制平面已经将这多个VNE加以抽象,使得它们表现为虚拟网络之一中的单一VNE。图6示出了根据一些实施例的具有集中式控制平面(CCP)软件的通用控制平面设备。具体实施方式以下说明描述了用于检测软件定义网络(SDN)中的控制平面循环的方法和装置。在以下描述中,阐述了大量的具体细节,例如逻辑实现、操作码(opeode)、用于指定运算数的手段、资源分区/共享/复制实现、系统组件的类型和相互关系、以及逻辑分区/整合选择,以提供对本发明的更全面的理解。然而,本领域技术人员将意识到:本发明可以在没有这种具体细节的情况下实施。在其它实例中,并未详细示出控制结构、门级别电路和全软件指令序列,以不使本发明模糊。在使用所包括的描述的情况下,本领域普通技术人员将能够在不进行过度试验的情况下实现恰当的功能。说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示了所描述的实施例可以包括特定特征、结构、或特性,但是每个实施例可以不一定包括该特定特征、结构、或特性。此外,这种短语不一定参考同一实施例。此外,当结合实施例来描述具体特征、结构或特性时,应认为结合其他实施例(不管是否是显式描述的)来实现这种特征、结构或特性是在本领域技术人员的知识内的。在本文中,括号中的文本和具有虚线边界(例如,长划点虚线、短划线虚线、点虚线、以及点)的框可以用于示出向本发明实施例添加附加特征的可选操作。然而,这种标注不应当被视为意味着:在本发明的某些实施例中,他们是仅有的选项或可选操作,和/或具有实线边界的框不是可选的。在以下描述和权利要求中,可以使用术语“耦合”和“连接”以及它们的派生词。应当理解:这些术语不意在作为彼此的同义词。“耦合”用于指示两个或更多个元件可以或可以不彼此直接物理或电学接触、彼此协作或交互。“连接”用于指示在彼此耦合的两个或更多个元件之间建立通信。电子设备使用诸如机器可读存储介质(例如,磁盘、光盘、只读存储器(ROM)、闪存设备、相变存储器)和机器可读传输介质(也被称为载体)(例如,电、光、无线电、声或其他形式的传播信号-例如载波、红外信号)的机器可读介质(也被称为计算机可读介质)来存储和传输(内部和/或通过网络使用其他电子设备)代码(其由软件指令构成,且有时被称为计算机程序代码或计算机程序)和/或数据。从而,电子设备(例如,计算机)包括硬件和软件,例如一个或多个处理器的集合,其耦合到用于存储在该处理器集合上执行的代码和/或用于存储数据的一个或多个及其可读存储介质。例如,电子设备可以包括包含代码在内的非易失性存储器,因为即使在电子设备关闭(当掉电时)时非易失性存储器也可以保持代码/数据,以及在打开电子设备时,通常将要由该电子设备的处理器执行的该部分代码从较慢的非易失性存储器中拷贝到该电子设备的易失性存储器(例如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))中。通常的电子设备还包括用于与其他电子设备建立网络连接(以使用传播信号来发送和/或接收代码和/或数据)的一个或多个物理网络接口的集合。本发明实施例的一个或多个部分可以使用软件、固件、和/或硬件的不同组合来实现。网络设备(ND)是将网络上其他电子设备(例如,其他网络设备、端用户设备)加以通信互联的电子设备。一些网络设备是为多个联网功能(例如,路由、桥接、交换、层2聚合、会话边界控制、服务质量、和/或订户管理)提供支持、和/或为多应用服务(例如,数据、语音、和视频)提供支持的“多服务网络设备”。可以以许多方式定义控制平面循环。控制平面循环的非常简单的定义可以是这样的情况:相同的数据包N次穿过控制器、网络的数据路径和控制器(例如,经由数据包输出和数据包输入消息)。例如,如果数据包返回控制器三次,则可以认为该数据包处于控制路径循环中。然而,数据包在每次到达控制器之前可能已经穿过网络的数据路径内的不同路径和/或穿过交换机内的不同表。一些应用(例如,数据包跟踪器(packettracer))可能不希望将在控制器处的这种到达视为控制路径循环。控制平面循环的更严格的定义可以是这样的情况:数据包N次在穿过网络的数据路径内的相同路径之后被发送回控制器。控制平面循环的进一步严格定义可以是这样的情况:数据包N次在穿过网络的数据路径内的相同路径之后,由于相同的原因(例如,匹配相同的流条目),被发送回控制器。然而,保持跟踪数据包穿过的路径(以及数据包在交换机内穿过的表)是不可扩展的。记录数据包穿过的交换机和表的列表可能导致转发开销,从而严重降低性能。出于实际目的,如果数据包满足以下条件,则可以认为其处于控制路径循环中:a)数据包返回控制器N次;和b)每次数据包被从网络的数据路径发送到控制器时,数据包是由于来自相同交换机中的相同的表或组条目的动作经由数据包输入消息发送到控制器的。用于检测循环的现有技术主要集中在数据平面循环检测上。通常,控制器积极参与这些检测。然而,在控制路径循环的情况下,控制器本身是受害者,因此妨碍了控制器资源可用于执行循环检测。静态循环检测技术通常也集中在数据平面循环检测。静态循环检测技术可被扩展以检测控制路径循环。然而,这些技术不提供容错和可扩展的解决方案。这是因为网络状态对于控制器而言可能并不总是可用的(或者收集网络状态可能会有延迟)。例如,考虑已经丢失与交换机的连接一段时间的控制器。在此期间,由于流条目老化,交换机中的一些流条目可能已被移除。控制器的静态循环检测不会意识到这些流条目已被移除。当控制器重新建立与交换机的连接时,来自交换机的数据包可能开始涌入控制器。控制器需要一些时间来了解最新的交换机流状态,但在此之前可能进入控制路径循环的旋涡。静态循环检测技术也存在可扩展性问题。在对每个流条日进行编程之前必要的循环检测可能减慢流条目编程。这在需要非常高的事务率的应用中是不期望的(例如,一些服务链解决方案具有在不同交换机上每秒对数千个流条目进行编程的关键性能指示符(KPI)要求)。本文描述的实施例通过提供控制器侧的用以检测(例如,由数据包输入和数据包输出消息不一致所引起的)运行时控制路径循环的机制来克服现有技术的缺点。实施例利用与每个数据包相关联的唯一包标识符。包标识符用于确定同一数据包是否由于循环而到达控制器多次。当控制器接收到包含其首次遇到的数据包的数据包输入消息时,控制器构造/生成与数据包相关联的包标识符,并基于该包标识符确定关键字。在循环检测高速缓存中,控制器创建与关键字相关联的新条目。然后,控制器经由数据包输出消息将数据包发送回SDN网络的数据路径中。每当后续数据包到达控制器时(例如,经由数据包输入消息),控制器确定与数据包相关联的包标识符并基于该包标识符确定关键字。控制器确定与关键字相关联的条目是否存在于循环检测高速缓存中。如果存在条目,则表示该数据包先前已经到达过控制器。作为响应,控制器更新与该条目相关联的计数器值。如果计数器达到阈值,则控制器确定该数据包处于控制路径循环中。以这种方式,本文描述的实施例提供SDN网络中的控制路径循环检测能力。还描述并要求保护其他实施例。图1是根据一些实施例的在其中可以执行控制路径循环检测的软件定义网络(SDN)的框图。如图所示,SDN网络100包括控制器110和交换机120。在一个实施例中,控制器110和交换机120使用诸如开放流(例如,开放流1.5(OpenFlow1.5))或其任何变体的通信协议进行通信。为了清楚和易于理解,将主要在开放流用作控制器110和交换机120之间的通信协议的上下文中描述控制路径循环检测的实施例。然而,应当理解,在不脱离本公开的精神和范围的情况下,控制器110和交换机120可以使用其他类型的通信协议进行通信,并且可以在控制器110和交换机120使用其他类型的通信协议的上下文中执行该控制路径循环检测。交换机120包括流表140A-Z。交换机120中的每个流表140包括流条目的集合(未示出)。每个流条目包括数据包匹配标准(例如,匹配字段)和当数据包与数据包匹配标准相匹配时要执行的相应指令集。如果数据包与流条目的数据包匹配标准相匹配,则该数据包被称为与流条目相匹配。在一个实施例中,如果数据包与流表140中的任何流条目不相匹配,则该数据包与流表140的表错失(table-miss)流条目相匹配。表错失流条目可以指示交换机120将数据包转发到控制器110、丢弃数据包、或者继续将数据包与后续流表140中的流条目进行匹配。当交换机120接收到用于转发的数据包时,交换机120将数据包与第一流表(例如,流表140A)中的流条目进行匹配,并且可以继续将数据包与后续流表140中的流条目进行匹配。如果数据包与流条目相匹配,则交换机120执行该流条目的相应指令集。相应指令集可以包括将对数据包的控制转移到控制器110的指令(通俗地称为将数据包“转出(punting)”到控制器110)。交换机120可以通过向控制器110发送数据包输入消息来将对数据包的控制转移到控制器110。在一个实施例中,数据包输入消息包括数据包数据(或其相关部分)、触发数据包输入消息的流表140的表标识符(ID)、以及数据包被发送到控制器110的原因。控制器110可以通过向交换机120发送数据包输出消息来响应数据包输入消息。数据包输出消息通常包括指定交换机120应如何处理数据包的动作的列表。动作列表可以包括输出动作以将数据包输出到OFPP_TABLE保留端口,其指示交换机从第一流表开始(例如,流表140A),通过现有流条目处理数据包。在一些情况下,作为流条目动作、表错失或组桶动作的结果,发送到OFPP_TABLE保留端口的数据包可能被发送回控制器110(例如,经由数据包输入消息)。数据包输入消息和数据包输出消息的不正确使用可能在SDN网络100中创建控制平面循环,其中数据包在被发送到SDN网络100的数据路径中(例如,经由数据包输出消息)之后继续返回控制器110(例如,经由数据包输入消息)。针对SDN网络100,控制平面循环可能比数据平面循环更危险。通常,数据平面循环仅影响SDN网络100的一部分。然向,控制平面循环消耗控制器110的宝贵的处理资源,这可能阻塞控制器110并使整个SDN网络100不可用。在一个实施例中,控制器110可操作以在SDN网络100的操作期间检测控制路径循环的发生。为此,控制器110可以包括控制路径循环检测组件130,其在由控制器110执行时使控制器110执行本文描述的控制路径循环检测操作的一个或多个实施例。如下面将进一步详细描述的,控制路径循环检测组件130可以利用循环检测高速缓存135(例如,数据库)来检测SDN网络100中的控制路径循环。控制路径循环检测组件130可以由公共模块实现,应用通过该公共模块将它们的流发送到交换机120中(例如,OpenDaylight控制器中的开放流插件)。控制器110利用与数据包相关联的唯一包标识符来确定同一数据包是否由于控制路径循环而到达控制器110多次。包标识符包标识符可以是能够唯一地标识数据包(或者以高概率唯一地标识数据包)的任何值。在一个实施例中,可以基于数据包内的现有字段和/或数据包的校验和的值来构造包标识符。在另一个实施例中,包标识符可以是控制器生成的值。基于数据包内现有字段的值的包标识符:在一个实施例中,数据包的包标识符基于数据包内现有字段的值。例如,包标识符可以是基于数据包的5元组(即,源互联网协议(IP)地址、源端口号、目的IP地址、目的端口号和协议类型(例如,传输控制协议(TCP)或用户数据报协议(UDP)))和IP报头中的IP标识符(IP-ID)字段的值。该5元组和IP报头中的IP-ID字段可以帮助识别流内的特定数据包。然而,保持IP-ID字段的唯一性是终端主机责任,交换机120对其通常不具有控制权。此外,最近的一些意见征询(RFC)放宽了终端主机保持IP-ID字段唯一性的必要性。因此,5元组和IP-ID的组合可能不足以唯一地识别数据包。因此,在另一个实施例中,数据包的包标识符基于数据包的5元组和IP之后的有效载荷的校验和。流内的两个不同数据包具有相同校验和的概率非常低。互联网控制消息协议(ICMP)和TCP报头携带完整的数据包校验和,并且该校验和可以用作包标识符的一部分,以避免针对每个数据包必须重新计算校验和(其可能是计算上昂贵的)。在互联网协议版本4(IPv4)用户数据报协议(UDP)中,校验和不需要位于报头中。在这种情况下,可以计算校验和,并且该计算的校验和可以用作包标识符的一部分。上面描述的包标识符是作为示例而非限制来提供的。应当理解,包标识符可以基于数据包内的现有字段和/或校验和的值的任何组合,其可以唯一地标识数据包(或者以高概率唯一地标识数据包)。下面描述使用基于现有数据包字段和/或校验和的值的包标识符来检测控制路径循环的示例性操作。当控制器110从交换机120接收到数据包时(例如,经由数据包输入消息),控制器110确定与数据包相关联的包标识符。例如,控制器110可以基于数据包的5元组和数据包的校验和来确定包标识符。然后,控制器110基于包标识符来确定关键字。在一个实施例中,关键字是包标识符本身。在另一个实施例中,基于包标识符和与数据包输入消息相关联的上下文信息来确定关键字。上下文信息可以包括与数据包输入消息被发送到控制器的上下文相关的任何类型的信息。例如,上下文信息可以包括向控制器110发送数据包输入消息的交换机120的指示、触发交换机120向控制器110发送数据包输入消息的表或组的指示(例如,表ID或组ID)、交换机120向控制器110发送数据包输入消息的原因的指示(例如,表错失、应用动作中的向控制器的输出、无效生存时间(TTL)、动作集中的向控制器的输出、组桶中的向控制器的输出、数据包输出中的向控制器的输出),或其任何组合。控制器110确定与关键字相关联的条目是否存在于其循环检测高速缓存135中。如果在循环检测高速缓存135中不存在与关键字相关联的条目,则控制器110在其循环检测高速缓存135中创建与关键字相关联的新条目,并将与该条目相关联的计数器值初始化为初始值(例如,值0)。然后,控制器110将数据包发送回SDN网络100的数据路径中(例如,经由数据包输出消息)。当控制器110随后在稍后的时间从交换机120接收到数据包时(例如,经由数据包输入消息),控制器110确定与数据包相关联的包标识符(例如,基于数据包的5元组和校验和)。然后,控制器110基于包标识符(并且在一些情况下,还基于与数据包输入消息相关联的上下文信息)来确定关键字。控制器110确定与关键字相关联的条目是否存在于循环检测高速缓存135中。如果在循环检测高速缓存135中存在与关键字相关联的条目,则这表示控制器110之前已经遇到相同的数据包。因此,控制器110将与该条目相关联的计数器值递增,并确定计数器值是否已达到阈值。如果控制器110确定与条目相关联的计数器值尚未达到阈值,则控制器110将数据包发送回SDN网络100的数据路径中(例如,经由数据包输出消息)。否则,如果控制器110确定与该条目相关联的计数器值已经达到阈值,则控制器110确定该数据包处于控制路径循环中。下面提供了描述上述控制路径循环检测操作的伪代码:注释:对于ARP数据包,Final_Key将是ARP报头中的目标IP。控制器生成的值作为包标识符:控制器生成的包标识符:在一个实施例中,控制器110生成数据包的包标识符。例如,控制器110可以生成用作数据包的包标识符的唯一整数值。当控制器110将数据包发送到SDN网络100的数据路径中时,控制器110可以将该包标识符插入数据包的网络不变部分中,使得如果数据包再次返回到控制器110,则控制器110可以从数据包中提取该包标识符。如本文所使用的,数据包的网络不变部分指的是在由SDN网络100的数据路径中的交换机120的正常数据包处理期间不被改变或利用的数据包的一部分。在一个实施例中,控制器110将包标识符插入数据包的网络服务报头(NSH)中。NSH是为了携带服务平面信息而添加到数据包或帧的附加报头。NSH包括可变长度上下文报头字段。如果不识别信息的类型,则以类型-长度-值(TLV)格式置于可变长度上下文报头字段中的任何信息都不受交换机120和服务功能的影响。这样,如果控制器110将包标识符插入NSH报头的可变长度上下文报头字段中,则如果数据包返回控制器110,包标识符将永远保持不变。下面描述使用控制器生成的包标识符来检测控制路径循环的示例性操作。当控制器110从交换机接收到数据包时(例如,经由数据包输入消息),控制器110确定数据包是否包括包标识符。如果数据包不包含包标识符,则这表示这是控制器首次遇到该数据包。因此,控制器110生成与数据包相关联的包标识符。然后,控制器110基于包标识符来确定关键字。在一个实施例中,关键字是包标识符本身。在另一个实施例中,基于包标识符和与数据包输入消息相关联的上下文信息来确定关键字。上下文信息可以包括与数据包输入消息被发送到控制器110的上下文相关的任何类型的信息。例如,上下文信息可以包括向控制器110发送数据包输入消息的交换机120的指示、触发交换机120向控制器110发送数据包输入消息的表或组的指示(例如,表ID或组ID)、交换机120向控制器110发送数据包输入消息的原因的指示(例如,表错失、应用动作中的向控制器的输出、无效生存时间(TTL)、动作集中的向控制器的输出、组桶中的向控制器的输出、数据包输出中的向控制器的输出),或其任何组合。控制器110在其循环检测高速缓存135中创建与关键字相关联的新条目,并且将与该条目相关联的计数器值初始化为初始值(例如,值0)。然后,控制器110将包标识符插入数据包中(例如,在数据包的网络不变部分(例如数据包的NSH)中),并将数据包发送回SDN网络100的数据路径中(例如,经由数据包输出消息)。当控制器110随后从交换机120接收到数据包时(例如,经由数据包输入消息),控制器110确定与数据包相关联的包标识符(例如,通过从数据包的网络不变部分(例如数据包的NSH)中提取包标识符)。然后,控制器110基于包标识符(并且在一些情况下,还基于与数据包输入消息相关联的上下文信息)来确定关键字。控制器110确定与关键字相关联的条目是否存在于其循环检测高速缓存135中。如果在循环检测高速缓存135中存在与关键字相关联的条目,则这表示控制器110之前已经遇到相同的数据包。因此,控制器110将与条目相关联的计数器值递增,并确定计数器值是否已达到阈值。如果控制器110确定与条目相关联的计数器值尚未达到阈值,则控制器110将数据包发送回SDN网络100的数据路径中(例如,经由数据包输出消息)。否则,如果控制器110确定与该条目相关联的计数器值已经达到阈值,则控制器110确定该数据包处于控制路径循环中。下面提供了描述上述控制路径循环检测操作的伪代码:在数据包输入消息中携带组信息如上所述,与数据包输入消息相关联的上下文信息可以包括触发交换机120向控制器110发送数据包输入消息的组的指示(例如,组ID)。在开放流1.5(OpenFlow1.5)中,数据包输入消息携带触发数据包输入消息的表的表ID(在数据包输入消息的table_id字段中)。这样,在交换机120的流表140触发将数据包输入消息发送给控制器110的情况下,通过检查数据包输入消息,控制器能够确定哪个流表140触发了数据包输入消息。然而,如果由于组桶中的动作而将数据包输入消息发送给控制器110,则目前(在开放流1.5中)没有规定数据包输入消息中要携带组信息。因此,控制器110不能确定哪个组触发了向控制器110发送数据包输入消息。在一个实施例中,如下面将进一步详细描述的,可以扩展开放流以在数据包输入消息中携带组信息。在另一个实施例中,可以在推压(pushon)到数据包上的虚拟局域网(VLAN)标签中携带组信息。用于在数据包输入消息中携带组信息的开放流扩展:在一个实施例中,可以扩展开放流以在数据包输入消息中携带组信息。在一个实施例中,当交换机120最初与控制器110相连接时,能够在数据包输入消息中包括组信息的交换机120可以将该能力传达给控制器110。在开放流中,当交换机120最初与控制器110相连接时,控制器110向交换机120发送OFPT_FEATURES_REQUEST消息,请求交换机120识别交换机120所支持的能力/特征。交换机120以OFPT_FEATURES_REPLY消息响应控制器110,该消息识别交换机120所支持的能力/特征。然而,从开放流1.5(OpenFlow1.5)开始,只有某些功能/特性作为OFPT_FEATURES_REPLY消息的一部分被包括在内,其由ofp_capabilities定义。在一个实施例中,可以扩展开放流,使得可以向控制器110通知交换机120所支持的附加能力/特征(例如,供应商特定的能力),诸如在数据包输入消息中指定组信息(例如,触发数据包输入消息被发送到控制器的组的组ID)的能力。在一个实施例中,控制器110向交换机120发送VENDOR_SPECIFIC_SWITCH_FEATURES_REQUEST消息,请求交换机120识别交换机120所支持的附加能力/特征。交换机120以VENDOR_SPECIFIC_SWITCH_FEATURES_REPLY消息响应控制器110,该消息识别交换机120所支持的附加能力/特征。在一个实施例中,如果交换机120支持在数据包输入消息中指定组信息,则VENDOR_SPECIFIC_SWITCH_FEATURES_REPLY消息包括交换机120支持这种能力/特征的指示。以这种方式,可以使控制器110知道交换机120在数据包输入消息中指定组信息的能力。在一个实施例中,以下示例性和非限制性结构可用于控制器110和交换机120之间的消息交换,以支持在数据包输入消息中指定组信息。在以下结构中,可以在数据包输入消息的group_id(组_id)字段中指定组信息。能力标志:在推压到数据包上的VLAN标签中携带组信息:在一个实施例中,可以在推压到数据包上的VLAN标签中指定组信息。这种指定组信息的方式不需要对开放流标准进行任何扩展。在开放流中,使用32位(2^32种可能的组)来指定组ID。然而,实际上,组ID通常在从1到G的范围内,其中G在数千的数量级。也就是说,典型的应用不需要对每个交换机120的超过几千个组进行编程。因此,在大多数情况下,可以使用少于32位来表示组ID。例如,在许多情况下,10-12位可能足以表示组ID。在一个实施例中,可以通过以下方式将组信息包括在推压到数据包的VLAN标签中。针对包括将数据包发送到控制器110的动作的每个组桶,在将数据包发送到控制器110的动作之前放置OFPAT_PUSH_VLAN动作。OFPAT_PUSH_VLAN动作指示交换机120将携带表示该组的整数值的VLAN标签推压到该数据包。如果无法使用12位的VLAN标签来表示组信息,则可以将多于一个的VLAN标签推压到数据包。当控制器110接收到数据包时(例如,经由数据包输入消息),控制器可以弹出一个或多个VLAN标签,并根据在一个或多个VLAN标签中指定的值来确定组信息。VLAN标签不干扰控制器110处的应用处理,因为它们在将数据包交给应用之前被控制器110弹出。此外,由于将附加的VLAN标签推压到数据包而导致的性能下降可以忽略不计。图2是根据一些实施例的可能引起控制路径循环的编程有流条目的交换机的框图。交换机120包括流表0、流表10和组表。流表0包括与具有1.1.1.1的目的IP地址的数据包相匹配的流条目。流条目的相应动作指示交换机120向控制器110输出匹配的数据包。流表10包括:表错失流条目,其指示交换机120向控制器110输出与流表中的任何流条目都不相匹配的数据包。组表包括:针对组ID100的组条目,其指示如果端口忙,则由交换机120向控制器110输出数据包。数据包处理从交换机120的第一流表(即,流表0)处开始。如果具有1.1.1.1的目的IP地址的数据包到达交换机120,则该数据包将与流表0中的流条目相匹配,并因此被发送到控制器110(例如,经由数据包输入消息)。响应于数据包输入消息,控制器110向交换机120发送数据包输出消息,导致该数据包由交换机120的流表10处理。如果数据包与流表10中的任何流条目都不相匹配,则数据包与表错失流条目相匹配,并且数据包再次被发送到控制器110(例如,经由另一个数据包输入消息)。因此,在控制路径循环的简单定义下,数据包处于控制路径循环中(不管数据包穿过的路径,也不管数据包被转出到控制器110的原因,如果数据包多次返回控制器110,则认为该数据包处于控制路径循环中)。由此还可以看出,交换机120中的流条目可以通过可以引起在控制路径循环的更严格的定义(例如,如果数据包从相同的交换机120、从交换机120内相同的表/组、并且出于与先前相同的原因返回控制器110,则认为该数据包处于控制路径循环中)下的控制路径循环的方式进行编程。本文描述的实施例允许控制器在SDN网络100的操作期间检测这种控制平面循环的发生。图3是根据一些实施例的由控制器执行的使用基于数据包内的现有字段的值的包标识符来检测SDN网络中的控制路径循环的过程的流程图。在一个实施例中,可以由担当SDN网络100中的控制器110的网络设备来执行流程图的操作。在一个实施例中,控制器110可以使用开放流或类似的通信协议来与SDN网络100中的交换机120进行通信。将参照其他附图的示例性实施例来描述该流程图和其他流程图中的操作。然而,应当理解:流程图中的操作可以由本发明中除了参照其他附图描述的那些实施例之外的实施例来执行,且本发明的参照这些其他附图讨论的实施例可以执行与参照流程图来讨论的那些实施例不同的操作。在一个实施例中,当控制器110从交换机120接收到数据包输入消息时,启动该过程(框305)。数据包输入消息包括数据包。尽管“数据包输入”术语是从开放流用语借用的,但应该理解,本文使用的术语“数据包输入”或“数据包输入消息”并不严格限于开放流上下文。数据包输入消息可以是将数据包从交换机120转移到控制器110的任何类型的消息(例如,将对数据包的控制从交换机120转移到控制器110)。控制器110确定与数据包相关联的包标识符(框340)。在一个实施例中,基于源IP地址、源端口号、目的IP地址、目的端口号、协议类型和与数据包相关联的校验和来确定包标识符。在一个实施例中,控制器110通过从数据包的ICMP报头或TCP报头中提取校验和来确定与数据包相关联的校验和。在另一个实施例中,控制器110计算与数据包相关联的校验和(例如,在数据包不包括校验和的情况下-例如,针对IPv4UDP数据包)。控制器110基于包标识符来确定关键字(框345)。在一个实施例中,关键字是包标识符本身。在另一个实施例中,可以基于包标识符和与数据包输入消息相关联的上下文信息来确定关键字。上下文信息可以包括与数据包输入消息被发送到控制器110的上下文相关的任何类型的信息。例如,上下文信息可以包括向控制器发送数据包输入消息的交换机120的指示、触发交换机向控制器发送数据包输入消息的表或组的指示(例如,表ID或组ID)、交换机120向控制器110发送数据包输入消息的原因的指示,或其任何组合。在一个实施例中,控制器110基于检查数据包输入消息的内容来确定与数据包输入消息相关联的上下文信息。在一个实施例中,在数据包输入消息中(例如,在group_id字段中)对触发交换机120向控制器110发送数据包输入消息的组的指示进行指定。在这样的实施例中,控制器110可以从数据包输入消息中提取组的指示,以识别触发交换机向控制器110发送数据包输入消息的组。在一个实施例中,在推压到数据包的一个或多个VLAN标签中对触发交换机120向控制器110发送数据包输入消息的组的指示进行指定。在这样的实施例中,控制器110可以从推压到数据包的一个或多个VLAN标签中提取组的指示(例如,通过弹出VLAN标签),以识别触发交换机120向控制器110发送数据包输入消息的组。在一个实施例中,在数据包输入消息中(例如,在原因字段中)对交换机120向控制器110发送数据包输入消息的原因的指示进行指定。在这样的实施例中,控制器110可以从数据包输入消息中提取原因的指示,以识别交换机120向控制器110发送数据包输入消息的原因。交换机120向控制器110发送数据包输入消息的原因可以是例如表错失、应用动作中的向控制器的输出、无效生存时间(TTL)、动作集中的向控制器的输出、组桶中的向控制器的输出、数据包输出中的到控制器的输出、或任何其他原因。控制器110确定与关键字相关联的条目是否存在于循环检测高速缓存135中(判定框350)。如果在循环检测高速缓存135中不存在与关键字相关联的条目,则控制器110在循环检测高速缓存135中创建与关键字相关联的新条目(框325)。与条目相关联的计数器值被设置为初始值(例如,值0)。然后,控制器110将数据包输出消息发送到SDN网络100的数据路径中,其中数据包输出消息包括数据包(框335)。尽管“数据包输出”术语是从开放流用语借用的,但应该理解,本文使用的术语“数据包输出”或“数据包输出消息”并不严格限于开放流上下文。数据包输出消息可以是将数据包从控制器110转移到交换机120的任何类型的消息(例如,将数据包注入到SDN网络100的数据路径中)。返回判定框350,如果与关键字相关联的条目存在于循环检测高速缓存135中,则控制器110更新与条目相关联的计数器值(例如,通过递增计数器值)(框355)。然后,控制器110确定与条目相关联的计数器值是否达到阈值(判定框360)。如果计数器值尚未达到阈值,则控制器110将数据包输出消息发送到SDN网络100的数据路径中,其中数据包输出消息包括数据包(框335)。返回判定框360,如果与条目相关联的计数器值已经达到阈值,则这表示该数据包先前已被发送到控制器110多次(至少阈值次数)。因此,控制器110确定数据包处于控制路径循环中(框365)。图4是根据一些实施例的由控制器执行的使用控制器生成的包标识符来检测SDN网络中的控制路径循环的过程的流程图。在一个实施例中,可以由担当SDN网络100中的控制器110的网络设备来执行流程图的操作。在一个实施例中,控制器110可以使用开放流或类似的通信协议来与SDN网络100中的交换机120进行通信。将参照其他附图的示例性实施例来描述该流程图和其他流程图中的操作。然而,应当理解:流程图中的操作可以由本发明中除了参照其他附图描述的那些实施例之外的实施例来执行,且本发明的参照这些其他附图讨论的实施例可以执行与参照流程图来讨论的那些实施例不同的操作。在一个实施例中,当控制器110从交换机120接收到数据包输入消息时,启动该过程(框405)。数据包输入消息包括数据包。尽管“数据包输入”术语是从开放流用语借用的,但应该理解,本文使用的术语“数据包输入”或“数据包输入消息”并不严格限于开放流上下文。数据包输入消息可以是将数据包从交换机120转移到控制器110的任何类型的消息(例如,将对数据包的控制从交换机120转移到控制器110)。控制器110确定数据包是否包括与数据包相关联的包标识符(判定框410)。如果数据包不包括包标识符,则控制器110生成与数据包相关联的包标识符(框415)。在一个实施例中,包标识符是由控制器110生成的每个数据包唯一的整数。然后,控制器110基于包标识符来确定关键字(框420)。在一个实施例中,关键字是包标识符本身。在另一个实施例中,可以基于包标识符和与数据包输入消息相关联的上下文信息来确定关键字。上下文信息可以包括与数据包输入消息被发送到控制器110的上下文相关的任何类型的信息。例如,上下文信息可以包括向控制器110发送数据包输入消息的交换器120的指示、触发交换机120向控制器110发送数据包输入消息的表或组的指示(例如,表ID或组ID)、交换机120向控制器110发送数据包输入消息的原因的指示,或其任何组合。在一个实施例中,控制器110基于检查数据包输入消息的内容来确定与数据包输入消息相关联的上下文信息。在一个实施例中,在数据包输入消息中(例如,在group_id字段中)对触发交换机120向控制器110发送数据包输入消息的组的指示进行指定。在这样的实施例中,控制器110可以从数据包输入消息中提取组的指示,以识别触发交换机向控制器110发送数据包输入消息的组。在一个实施例中,在推压到数据包的一个或多个VLAN标签中对触发交换机120向控制器110发送数据包输入消息的组的指示进行指定。在这样的实施例中,控制器110可以从推压到数据包的一个或多个VLAN标签中提取组的指示(例如,通过弹出VLAN标签),以识别触发交换机120向控制器110发送数据包输入消息的组。在一个实施例中,在数据包输入消息中(例如,在原因字段中)对交换机120向控制器110发送数据包输入消息的原因的指示进行指定。在这样的实施例中,控制器110可以从数据包输入消息中提取原因的指示,以识别交换机120向控制器110发送数据包输入消息的原因。交换机120向控制器110发送数据包输入消息的原因可以是例如表错失、应用动作中的向控制器的输出、无效生存时间(TTL)、动作集中的向控制器的输出、组桶中的向控制器的输出、数据包输出中的到控制器的输出、或任何其他原因。然后,控制器110在循环检测高速缓存中创建与关键字相关联的新条目(框425)。与条目相关联的计数器值被设置为初始值(例如,值0)。然后,控制器110将包标识符插入数据包中(例如,在数据包的网络不变部分(例如,数据包的NSH)中)(框430),并将数据包输出消息发送到SND网络100的数据路径中,其中数据包输出消息包括数据包(其中包括包标识符)(框435)。尽管“数据包输出”术语是从开放流用语借用的,但应该理解,本文使用的术语“数据包输出”或“数据包输出消息”并不严格限于开放流上下文。数据包输出消息可以是将数据包从控制器110转移到交换机120的任何类型的消息(例如,将数据包注入到SDN网络100的数据路径中)。返回参考判定框410,如果数据包包括与数据包相关联的包标识符,则控制器110确定与数据包相关联的包标识符(例如,通过从数据包中提取包标识符)(框440)。在一个实施例中,控制器110从数据包的NSH中提取与数据包相关联的包标识符。控制器110基于包标识符来确定关键字(框445)。在一个实施例中,关键字是包标识符本身。在另一个实施例中,可以基于包标识符和与数据包输入消息相关联的上下文信息来确定关键字,如上面关于框420所描述的。控制器110确定与关键字相关联的条目是否存在于循环检测高速缓存135中(判定框450)。如果在循环检测高速缓存135中不存在与关键字相关联的条目,则控制器110在循环检测高速缓存135中创建与关键字相关联的新条目(框425)。与条目相关联的计数器值被设置为初始值(例如,值0)。然后,控制器110将包标识符插入数据包中(例如,在数据包的网络不变部分(例如,数据包的NSH)中)(框430),并将数据包输出消息发送到SND网络100的数据路径中,其中数据包输出消息包括数据包(其中包括包标识符)(框435)。返回判定框450,如果与关键字相关联的条目存在于循环检测高速缓存135中,则控制器110更新与条目相关联的计数器值(例如,通过递增计数器值)(框455)。然后,控制器110确定与条目相关联的计数器值是否达到阈值(判定框460)。如果计数器值尚未达到阈值,则控制器110将数据包输出消息发送到SDN网络100的数据路径中,其中数据包输出消息包括数据包(框435)。返回判定框460,如果与条目相关联的计数器值已经达到阈值,则这表示该数据包先前已被发送到控制器110多次(至少阈值次数)。因此,控制器110确定数据包处于控制路径循环中(框465)。根据实现,循环检测高速缓存135的大小可以随着关键字的数量线性增长。因此,循环检测高速缓存的大小可能随着时间的推移而变得非常大。可以通过删除旧条目(例如,使用超时机制)来减小循环检测高速缓存135的大小。在一个实施例中,响应于条目的已用寿命达到或超过超时长度(可以根据需要配置该超时长度)的确定,控制器110从循环检测高速缓存135中移除条目。这有助于防止循环检测高速缓存135的大小变得太大。然而,在一些实现中,这可能不足以将循环检测高速缓存135的大小保持在可管理的大小。例如,在一些实现中,超时长度的持续时间可能需要很长(例如,在几毫秒的范围内)才是实用的(例如,在单个控制器控制地理上分散的一组交换机的实现中),这可能导致循环检测高速缓存135在任何给定时间点存储大量条目。在一个实施例中,控制器110使用布隆过滤器(bloomfilter)来减少在循环检测高速缓存135中创建的条目的数量。布隆过滤器是一种节省空间的概率数据结构,其用于测试元素是否是集合的成员。正向错误是可能的,而反向错误则不可能。因此,对布隆过滤器的查询具有100%的查全率(recallrate)。换句话说,查询表示“可能在集合中”或“绝对不在集合中”。通常,随着更多元素被添加到集合中,正向错误的概率增加。在一个实施例中,控制器110使用关键字(例如,关于框345和420描述的关键字)作为布隆过滤器的元素。当控制器110接收到数据包输入消息时,控制器110检查布隆过滤器以确定该关键字是否被编码在布隆过滤器中。如果该关键字未被编码在布隆过滤器中,则这表示该数据包不在控制路径循环中(因为布隆过滤器不会具有反向错误)。在这种情况下,控制器110将包标识符编码到布隆过滤器中,但是不在循环检测高速缓存135中创建条目。仅当相同的数据包第二次到达控制器110时才创建条目。另一方面,如果关键字被编码在布隆过滤器中,则这表明数据包可能处于控制路径循环中。在这种情况下,控制器110对数据包执行控制路径循环检测,如上所述。在一个实施例中,每当控制器110从循环检测高速缓存135中移除与关键字相关联的条目时(例如,由于超时),控制器110也从布隆过滤器中删除该关键字。在一个实施例中,响应于确定尽管在关键字(被编码在布隆过滤器中)的已用寿命达到超时长度之后仍没有在循环检测高速缓存135中创建与该关键字相关联的相应条目,控制器110从布隆过滤器中删除该关键字。这用于清除未针对其创建循环检测高速缓存条目的布隆过滤二器中的关键字。在一个实施例中,布隆过滤器是计数布隆过滤器,其允许删除关键字。可以以这种方式在控制路径循环检测的前端使用布隆过滤器,使得在循环检测高速缓存135中不创建针对非违规数据包(即,不在控制路径循环中的数据包)的条目。这减少了在循环检测高速缓存135中创建的条目的数量。应当注意,以这种方式使用布隆过滤器通过数据包的附加的往返循环来推迟了控制路径循环检测。这不是主要缺点,因为在大多数情况下,在N+1个循环之后而不是在N个循环之后检测出控制路径循环将不会引起任何重大问题,尤其是相对于与所提供的节省空间的益处而言。图5A示出了根据一些实施例的示例性网络内的网络设备(ND)之间的连接性以及ND的三种示例性实现。图5A示出了ND500A-H,以及借助A-B、B-C、C-D、D-E、E-F、F-G和A-G之间以及H与A、C、D和G中每一个之间的线示出了它们的连接性。这些ND是物理设备,并且这些ND之间的连接性可以是无线的或有线的(经常被称为链路)。从ND500A、E和F延伸的附加线示出了:这些ND担当网络的进入点和离开点(且从而这些ND有时被称为边缘ND;而其他ND可以被称为核心ND)。图5A中的两个示例性ND实现是:1)专用网络设备502,其使用定制的专用集成电路(ASIC)和专有操作系统(OS);以及2)通用网络设备504,其使用常见的现货供应(COTS)处理器和标准OS。专用网络设备502包括联网硬件510,联网硬件510包括计算资源512(其通常包括一个或多个处理器的集合)、转发资源514(其通常包括一个或多个ASIC和/或网络处理器)、以及物理网络接口(NI)516(有时被称为物理端口)、以及其中存储有联网软件520的非暂时性机器可读存储介质518。物理NI是ND中的硬件,通过该硬件进行网络连接(例如,通过无线网络接口控制器(WNIC)以无线方式或者通过将电线插入连接到网络接口控制器(NIC)的物理端口),例如由ND500A-H之间的连接所示出的那些连接。在操作期间,联网软件520可以由联网硬件510来执行,以实例化一个或多个联网软件实例522的集合。每个联网软件实例522以及联网硬件510的执行该网络软件实例的部分(如果其是专用于该联网软件实例的硬件和/或由该联网软件实例与其他联网软件实例522按时间共享的硬件的时间片)形成了单独的虚拟网元530A-R。每个虚拟网元(VNE)530A-R包括控制通信和配置模块532A-R(有时被称为本地控制模块或控制通信模块)和转发表534A-R,使得给定的虚拟网元(例如,530A)包括控制通信和配置模块(例如,532A)、一个或多个转发表的集合(例如,534A)、以及联网硬件510的执行虚拟网元(例如,530A)的部分。软件520可以包括诸如控制路径循环检测组件525的代码,所述代码在由网络硬件510执行时使得专用网络设备502执行本发明的一个或多个实施例的操作作为部分联网软件实例522(控制路径环路检测实例535A)。专用网络设备502经常在物理上和/或逻辑上被视为包括:1)ND控制平面524(有时被称为控制平面),包括执行控制通信和配置模块532A-R的计算资源512;以及2)ND转发平面526(有时被称为转发平面、数据平面、或媒体平面),包括利用转发表534A-R的转发资源514和物理NI516。作为ND是路由器(或实现路由功能)的示例,ND控制平面524(执行控制通信和配置模块532A-R的计算资源512)通常负责参与控制如何路由(例如,数据的下一跳和该数据的输出物理NI)数据(例如,数据包)并负责在转发表534A-R中存储该路由信息,以及ND转发平面526负责在物理NI516上接收该数据并基于转发表534A-R将该数据转发出物理NI516中的恰当物理NI。图5B示出了根据一些实施例的用于实现专用网络设备502的示例性方式。图5B示出了包括卡538(通常是可热插拔的)在内的专用网络设备。尽管在一些实施例中,卡538具有两种类型(作为ND转发平面526来工作的一个或多个(有时被称为线路卡)、以及进行工作以实现ND控制平面524的一个或多个(有时被称为控制卡)),备选实施例可以将功能结合到单一卡上和/或包括附加卡类型(例如,一种附加类型的卡被称为服务卡、资源卡、或多应用卡)。服务卡可以提供专用处理(例如,层4到层7服务(例如,防火墙、互联网协议安全(IPsec)、安全套接字层(SSL)/传输层安全(TLS)、入侵检测系统(IDS)、对等(P2P)、基于IP的语音(VoIP)会话边界控制器、移动无线网关(网关通用分组无线电服务(GPRS)支持节点(GGSN)、演进分组核心(EPC)网关))。作为示例,服务卡可以用于端接IPsec隧道,并执行伴随的认证和加密算法。这些卡通过示出为背板536的一个或多个互联机械耦合在一起(例如,第一全网格耦合线路卡以及第二全网格耦合所有卡)。返回图5A,通用网络设备504包括硬件540,硬件540包括一个或多个处理器542(其经常是COTS处理器)的集合和网络接口控制器544(NIC,也被称为网络接口卡)(其包括物理NI546)、以及其中存储有软件550的非暂时性机器可读存储介质548。在操作期间,处理器542执行软件550以实例化一个或多个应用564A-R的一个或多个集合。尽管一个实施例不实现虚拟化,但是备选实施例可以使用不同形式的虚拟化-由虚拟化层554和软件容器562A-R表示。例如,一个这样的备选实施例实现操作系统级别虚拟化,在这种情况下,虚拟化层554表示操作系统的内核(或在基本操作系统上执行的垫片),其允许创建多个软件容器562A-R,每个软件容器可用于执行应用564A-R的集合中的一个。在该实施例中,多个软件容器562A-R(也被称为虚拟化引擎、虚拟专用服务器或监禁(jail))各自是用户空间实例(通常是虚拟内存空间);这些用户空间实例彼此分离,并与运行操作系统的内核空间分离;除非明确允许,否则在给定用户空间中运行的应用的集合不能访问其他进程的内存。另一个这样的备选实施例实现完全虚拟化,在这种情况下:1)虚拟化层554表示管理程序(有时被称为虚拟机监视器(VMM))或在主机操作系统之上执行的管理程序;以及2)软件容器562A-R各自表示由管理程序运行的称为虚拟机的紧密隔离形式的软件容器,并且可以包括客户操作系统。虚拟机是运行程序好像它们在物理的非虚拟化的机器上执行一样的物理机器的软件实现;以及应用一般不知道它们运行在虚拟机上还是运行在“裸金属”的主机电子设备上,然而出于优化目的,一些系统提供允许操作系统或应用能够意识到存在虚拟化的准虚拟化(para-virtualization)。一个或多个应用564A-R的一个或多个集合的实例化以及虚拟化层554和软件容器562A-R(如果实现的话)统称为软件实例552。每个应用564A-R的集合、相应的软件容器562A-R(如果实现的话),以及执行它们的硬件540的那部分(无论是专用于该执行的硬件和/或由软件容器562A-R临时共享的硬件的时间片),形成单独的虚拟网元560A-R。虚拟网元560A-R执行与虚拟网元530A-R类似的功能-例如,类似于控制通信和配置模块532A以及转发表534A(硬件540的这种虚拟化有时被称为网络功能虚拟化(NFV))。因此,NFV可以用于将很多网络设备类型统一到工业标准高容量服务器硬件、物理交换机、和物理存储器,它们可以位于数据中心、ND、和客户住宅设备(CPE)中。然而,本发明的不同实施例可以用不同方式来实现软件容器562A-R中的一个或多个。例如,尽管将本发明的实施例示出为每个软件容器562A-R与一个VNE560A-R相对应,备选实施例可以在更精细级别粒度上实现该对应关系(例如,线路卡虚拟机虚拟化线路卡、控制卡虚拟机虚拟化控制卡等);应当理解:本文参考软件容器562A-R与VNE的对应关系来描述的技术同样适用于使用这种更精细级别粒度的实施例。在某些实施例中,虚拟化层554包括提供与物理以太网交换机类似的转发服务的虚拟交换机。具体地,该虚拟交换机在软件容器562A-R和NIC544之间转发业务,以及可选地在软件容器562A-R之间转发业务;此外,该虚拟交换机可以在策略不允许彼此通信的VNE560A-R之间强制执行网络隔离(例如,通过执行虚拟局域网(VLAN))。软件550可以包括诸如控制路径循环检测组件563的代码,所述代码在由处理器542执行时,使得通用网络设备504执行本发明的一个或多个实施例的操作作为部分软件容器562A-R。图5A中的第三示例性ND实现是混合网络设备506,其在单一ND或ND内的单一卡中包括定制ASIC/专有0S和COTS处理器/标准OS。在这种混合网络设备的某些实施例中,平台VM(即,实现专用网络设备502的功能的VM)可以向混合网络设备506中存在的联网硬件提供准虚拟化。不管ND的上述示例性实现如何,当考虑由ND实现的多个VNE中的单一个VNE时,或者在ND当前仅实现单一VNE的情况下,缩写的术语网元(NE)有时被用于指代该VNE。同样在全部上述示例性实现中,每个VNE(例如,VNE530A-R、VNE560A-R、以及混合网络设备506中的那些)在物理NI(例如,516、546)上接收数据并将该数据转发出物理NI(例如,516、546)中的恰当物理NI。例如,实现IP路由器功能的VNE基于IP数据包中的一些IP报头信息来转发IP数据包;其中IP报头信息包括源IP地址、目的IP地址、源端口、目的端口(其中“源端口”和“目的端口”在本文中指代与ND的物理端口相对的协议端口)、传输协议(例如,用户数据报协议(UDP)、传输控制协议(TCP)和差异化服务(DSCP)值。图5C示出了根据一些实施例的可以耦合VNE的各种示例性方式。图5C示出了在ND500A中实现的VNE570A.1-570A.P(以及可选的VNE570A.Q-570A.R)以及ND500H中的VNE570H.1。在图5C中,VNE570A.1-P在以下意义上是彼此分离的:它们可以从ND500A外部接收数据包并向ND500外部转发数据包。VNE570A.1与VNE570H.1耦合,并且因此它们在其各自ND之间传输数据包;VNE570A.2-570A.3可以可选地在它们之间转发数据包,而不向ND500A外部转发数据包;以及VNE570A.P可以可选地是VNE链中的第一个,该VNE链包括VNE570A.Q,之后包括VNE570A.R(有时这被称为动态服务链接,其中,一系列VNE中的每个VNE提供不同服务-例如,一个或多个层4-7网络服务)。尽管图5C示出了VNE之间的各种示例性关系,备选实施例可以支持其他关系(例如,更多/更少的VNE、更多/更少的动态服务链、具有一些公共VNE和一些不同VNE的多个不同动态服务链)。图5A的ND例如可以形成互联网或私有网络的一部分;以及其他电子设备(未示出;例如端用户设备,包括工作站、膝上型计算机、上网本、平板电脑、掌上上型计算机、移动电话、智能电话、平板手机、多媒体电话、基于网际协议的语音(VoIP)电话、终端、便携式媒体播放器、GPS单元、可穿戴设备、游戏系统、机顶盒、支持互联网的家用电器)可以耦合到网络(直接或通过诸如接入网之类的其他网络),以通过网络(例如,互联网或覆盖(例如,隧道传输)在互联网上的虚拟专用网络(VPN))彼此通信(直接或通过服务器)和/或访问内容和/或服务。这种内容和/或服务通常由属于服务/内容提供商的一个或多个服务器(未示出)或参与对等(P2P)服务的一个或多个端用户设备(未示出)来提供,并且可以包括例如公开网页(例如,自由内容、商店前端页面、搜索服务)、私有网页(例如,提供电子邮件服务的用户名/密码访问网页)、和/或基于VPN的公司网络。例如,端用户设备可以耦合(例如,通过(无线或有线)耦合到接入网的客户住宅设备)到边缘ND,边缘ND耦合(例如,通过一个或多个核心ND)到其他边缘ND,该其他边缘ND耦合到担当服务器的电子设备。然而,通过计算和存储虚拟化,作为图5A中ND来工作的一个或多个电子设备还可以提供一个或多个这种服务器(例如,在通用网络设备504的情况下,软件容器562A-R中的一个或多个可以作为服务器工作;这对于混合网络设备506来说也将是正确的;在专用网络设备502的情况下,一个或多个这种服务器还可以运行在由计算资源512执行的虚拟化层上);在该情况下,服务器被称为是与该ND的VNE同处一地。虚拟网络是提供网络服务(例如,L2和/或L3服务)的物理网络(例如,图5A中的那个物理网络)的逻辑抽象。虚拟网络可以实现为在底层网络(例如,L3网络,如使用隧道(例如,通用路由封装(GRE)、层2隧道传输协议(L2TP)、IPSec)来创建覆盖网络的互联网协议(IP)网络)上提供网络服务(例如,层2(L2,数据链路层)和/或层3(L3,网络层)服务)的覆盖网络(有时被称为网络虚拟化覆盖)。网络虚拟化边缘(NVE)位于底层网络的边缘处,并参与实现网络虚拟化;NVE的面向网络侧使用底层网络向其他NVE隧道传输帧以及隧道传输来自其他NVE的帧;NVE的面向外部侧向网络外部的系统发送数据和从网络外部的系统接收数据。虚拟网络实例(VNI)是NVE上虚拟网络的特定实例(例如,ND上的NE/VNE、ND上NE/VNE的一部分,其中,通过仿真将该NE/VNE分为多个VNE);可以在NVE上实例化一个或多个VNI(例如,作为ND上的不同VNE)。虚拟接入点(VAP)是NVE上用于将外部系统连接到虚拟网络的逻辑连接点;VAP可以是通过逻辑接口标识符(例如,VLANID)来识别的物理或虚拟端口。网络服务的示例包括:1)以太网LAN仿真服务(类似于互联网工程任务组(IETF)多协议标签交换(MPLS)或以太网VPN(EVPN)服务的基于以太网的多点服务),其中,外部系统通过基于底层网络的LAN环境跨网络互连(例如,NVE针对不同的这种虚拟网络提供分离的L2VNI(虚拟交换实例),以及提供跨底层网络的L3(例如,IP/MPLS)隧道传输封装);以及2)虚拟化IP转发服务(从服务定义角度来说,类似于IETFIPVPN(例如,边界网关协议(BGP)/MPLSIPVPN)),其中,外部系统通过基于底层网络的L3环境跨网络互连(例如,NVE针对不同的这种虚拟网络提供分离的L3VNI(转发和路由实例),以及提供跨底层网络的L3(例如,IP/MPLS)隧道传输封装)。网络服务还可以包括服务质量能力(例如,业务分类标记、业务调节(conditioning)和调度)、安全能力(例如,用于保护客户住宅免受源自网络的攻击的过滤器,以避免有缺陷的路由公告)、以及管理能力(例如,完全检测和处理)。图5D示出了根据一些实施例的在图5A的每个ND上具有单一网元的网络,且在该直观方案中,对比了(传统路由器常用的)传统分布式方案与用于维护可达性和转发信息(也被称为网络控制)的集中式方案。具体地,图5D示出了具有与图5A的ND500A-H相同连接性的网元(NE)570A-H。图5D示出了分布式方案572将用于生成可达性和转发信息的责任分布在NE570A-H上;换句话说,邻居发现和拓扑发现的过程是分布式的。例如,在使用专用网络设备502的情况下,ND控制平面524的控制通信和配置模块532A-R通常包括可达性和转发信息模块以实现一个或多个路由协议,例如,外部网关协议(例如,边界网关协议(BGP)、内部网关协议(IGP)(例如,开放最短路径优先(OSPF)、中间系统到中间系统(IS-IS)、路由信息协议(RIP))、标签分发协议(LDP)、资源预留协议(RSVP)、以及RSVP-流量工程(TE):用于LSP隧道的RSVP的扩展,通用多协议标签交换(GMPLS)信令RSVP-TE,其与其他NE通信以交换路由,然后基于一个或多个路由度量选择那些路由。因此,NE570A-H(例如,执行控制通信和配置模块532A-R的计算资源512)通过分布式地确定网络内的可达性并计算其各自的转发信息来执行其参与控制如何路由(例如,数据的下一跳以及该数据的输出物理NI)数据(例如,数据包)的责任。路由和邻接关系存储在ND控制平面524上的一个或多个路由结构中(例如,路由信息库(RIB)、标签信息库(LIB)、一个或多个邻接关系结构)。ND控制平面524使用基于路由结构的信息(例如,邻接关系和路由信息)对ND转发平面526进行编程。例如,ND控制平面524将邻接关系和路由信息编程到ND转发平面526上的一个或多个转发表534A-R(例如,转发信息库(FIB)、标签转发信息库(LFIB)、以及一个或多个邻接关系结构)中。对于层2转发,ND可以存储一个或多个桥接表,该一个或多个桥接表用于基于该数据中的层2信息来转发数据。尽管上面的示例使用了专用网络设备502,相同的分布式方案572可以实现在通用网络设备504和混合网络设备506上。图5D示出了集中式方案574(也被称为软件定义网络(SDN)),其将做出与从底层系统(该底层系统向所选目的地转发业务)发送业务的位置有关的决定的系统加以去耦合。所示出的集中式方案574具有用于在集中式控制平面576(有时被称为SDN控制模块、控制器、网络控制器、开放流控制器、SDN控制器、控制平面节点、网络虚拟化机构、或管理控制实体)中生成可达性和转发信息的责任,并且因此使得邻居发现和拓扑发现的过程集中式。集中式控制平面576具有针对数据平面580(有时被称为基础架构层、网络转发平面、或转发平面(其不应当与ND转发平面相混淆))的南向接口(southboundinterface)582,该数据平面580包括NE570A-H(有时被称为交换机、转发元件、数据平面元件、或节点)。集中式控制平面576包括网络控制器578,网络控制器578包括确定网络内的可达性并通过南向接口582向数据平面580的NE570A-H分发转发信息的集中式可达性和转发信息模块579(其可以使用开放流协议)。从而,在通常与ND分离的电子设备上执行的集中式控制平面576中将网络情报(networkintelligence)集中式。在一个实施例中,网络控制器578可以包括控制路径循环检测组件581,其在由网络控制器578执行时,使网络控制器578执行上文描述的一个或多个实施例的操作。例如,在数据平面580中使用专用网络设备502的情况下,ND控制平面524的每个控制通信和配置模块532A-R通常包括提供南向接口582的VNE侧的控制代理。在该情况下,ND控制平面524(执行控制通信和配置模块532A-R的计算资源512)通过与集中式控制平面576通信的控制代理来执行其参与控制如何路由(例如,数据的下一跳和该数据的输出物理NI)数据(例如,数据包)的责任,以从集中式可达性和转发信息模块579接收转发信息(以及在一些情况下的可达性信息)(应当理解:在本发明的一些实施例中,除了与集中式控制平面576通信之外,控制通信和配置模块532A-R还可以在确定可达性和计算转发信息时扮演某个角色-尽管不像分布式方案情况下那么多;这种实施例一般被视为落入集中式方案574中,但也可以被视为是混合方案)。尽管上述示例使用了专用网络设备502,可以使用通用网络设备504和混合网络设备506来实现同样的集中式方案574(例如,每个VNE560A-R通过与集中式控制平面576通信来执行其控制如何路由(例如,该数据的下一跳和该数据的输出物理NI)数据(例如,数据包)的责任,以从集中式可达性和转发信息模块579接收转发信息(以及在一些情况下,可达性信息);应当理解:在本发明的一些实施例中,除了与集中式控制平面576通信之外,VNE560A-R还可以在确定可达性和/或计算转发信息时扮演某个角色-尽管不像分布式方案情况下那么多)。事实上,对SDN技术的使用可以增强通常在通用网络设备504或混合网络设备506实现中使用的NFV技术,因为NFV能够通过提供其上可以运行SDN软件的基础架构来支持SDN,并且因为NFV和SDN都打算利用商品服务器硬件和物理交换机。图5D还示出了集中式控制平面576具有针对应用层586的北向接口584,在应用层586中驻留有应用588。集中式控制平面576具有针对应用588来形成虚拟网络592(有时被称为逻辑转发平面、网络服务、或覆盖网络(且数据平面580的NE570A-H是底层网络))的能力。因此,集中式控制平面576维护所有ND和所配置的NE/VNE的全局视图,并且其将虚拟网络高效地映射到底层ND(包括当物理网络通过硬件(ND、链路、或ND组件)故障、添加、或移除来改变时维护这些映射)。尽管图5D示出了与集中式方案574不同的分布式方案572,在本发明的某些实施例中,网络控制的工作可以用不同方式分布或者这二者可以结合。例如:1)实施例一般可以使用集中式方案(SDN)574,但是具有委托给NE的某些功能(例如,分布式方案可以用于实现故障监视、性能监视、保护切换、以及用于邻居和/或拓扑发现的基元(primitive)中的一项或多项);或者2)本发明的实施例可以经由集中式控制平面和分布式协议这二者来执行邻居发现和拓扑发现,且比较结果以在它们不一致的地方提出异常。这种实施例一般被视为落入集中式方案574中,但也可以被视为是混合方案。尽管图5D示出了每个ND500A-H实现单一NE570A-H的简单情况,应当理解:参照图5D描述的网络控制方案同样适用于一个或多个ND500A-H实现多个VNE(例如,VNE530A-R、VNE560A-R、在混合网络设备506中的那些)的网络。备选地或附加地,网络控制器578还可以对在单一ND中实现多个VNE加以仿真。具体地,取代(或除了)在单一ND中实现多个VNE(之外),网络控制器578(还)可以将单一ND中的VNE/NE的实现呈现为虚拟网络592中的多个VNE(在同一个虚拟网络592中的全部、不同虚拟网络592中的每一个、或一些组合)。例如,网络控制器578可以使得ND在底层网络中实现单一VNE(NE),然后对集中式控制平面576内的该NE的资源进行逻辑分割,以在虚拟网络592中呈现不同的VNE(其中,底层网络中的这些不同VNE共享底层网络中ND上的单一VNE/NE实现的资源)。另一方面,图5E和图5F分别示出了NE和VNE的示例性抽象,网络控制器578可以将其作为不同的虚拟网络592的一部分来呈现。图5E示出了根据一些实施例的以下简单情况:ND500A-H中的每一个实现单一NE570A-H(参见图5D),而集中式控制平面576将不同ND中的多个NE(NE570A-C和G-H)抽象为(以表示)图5D的虚拟网络592之一中的单一NE570I。图5E示出了:在该虚拟网络中,NE570I耦合到NE570D和570F,他们都依然耦合到NE570E。图5F示出了根据一些实施例的以下情况:在不同ND(ND500A和ND500H)上实现多个VNE(VNE570A.1和VNE570H.1),并且多个VNE彼此耦合,以及集中式控制平面576将这些多个VNE加以抽象,使得他们表现为虚拟网络592之一中的单一VNE570T。因此,NE或VNE的抽象可以跨多个ND。尽管一些实施例将集中式控制平面576实现为单一实体(例如,单一电子设备运行的软件的单一实例),备选实施例可以出于冗余和/或可扩展性的目的将功能分散在多个实体上(例如,不同电子设备上运行的软件的多个实例)。类似于网络设备实现,可以用各种方式(例如,专用设备、通用(例如,COTS)设备、或混合设备)来实现集中式控制平面576上运行的电子设备,并且因此实现包括集中式可达性和转发信息模块579在内的网络控制器578。这些电子设备将类似地包括计算资源、一个或多个物理NIC的集合、以及其上存储有集中式控制平面软件的非暂时性机器可读存储介质。例如,图6示出了包括硬件640的通用控制平面设备604,硬件640包括一个或多个处理器642(通常是COTS处理器)的集合和网络接口控制器644(NIC;也被称为网络接口卡)(其包括物理NI646)、以及其中存储有集中式控制平面(CCP)软件650和控制路径循环检测组件651的非暂时性机器可读存储介质648。在使用计算虚拟化的实施例中,处理器642通常执行软件以实例化虚拟化层654和软件容器662A-R(例如,利用操作系统级别虚拟化,虚拟化层654表示操作系统的内核(或在基本操作系统上执行的垫片),其允许创建多个软件容器662A-R(表示单独的用户空间实例,也被称为虚拟化引擎、虚拟专用服务器或监禁(jail)),每个软件容器可用于执行一个或多个应用的集合;在完全虚拟化的情况下,虚拟化层654表示管理程序(有时称为虚拟机监视器(VMM))或在主机操作系统之上执行的管理程序,并且软件容器662A-R各自表示由管理程序运行的称为虚拟机的紧密隔离形式的软件容器,并且可以包括客户操作系统;对于准虚拟化,运行虚拟机的操作系统或应用可能会意识到存在虚拟化以用于优化目的)。同样,在使用计算虚拟化的实施例中,在操作期间,在虚拟化层654上的软件容器662A内执行CCP软件650的实例(示出为CCP实例676A)。在不使用计算虚拟化的实施例中,在“裸金属”通用控制平面设备604上执行在主机操作系统顶上的CCP实例676A。CCP实例676A的实例化以及虚拟化层654和软件容器662A-R(如果实现的话),被统称为软件实例652。在一些实施例中,CCP实例676A包括网络控制器实例678。网络控制器实例678包括:集中式可达性和转发信息模块实例679(其是向操作系统提供网络控制器578的上下文并与各种NE通信的中间件层)、以及中间件层上的CCP应用层680(有时被称为应用层)(提供各种网络操作所要求的情报,例如协议、网络情景察觉、以及用户接口)。在更为抽象的级别上,集中式控制平面576中的该CCP应用层680使用虚拟网络视图(网络的逻辑视图)来工作,且中间件层提供从虚拟网络到物理视图的转换。控制路径循环检测组件651可以由硬件640执行,以执行作为软件实例652(例如,控制路径循环检测实例681)的一部分的本发明的一个或多个实施例的操作。集中式控制平面576针对每个流基于CCP应用层680计算和中间件层映射来向数据平面580发送相关消息。流可以被定义为具有匹配给定比特模式的报头的数据包的集合;在该意义下,传统IP转发也是基于流的转发,其中,通过例如目的IP地址来定义流;然而,在其他实现中,用于流定义的给定比特模式可以在数据包报头中包括更多的字段(例如,10个或更多个)。数据平面580的不同ND/NE/VNE可以接收不同消息,并且因此接收不同的转发信息。数据平面580处理这些消息,并将恰当的流信息和相应动作编程到恰当NE/VNE的转发表(有时被称为流表)中,然后NE/VNE可以将进入的数据包映射到转发表中表示的流,并基于转发表中的匹配来转发数据包。诸如开放流之类的标准定义了用于消息的协议以及用于处理数据包的模型。用于处理数据包的模型包括:报头解析、数据包分类、以及做出转发决定。报头解析描述了如何基于已知的协议集合来解释数据包。一些协议字段用于构建匹配结构(或关键字),该匹配结构(或关键字)将在分组分类中使用(例如,第一关键字字段可以是源媒体访问控制(MAC)地址,以及第二关键字字段可以是目的MAC地址)。数据包分类涉及在存储器中执行查找,以通过基于转发表条目的匹配结构、或关键字来确定转发表中的哪个条目(也被称为转发表条目或流条目)最佳匹配数据包来对数据包进行分类。转发表条目中表示的很多流可以对应于/匹配分组是可能的;在该情况下,系统通常被配置为根据定义方案从很多转发表条目中确定一个转发表条目(例如,选择匹配的第一个转发表条目)。转发表条目包括匹配标准的特定集合(值集合或通配符、或者对数据包的什么部分应当与特定值/多个特定值/通配符进行比较的指示、如匹配能力所定义的-针对数据包报头中的特定字段或者对于某个其他数据包内容)以及在接收到匹配数据包时针对数据平面要采取的一个或多个动作的集合。例如,动作可以是:针对使用特定端口的数据包,将报头推压到数据包上,对数据包进行泛洪(flood),或简单地丢弃该数据包。从而,具有特定传输控制协议(TCP)目的端口的IPv4/IPv6数据包的转发表条目可以包含指定这些数据包应当被丢弃的动作。基于在数据包分类期间识别出的转发表条目,做出转发决定并执行动作通过针对数据包来执行在匹配的转发表条目中识别出的动作集合来发生。然而,当未知数据包(例如,如开放流用语中使用的“错失分组”或“匹配错失”)到达数据平面580处时,通常向中心控制平面576转发该数据包(或数据包报头和内容的子集)。然后集中式控制平面576将转发表条目编程到数据平面580中,以适应属于该未知数据包的流的数据包。一旦集中式控制平面576将特定转发表条目编程到数据平面580中,则具有匹配凭证的下一个数据包将匹配该转发表条目并采取与所匹配条目相关联的动作集合。网络接口(NI)可以是物理或虚拟的;以及在IP的上下文中,接口地址是向NI指派的IP地址,不论是物理NI还是虚拟NI。虚拟NI可以与物理NI相关联、与另一虚拟接口相关联、或者是独立的(例如,环回接口、点对点协议接口)。NI(物理或虚拟)可以是有编号的(具有IP地址的NI)或无编号的(不具有IP地址的N[)。环回接口(及其环回地址)是经常用于管理用途的NE/VNE(物理或虚拟)的特定类型的虚拟NI(和IP地址);其中,这种IP地址被称为节点环回地址。向ND的NI指派的IP地址被称为该ND的IP地址;在更多粒度级别上,向ND上实现的NE/VNE指派的NI指派的IP地址可被称为该NE/VNE的IP地址。已经在计算机存储器内的数据位的事物的算法和符号表示方面呈现了前面详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用来最有效地向本领域其他技术人员传达他们工作的实质的方式。算法在这里通常被设想为导致期望结果的自相一致的事物顺序。事物是需要物理量的物理操纵的事物。通常(尽管并不一定),这些量采用能够被存储、传送、组合、比较和以其它方式操纵的电或磁信号的形式。已证明为了方便,主要为通常使用的原因,这些信号可以利用比特、值、元素、符号、特征、项、数字等来进行表示。然而,应当记住,所有这些和类似的术语将与适当的物理量相关联,并且仅仅是应用于这些量的方便的标记。除非如上述讨论中显而易见的另行明确声明,否则应当意识到:在说明书全文中,使用诸如“处理”或“运算”或“计算”或“确定”或“显示”等之类的术语的讨论指代计算机系统或类似电子计算设备的动作和进程,该计算机系统或类似电子计算设备将表示计算机系统的寄存器和存储器中的物理(电子)量的数据操作和变换为类似表示为计算机系统存储器或寄存器或其他这种信息存储、传输或显示设备中的物理量的其他数据。本文呈现的算法和显示并非与任何特定计算机或其他装置固有地相关。各种通用系统可以与根据本文教导的程序一起使用,或者可以证明能够方便地构造更专门的装置来执行所需的方法事物。从上面的描述中可以看出各种这些系统所需的结构。此外,没有参考任何特定编程语言描述本发明的实施例。应当理解,可以使用各种编程语言来实现如本文所述的本发明实施例的教导。本发明的一个实施例可以是一种制品,其中非暂时性机器可读介质(例如微电子存储器)上存储有对一个或多个数据处理组件(这里统称为“处理器”)进行编程的指令(例如,计算机代码)来执行上述操作。在其他实施例中,这些操作中的一些可以由包含硬连线逻辑的特定硬件组件(例如,专用数字滤波器块和状态机)来执行。备选地,这些操作可以由编程数据处理组件和固定硬连线电路组件的任何组合来执行。在前面的说明书中,已经参照特定具体实施例对本发明的实施例进行了描述。显然的是,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改。因此,说明书和附图应当被看做说明性意义的而不是限制性意义的。在整个说明书中,已经通过流程图呈现了本发明的实施例。应当理解,这些流程图中描述的事物的顺序和事物仅用于说明目的,而不是作为对本发明的限制。本领域普通技术人员将认识到,在不脱离所附权利要求中阐述的本发明的更广泛精神和范围的情况下,可以对流程图进行变化。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1