用于逻辑路由器的动态路由的制作方法

文档序号:11852633阅读:325来源:国知局
用于逻辑路由器的动态路由的制作方法与工艺

在传统物理联网中,路由出现了三种类型:连接路由、静态路由和动态路由。连接路由是基于本地接口信息自动确定的那些路由。当接口具有在子网中配置的地址时,则路由器具有与该子网的直接连接路由。静态路由是在路由器处手动配置的那些路由,而动态路由是经由路由协议(例如,BGP、OSPF、IGP等)从其他路由器获知的。因为这将可能导致向路由器呈现对于相同IP地址的多个路由,所以路由器为了在这些路由之间进行选择而执行各种处理。

虚拟化网络也可以具有路由器,被称为逻辑路由器。然而,逻辑路由器的先前实现方式只使用基于逻辑路由器的端口上配置的IP前缀而产生的连接路由。向逻辑路由器增加不同类型的路由将造成需要对逻辑路由器的附加处理技术的问题,这可能不容易被经常用来实现这样的逻辑路由器的软件转发元件执行。



技术实现要素:

一些实施例提供实现逻辑路由器的相互连接和逻辑路由器之间的路由的传播的网络控制系统。在一些实施例中,逻辑路由器由一个或多个网络控制器管理,该网络控制器接收输入以定义逻辑路由器,并计算对于逻辑路由器的附加路由信息。附加路由信息的计算可以包括对于一个逻辑路由器到不同逻辑路由器而指定的路由的传播。为了在由一些实施例的网络控制器所管理的物理网络中实现逻辑路由器,网络控制器产生对于逻辑路由器的路由表,并且将路由表分发到实现了逻辑路由器的网络中的各个元件。在一些实施例中,网络控制器分发该路由表(包括动态路由信息)作为(i)分发到受管理的转发元件的流条目以及(ii)定义对于虚拟化容器(例如,名称空间)的路由表的数据元组,该虚拟化容器作为用于与外部网络通信的L3网关进行操作。

在一些实施例中,网络控制系统允许有几个不同类型的逻辑路由器,这些逻辑路由器可以具有不同的预定义的功能。一些实施例分层地布置这些不同类型的逻辑路由器。例如,在一些实施例中,第一类型的逻辑路由器连接到逻辑网络中的逻辑交换机,而第二类型的逻辑路由提供在共享虚拟化基础结构和共享虚拟化基础结构外部的其他网络之间的连接,在该共享虚拟化基础结构中实现逻辑路由器。

具体地,一些实施例使得租户逻辑路由器和供应商逻辑路由器能够在虚拟化网络中实现。一些实施例的供应商逻辑路由器由数据中心供应商管理,以处理进出数据中心(例如,多租户数据中心)的流量,其中在该数据中心中实现了各种租户逻辑网络。在一些实施例中,这些供应商逻辑路由器可以具有与多个租户逻辑路由器的连接以及在网关(即,具有与外部网络中的路由器的物理连接的主机)中实现的与外部网络的连接。一些实施例的租户逻辑路由器向单个逻辑路由网络提供逻辑路由功能,从而允许租户连接多个逻辑交换机(租户机器(例如,虚拟机)附连到这些逻辑交换机)。一些实施例中,租户逻辑路由器还可以连接到供应商逻辑路由器,以便接收来自外部主机的流量并且向外部主机发送流量。对逻辑路由器功能的这些限制使得数据中心管理员能够经由供应商逻辑路由器的配置来管理进入和离开数据中心的流量的处理。

为了实现逻辑路由器的相互连接,网络控制器实现连接的逻辑路由器之间的动态路由。在一般情况下,当第一逻辑路由器连接到第二逻辑路由器时,网络控制器自动地将路由从第一逻辑路由器传播到第二逻辑路由器,反之亦然。因此,如果第一逻辑路由器存储有将特定子网中的网络地址路由到逻辑路由器的特定端口的连接路由,则逻辑控制器自动地用新路由填充第二逻辑路由器,该新路由将第一逻辑路由器(即,第一逻辑路由器的特定逻辑端口)指定为对于特定子网中的网络地址的下一跳。类似地,对于附连到第二逻辑路由器的子网的连接路由被自动传播到第一逻辑路由器作为动态路由,该动态路由指定第二逻辑路由器作为下一跳。

在一些实施例中,网络控制器动态地传播的路由包括连接路由以及手动输入的静态路由。如上所述,可以基于逻辑路由器的配置(即,基于逻辑端口到特定子网的附连)自动地产生对于逻辑路由器的连接路由。在一些实施例中,静态路由是在逻辑路由器所属的逻辑网络的管理员手动输入后由网络控制器接收的。对于特定范围的网络地址,静态路由可能指定要向其发送包的特定下一跳地址。作为一个例子,如果逻辑路由器具有到其他逻辑路由器的多个连接、或与具有多个物理路由器的物理网络的连接,则对于特定范围的网络地址,管理员可能想要指定这些路由器中的哪一个应当是下一跳。

一些实施方案的网络控制器存储逻辑路由器之间的连接作为逻辑路由器的配置数据的一部分。因此,当接收到对于第一逻辑路由器的配置状态路由信息时,网络控制器识别是否将该信息作为动态路由传播到任何其他逻辑路由器。对于供应商逻辑路由器和租户逻辑路由器的情况,一些实施例对在逻辑路由器之间动态地传播的路由设置了限制。具体地,当租户逻辑路由器连接到供应商逻辑路由器时,一些实施例将租户逻辑路由器的连接路由动态地传播到供应商逻辑路由器,使得供应商逻辑路由器将包发送到由连接路由指定给那个租户逻辑路由器的子网。然而,网络控制器不是动态地传播指定关于连接到供应商逻辑路由器的各种其他租户网络的信息的路由,而是仅将动态缺省路由传播到这样的租户逻辑路由器,该逻辑租户路由器将没有通过更多特定路由进行路由的所有包发送到供应商逻辑路由器。

在一些实施例中,不同的逻辑路由器可以具有不同的主网络控制器,该主网络控制器执行对于逻辑路由器的状态计算。也就是说,对于特定逻辑路由器的主网络控制器获取对于逻辑路由器的输入配置状态,并产生输出状态。主网络控制器产生用来实现逻辑路由器的流条目和/或其它数据元组,并且将该数据分发到网络元件以便这些网络元件实现逻辑路由器。在一些实施例中,对于逻辑路由器的输入配置状态在网络控制系统中的网络控制器之间共享,并且路由仅被对于特定逻辑路由器的主网络控制器动态地传播到特定逻辑路由器。

前述的发明内容旨在作为本发明的一些实施例的简要介绍。这并不意味着是对该文献中公开的所有创造性主题的介绍或概述。接下来的具体实施方式和具体实施方式中所参考的附图将进一步描述发明内容中描述的实施例和其他实施例。因此,为了理解本文档中描述的所有实施例,需要对发明内容、具体实施方式和附图进行全面检阅。此外,要求保护的主题不受发明内容、具体实施方式和附图中的说明性细节的限制,而是要由所附权利要求书来限定,因为所要求保护的主题可以在不偏离主题的精神的情况下以其他特定形式来实施。

附图说明

附加的权利要求中描述了本发明的新颖特征。但是,为了说明的目的,下面的图中描述了本发明的几个实施例。

图1概念性地示出一些实施例的网络控制器100的结构。

图2概念性地示出对于两个不同租户的一组逻辑网络结构的示例。

图3概念性地示出图2的逻辑网络在一些实施例的受管理网络中的实现方式。

图4概念性地示出一些实施例的用于配置受管理的转发元件和L3网关以便实现逻辑网络的网络控制系统。

图5概念性地示出数据通过一些实施例的分层网络控制系统的传播。

图6概念性地示出一些实施例的控制器接收逻辑网络配置。

图7概念性地示出控制器接收输入配置数据以将如图6中所示地创建的TLR附连到PLR。

图8概念性地示出TLR-PLR连接的结果,因为该结果与PLR数据有关。

图9概念性地示出一些实施例的用于实现PLR-TLR连接的处理,该处理由作为TLR和PLR两者的主控器的网络控制器执行。

图10和图11概念性地示出如在图3中所示的受管理网络中实现的、由第一跳MFE对于被图2中所示的PLR处理的两个不同包的包处理。

图12概念性地示出启用动态路由的、包括两个连接的逻辑路由器的逻辑网络的示例。

图13概念性地示出一些实施例的网络控制器、以及当接收到对于逻辑处理器的新路由时在处理器执行逻辑路由器处理时通过处理器的数据流。

图14概念性地示出分别作为第一逻辑路由器和第二逻辑路由器的主控制器的两个网络处理器、以及当在第一控制器处接收到对于第一逻辑路由器的新路由时通过控制器的数据流。

图15概念性地示出由一些实施例的网络控制器执行的处理以处理在控制器处接收到的对于逻辑路由器的新输入路由。

图16概念性地示出包括全部连接在相同子网上的三个逻辑路由器的逻辑网络。

图17反映了对于图16的三个逻辑路由器的、在这三个逻辑路由器的各自的主控制器已经(i)产生对于每个逻辑路由器的连接路由、(ii)接收或产生对于每个逻辑路由器的静态缺省路由、以及(iii)在逻辑路由器之间动态地传播路由之后的初始路由表。

图18和图19示出接收对于图16的三个逻辑路由器之一的新静态路由的网络控制系统以及这些路由如何通过图17的路由表进行传播的示例。

图20概念性地示出用以实现本发明的一些实施例的电子系统。

具体实施方式

在本发明的下面的详细描述中,本发明的大量细节、示例和实施例被阐述和描述。但是,对本领域技术人员而言清楚和明显的是,本发明不限于阐述的实施例,以及本发明可以在没有一些所讨论的具体细节和示例的情况下被实施。

一些实施例提供实现逻辑路由器的相互连接以及在逻辑路由器之间的路由的传播的网络控制系统。在一些实施例中,逻辑路由器由一个或多个网络控制器管理,该网络控制器接收输入以定义逻辑路由器,并计算对于逻辑路由器的附加路由信息。附加路由信息的计算可以包括对于一个逻辑路由器到不同逻辑路由器指定的路由的传播。为了在由一些实施例的网络控制器所管理的物理网络中实现逻辑路由器,网络控制器产生对于逻辑路由器的路由表,并且将路由表分发到实现了逻辑路由器的网络中的各个元件。在一些实施例中,网络控制器分发这个路由表(包括动态路由信息)作为(i)分发到受管理的转发元件的流条目以及(ii)定义对于虚拟化容器(例如,名称空间)的路由表的数据元组,该虚拟化容器作为用于与外部网络通信的L3网关操作。

在一些实施例中,网络控制系统允许几种不同类型的逻辑路由器,这些逻辑路由器可以具有不同的预定义的功能。一些实施例分层地布置这些不同类型的逻辑路由器。例如,在一些实施例中,第一类型的逻辑路由器连接到逻辑网络中的逻辑交换机,而第二类型的逻辑路由器提供在共享的虚拟化基础结构和共享的虚拟化基础结构外部的其他网络之间的连接,在该共享的虚拟化基础结构中实现逻辑路由器。

具体地,一些实施例使得租户逻辑路由器和供应商逻辑路由器能够在虚拟化网络中实现。一些实施例的供应商逻辑路由器由数据中心供应商管理,以处理进出数据中心(例如,多租户数据中心)的流量,其中在该数据中心中实现了各种租户逻辑网络。在一些实施例中,这些供应商逻辑路由器可以具有与多个租户逻辑路由器的连接,以及在网关中实现的与外部网络的连接(即,具有与外部网络中的路由器的物理连接的主机)。一些实施例的租户逻辑路由器向单个租户逻辑网络提供逻辑路由功能,从而允许租户连接到多个逻辑交换机(租户机器(例如,虚拟机)附连到这些逻辑交换机)。在一些实施例中,租户逻辑路由器还可以连接到供应商逻辑路由器,以便从外部主机接收流量和向外部主机发送流量。对逻辑路由器功能的这些限制使得数据中心管理员能够经由供应商逻辑路由器的配置来管理进入和离开数据中心的流量的处理。

图1概念性地示出了一些实施例的这样的网络控制器100的结构。如图所示,网络控制器100包括输入接口(例如,API)105、表映射引擎110、路由处理引擎115、状态分发接口120、和状态共享接口123。此外,网络控制器100包括状态存储器125。在一些实施例中,状态存储器125存储关于逻辑网络的一个或多个逻辑转发元件(例如,逻辑交换机、逻辑路由器)的信息,该逻辑网络在由控制器100管理的虚拟化物理网络中实现。

在一些实施例中,网络控制器100是管理许多受管理的转发元件的几个控制器之一,这些受管理的转发元件实现了跨许多主机的多个逻辑网络。例如,逻辑网络可以包括附连到逻辑路由器的几个逻辑交换机,其中许多虚拟机(VM)附连到逻辑交换机。VM驻留在许多主机上,可能与其他逻辑网络的VM并排。受管理的转发元件(MFE)在每一个主机上操作(例如,作为驻留在主机的虚拟化软件中的软件转发元件),以便处理向主机上的VM发送的包和从主机上的VM接收的包。在一些实施例中,特定主机上的MFE存储信息以便实现对于具有驻留在主机上的VM的各种不同逻辑网络的逻辑转发元件。

网络控制器100可以管理这些逻辑转发元件中特定的一个(或几个)(或作为整体的逻辑网络),并且因此在状态存储器125中存储关于逻辑转发元件的信息。在一些实施例中,网络控制器100接收定义该网络控制器100管理的逻辑转发元件的配置信息,并且计算用于向主机处的MFE分发的附加信息以便实现逻辑网络。状态存储器125存储对于由控制器100管理的所有逻辑转发元件的配置状态和计算状态信息。另外,在一些实施例中,其他控制器与网络控制器100共享对于不由控制器100管理的其他逻辑网络的配置状态信息。但是,在这样的一些实施例中,控制器不共享计算状态信息,并且每一个控制器仅计算其管理的逻辑网络的状态。

在一些实施例中,输入接口105是应用编程接口(API),通过该应用编程接口,网络控制器100接收配置信息(例如,逻辑路由器的逻辑端口的配置、对于逻辑路由器的静态路由等)。配置信息可以由登录到网络控制器中的管理员直接输入,或通过管理应用将管理员输入的信息转换为API命令以发送到控制器。当接收到这个信息时,输入接口将配置数据存储到状态存储器125中。在一些实施例中,每个逻辑转发元件(例如,逻辑路由器)被存储为对象,并且路由被存储为由逻辑路由器对象拥有的对象。为了在状态存储器125中定义所配置的路由,一些实施例存储路由的类型(例如,连接、静态、动态)、由路由控制的网络地址或地址范围、对于具有在由路由控制的范围内的网络地址的包的目的地(例如,下一跳地址、逻辑端口、放弃动作(drop action))、以及路由的优先级。

在一些实施例中,表映射引擎110执行对于由控制器100管理的逻辑转发元件的状态计算。这些状态计算可以包括产生流条目以实现逻辑转发元件、产生用于逻辑服务的数据元组和用于L3网关的路由表等。在一些实施例中,表映射引擎以在多组表之间执行连接操作的表映射语言来实现(诸如nLog或datalog(数据记录))。此外,一些实施例的表映射引擎基于与其他逻辑路由器的连接产生动态路由,并且这些路由被其他逻辑路由器(例如,静态路由和连接路由)存储。当一些实施例的表映射引擎110接收到对于逻辑路由器的包括一个或多个动态路由或静态路由的一组路由(即,包括除了那些基于逻辑路由器的逻辑端口自动定义的路由以外的路由)时,表映射引擎利用路由处理引擎115将输入的一组路由转换为输出的一组路由。

一些实施例的路由处理引擎115接收来自表映射引擎的一组路由(例如,由表映射引擎或网络控制器API基于逻辑路由器的逻辑端口所连接到的子网而自动产生的路由、通过网络控制器API输入的静态路由),并且对路由执行递归遍历处理,以便标识对于由逻辑路由器路由的每一个网络地址范围的最终逻辑目的地。当多个输入路由对于特定网络地址或地址范围提供相矛盾的信息时,一些实施例的路由处理引擎115确定哪一个路由具有更高的优先级。2014年3月14日提交的美国专利申请14/214,545中更加详细地描述了一些实施例的路由处理引擎,其全部内容通过引用合并于此。

当接收到从路由处理引擎输出的一组路由时,一些实施例的表映射引擎110产生要向网络元件(例如,驻留在主机130上的受管理的转发元件和受管理的网关)分发的信息,以便网络元件实现逻辑路由器。该数据可以包括发送到受管理的转发元件的流条目(例如,指定具有到特定逻辑端口的特定网络地址的转发包)、以及对于网关的路由表信息(例如,定义对于在名称空间中操作的IP栈的路由表的数据元组)。除了实现逻辑路由表的流条目(指定到特定逻辑端口的转发包)以外,一些实施例的表映射引擎110还产生将逻辑端口映射到物理接口的流条目,使得包可以跨受管理的物理网络在受管理的转发元件之间发送。

控制器100将由表映射引擎110产生的对于逻辑处理器的数据(以及例如对于其他逻辑转发元件(诸如附连到逻辑路由器的逻辑交换机)的其他数据)经由状态分发接口120分发到主机130。在一些实施例中,控制器100通过其他网络控制器的分层结构来分发数据。例如,在一些实施例中,每一个逻辑网络(或每一个逻辑转发元件)由特定的控制器(该控制器也可以管理其他逻辑网络)管理,并且每一个主机都由特定的控制器(该控制器也可以管理其他主机)管理。控制器100计算对于该控制器100管理的逻辑网络的状态(例如,流条目),并且将该数据分发到管理实现那些逻辑网络的主机的各个控制器。在其他实施例中,状态分发接口120与主机130直接接口连接以分发数据。

一些实施例的状态共享接口123允许控制器100与管理网络的各个受管理的转发元件的其他控制器135共享输入配置状态信息。在上面提到的分层网络控制系统中,状态共享接口123可以与状态分发接口120(即,控制器-控制器接口)相同。在一些实施例中,当控制器100通过API 105接收了输入配置状态(或接收了从主机向上发送的配置变化)时,控制器100与其他控制器共享这个输入状态信息,使得其他控制器可以计算对于它们管理的逻辑转发元件的输出状态。一些实施例共享输入配置状态,但不共享输出计算状态。

现在将描述网络控制器100的操作示例。在一些实施例中,用户输入对于逻辑网络的配置,该配置可以包括连接到逻辑路由器的几个逻辑交换机。每个逻辑交换机连接到逻辑路由器的逻辑端口,并且每个逻辑端口被分配了子网(即,网络地址范围)。此外,逻辑路由器端口中的至少一个端口连接到另一个逻辑路由器。逻辑控制器100通过输入接口105接收配置数据(包括逻辑路由器之间的连接)。

基于接收到的配置数据,输入接口105将配置状态存储在状态存储器125中。对于逻辑路由器,输入接口存储(1)对于每个逻辑端口的连接路由,用于将具有在为逻辑端口指定的范围内的网络地址的包路由到该逻辑端口,(2)在配置数据中单独指定的任何静态路由,以及(3)与其他逻辑路由器连接的指示。在一些实施例中,输入接口105还自动定义低优先级缺省路由,用以处理发送到其路由没有被以其他方式定义的网络地址的包。在其他实施例中,这样的缺省路由仅由用户输入来定义。

当检测到存储在状态存储器125中的配置状态的变化时,表映射引擎110开始产生用于分发到主机以便实现逻辑网络的新的数据元组。为了实现逻辑路由器之间的连接,一些实施例的表映射引擎110基于对于连接逻辑路由器的输入配置数据自动产生对于输入逻辑路由器的动态路由。连接逻辑路由器存储一组路由(例如,它自己的连接路由和静态路由),该组路由可以通过控制器100输入,或通过其他控制器135之一输入并与控制器100共享。

表映射引擎110将这些路由传播到输入逻辑路由器,使用连接路由器端口的地址作为下一跳网络地址。例如,如果连接逻辑路由器存储了将特定子网内的网络地址路由到逻辑路由器的特定端口的连接路由,则表映射引擎110自动产生对于输入逻辑路由器的新路由,该新路由指定连接逻辑路由器(即,连接逻辑路由器的特定逻辑端口的地址)作为特定子网中的网络地址的下一跳。一些实施例还将一个逻辑路由的手动输入的静态路由传播到另一个逻辑路由器。

同样地,由表映射引擎110或不同网络控制器135的表映射引擎将对于附连到输入逻辑路由器的子网的连接路由以及输入逻辑路由器的静态路由动态地传播到连接逻辑路由器,作为将输入逻辑路由器指定为下一跳的动态路由。在一些实施例中,不同的逻辑路由器可以具有执行对于逻辑路由器的状态计算的不同的主网络控制器。也就是说,对于特定逻辑转发元件的主网络控制器获取对于逻辑转发元件的输入配置状态,并且产生输出状态(例如,用于实现逻辑转发元件的流条目和/或其他数据元组)。因此,从第一逻辑路由器到第二逻辑路由器的路由的动态传播可以由控制器100执行,而从第二逻辑路由器到第一逻辑路由器的路由的传播可以由其他控制器135之一执行

对于供应商逻辑路由器和租户逻辑路由器的情况,一些实施例对在逻辑路由器之间动态地传播的路由设置了限制。具体地,当租户逻辑路由器连接到供应商逻辑路由器时,一些实施例将租户逻辑路由器的连接路由动态地传播到供应商逻辑路由器,使得供应商逻辑路由器会将包发送到由连接路由指定给该租户逻辑路由器的子网。但是,网络控制器不是动态地传播指定关于连接到供应商逻辑路由器的各个其他租户网络的信息的路由,而是仅将动态缺省路由传播到这样的租户逻辑路由器,该租户逻辑路由器将没有通过更具体的路由以其他方式进行路由的所有包发送到供应商逻辑路由器。

在控制器100的操作示例中,因为定义了对于输入逻辑路由器的动态路由(和/或静态路由),表映射引擎110将路由遍历分流到路由处理引擎115。具体地,表映射引擎110将输入的一组路由(即,由配置状态定义的那些路由,包括动态路由)发送到路由处理引擎120。

路由处理引擎115根据接收到的输入的一组路由产生输出的一组路由。具体地,路由处理引擎标识未在使用中的路由(例如,对于相同的一组网络地址,被较高优先级的路由取代的较低优先级的路由),并且递归地遍历这一组路由以标识对于每一组网络地址的最终动作(例如,放弃包动作、向其发送包的最终输出端口)。路由处理引擎115将最终路由信息返回到表映射引擎110。

表映射引擎110使用最终路由信息产生定义对于主机130的逻辑路由器的实现方式的流条目和/或数据元组。表映射引擎110将产生的这些数据元组提供到状态分发接口120,用以分发到主机130(例如,直接分发到主机、通过分层网络控制系统等)。

上述说明书介绍了一些实施例的用于管理具有静态路由的逻辑路由器的网络控制器。下面将描述几个更具体的实施例。首先,部分I介绍了经由一些实施例的网络控制系统的逻辑网络的实现和配置。然后,部分II介绍了一些实施例的不同类别的逻辑路由器,以及部分III介绍了一些实施例中的逻辑路由器之间的路由的动态传播。最后,部分IV介绍了用以实现本发明的一些实施例的电子系统。

I.逻辑网络的配置

在一些实施例中,网络控制器(例如,上面通过参考图1描述的控制器)是用来管理在受管理的物理网络(例如,诸如企业站点的私人数据中心、公共数据中心等)中实现的许多逻辑网络的网络控制系统的一部分。在这样的受管理的网络中,不同的租户配置不同的逻辑网络,其中网络控制系统以虚拟化的方式实现在相同的物理网络上,同时保持逻辑网络之间的隔离。此外,一些这样的受管理的网络使用供应商逻辑路由器来管理逻辑网络中的虚拟机和外部主机(即,不是租户逻辑网络的一部分并且位于受管理的网络之外的主机)之间的连接。为了向这样的外部主机发送流量和从这样的外部主机接收流量,租户将他们的逻辑网络配置为连接到供应商逻辑路由器。

图2概念性地示出了对于两个不同租户的一组逻辑网络结构200和250的示例。第一逻辑网络200包括两个逻辑交换机205和210以及逻辑路由器215。逻辑交换机205和210中的每一个逻辑交换机连接几个虚拟机(在这种情况下,通过每个逻辑交换机连接两个虚拟机(VM),尽管很多网络将具有更多的附连到每个逻辑交换机的VM),并且逻辑路由器215将两个逻辑交换机(即,逻辑层2域)连接在一起。此外,逻辑路由器215将逻辑网络200连接到数据中心供应商逻辑路由器220。相似地,第二逻辑网络250也包括连接两个逻辑交换机255和260的逻辑路由器265。逻辑路由器265也连接到数据中心供应商逻辑路由器220。

数据中心供应商逻辑路由器220除了连接到逻辑路由器215和265之外,还包括连接到外部网络225(或连接到分离的外部网络)的两个端口。在各个示例中,数据中心供应商逻辑路由器可以仅具有连接到外部网络的一个端口或多个端口。

在一些实施例中,每个逻辑网络是由管理员(例如,由每一个租户)产生的网络的抽象概念,并且逻辑网络在受管理的物理基础结构(例如,在多租户数据中心中)中以虚拟化的分布式的方式被实现。也就是说,连接到逻辑交换机的虚拟机可以驻留在基础结构中的各个不同主机上,以及在这些主机上操作的物理的受管理的转发元件(例如,软件虚拟交换机)实现一些或全部逻辑转发元件(逻辑交换机、逻辑路由器等)。因此,相同的主机可以托管来自逻辑网络200和250两者的VM,并且这些主机上的MFE将实现逻辑转发元件205-215以及逻辑转发元件255-265。

在一些实施例中,租户逻辑路由器连接一组逻辑交换机,虚拟机在逻辑上附连到该组逻辑交换机。每一个逻辑交换机(或逻辑交换机所附连到的逻辑路由器的每一个逻辑接口)代表了特定的一组IP地址(即,子网),并且被实现在跨一组受管理的转发元件(MFE)的受管理的网络中,其中虚拟机在物理上连接到(例如,通过虚拟接口)该组受管理的转发元件。在一些实施例中,一些逻辑路由器以集中方式(例如,在一个或多个冗余网关中)实现,而不是跨具有逻辑交换机的MFE分布。在其他实施例中,逻辑路由器同样由连接到虚拟机的MFE以分布式的方式来实现。具体地,一些实施例需要租户逻辑路由器和供应商逻辑路由器两者都以分布式的方式来实现。

对于也经由一个或多个端口连接到外部网络的供应商逻辑路由器,通过使用一个或多个网关实现与外部网络的连接。在一些实施例中,网关负责从受管理的网络向外部不受管理的物理网络发送数据流量,以及处理从外部网络发送到受管理的网络中的流量。

图3概念性地示出了一些实施例的受管理的网络300中的逻辑网络200和250的实现方式。如图所示,受管理的网络300的物理基础结构包括用于托管虚拟机的四个主机305-320、和用于托管L3网关的两个网关主机325-330。逻辑网络200和250的VM驻留在主机305-320上,被实现在主机中操作的虚拟化软件(例如,管理器(hypervisor)、虚拟机监控器等)之上。连接到其他逻辑网络的附加虚拟机也可以驻留在受管理的网络的物理基础结构中的这些主机305-320中的一些或全部主机上,也可以驻留在图中未示出的其他主机上。

除了虚拟机外,主机305-320中的每一个主机操作受管理的转发元件(MFE)335-350。在一些实施例中,该MFE是在主机的虚拟化软件中操作的软件虚拟交换机(例如,Open vSwitch或其他软件转发元件)。因为逻辑路由器215、220和265是分布式的,MFE 335-350实现逻辑交换机205、210、255和260以及逻辑路由器215、220和265。

如图所示,因为来自逻辑网络200和250的VM驻留在第一主机305上,MFE 355实现(i)这些VM所连接到的逻辑交换机、(ii)这两个逻辑网络的其他逻辑交换机、(iii)这两个逻辑网络的逻辑路由器、以及(iv)供应商逻辑路由器。另一方面,第二主机310仅托管来自第一逻辑网络200的VM,并且因此MFE 340实现这个逻辑网络的逻辑转发元件205-215和供应商逻辑路由器220。在一些实施例中,在主机处的MFE中实现所有这些逻辑转发元件使得能够进行第一跳处理,在该第一跳处理中,对于包的大多数或所有逻辑转发元件处理在接收该包的第一MFE处被执行。因此,从VM 1发送到VM 3的包将通过逻辑交换机205到逻辑路由器215到逻辑交换机210,在MFE 355处被处理。MFE 335将对于包的逻辑交换机210的逻辑出口端口标识为VM 3所附连到的端口,并且将该出口端口映射到至主机315处的MFE 345的隧道。对于从逻辑网络200中的VM 1发送到逻辑网络250(其中发送者可能没有意识到是在被托管在相同的虚拟化基础结构上的逻辑网络中)中的VM 7的包,MFE 355将处理通过逻辑交换机205到逻辑路由器215到供应商逻辑路由器220、然后通过逻辑路由器265进入逻辑网络250以及接下来进入逻辑交换机260的包,这个时候该包将被通过隧道发送到MFE 350。

对于发送到外部目的地的流量(即,不在逻辑网络200或250中),MFE将逻辑路由器的逻辑出口端口标识为连接到外部网络220的端口之一。然后,MFE依赖于外部目的地映射到哪个端口(即,依赖于供应商逻辑路由器220的路由表),将该流量发送到网关主机325或330之一。在一些实施例中,网关主机325和330中的每一个均托管具有存储路由表(以及,例如,剩余的网络堆栈)能力的虚拟化容器(例如,名称空间)355和360。这些虚拟化容器各自对应于连接到外部网络的供应商逻辑路由器的特定端口,处理经由那个端口发出到受管理网络之外的流量或经由那个端口进入网络的流量。

此外,虚拟化容器355和360中的每一个操作路由通告应用(例如,BGP守护进程)。一些实施例的路由通告应用使用动态路由协议向外部路由器(即,对于连接到供应商逻辑路由器的租户逻辑路由器的逻辑端口的子网)通告路由,以便吸引对于由那些路由指定的网络地址的流量。在2014年3月14日提交的美国专利申请14/214,545中更加详细地描述了一些实施例的路由通告应用,其全部内容通过引用合并于此。

在一些实施例中,网关主机325和330也操作MFE 365和370。这些MFE对于在网关处接收到的来自外部网络220的包执行第一跳处理。例如,当接收到来自物理路由器的包时,MFE首先基于包的目的地MAC地址,将包发送到合适的名称空间(因为多个逻辑路由器可以具有在网关主机上操作的网关),该名称空间执行包的进入处理并且将包发送回到MFE。在这个时候,包进入逻辑网络,并且MFE执行逻辑网络处理(通过供应商逻辑路由器、适合的租户逻辑路由器和适合的逻辑交换机,以便标识目的地逻辑出口端口),然后通过隧道将包发送到适合的MFE以传递到目的地VM。

如上所述,在一些实施例中,这些MFE和网关是由网络控制系统来配置的。网络控制系统中的一个或多个网络控制器接收由用户/管理员输入的网络配置并且将这个信息转化为可以被MFE和网关主机使用的流条目和数据元组,以及将数据元组分发到主机。

图4概念性地示出了一些实施例的用于配置受管理的转发元件和L3网关以便实现逻辑网络的这样的网络控制系统400。如图所示,逻辑控制系统400包括输入转换控制器405、逻辑控制器410、物理控制器415和420、主机425-440和网关主机445。如图所示,主机425-440和网关主机445包括可以实现如上述图所示的逻辑转发元件的受管理的转发元件。网关主机445还包括名称空间,该名称空间实现用于受管理的网络的逻辑路由器的路由表的至少一部分。本领域技术人员将认识到,各种控制器和主机的很多其他不同组合对于网络控制系统400是可能的。

在一些实施例中,网络控制系统中的每一个控制器是具有用作输入转换控制器、逻辑控制器和/或物理控制器的功能的计算机(例如,具有基于x86的处理器)。替代地,在一些实施例中,一个给定的控制器可能只具有作为控制器类型中的特定一种类型操作的功能(例如,作为物理控制器)。此外,控制器的不同组合可以运行在相同物理机器中。例如,输入转换控制器405和逻辑控制器410可以在相同的计算设备中运行,数据中心管理应用与该计算设备交互(或管理员与该计算设备直接交互)。

一些实施例的输入转换控制器405包括转换从用户接收到的网络配置信息的输入转换应用。虽然在图4中示出了接收直接来自用户的信息,但在一些实施例中,用户与数据中心管理应用交互,该数据中心管理应用又将网络配置信息传送到输入转换控制器。

例如,用户可以指定诸如图2中示出的逻辑网络200或250的网络拓扑结构。对于每一个逻辑交换机,用户指定连接到逻辑交换机的机器(即,将VM分配到逻辑交换机的哪个逻辑端口)。用户还可以指定哪个逻辑交换机附连到到任何逻辑路由器、用于连接到外部网络或连接到其他逻辑路由器(例如,连接到供应商逻辑路由器)的逻辑路由器的一个或多个逻辑端口、和逻辑路由器的任何配置细节。例如,一些实施例使得用户能够指定对于逻辑路由器的策略。在一些实施例中,输入转换控制器405将接收到的网络拓扑结构转换成将网络拓扑结构描述为一组数据元组的逻辑控制面数据。例如,条目可以说明特定的MAC地址A位于特定的逻辑交换机的第一逻辑端口X处、租户逻辑路由器Q位于特定的逻辑交换机的第二逻辑端口Y处、或租户逻辑路由器Q的逻辑端口G连接到供应商逻辑路由器。

在一些实施例中,每个逻辑转发元件(例如,每个逻辑路由器、逻辑交换机等)由特定逻辑控制器(例如,逻辑控制器410)管理。一些实施例的逻辑控制器410将定义逻辑网络和组成逻辑网络的逻辑转发元件(例如,逻辑路由器、逻辑交换机)的逻辑控制面数据转换为逻辑转发面数据,并且将逻辑转发面数据转换为物理控制面数据。在一些实施例中,逻辑转发面数据包括在逻辑层次描述的流条目。对于在逻辑端口X处的MAC地址A,逻辑转发面数据可以包括这样的流条目,该流条目指定:如果包的目的地匹配MAC A,则将包转发到端口X。逻辑路由器Q的端口也具有MAC地址,并且创建相似的流条目以用于将具有这个MAC地址的包转发到逻辑交换机的端口Y。相似地,对于具有与IP地址范围C1-C24相关联的端口K的逻辑路由器,逻辑转发面数据可以包括这样的流条目,该流条目指定:如果包的目的地匹配IP C1-C24,则将该包转发到端口K。

在一些实施例中,逻辑控制器将逻辑转发面数据转换为通用物理控制面数据。尽管当网络包括大量的受管理的转发元件(例如,几百个或几千个)以实现逻辑转发元件时,以及当网络实现了大量的逻辑网络时,通用物理控制面数据使得一些实施例的网络控制系统能够缩放(scale)。为了在不考虑MFE的差别和/或MFE的位置细节的情况下表示物理控制平面数据,通用物理控制面对不同MFE的共同特点进行了抽象。

如上所述,一些实施例的逻辑控制器410将逻辑控制面数据转换为逻辑转发面数据(例如,包括对逻辑网络参数(诸如逻辑地址、逻辑入口端口等)的匹配的逻辑流条目),然后将逻辑转发面数据转换成通用物理控制面数据。在一些实施例中,逻辑控制器应用栈包括用于执行第一转换的控制应用和用于执行第二转换的虚拟化应用。在一些实施例中,这两个应用均使用用于将第一组表映射到第二组表的规则引擎。也就是说,不用的数据面被表示为表(例如,nLog表),并且控制器应用使用表映射引擎(例如,nLog引擎)在面之间进行转换(例如,通过对表应用连接操作)。在一些实施例中,输入表和输出表存储了定义不同数据面的多组数据元组。

在一些实施例中,逻辑路由器处理需要优选地不是由表映射引擎执行的各种类型的错误检测和递归路由遍历处理。具体地,对于逻辑路由器的配置数据包括必须被缩窄到一组输出路由的一组输入路由(类似于物理路由器的路由信息库),该组输出路由用来实现逻辑路由器的路由表(类似于物理路由器的转发信息库)。在一些实施例中,这一组输出路由是逻辑控制面数据的一部分。为了产生对于逻辑路由器的这个逻辑控制面数据,一些实施例的表映射引擎将路由处理分流给逻辑控制器中的单独的模块,该模块以更适合于这样的递归动作和错误检测/产生动作的语言来实现。路由处理引擎返回一组输出路由,表映射引擎将该组输出路由合并到其逻辑转发面条目的产生中。

物理控制器415和420中的每一个是一个或多个受管理的转发元件的主控器(例如,位于主机内)。在该示例中,两个物理控制器中的每一个是位于VM主机425-440处的两个受管理的转发元件的主控器。另外,物理控制器415是两个网关主机445和450的主控器,该网关主机托管了MFE和对于特定逻辑网络的活动的和备用的逻辑路由器。在一些实施例中,对于逻辑路由器的活动的和备用的主机由相同的物理控制器管理(如该图中一样),而在其他实施例中,单独的物理控制器管理逻辑网络的不同的网关主机。

在一些实施例中,物理控制器接收对于逻辑网络的通用物理控制面数据,并且将该数据转换为对于特定MFE的定制物理控制面数据,该特定MFE由物理控制器管理并且需要对于特定逻辑网络的数据。在其他实施例中,物理控制器将适合的通用物理控制面数据传递至MFE,该MFE具有自己执行该转换的能力(例如,以运行在主机上的机箱控制器的形式)。

通用物理控制面到定制物理控制面的转换包括对流条目中的各种数据的定制化。对于上述第一个示例,通用物理控制面将包括几个流条目(即,几个数据元组)。第一个条目说明了如果包与特定的逻辑数据路径组匹配(例如,基于在特定物理入口端口处接收的包),并且目的地地址匹配MAC A,则将包转发到逻辑端口X。在一些实施例中,这个条目在通用物理控制面和定制物理控制面中是相同的。产生附加的条目以匹配物理入口端口(例如,主机的虚拟接口)与逻辑入口端口X(对于从VM接收的具有MAC A的包),以及匹配目的地逻辑端口X与物理MFE的物理出口端口(例如,还是主机的虚拟接口)。但是,这些物理的入口端口和出口端口对于MFE在其上操作的主机来说是特定的。因此,通用物理控制面条目包括抽象的物理端口,而定制物理控制面条目包括特定MFE的实际物理接口(在很多情况下是虚拟接口)。

在一些实施例中,如图所示,网关主机也操作受管理的转发元件(例如,使用与VM主机425相同的包处理/虚拟交换软件)。这些MFE也接收使得MFE能够实现逻辑转发元件的来自物理控制器的物理控制面数据。此外,一些实施例通过分层网络控制系统将路由表数据分发到在网关主机中操作的名称空间。在一些实施例中,管理逻辑网络的逻辑控制器410选择对于逻辑路由器的网关主机(例如,使用负载均衡算法,该负载均衡算法跨一组主机散布对于各种逻辑网络的逻辑路由器)。

逻辑控制器410标识管理所选择的网关主机的物理控制器415,并且将路由表(以及用于层3处理的任何其他信息(诸如防火墙信息,NAT等))分发到所标识的物理控制器。在一些实施例中,将路由表作为一组数据元组进行分发。然后,物理控制器415将这些数据元组分发到网关主机445。网关主机将这些数据元组转换为供容器(例如,VM、名称空间)使用的路由表,该容器在网关主机上作为逻辑路由器或L3网关操作。

上面描述了一些实施例的分层网络控制系统,尽管其他实施例的网络控制系统仅包括单个控制器(或具有一个活动控制器和一个或多个备用控制器的控制器集群)。一些其他实施例包括网络控制器集群,该网络控制器集群与分配给主控制器的每一个逻辑转发元件或逻辑转发网络以及分配给主控制器的每一个受管理的转发元件一起操作,但是不具有图4中所示的分层布置。

图5概念性地示出了数据通过一些实施例的分层网络控制系统的传播。该图的左侧示出了到受管理的转发元件的数据流以实现逻辑网络的逻辑转发元件(例如,逻辑交换机、租户逻辑路由器和供应商逻辑路由器),而图的右侧示出了向网关主机传播路由表数据以便配置在网关主机(例如,对于供应商逻辑路由器)上作为L3网关操作的虚拟化容器(例如,名称空间)。

在左侧,输入转换控制器405通过API接收网络配置,该网络配置被转化为逻辑控制面数据。这个网络配置数据包括逻辑拓扑结构(诸如图2中示出的用于逻辑网络200的逻辑拓扑结构)。在一些实施例中,网络配置还可以包括用于逻辑路由器的一个或多个静态路由的规格,以及一个逻辑路由器与另一个逻辑路由的连接(例如,租户逻辑路由器到供应商逻辑路由器的连接)。网络配置指定了逻辑转发元件的各个端口。在一些实施例中,每一个逻辑交换机端口被分配了MAC地址和IP地址,每一个逻辑路由器端口被分配了MAC地址和IP地址,并且与特定子网相关联(IP地址属于该子网)。一些实施例要求相互连接的两个逻辑路由器端口必须与至少阈值特性的相同的子网相关联。

如图所示,逻辑控制面数据被逻辑控制器410(具体地,被逻辑控制器的控制应用)转化为逻辑转发面数据,并且接下来随后(被逻辑控制器的虚拟化应用)转化为通用物理控制面数据。在一些实施例中,这些转化在逻辑转发面处产生流条目(或定义流条目的数据元组),然后在通用物理控制面处增加对逻辑数据路径组(例如,逻辑交换机或逻辑路由器)的匹配。通用物理控制面还包括用于将通用物理入口端口(即,不是特定于任何特定MFE的端口的通用抽象)映射到逻辑入口端口和用于将逻辑出口端口映射到通用物理出口端口的附加流条目(或数据元组)。例如,为了将包转发到逻辑路由器,在通用物理控制面处的对于逻辑交换机的流条目将包括转发决定,该转发决定是当目的地MAC地址与逻辑路由器端口的MAC地址匹配时,将包发送到逻辑路由器所连接到的逻辑端口。

与先前段落中对于逻辑交换机的示例类似,逻辑路由器流条目基于对以下各项的匹配来标识逻辑出口端口:(1)逻辑路由器流水线(即,包已被转发到逻辑路由器)以及(ii)IP地址。在一些实施例中,基于在逻辑控制器处产生的对于逻辑路由器的路由表将IP地址映射到逻辑端口。对于转发到面向外部网络的逻辑路由器端口(例如,供应商逻辑路由器的端口)的包,通用物理控制面额外地包括用于将逻辑出口端口映射到目的地网关以及将包封装在至网关主机的隧道中的条目。

如图所示,物理控制器415(分层网络控制系统400中的几个物理控制器之一)将通用物理控制面数据转换为对于特定MFE的定制物理控制面数据,其中该物理控制器在主机425、430、445和450处管理这些特定MFE。这个转换包括在通用物理控制面数据中代入对于通用抽象的特定数据(例如,特定物理端口)。例如,在上述段落的示例中,端口集成条目被配置为指定适合于特定L3网关连接的物理层端口(例如,对于MFE在其上操作的特定主机的实际物理端口和隧道封装信息)。

在一些实施例中,在主机425处的MFE(由物理控制器415管理的几个MFE之一)执行将定制物理控制面数据转换为物理转发面数据。在一些实施例中,物理转发面数据是存储在MFE(例如,在诸如Open vSwitch的软件虚拟交换机中)中的流条目,该MFE针对这些流条目实际匹配所接收到的包。另外,为了在名称空间和其他网络实体(例如,VM)之间转发包,网关主机445处的MFE执行这样的转换。

图5的右侧示出了向网关主机(例如,主机445)而不是向MFE传播的数据以实现逻辑路由器(集中式逻辑路由器或对于分布式逻辑路由器的L3网关)。如图所示,逻辑控制器410接收输入的一组路由,产生输出的一组路由,并且然后将输出的该组路由转换为来自这些路由的数据元组。

在一些实施例中,由来自用户(例如,管理员)输入的网络配置的输入转换控制器或逻辑控制器来产生输入的该组路由。当用户设计了逻辑网络(诸如,网络200)时,每一个逻辑交换机具有相关联的IP子网。因此,逻辑控制器对附连到逻辑交换机的这些逻辑路由器端口中的每一个端口产生路由(例如,如果IP=10.0.0.0/24,则发送到端口J)。此外,当租户逻辑路由器连接到供应商逻辑路由器时,当包与任何其他路由均不匹配时,一些实施例的逻辑控制器产生低优先级缺省路由以将包发送到供应商逻辑路由器。对于供应商逻辑路由器,当包与任何其他路由均不匹配时,一些实施例的逻辑控制器产生低优先级缺省路由以将包发送到连接到外部网络的端口之一。在一些实施例中,逻辑控制器可以具有标识外部网络中的物理路由器的数据,使得缺省路由将包发送到所标识的路由器。

此外,在一些实施例中,当第一逻辑路由器连接到第二逻辑路由器时,管理第一逻辑路由器的逻辑控制器产生对于第一逻辑路由器的动态路由。在一些实施例中,对于第二路由器的每一个连接路由,第一逻辑路由器的主控制器产生这样的动态路由,该动态路指定第一逻辑路由器将具有与连接路由的前缀匹配的目的地地址的包逻辑地转发到第二逻辑路由器。一些实施例也以相似的方式传播连接路由。在租户逻辑路由器(TLR)连接到供应商逻辑路由器(PLR)的特定情况下,一些实施例将对于逻辑交换机所附连到的每一个端口的TLR的连接路由动态地传播到PLR。但是,为了保持可能附连到PLR的多个逻辑网络之间的隔离,不将PLR路由传播到TLR。替代地,只有动态缺省路由被传播到TLR,该动态缺省路由将全部未以其他方式路由的包发送到PLR。

在计算对于逻辑路由器的流条目或路由数据元组前,一些实施例的逻辑控制器基于输入的一组路由产生输出的一组路由。在一些实施例中,路由控制器中的路由处理器递归地遍历所输入的该组路由以标识对于每组网络地址的最终输出动作。

对于分布式逻辑路由器,输出的该组路由中的许多被指定为逻辑控制面数据的一部分,并且被转换为物理控制面数据(如图5的左侧所示)。在这种情况下,用于分发到L3网关的路由数据元组还将包括到外部物理路由器的路由、和用于处理经由与这些外部路由器的连接接收到的输入包的路由。

除了这些路由自身,逻辑控制器410还产生定义逻辑路由器的一组数据元组。例如,当创建逻辑路由器时,一些实施例的逻辑控制器选择至少一个网关主机,然后创建新数据元组(即,记录),该新数据元组指定对于逻辑路由器的在主机上的新名称空间(或其他容器)。此外,一些实施例在数据元组中指定对于名称空间启用路由(相对于或者附加于诸如DHCP的其他服务)。

一旦逻辑控制器410创建了数据元组并且标识了将要接收数据元组的网关主机(或主机),则逻辑控制器标识管理网关主机的物理控制器。如上所述,像VM主机425-440一样,每一个网关主机具有所分配的主物理控制器。在图4的示例中,网关主机由物理控制器415管理,因此其他物理控制器420不接收逻辑路由器数据元组。为了将逻辑路由器配置数据供应给网关主机,一些实施例的逻辑控制器410将数据推送到物理控制器415。在其他实施例中,物理控制器请求来自逻辑控制器的配置数据(例如,响应于配置信息可用的信号)。

物理控制器415将数据传递到网关主机445,与其传递物理控制面数据几乎一样。在一些实施例中,路由数据元组被发送到作为与MFE相关联的软件的一部分的运行在主机上的数据库,并且被用于配置MFE的特定方面(例如,MFE的端口信息和其他非流条目配置信息)。一些实施例使用第一协议(例如,OpenFlow)将对于MFE的流条目传递到主机,而使用第二协议(例如,OVSDB)将配置和路由表数据传递到主机。实现逻辑路由器的名称空间和其他容器从其主机上的数据库中检索适合的信息,或具有传递给它的适合的信息。在一些实施例中,网关主机445上的处理将存储在数据库中的数据元组转换为对于名称空间的路由表和其他网络栈数据(例如,标准Linux网络栈,包括路由表)。

上述说明书描述了由网络控制系统进行的从网络配置到一组物理转发面流条目的转换,该组物理转发面流条目被物理控制器传递到主机(例如,经由诸如OpenFlow的协议)。但是,在其他实施例中,用于定义流条目的数据以其他形式被传递,诸如更抽象的数据元组,并且MFE或在主机上与MFE一起运行的处理将这些数据元组转换为流条目,以在处理数据流量时使用。

II、不同类型的逻辑路由器的连接

如上文指示的,一些实施例的网络控制系统(例如,网络控制器)启用不同类型的逻辑路由器的连接。这些不同类型的逻辑路由器可以在一些实施例的网络控制系统中被定义为不同类的对象,或具有对于路由器类型参数的不同值的同一类对象。在一些实施例中,不同类型的逻辑路由器被分层布置。例如,一些实施例包括逻辑交换机可以附连到的第一类型的逻辑路由器、和可以连接到外部物理网络的第二类型的逻辑路由器。此外,一些实施例可以包括一个或多个其他类型的逻辑路由器(例如,用于布置在这前两个逻辑路由器类型之间)。

在一些实施例中,网络控制系统提供租户逻辑路由器和供应商逻辑路由器的选项。TLR是作为租户逻辑网络的一部分的那些路由器,其中“拥有”逻辑网络的租户可以将逻辑交换机附连到该租户逻辑网络(经由网络控制系统接口)。在一些实施例中,TLR可以不具有网关端口;也就是说,他们不可以直接附连到外部网络。PLR是使得租户逻辑网络能够到达外部网络的那些路由器。也就是说,PLR接受TLR连接并且可以具有附连到外部网络的一个或多个网关端口。从租户VM发送的包将首先被TLR流水线处理(在逻辑交换机处理后),然后如果目的地是外部网络地址,则被发送到PLR逻辑流水线以进行处理。PLR逻辑流水线将网关端口标识为对于包的出口端口,并且将包发送到与那个网关端口相关联的网关主机。

当TLR连接到PLR时,一些实施例自动将动态路由传播到PLR,使得PLR将对于被TLR服务的各个子网的包路由到TLR,并且当没有以其他方式被更特定的或更高优先级的路由进行路由时,自动将动态缺省路由传播到TLR,这使得TLR将包发送到PLR。当产生了这个信息时,一些实施例的网络控制系统从连接路由、动态路由和静态路由产生流条目和数据元组,该流条目和数据元组用来通过被网络控制系统管理的网络元件来实现逻辑路由器。

图6-图8概念性地示出了逻辑网络配置的输入和在网络控制器600处的对于逻辑网络的TLR-PLR连接、以及作为结果产生的路由。如图所示,控制器600包括用于接收配置数据的API 605、状态存储器610和状态计算模块615。

一些实施例的API 605提供接口,控制器通过该接口接收对于一个或多个逻辑网络的配置状态数据。在一些实施例中,API 605代表可以被用来创建、修改、删除、查询等状态存储器610中的逻辑网络数据的一组方法。在一些实施例中,网络管理员可以通过直接连接(例如,通过手动输入API调用)或者通过云管理应用来访问控制器。在云管理应用的情况下,在一些实施例中,管理员通过应用的图形界面(或其他直观的界面)配置逻辑网络,该图形界面将从用户接收的数据转换为对控制器600适合的API调用。

对于API 605的一些这样的API方法包括创建逻辑路由器的方法、创建逻辑路由器端口的方法、创建逻辑交换机的方法、将逻辑交换机附连到逻辑路由器(例如,TLR)的方法、将TLR端口连接到PLR端口的方法、将逻辑路由器(例如,PLR)的逻辑端口附连到外部网络的方法、创建静态路由的方法、修改静态路由的方法、移除静态路由的方法、查询逻辑路由器的路由的方法等。在一些实施例中,这些各种方法使得管理员能够访问或修改存储在状态存储器610中的配置状态数据。虽然API 605使得管理员能够查询动态路由,在一些实施例中,可能不通过API输入动态路由(因为这样路由将是静态路由)。此外,两个逻辑路由器(例如,PLR和TLR)的连接使得网络控制器产生动态路由,将在下文解释。

在一些实施例中,状态存储器610存储了定义由控制器600管理的逻辑网络的一组对象(或其他数据结构)。基于由API 605接收到的命令,控制器600在状态存储器610中创建对象。一些实施例的状态存储器是网络信息库(NIB),在美国专利公开第2013/0058356号中更加详细地描述了该网络信息库,其全部内容通过引用合并于此,虽然其他实施例使用不同的存储器在网络控制器处存储状态信息。除了存储通过API 605接收的配置状态外,一些实施例的状态存储器还存储由状态计算模块615计算的经计算的状态。

此外,网络控制器600可以从(i)其他网络控制器以及(ii)网络元件(例如,MFE)经由与这些实体的接口(未示出)接收状态信息。在一些实施例中,其他逻辑路由器可以通过它们的API接收配置状态,并且与控制器600共享配置状态信息(例如,通过RPC通道)。在一些这样的实施例中,网络控制器只共享配置状态,并且不共享经计算的状态。这使得管理员能够将用于特定的逻辑转发元件或逻辑网络的配置数据输入到任何网络控制器中,因为配置信息将与管理特定的逻辑转发元件的网络控制器共享,并且只有该网络控制器将基于输入的配置状态来计算逻辑网络的状态。托管网关的名称空间和受管理的转发元件也可以向它们的管理物理控制器(例如通过用于配置MFE或名称空间的通道之一)提供状态信息(例如,关于被关闭的链接、针对特定逻辑网络处理的流量的量等)。当物理控制器接收到这个信息时,在一些实施例中,控制器标识合适的逻辑控制器,向该逻辑控制器提供数据,然后该数据被存储在控制器的状态存储器(例如,存储器610)中。

一些实施例的状态计算模块(或一组模块)615允许控制器基于(i)通过API接收的配置状态、(ii)先前计算的状态(例如,在一系列计算中)以及(iii)从物理的受管理的转发元件向上传播到网络控制器的状态来计算附加状态信息。在一些实施例中,状态计算模块615是表映射引擎(例如,上文中通过参考图1描述的表映射引擎)。状态计算模块还可以包括用于递归遍历配置状态路由来产生经计算的状态路由的路由处理引擎。在一些实施例中,状态计算模块基于PLR-TLR连接产生动态路由,以及将这些路由存储为对于各自PLR和TLR的输入路由。

现在将通过参考图6-图8来描述控制器600接收配置状态(包括将TLR附连到PLR)以及处理这个配置状态的操作。图6概念地示出了由控制器600接收逻辑网络配置620。如图所示,API 605通过一个或多个API调用接收对于逻辑网络的配置620。如图所示,逻辑网络包括附连到逻辑路由器的两个逻辑交换机,该逻辑路由器还连接到外部网络(例如,通过L3网关端口)。逻辑交换机包括VM所附连到的几个端口。此外,逻辑网络配置620指示连接到第一逻辑交换机的逻辑路由器端口中的一个端口被分配了子网11.0.0.0/24,并且连接到第二逻辑交换机的其他逻辑路由器端口被分配了子网10.0.0.0/24。逻辑路由器(TLR)不具有与外部网络的连接。

虽然作为单个一组数据620示出,但在一些实施例中,API 605接收独立的命令来创建每一个逻辑转发元件(逻辑交换机A、逻辑交换机B和逻辑路由器)。此外,在一些实施例中,将每一个逻辑交换机附连到逻辑路由器是独立的命令,将每一个VM附连到逻辑交换机也是独立的命令。

图6还示出了API 605在状态存储器610中创建对于三个逻辑转发元件的对象625-635。在一些实施例中,由API 605接收到的命令指示API创建和/或修改这些对象。一些实施例的逻辑交换机对象630和635存储逻辑端口列表、与这些逻辑端口的附连、对于这些逻辑端口的MAC地址等。

如上所述,一些实施例的TLR对象625包括它的端口列表,这些端口附连到逻辑交换机A和逻辑交换机B。在一些实施例中,TLR对象625可以指定逻辑路由器是以分布式还是集中式的方式实现,以及逻辑路由器的类型(即,TLR,或通过设置指示是租户或供应商的标志)。此外,API 605创建作为逻辑路由器对象的一部分的一组路由640。在一些实施例中,每一个路由也是存储在状态存储器610中的对象(由逻辑路由器对象拥有)。如图所示,该组路由包括由API 605基于逻辑网络配置620自动产生的路由。具体地,对于每一个逻辑端口(连接到逻辑交换机、L3网关等),API 605产生对于与那个端口相关联的网络地址范围(例如,IP地址)的高优先级连接路由。虽然在这个图中示出了由API执行,但在一些实施例中,API简单地在状态存储器中创建端口和连接,并且状态计算模块615基于为该端口指定的网络地址范围产生连接路由。

在这种情况下,路由645之一是对于逻辑交换机A所附连到的端口。这个路由645将落入11.0.0.0/24范围(以无级别域间路由(CIDR)格式给出)的网络地址路由到逻辑输出端口X。此外,一些实施例的路由对象指定路由的类型(例如,连接路由,因为路由是基于TLR的特定逻辑端口)、对于具有前缀范围内的目的地IP地址的包将采取的动作(在这个情况下,接受,尽管其他路由可能指定放弃包)、以及路由的优先级。在一些实施例中,连接路由被给予最高优先级(1),而静态路由被给予较低的优先级(虽然这在一些实施例中可以被手动输入),以及动态路由被给予更低的优先级。除了路由645外,该组路由还包括相似结构的路由,以将在范围10.0.0.0/24内的IP地址发送到逻辑输出端口Y。

虽然没有在这个图中示出,一些实施例的状态计算模块615标识存储在状态存储器610中的配置状态已发生变化,并且随后检索这个数据以便计算要向受管理的转发元件分发的状态信息。状态计算模块615产生流条目和/或数据元组以向受管理的转发元件和名称空间分发,并且分发这个经计算的信息(例如,经由一组物理控制器)。状态计算模块615还将经计算的状态存储回到状态存储器610中。

图7概念性地示出了由控制器600接收输入配置数据以将如图6中所示地创建的TLR附连到PLR。如图所示,输入数据(例如,管理员的输入)指定TLR的新逻辑端口具有在子网18.0.0.0/28上的IP地址18.0.0.1。该端口附连到具有在相同子网18.0.0.0/28上的IP地址18.0.0.2的PLR的逻辑端口。一些实施例对TLR到PLR的连接设置要求。例如,一些实施例要求两个连接的逻辑路由器端口应在相同的子网上,并且该子网至少是“/30”子网(按照无级别域间路由(CIDR)格式)。也就是说,共享的子网必须具有至少三比特用于可用的不同IP地址。当未正确进行TLR-PLR连接时(例如,接口在不同的子网上,或子网太具体),一些实施例的API 605产生错误消息以返回到配置输入源。

因为在这个情况下正确地指定了将TLR附连到PLR的配置输入,API将端口之间的这个连接存储在租户逻辑路由器对象625和供应商逻辑路由器对象705两者中,该供应商逻辑路由器对象705已经存在于状态路由器610中,因为供应商逻辑路由器之前已经由被控制器600管理的受管理网络的管理员创建了。对于TLR,API存储在子网18.0.0.0/28上具有IP地址18.0.0.1的新逻辑端口。这样一来,API 605或状态计算模块615产生对于子网18.0.0.0/28上将被发送到新逻辑端口的所有包的连接路由。此外,API 605存储(作为逻辑端口的属性)与具有IP地址18.0.0.2的PLR端口的连接。对于PLR对象705,如果端口不是已经在PLR上创建了,则API 605存储新逻辑端口(并且相似地创建与子网的连接路由)。此外,API 605存储与具有IP地址18.0.0.1的TLR端口的连接。

作为连接的结果,状态计算模块610(例如,表映射引擎组件)标识对TLR对象625的更新,并且检索对于TLR的连接数据710。作为结果,状态计算模块610产生对于TLR的新动态缺省路由715,并且在TLR 625的输入路由表640中存储这个信息。如图所示,动态缺省路由715将所有包(使用0.0.0.0/0)发送到PLR的IP地址18.0.0.2。一些实施例为该路由设置了低优先级(例如,使用高的数字)。这允许用户为外发包指定将具有相同特性(0.0.0.0/0)但是具有更高优先级的静态缺省路由。例如,用户可以使用直接主机返回端口将外发包从逻辑网络直接发送到受管理网络之外的物理路由器,而不使用PLR网关(PLR网关是潜在的瓶颈)。在2013年10月31日提交的美国专利申请14/068,865中描述了一些实施例的这样的直接主机返回端口,其全部内容通过引用合并于此。

图8概念性地示出了TLR-PLR连接的结果,因为该结果与PLR数据705有关。如上文指示的,当API 605接收连接时,该数据被存储在TLR对象625和PLR对象705两者中。对PLR的更新也被状态计算模块615标识,状态计算模块615检索对于PLR的数据,并且产生对于PLR的新动态路由。在一些实施例中,这些路由是基于TLR的连接路由,并且指定TLR端口IP地址18.0.0.1作为下一跳。例如,为PLR 705存储的路由805对应于TLR 625的连接路由645。动态路由805用于路由具有11.0.0.0/24范围内的网络地址的包,并且指定IP地址18.0.0.1作为下一跳。PLR已经具有对于前缀18.0.0.0/28的连接路由,以将匹配该前缀的包输出到特定的逻辑端口。除了该路由805,状态计算模块还产生也将具有10.0.0.0/24范围内的地址的包发送到相同IP地址18.0.0.1的路由。因为对于前缀18.0.0.0/28的TLR连接路由指定PLR所连接到的相同子网,该TLR连接路由不作为动态路由被传播到PLR。

这个图假设了控制器600是TLR和PLR两者的主控制器。从另一方面说,如果不同的控制器是PLR的主控制器,则状态计算模块610将不计算对于PLR的动态路由。替代地,因为控制器600将与网络控制系统中的其他控制器(包括PLR的主控制器)共享该数据,PLR主控制器将为PLR计算动态路由(并且为PLR执行后续路由处理以标识对于PLR的输出路由表)。

图9概念性地示出了一些实施例的用于实现PLR-TLR连接的处理900,该处理900由作为TLR和PLR两者的主控器的网络控制器执行。如上述示例中一样,该图中假设执行处理900的控制器是TLR和PLR两者的主控器。

如图所示,处理900通过接收(在905)对于特定租户网络的新逻辑路由器的配置来开始。在一些实施例中,控制器通过API调用接收该配置数据以创建新逻辑路由器,以及通过其他调用来配置逻辑路由器的端口(例如,利用MAC地址、IP地址和子网)、将逻辑交换机附连到一些新端口、和/或将端口连接到现有的供应商逻辑路由器。一些实施例向租户指定了一个或多个供应商逻辑路由器的存在。例如,通过API,一些实施例允许租户管理员查询可用于接受与TLR的连接的PLR。

基于配置信息,处理使用端口所连接到的子网的指定的网络地址前缀来产生(在910)对于新逻辑路由器的每一个端口的连接路由。因此,在上述示例中,逻辑端口X(在网络控制器处例如由UUID标识)与子网11.0.0.0/24相关联,并且因此控制器600产生连接路由以将对于该子网的包发送到逻辑路由器的端口X。处理900为新TLR的每一个逻辑端口产生相似的路由。

接下来,处理确定(在915)与PLR的任何连接是否被指定用于TLR的任何端口。如果没有指定这样的连接,处理结束。在一些实施例中,如果数据中心租户想要逻辑网络接收来自外部网络的包,则需要与PLR的连接(即,因为租户可能不具有与L3网关的连接)。但是,租户管理员可以初始指定逻辑路由器,然后在之后的时间(在这个时候,将执行处理900的剩下部分)将TLR附连到PLR。

当指定的逻辑路由器包括与PLR的连接时,该处理标识(在920)所连接的TLR端口和PLR端口的前缀和网络地址。在一些实施例中,该处理由API在接收到连接的指定后执行。也就是说,当TLR到PLR的连接被指定为接收到的配置数据的一部分时,一些实施例在操作910前执行操作920。

该处理确定(在925)端口是否满足为PLR-TLR连接指定的一组要求。例如,一些实施例要求端口具有不同的IP地址、端口具有所分配的相同前缀、以及该前缀不是过于具体。例如,一些实施例要求前缀至少应为“/30”(即,该前缀具有三比特可用于IP地址)。其他实施例不对子网尺寸设置这样的要求。当端口不满足连接要求时,处理返回(在930)无效连接的错误。一些实施例将错误消息返回到试图创建PLR-TLR连接的命令源(例如,管理应用、管理员计算机等)。然后,处理结束。

接下来,该处理产生(在935)指定PLR端口的网络地址作为下一跳地址的对于TLR的动态缺省路由。也就是说,该路由将与TLR处的任何其他路由不匹配的所有包发送(使用前缀0.0.0.0/0)到PLR。因为TLR已经包括了连接路由以将前缀包含该下一跳地址的包输出到连接到PLR的TLR端口,则由网络控制器进行的路由处理将该路由解析为缺省路由以将未以其他方式路由的所有包输出到连接到PLR的逻辑端口。

此外,对于PLR,处理900为与TLR的其他端口相关联每一个前缀产生(在940)动态路由。然后处理结束。这些动态路由指定TLR的连接端口作为下一跳的地址。上述示例中的路由805就是这样的路由。因为TLR具有对于前缀11.0.0.0/24的连接路由,PLR接收对于该前缀的具有下一跳IP地址为18.0.0.1的动态路由。无论何时TLR的管理员增加了新逻辑端口,控制器为TLR产生新的连接路由,并且随后产生对于连接的PLR的新动态路由。由于PLR已经具有连接路由以将对于前缀包含动态路由的下一跳地址的包输出到连接到TLR的PLR端口,则由网络控制器进行的路由处理将PLR的动态路由解析为将发送到TLR子网中的网络地址的包输出到连接到TLR的逻辑端口。

虽然在这些图中没有示出,如以上参考例如图4和图5所描述的,网络控制器除了产生路由、存储路由并且执行对于逻辑路由器的路由处理外,还产生和分发数据到实现受管理网络中的逻辑网络的各个受管理的网络元件。在一些实施例中,这些网络元件包括受管理的转发元件(MFE)和受管理的L3网关。因为在一些实施例中TLR以分布式的方式被实现,控制器(或一组控制器)产生对于合适的MFE(即,租户网络的VM所驻留的主机处的那些MFE)的流条目,以便MFE实现TLR(和租户逻辑交换机)。当TLR连接到PLR时,控制器(或一组控制器)产生对于PLR以及那些MFE的流条目。PLR流条目被分发到连接到PLR的其他逻辑网络的VM所驻留的主机。此外,网络控制器产生定义和配置对于连接到外部网络的PLR的一个或多个L3网关(例如,对于PLR的每一个端口的一个L3网关)的数据元组。

在一些实施例中,对于MFE的流条目遵循匹配-动作格式。也就是说,每个流条目指定(i)一组匹配条件(例如,源MAC地址和/或目的地MAC地址、源IP地址和/或目的地IP地址、逻辑上下文数据(诸如特定逻辑转发元件的入口端口和出口端口)等)以及(ii)对包执行的一组动作(例如,将数据写入寄存器、重新提交包、将包封装在特定的隧道报头等)。

在一些实施例中,网络控制系统将流条目分发到MFE,以便MFE执行第一跳处理。对于第一跳处理,接收包的第一MFE(例如,与发送包的VM在同一主机上的MFE,或用于进入包的网关主机上的MFE)在将包发送到受管理的网络前,对包执行尽可能多的逻辑流水线。对于逻辑网络中的VM之间的流量,第一跳MFE通常标识逻辑交换机的对应于目的地地址的逻辑出口端口。如果两个VM在不同的逻辑交换机上,则第一跳MFE执行对于源逻辑交换机、逻辑路由器(例如,TLR)以及目的地逻辑交换机的逻辑处理流水线。

图10和图11概念性地示出了在受管理的网络300中实现的、由第一跳MFE对于被图2中所示的PLR 220处理的两个不同包的包处理。这些图中的每一个图示出了当由VM发送的包被第一跳MFE中的各个处理流水线操控时处于各个阶段中的该包。每一个处理流水线代表由MFE存储的并且用于处理包的一组流条目。对于特定逻辑转发元件的处理(例如逻辑交换机处理),流水线可以代表多个条目(例如,入口ACL、逻辑转发和出口ACL)。

图10中示出的第一个实例示出了由VM 1发送到外部目的地的包1000。如图所示,VM 1初始地将包1000发送到MFE 335(例如,通过VNIC)。VM和MFE 335均位于主机305处。包1000包含有效载荷、源MAC地址和目的地MAC地址、源IP地址和目的IP地址以及存活时间(TTL)计时器。因为被VM发送,源MAC地址和IP地址是VM 1的那些MAC地址和IP地址,目的地MAC地址是逻辑交换机205(VM的缺省网关)所附连到的TLR 215的MAC地址,以及目的地IP地址是位于逻辑网络外的外部地址。

在MFE 335处,对包1000执行的处理的第一阶段是入口上下文映射1005。入口上下文映射阶段1005代表标识包1000的逻辑上下文的一个或多个流条目。在一些实施例中,入口上下文映射流条目基于通过其接收包的物理入口端口(例如,VNIC,VM 1通过该VNIC附连到MFE 335)来标识逻辑交换机205的特定逻辑端口。

当处理包时,一些实施例的MFE335将包数据存储在寄存器中。也就是说,当接收到包时,包的各个组成部分被写入用于在处理期间访问的寄存器字段。MFE重复地将包与流条目匹配、执行由流条目指定的动作,然后通过用于其他处理的调度端口重新提交包,同时将与包相关联的数据保持在寄存器中。在入口上下文映射的情况下,流条目指定将(逻辑交换机205的)所标识的逻辑入口端口写入到寄存器中。

基于入口上下文映射,MFE 335然后执行逻辑交换机205的逻辑L2处理流水线1010。在一些实施例中,该处理流水线包括入口ACL(例如,为了确保包的源MAC地址和/或IP地址与由入口上下文映射条目指定的逻辑端口匹配)、逻辑转发决定和出口ACL条目。在一些实施例中,对于L2流水线的逻辑转发决定使用目的地MAC地址来标识逻辑交换机1010的逻辑出口端口,并且出口ACL条目确定是否允许包通过所标识的出口端口(例如,基于目的地MAC地址和/或目的地IP地址)。这个出口端口连接到TLR 215的逻辑端口,并且因此其他流条目为包1000指定了寄存器领域中的TLR入口端口,如图的右侧所示。在这个时候,只有包的逻辑上下文被修改,而MAC地址、IP地址和TTL区域保持未发生变化。

基于所指定的TLR入口端口,MFE接下来执行租户逻辑路由器215的逻辑L3处理流水线1015。在一些实施例中,与逻辑交换机处理相似,L3处理流水线包括入口ACL条目、逻辑转发决定和出口ACL条目。在一些实施例中,入口ACL条目确保包的源MAC地址和/或IP地址是被入口端口允许的。对于逻辑转发决定的流条目实现由网络控制器确定的TLR路由表。也就是说,由MFE存储的逻辑转发流条目包括对于到不同逻辑交换机的每个连接路由的条目,以及对于到PLR的缺省路由的条目。在这种情况下,因为目的地IP地址是外部地址(即,不在与逻辑交换机205和210相关联的任何子网中),包1000与将连接到PLR的TLR逻辑端口指定为逻辑出口端口的流条目匹配。因为该出口端口连接到PLR 220的逻辑端口,其他流条目为包1000指定寄存器字段中的PLR入口端口,如图的右侧所示。

此外,作为逻辑转发流条目(或多个条目)的一部分,MFE 335在处理阶段1015期间修改包。具体地,当包现在被路由器处理时,MFE将TTL减去一。在这个实例中,包1000初始具有64的TTL,该TTL每次被处理包的每个路由器递减。不同实施例可以使用不同的初始TTL值(例如,255、100等)。另外,作为路由包的一部分,处理流水线1015改变包的源MAC地址和目的地MAC地址。具体地,源地址现在是TLR出口端口的地址,并且目的地MAC现在是PLR入口端口的MAC。TLR流条目指示对于所使用的路由的下一跳IP地址是PLR入口端口的IP地址。不是使用地址解析协议(ARP),因为逻辑网络对于产生流条目的控制器是已知的,在一些实施例中,ARP响应(具有将被用作包1000的目的地MAC的MAC地址)可以被直接嵌入在流条目的开始中。

接下来,基于指定的PLR入口端口,MFE 335执行供应商逻辑路由器220的逻辑L3处理流水线1020。在一些实施例中,与TLR处理相似,PLR处理流水线1020包括入口ACL条目、逻辑转发决定和出口ACL条目。几乎与TLR一样,入口ACL和出口ACL确保包应该被允许进入PLR的所标识的入口端口和从被逻辑转发条目标识的出口端口出去。逻辑转发条目实现由网络控制器确定的PLR的路由表。因此,PLR流条目包括用于将具有逻辑交换机子网中的目的地IP地址的包转发到连接到对于逻辑交换机子网合适的TLR(基于传播到PLR的动态路由)的PLR端口的条目、以及用于将其他包发送到TLR的一个或多个网关端口的路由。在这种情况下,因为目的地IP地址是外部地址,PLR不将包路由到与其连接的任何TLR。替代地,基于其缺省路由、通过API为PLR输入的静态路由、或通过路由通告协议(例如,BGP、OSPF等)从外部物理路由器得知的动态路由,PLR转发条目将PLR的网关端口之一标识为逻辑出口端口。

此外,与TLR一样,MFE 335在处理阶段1020期间修改包1000。具体地,TTL再次递减,使得其现在具有值62。虽然只有一个物理转发元件(MFE 335)处理了包,包的TTL在那个处理期间已经递减了两次。此外,PLR已经再次修改了包的源MAC和目的地MAC(例如,通过修改寄存器值)。源MAC现在是对于逻辑路由器的L3网关端口的MAC,以及目的地MAC是L3网关自身(在一些实施例中,L3网关被分配了与逻辑端口分离的MAC)。使用L3网关MAC作为目的地地址确保了当网关主机处的MFE接收了包时,该MFE将发送包到合适的名称空间以进行网关处理。再次,网络控制器直接将目的地MAC地址信息嵌入到流条目中,而不是由MFE 335通过ARP来确定这个MAC地址。

最后,在这个时候,基于PLR处理的逻辑转发部分标识的出口端口不映射到由主机305处的MFE 335实现的其他逻辑转发元件流表。替代地,现在包与将包映射到物理目的地(即,特定的网关主机)的出口上下文映射流条目匹配。此外,物理转发流条目(可以是出口上下文映射的一部分,或分离的流条目)指定为了到达这个网关主机处的MFE要使用的实际隧道信息。这样一来,在将包发送出主机305并且进入受管理的网络前,MFE 335将包封装在隧道中(例如,使用STT、GRE或其他隧道封装技术)。这在图中通过隧道源IP地址和目的地IP地址而示出。为了供网关主机处的MFE使用,逻辑上下文也被保持在包上(例如,存储在隧道报头的特定字段内)。

MFE 335将封装的包发出进入受管理的网络以至网关主机。在一些实施例中,网关主机处的MFE 365将已经移除了隧道封装和逻辑上下文数据的包转发到实现L3网关的名称空间。名称空间执行其处理以将要传递的包路由到特定的物理路由器,并且然后将包发送回到MFE,该MFE处理该包到与物理网络的连接上的输出。

图11概念性地示出了当包1100从逻辑网络200上的VM 1发送到逻辑网络250上的VM 6时被第一跳处的TLR和PLR两者处理的该包1100的示例,其中VM 1和VM 6均驻留在主机305上。如图所示,包1100具有相同的源IP地址和MAC地址(VM 1的那些IP地址和MAC地址)、相同的目的地MAC地址(TLR端口)、和与包1000相同的初始TTL。但是,目的地IP地址是VM 6的IP地址,并且有效载荷可推测地也将是不同的。

在MFE 335处,前三个阶段(入口上下文映射1105、对于逻辑交换机205的逻辑L2处理1110、对于TLR 215的逻辑路由器处理1115)与图10中的示例是相同的。对于由TLR 215进行的处理,VM 6的目的地IP被与外部IP相同对待,因为VM 6不在连接到TLR 215的任何子网上。在流水线1115后,TTL已被递减到63,源MAC是TLR出口端口的MAC,并且目的地MAC是PLR入口端口的MAC。

一些实施例的对于PLR 220的L3处理流水线1120包括入口ACL、逻辑转发决定和出口ACL。但是,与先前的示例不同,这一次,包1100与实现了将逻辑网络250的TLR 265作为下一跳的动态路由的流条目匹配。VM 6的IP地址(包1100的目的地地址)在与连接到逻辑交换机255的TLR端口相关联的子网中,并且因此,包与实现了被传播到对于该子网的PLR的动态路由的流条目匹配。因此,除了将TTL递减到62之外,PLR处理1120还将包的源MAC设置为连接到TLR 260的PLR端口的MAC,并且将包的目的地MAC设置为连接到该PLR端口的TLR端口的MAC。处理随后将这个TLR端口标识为与包的逻辑上下文一起存储的新入口端口。

然后,基于这个逻辑入口上下文,MFE 335执行对于TLR 265的逻辑L3处理阶段1125。与先前描述的逻辑路由器流水线一样,L3处理1125包括入口ACL、逻辑转发和出口ACL。在这个情况下,逻辑转发决定将(VM 6的)目的地IP地址标识为属于子网,对于该子网,流条目实现了连接路由(到逻辑交换机205所附连到的逻辑路由器端口)。基于该IP地址,逻辑转发条目(或多个条目)指定标识逻辑路由器的出口端口、将TTL递减到61并且修改源MAC地址和目的地MAC地址。源MAC地址被改变为附连到逻辑交换机的TLR端口的MAC地址,并且目的地MAC地址被改变为VM 6的MAC地址。在一些实施例中,MFE不是发送实际的ARP请求到VM 6以确定其MAC地址,而是已经存储了该信息。

最后,MFE 335执行对于逻辑交换机255的逻辑L2处理1130。这里,对包进行的仅有的改变是标识逻辑交换机的逻辑出口端口(基于对应于VM 6的目的地MAC地址),并且将这个信息写入寄存器中。在出口上下文映射阶段1135,MFE 335将这个出口端口映射到物理目的地(所附连的VM),并且随后将(没有逻辑上下文的)包传递到目的地VM。

III、控制器中的动态路由

上述部分描述了供应商逻辑路由器和租户逻辑路由器的使用,其例示了执行逻辑动态路由的网络控制器的一个特定示例。在一些实施例中,唯一允许的网络控制器连接的类型是PLR和TLR之间的那些连接,如上所述。但是,一些实施例的网络控制系统向用户提供了创建多个逻辑路由器作为单个逻辑网络的一部分并且将这些路由器相互连接的能力。这使得租户网络的管理员能够向不同的逻辑路由器分配不同的策略。例如,对于来自第一逻辑交换机的包,租户可能想要使用基于尺寸的策略路由来路由包,而对于来自第二和第三逻辑交换机的包,租户可能不在意包的尺寸。将这些逻辑交换机连接到两个不同的逻辑路由器允许租户简单地在不同的逻辑路由器处实现不同的策略。

图12概念性地示出了启用动态路由的、包括两个连接的逻辑路由器1205和1210的逻辑网络1200的示例。如图所示,第一逻辑路由器1205具有两个附连的逻辑交换机1215和1220,并且还包括连接到外部网络1230的L3网关端口。第二逻辑路由器1210具有一个附连的逻辑交换机1225。在PLR-TLR连接示例中,只有某些路由被网络控制器在逻辑路由器之间动态地传播,而在一些实施例中,所有路由(连接路由、静态路由、甚至来自其他逻辑路由器或外部路由器的动态路由)可以在逻辑路由器的路由表之间传播。

图13和图14概念性地示出了当一组网络控制器执行对于逻辑路由器1205和1210的动态路由、路由处理、以及数据元组产生和分发时通过该组网络控制器的数据流的两个不同示例。在图13中,两个逻辑路由器1205和1210具有相同的主控制器,而在图14中它们被两个不同的主控制器管理。

图13概念性地示出了一些实施例的网络控制器1300,和当控制器在接收到对于逻辑路由器1205的新路由时执行逻辑路由器处理时通过该控制器的数据流。如上所述,在这个示例中,网络控制器1300是逻辑路由器1205和1210的主控制器。与上面描述的网络控制器100相似,网络控制器1300包括API 1305、状态存储器1310、表映射引擎1315、路由处理引擎1320和状态分发接口1325。

API 1305提供接口,控制器通过该接口接收对于一个或多个逻辑转发元件的配置状态数据。如以上参考图6所描述的,在一些实施例中,API 1305表示可以用来创建、修改、删除、查询等状态存储器1310中的逻辑网络数据的一组方法。在一些实施例中,网络管理员可以通过直接连接(例如,通过手动输入API调用)或者通过云管理应用来访问控制器。对于API 1305的一些这样的API方法包括创建逻辑路由器的方法、创建逻辑路由器端口的方法、创建逻辑交换机的方法、将逻辑交换机附连到逻辑路由器的方法、将逻逻辑端口附连到外部网络的方法、将两个路由器的逻辑路由器端口相互附连的方法、创建静态路由的方法、查询逻辑路由器自己的路由的方法等。在一些实施例中,这些各种方法使得管理员能够访问或修改存储在状态存储器1310中的对于逻辑路由器的配置状态数据。

在一些实施例中,状态存储器1310存储了定义由控制器1300管理的逻辑转发元件的一组对象、以及由其他网络控制器管理的逻辑转发元件的配置状态。基于由API 1305接收的命令,控制器1300创建、修改和删除状态存储器1310中的对象。除了存储通过API 1305接收的配置状态外,一些实施例的状态存储器还存储由状态计算模块1315计算的经计算的状态(例如,由表映射引擎产生的动态输入路由、由路由处理引擎产生的输出路由等)。此外,网络控制器1300可以从其他网络控制器和网络元件(例如,MFE、在名称空间中操作的网关)接收状态信息,如以上参考图6所描述的。

表映射引擎1315执行对于由控制器1300管理的逻辑网络的状态计算。如图所示,表映射引擎1315包括流产生模块1330和配置数据产生模块1335,两个模块均产生用于分发到受管理的转发元件和L3网关的数据。在一些实施例中,这两个模块使用相似的输入数据元组来产生输出数据元组,但是产生用于分发到各个网络元件的不同数据。此外,在一些实施例中,表映射引擎1315执行对于连接的逻辑路由器的动态路由。一些实施例的表映射引擎使用数据库连接操作来产生描述动态路由的数据元组,并且然后将这些动态路由作为对象存储在状态存储器610中。例如,对于连接到自身具有连接路由的第二逻辑路由器的第一逻辑路由器,一些实施例的表映射引擎将执行以下操作:将连接路由的前缀与第二逻辑路由器的端口相连接作为下一跳IP地址,以创建对于第一逻辑路由器的动态路由。

流产生模块1330产生对于受管理的转发元件的数据,以在处理包时使用。具体地,在一些实施例中,流产生模块1330产生采用匹配-动作模式的流条目。也就是说,每一个流条目指定包要匹配的条件或一组条件、以及当包匹配了所有条件时受管理的转发元件向包应用的动作或一组行动。例如,用于实现逻辑路由器的很多流条目之一可以指定:如果包(i)已经被分配给逻辑路由器以及(ii)具有特定范围内的目的地IP地址(例如,10.0.0.0/24),则执行动作(i)将特定逻辑入口端口写入到对于包的寄存器中以及(ii)将包重新提交到受管理的转发元件以用于进一步的处理。在一些实施例中,流产生模块1330通过对存储在状态存储器1310中的数据和从路由处理引擎1320接收的信息执行表映射操作(例如,连接操作)来产生流条目。在一些实施例中,表映射引擎1315的流产生模块1330输出经由OpenFlow协议分发的数据。

在一些实施例中,配置数据产生器1335产生对于受管理的转发元件、以及逻辑路由器和L3网关在其中操作的名称空间的数据。对于受管理的转发元件,配置数据可以包括端口配置和/或隧道配置、以及其他数据。尽管MFE接收作为流条目的包处理数据,但是,实现用于分布式逻辑路由器的L3网关的名称空间接收以与配置数据相同方式分发的数据元组形式的包处理指令。例如,在一些实施例中,对于名称空间,名称空间所驻留的网关主机接收作为由配置数据产生器1335产生的数据元组的名称空间的定义,并且还接收具有该形式的它的路由表和其他网络栈配置。与流产生模块1330一样,一些实施例的配置数据产生器1335通过对存储在状态存储器1310中的数据和从路由处理引擎1320接收的信息执行表映射操作(例如,连接操作)来产生配置数据。在一些实施例中,配置数据产生器1335输出经由OVSDB协议分发的数据。

一些实施例的路由处理引擎1320从表映射引擎1315接收输入的一组路由(例如,基于逻辑路由器的逻辑端口所连接到的子网自动产生的路由、通过API 1305接收的静态路由、由表映射引擎1315基于逻辑路由器连接而产生的动态路由),并且为了标识对于由逻辑路由器路由的每一个网络地址范围的最终逻辑目的地,对路由执行递归遍历处理。当多个输入路由对于特定的网络地址或地址范围提供相矛盾的信息时,一些实施例的路由处理引擎1320确定哪一个路由具有更高的优先级。一些输入路由可以提供下一跳地址而不是对于路由的输出端口。在这些情况下,路由处理引擎递归地遍历该组输入路由直到达到指定目的地输出端口或放弃包动作的路由为止。路由处理引擎1320返回具有为每个路由指定的最终动作(例如,放弃包、发送到特定的输出端口)的该组输出路由。在一些实施例中,路由处理引擎1320以与表映射引擎1315不同的语言(例如,C++)来实现。

控制器1300将由表映射引擎1315产生的对于逻辑路由器的流条目和配置数据(以及例如对于其他转发元件(诸如逻辑网络的逻辑交换机)的其他数据)经由状态分发接口1325分发到主机。图中所示的主机包括用于托管VM的第一机器1340和用于托管实现L3网关的名称空间的第二机器1345。主机1340和1345均包括用于处理包的受管理的转发元件(例如,OVS),而网关主机1345还包括用于L3网关的名称空间。

在一些实施例中,控制器1300通过其他网络控制器的分层结构来分发数据,如上面图4中所示的。在这样的实施例中,状态分发接口是与用作将数据分发到主机(并且可能执行附加的数据元组的转换)的中介的其他控制器的接口。在一些实施例中,控制器1300使用远程过程调用(RPC)通道与其它控制器进行通信。

在其他实施例中,控制器1300直接与主机1340和1345(以及许多其他主机)相接口连接以分发数据。在一些这样的实施例中,控制器使用两个通道与每个主机通信:用于分发由流条目产生模块1330产生的流条目供受管理的转发元件使用的第一通道(例如,OpenFlow),和用于分发由配置数据产生器1335产生的配置数据的第二通道(例如,OVSDB)。

现在将描述在网络控制器1300处理逻辑路由器信息的操作期间通过网络控制器1300的数据流。图13包括几个划圈数字,其指示进入、通过和离开网络控制器1300的不同数据流。本领域技术人员将认识到,一些实施例的控制器将处理除了所示出的数据以外的数据,并且该图中的数据流旨在代表具体地与由网络控制器1300管理的两个逻辑路由器有关的所执行的操作和所传送的数据。

如圈1所示,API 1305接收创建或修改逻辑路由器1205的配置的命令。具体地,在这个示例中,命令修改为逻辑路由器1205存储的路由。该命令可以是创建新的静态路由、创建逻辑路由器的新端口、修改逻辑端口所连接到的子网等。

作为结果,如圈2所示,API 1305修改了在状态存储器1310中存储的对于逻辑路由器1205的逻辑结构1350(例如,对象,诸如C++对象)。该图示意性地示出了存储RIB(一组输入路由)和FIB(一组输出路由)的逻辑路由器数据结构1350。虽然一些实施例使用这样的结构,但是其他实施例存储由逻辑路由器拥有的对于每一个输入路由的数据结构(例如,对象)。在处理后,在一些实施例中,逻辑路由器还存储对于每一个路由的状态数据结构(例如,对象)。其他这样的实施例修改处理后的路由数据结构以包括状态数据。

当逻辑路由器结构1350的配置状态被修改时,表映射引擎1315检索逻辑路由器的状态,如图中的圈3所示。表映射引擎1315基于这个新配置数据执行几个操作。因为控制器1300是第二逻辑路由器1210的主控制器,控制器产生对于逻辑路由器1210的新动态路由,并且修改在阶段存储器1310中存储的对于逻辑路由器1210的数据结构1355,如圈4所示。表映射引擎1355通过例如创建对于所产生的动态路由的新路由对象来修改对于数据结构1355的该组输入路由。

除了产生对于第二逻辑路由器1210的动态路由外,表映射引擎1315处理对于第一逻辑路由器1205的新输入路由。表映射引擎1315将路由数据传递到路由处理引擎1320,而不是计算对于第一逻辑路由器1205的状态(例如,流条目等),如圈5所示。

路由处理引擎1320执行路由选择和遍历操作,以便标识对于逻辑路由器的输出路由表。在一些实施例中,路由处理引擎1320采用对于逻辑路由器的每一个新的或修改的路由作为输入,并且输出对于每一个路由的状态数据。例如,对于指定下一跳IP地址的新静态路由,路由处理引擎确定是否使用该新路由,并且,如果使用,则确定对于该路由的最终输出端口或对于该路由的黑洞的最终动作(例如,放弃包)。路由处理引擎1320将该组输出路由返回到表映射引擎1315,如圈6所示。

在这个时候,表映射引擎1315执行几个动作。如圈7所示,由路由处理引擎计算的输出路由数据被存储在逻辑路由器数据结构1350中。这个图概念性地示出了该数据被存储在FIB中。用于输入配置数据的概念性RIB和用于输出数据的FIB代表在传统网络中由物理路由器执行的RIB到FIB转换的类比。

表映射引擎1315还使用由路由处理引擎1320提供的输出路由数据来产生流条目和配置数据。指定特定网络地址范围被路由到特定逻辑端口的路由将被编码为与网络地址范围中的目的地地址进行匹配、以及将包发送到具有特定下一跳IP地址的逻辑端口的动作(在一些情况下,简单地将下一跳IP地址所对应的MAC地址编码到流条目中,以避免对ARP请求的需要)。在一些情况下,逻辑路由器还指定其他数据(例如,路由策略等),表映射引擎1315还将该其他数据编码在流条目中。因为MFE在VM主机和网关主机上均操作,如圈8所示,表映射引擎通过状态分发接口1325将流条目分发到主机1340和主机1345(虽然在两个主机之间分发的流条目中的至少一些是不同的)。

此外,因为第一逻辑路由器1210连接到外部网络,该路由器具有实现在主机1345上的名称空间中的L3网关。因此,表映射引擎1315使用来自路由处理引擎1320的输出路由数据来产生对于名称空间的配置数据。在一些实施例中,该配置数据(i)定义名称空间的存在并且(ii)提供对于名称空间中的网络栈的配置信息,包括路由表。因此,来自路由处理引擎1320的输出路由数据被用来产生定义对于名称空间的路由表的一组数据元组,该名称空间实现对于逻辑路由器的L3网关。如圈9所示,这个数据通过状态分发接口1325被分发到网关主机1345。如上所述,流条目数据元组和配置数据元组均可以通过网络控制器的分层结构来被分发,而不是直接从控制器1300分发到主机1340和1345(例如,通过管理两个不同主机1340和1345的两个不同网络控制器)。

因为表映射引擎产生对于第二逻辑路由器1210的新输入路由(如圈4所示存储的动态路由),新路由遍历以及数据元组产生和分发对于该逻辑路由器也是需要的。因此,如圈10所示,表映射引擎从逻辑路由器对象1355检索输入状态。虽然不存在需要将任何动态路由传播到第一逻辑路由器1205的新路由,对于第一逻辑路由器描述的其他操作由网络控制器1300执行。

表映射引擎1315将输入路由数据发送到路由处理引擎1320(如圈11所示),路由处理引擎1320返回输出路由数据(如圈12所示)。在这个时候,如圈13所示,表映射引擎将输出路由数据存储在数据结构1355中。此外,表映射引擎1315的流产生模块1330产生对于第二逻辑路由器1210的新的流条目,并且将这些流条目分发到主机1340和1345(如圈14所示)。虽然第二逻辑路由器不具有任何网关端口,包可以从具有VM 5或VM 6的目的地地址的外部网络到达主机1345上的L3网关。在这种情况下,为了网关主机1345处的MFE能执行第一跳处理,需要对于第二逻辑路由器1210的流条目。但是,对于实现在名称空间中的L3网关的附加配置数据没有被分发到任何网关主机,因为不存在对于该逻辑路由的网关。

虽然关于实现第一逻辑路由器1205的操作被示为完全在关于第二逻辑路由器1210的操作之前(除了动态路由传播之外),本领域技术人员将认识到,这些操作可以同时执行或以重叠的方式执行。例如,表映射引擎可以处理来自路由处理引擎的输出数据,以便产生对于第一逻辑路由器的流条目和配置数据,而路由处理引擎执行对于第二逻辑路由器的路由遍历。

图13示出了控制器1300是两个逻辑路由器的主控制器的情况,而图14概念性地示出了两个网络控制器1400和1450,这两个网络控制器分别是第一逻辑路由器1205和第二逻辑路由器1210的主控制器,以及当在第一控制器400处接收对于第一逻辑路由器1205的新路由时通过控制器的数据流。第一网络控制器1400包括API 1405、状态存储器1410、表映射引擎1415、路由处理引擎1420、状态分发接口1425和控制器到控制器接口1430。相似地,第二网络控制器1450包括API 1455、状态存储器1460、表映射引擎1465、路由处理引擎1470、状态分发接口1475和控制器到控制器接口1480。

示出的大多数组件执行与上文描述的在图13中示出的对于网络控制器1300的那些功能相同的功能。控制器到控制器接口1430和1480使得在控制器1400和1450之间能够交换配置状态数据。在一些实施例中,控制器只交换配置状态(即,通过API接收的状态),并且不交换经计算的状态(例如,由表映射引擎产生的动态路由或其他信息、流条目和配置数据等)。在一些实施例中,控制器-控制器接口1430和1480是用于在RPC通道上通信的RPC接口。

通过网络控制器1400和1450的数据流以与图13示出的操作相似的方式开始。如圈1和圈2所示,第一控制器1400的API 1405接收对于第一个逻辑路由器1205的新路由信息(例如,静态路由、新逻辑端口),并将这个信息存储在逻辑路由器对象1445的输入路由信息中。

因为这个信息是新配置状态数据,控制器1400通过控制器到控制器接口1430和1480上的通信,自动与控制器1450共享逻辑路由器对象1445的变化(如圈3所示)。作为结果,对于逻辑路由器1210的新接收到的数据被存储在存储在状态存储1460中的逻辑路由器对象1445的副本中。

在第一控制器1400处,表映射引擎1415从来自状态存储器1410的对于第一逻辑路由器1205的一组输入路由中检索经更新的数据(如圈4所示),但是不计算对于第二逻辑路由器1210的任何动态路由,因为这个控制器不是第二逻辑路由器的主控器。替代地,表映射引擎1415执行对于第一逻辑路由器1205的处理,将数据发送到路由处理引擎1420并且接收返回的输出路径信息(如圈5和圈6所示),然后将这个数据存储在逻辑路由器对象1445(如圈7所示)中,并且产生用于分发到主机1435和1440的流条目数据和配置数据(如圈8和圈9所示)。

相应地,在第二控制器1450处,表映射引擎1465也从对于第一逻辑路由器的一组输入路由中检索经更新的数据(如圈10所示)。虽然表映射引擎1465不执行对于第一路由器的任何路由处理或流产生,该表映射引擎1465将新路由传播到第二逻辑路由器1210的输入路由表,并将该路由存储在对于第二逻辑路由器1210的对象1485中(如圈11所示)。

此时,因为对于第二逻辑路由器的输入路由数据已经改变,表映射引擎1465从状态存储器1460中检索该数据(如圈12所示)。表映射引擎1465将这个输入路由数据发送到路由处理引擎1470,并且接收返回的输出路由数据(如圈13和圈14所示)。最后,表映射引擎将该数据存储在逻辑路由器对象1485中(如圈15所示),并且产生并分发对于第二逻辑路由器1210的流条目(如圈16所示)。由于以上通过参考图13所述的原因,控制器1450将流条目分发到合适的VM主机1435和网关主机1440。

上述图概念性地示出了通过网络控制器(或多个控制器)的数据流以执行动态路由(和其他与逻辑路由器相关的操作)。图15概念性地示出了由一些实施例的网络控制器执行的处理1500,以处理在控制器处接收的对于逻辑路由器的新输入路由。处理1500的各种不同操作可以由网络控制器的不同模块来执行(例如,API、表映射引擎等)。

如图所示,处理1500通过接收对于特定逻辑路由器的输入路由来开始(在1505)。这些输入路由可通过在网络控制器处的API来接收(例如,经由来自云管理应用的通信,或来自登录到控制器的网络管理员的直接通信),或者经由状态共享机制(例如,RPC通道)从同一个网络控制系统(例如,管理同一个数据中心)中的另一个网络控制器接收。接收到的该组输入路由可能是一个或多个静态路由配置、使得自动创建新连接路由的对于逻辑路由器的一个或多个逻辑端口的配置(例如,创建新的逻辑端口,改变逻辑端口所连接到的接口等)等。

然后,该处理确定(在1510)新的路由是否是通过API接收的,或者该路由是否是经由状态共享机制从另一个控制器接收的。当路由是通过API接收的时,处理将该路由分发(在1515)到与该控制器共享配置状态数据的其它网络控制器。在一些实施例中,集群中的网络控制器在完全连接的网中进行操作,并且因此当一个控制器通过其API接收配置状态时,该控制器与集群中的每一个其它控制器共享数据。因此,如果第一控制器从第二控制器接收配置数据,则第一控制器不需要重新共享配置状态。对于在网络控制系统中不同地相互连接的控制器,可以使用关于处理1500的不同变型,以便确保所有控制器接收输入配置状态。

在根据需要共享输入数据后,处理1500确定(在1520)(执行处理1500的)控制器是否是特定逻辑路由器的主控器。在一些实施例中,这个操作是由控制器的表映射引擎执行的。当表映射引擎检索新配置数据时,引擎执行操作以确定配置数据是否是对于(例如,由其UUID标识的)逻辑转发元件的,其中,该控制器是该逻辑转发元件的主控器。当控制器不是特定逻辑路由器的主控器时,处理前进到如下所述的操作1535。

当控制器是接收到输入配置数据的特定逻辑路由器的主控制器时,该处理计算(在1525)对于逻辑路由器的输出路由。在一些实施例中,如先前图13和图14所示,输出路由由路由处理引擎计算,该路由处理引擎执行递归路由遍历操作以标识输出路由。例如,如果接收了到特定下一跳网络地址的新静态路由,该路由处理引擎通过遍历为特定逻辑路由器指定的其他路由来标识用于路由的输出逻辑端口或放弃动作。

在计算了输出路由后,处理1500将输出路由分发(在1530)到实现特定逻辑路由器的网络元件。如上所述,在一些实施例中,这需要计算对于以下两者的数据元组:向VM主机和网关主机处的受管理的转发元件提供的流条目,以及向作为在那些主机上的L3网关操作的名称空间的网关主机提供的配置数据(当特定逻辑路由器具有一个或多个L3网关时)。在计算了数据元组后,控制器将数据直接分发到主机或通过一组网络控制器(例如,上文参考图4所述的分层网络控制系统)分发到主机。

然后,该处理确定(在1535)执行处理的控制器是否是特定逻辑路由器所连接到的任何其他逻辑路由器的主控器。如在图2或图12所示,两个逻辑路由器可以在逻辑网络内进行连接。在一些情况下,不同的控制器将是逻辑网络内的不同逻辑路由器的主控器,或PLR和TLR将具有不同的主控制器。当特定的逻辑路由器不连接到任何其他逻辑路由器时(在这种情况下,不需要执行动态路由),或控制器不是特定逻辑路由器所连接到的任何逻辑路由器的主控器,处理在不执行任何动态路由的情况下结束。

当控制器是连接到接收新路由信息的特定逻辑路由器的至少一个逻辑路由器的主控器时,处理自动将新路由信息传播到(在1540)这些其他逻辑路由器中的每一个(对于这些其他逻辑路由器中的每一个,该控制器是主控器)。在一些情况下,特定逻辑路由器可以连接到多个其他逻辑路由器,其中向这些其他逻辑路由器传播路由,但是本控制器是这些路由器中的一个路由器的仅有的主控器,在这种情况下,该控制器处理向那个逻辑路由器的路由的传播,而不同的控制器控制向其他逻辑路由器的路由的传播。

对于连接到特定逻辑路由器的第二逻辑路由器,当对于特定逻辑路由器的新路由信息是将除特定逻辑路由器所连接到的第二逻辑路由器的端口的地址之外的下一跳地址列出的静态路由时,该处理将静态路由传播到第二逻辑路由器。如果新路由是对于除两个逻辑路由器为了相互连接所连接到的前缀之外的前缀的连接路由,则该处理将动态路由传播到第二逻辑路由器。对于以上情况中的任一种,对于动态路由的下一跳网络地址是第二逻辑路由器所连接到的特定逻辑路由器的端口的地址。此外,当传播静态路由时,一些实施例提供附加的路由长度信息供在执行路由遍历时使用。在传统的BGP中,所通告的路由可以包括当遵循特定路由时包将穿过的多个自治系统。类似地,当动态传播路由时,一些实施例提供关于所传播的路由是否是将包发送到L3网关或其他逻辑路由器的静态路由或连接路由的至少一个指示。在后一种情况下,接收动态路由的逻辑路由器可以具有到达所路由的前缀的、不同的更直接的方式。

在将路由传播到其他逻辑路由器后,处理1500计算(在1545)对于其他逻辑路由器的经更新的输出路由。在一些实施例中,如先前的图13和图14所示,输出路由由路由处理引擎计算,路由处理引擎执行递归路由遍历操作以标识输出路由。例如,当路由被动态传播到逻辑路由器时,路由处理引擎标识是否使用动态路由,并且如果使用该路由,则通过遍历为特定逻辑路由器指定的其他路由来标识对于路由的输出逻辑端口或放弃动作。

在计算了输出路由后,处理1500将输出路由分发(在1550)到实现特定逻辑路由器的网络元件。如上所述,在一些实施例中,这需要计算对于以下两者的数据元组:向VM主机和网关主机处的受管理的转发元件提供的流条目,以及向作为那些主机上的L3网关操作的名称空间的网关主机提供的配置数据(当特定逻辑路由器具有一个或多个L3网关时)。在计算了数据元组后,控制器将数据直接分发到主机或通过一组网络控制器(例如,上文参考图4所述的分层网络控制系统)分发到主机。然后处理结束。

图16概念性地示出了逻辑网络,以及图17-19示出了对于这个网络中的三个路由器的路由表。这些示例将用于示出根据一些实施例的由网络控制器进行的逻辑路由器之间的路由的动态传播。

如上所述,图16概念性地示出逻辑网络1600,逻辑网络1600包括三个逻辑路由器1605-1615,所有逻辑路由器都连接在子网18.0.0.0/28上。第一逻辑路由器1605具有在该子网上的IP地址为18.0.0.1的端口W,第二个逻辑路由器1610具有在该子网上的IP地址为18.0.0.3的端口T,以及第三逻辑路由器1615具有在该子网上的IP地址为18.0.0.2的端口Q。此外,第一逻辑路由器1605具有附连的两个逻辑交换机:附连到其端口X的子网10.0.0.0/24上的第一逻辑交换机1620和附连到其端口Y的子网11.0.0.0/24上的第二逻辑交换机1625。第二逻辑路由器1610具有附连到其端口V的子网12.0.0.0/24上的第三逻辑交换机1630,并且第三逻辑路由器1615具有附连到其端口P的子网13.0.0.0/24上的第四逻辑交换机1635。

最后,第一逻辑路由器1605和第三逻辑路由器1615各自具有连接到外部物理路由器的一个网关端口。第一逻辑路由器1605具有子网20.0.0.0/28上的IP地址为20.0.0.1的端口Z,该端口Z连接到物理路由器1640的IP地址为20.0.0.2的接口。第二逻辑路由器1610具有子网22.0.0.0/28上的IP地址为22.0.0.1的端口S,该端口S连接到物理路由器1645的IP地址为22.0.0.2的接口。

图17反映了在三个逻辑路由器1605-1615的各自的主控制器已经(i)产生了对于每个逻辑路由器的连接路由、(ii)接收或产生了对于每个逻辑路由器的静态缺省路由以及(iii)动态地将路由在逻辑路由器之间传播之后的对于这三个逻辑路由器1605-1615的初始路由表1700、1710和1720。路由表中示出的路由是输入路由(在递归路由处理操作前)。为了简明起见,这些路由仅示出了被路由的前缀、和下一跳IP地址或输出端口。所有路由假设允许具有所路由的前缀的包(而不是放弃这样的包),并且没有列出优先级。类型(连接、静态或动态)是由路由的名称指示的(例如,C1是连接路由、S1是静态路由等)。

如图所示,第一路由表1700包括对于第一路由器1605的四个逻辑端口的四个连接路由1701-1704。因此,例如,第一连接路由1701指定将地址匹配前缀10.0.0.0/24的所有包发送到逻辑端口X,而第四连接路由指定将地址匹配前缀20.0.0.0/28的所有包发送到逻辑端口Z(即,发送到外部网络上)。第二路由表1710仅包括两个连接路由1711和1712,因为第二逻辑路由器只有两个逻辑端口T和V。第三路由表1720具有对于其三个逻辑端口的三个连接路由1721-1723(一个附连有逻辑交换机、第二个连接到具有其它路由器的子网,以及第三个连接到外部网络。)

每一个路由表还包括静态缺省路由。第一路由表1700包括指定将所有包(前缀0.0.0.0/0)发送到下一跳20.0.0.2的静态路由1705,该下一跳是物理网络20.0.0.0/28上对于逻辑路由器1605的网关所连接到的物理路由器接口。类似地,第二路由表1720包括指定将所有包发送到下一跳22.0.0.2的路由1724,该下一跳是物理网络22.0.0.0/28上对于逻辑路由器1615的网关所连接到的物理路由器接口。路由表1710包括指定18.0.0.1(第一逻辑路由器1605的端口W)作为对于所有其他不匹配的包的下一跳IP的静态缺省路由1713。因此,将通过第一逻辑路由器1605而不是第三逻辑路由器1615在逻辑上发送从VM 5和VM 6发送的包,除非提出更具体的路由。

最后,路由表1700、1710和1720各自包括几个动态路由。对于第一逻辑路由器1605的第一路由表1710包括三个动态路由:对于前缀12.0.0.0/24的从逻辑路由器1610(根据其连接路由之一)传播的具有下一跳地址18.0.0.3的第一路由1706,以及对于前缀13.0.0.0/24和前缀22.0.0.28的从第三逻辑路由器1615(根据其两个连接路由)传播的均具有下一跳地址18.0.0.2的第二动态路由1707和第三动态路由1708。缺省路由1713或1724都不会被传播到逻辑路由器1605,因为路由表1710已经包含了对于前缀0.0.0.0/0的缺省路由(一些实施例传播这个路由,但它不会被使用,因为路由表中已经存在更高优先级的静态路由)。此外,不传播对于连接路由器(18.0.0.0/28)的子网的连接路由。

类似地,对于第二逻辑路由器1610的第二路由表1720包括五个动态路由。动态路由1714、1715和1716对应于第一逻辑路由器1605的连接路由,而动态路由1717和1718对应于第三逻辑路由器1615的连接路由。对于第三逻辑路由器1615,第三路由表1730具有四个动态路由。动态路由1725-1727对应于第一逻辑路由器1605的连接路由,而动态路由1728对应于第二逻辑路由器1610的连接路由。

在如图16中所示地配置逻辑网络(以及如图17中所示地输入缺省路由)之后不久,网络控制系统将产生路由表1700、1710和1720,并且随后执行路由处理、产生流条目和网关配置数据,并且为了在受管理的网络中实现逻辑网络1600将这个数据分发到受管理的转发元件和网关。

图18和图19示出了网络控制系统接收对于三个逻辑路由器1605-1615之一的新静态路由、以及这些路由如何通过路由表1700-1720传播的示例。在图18中,对于第一逻辑路由器1605的新静态路由1805被网络控制器之一接收,该网络控制器保持对于逻辑网络1600的状态数据以及管理其中实现逻辑网络的网络。静态路由1805指定将匹配子网23.0.0.0/24的包发送到下一跳地址20.0.0.2。虽然给出将所有包0.0.0.0/0发送这个相同的下一跳地址的缺省路由似乎是多余的,但是,如果缺省路由改变(例如因为第二网关端口被添加到逻辑路由器1605),则路由1805可能变得重要。接收路由1805的控制器可以是管理第一逻辑路由器1605的主控制器或不同的控制器。在以上任一情况下,通过其API接收静态路由的控制器使用控制器到控制器状态共享机制与其他控制器共享输入路由。

如图所示,在对于每一个其他逻辑路由器1610和1615的主控制器处,这个静态路由被传播到对于其他逻辑路由器的路由表1710和1720。因此,对于第二逻辑路由器1610的路由表1710接收指定将匹配前缀23.0.0.0/24的包发送到下一跳地址18.0.0.1(逻辑路由器1605的端口W)的新动态路由1810。对于第三逻辑路由器1605的路由表1720接收也指定将匹配前缀23.0.0.0/24的包发送到下一跳地址18.0.0.1的类似的新动态路由1815。因为这个路由在网关端口中比其缺省路由更具体,当VM 7或VM 8发送包到子网23.0.0.0/24中的地址时,接收包的受管理的转发元件将通过对于第三逻辑路由器1615和第一逻辑路由器1605的流水线来处理包,并且将包发送到对于第一逻辑路由器1605的L3网关。

在图19中,在对于第三逻辑路由器1615的网络控制器之一处接收新静态路由1905。静态路由1905指定将匹配前缀27.0.0.0/24的包发送到下一跳18.0.0.1(即,逻辑路由器1605的端口W)。这使得从VM 7或VM 8发送到这个子网中的地址的包被第一逻辑路由器1605处理并且从对于第一逻辑路由器1605的L3网关发出,而不是从第三逻辑路由器1615的L3网关发出。此外,第二逻辑路由器1610的主控制器传播这个路由以在路由表1710中创建新动态路由1910,该动态路由指定下一跳IP地址18.0.0.2(第三逻辑处理器1615的端口Q)。因此,从VM 5或VM 6发送到子网27.0.0.0/24中的地址的包将在从第一逻辑路由器的L3网关发出前,在第一跳MFE处被全部三个逻辑处理器1605-1615处理。

但是,在一些实施例中,动态路由传播机制认识到,第二逻辑路由器1610与第一逻辑路由器1605和第三逻辑路由器1610在同一个子网中,并指定第二逻辑路由器直接将包发送到第一逻辑路由器。替代地,只是因为由于下一跳IP地址对应于逻辑路由器的端口而没有将路由1905动态地传播到第一逻辑路由器1605的路由表1700,路由1905也不会被传播到第二逻辑路由器1610的路由表1710,这是因为下一跳IP是在与第二逻辑路由器的端口T相同的子网(18.0.0.0/28)上。

IV.电子系统

上面描述的特征和应用中的很多被实现为被指定为记录在计算机可读存储介质(也被称为计算机可读介质)上的一组指令的软件处理。当这些指令被一个或多个处理单元(例如,一个或多个处理器、处理器的核芯、或其它处理单元)执行时,它们使得处理单元执行指令中所指示的动作。计算机可读介质示例包括但不限于:CD-ROM,闪存驱动器,RAM芯片,硬盘驱动器,EPROM等。计算机可读介质不包括载波和无线传递或通过有线连接传递的电子信号。

在此说明书中,术语“软件”是指包括驻留在只读存储器中的固件或可以被读入到存储器中供处理器进行处理的存储在磁贮存器中的应用。此外,在一些实施例中,多个软件发明可以在保持明显的软件发明的同时被实现为更大程序的子部分。在一些实施例中,多个软件发明也可以被实现为分离的程序。最后,这里所描述的一起实现软件发明的分离程序的任意组合在本发明的范围之内。在一些实施例中,当被安装以在一个或多个电子系统上操作时,软件程序定义执行并运行软件程序的操作的一个或多个特定的机器实现方式。

图20概念性地示出了用以实现本发明的一些实施例的电子系统2000。电子系统2000可以被用于执行上述控制、虚拟化或操作系统应用中的任一个。该电子系统2000可以是计算机(例如,台式计算机、个人计算机、平板计算机、服务器计算机、大型机、刀片计算机等)、电话、PDA或任何其他种类的电子设备。这样的电子系统包括各种类型的计算机可读介质和对于各种其他类型的计算机可读介质的接口。电子系统2000包括总线2005、处理单元2010、系统存储器2025、只读存储器2030、永久存储设备2035、输入设备2040和输出设备2045。

总线2005统一代表所有系统、外围设备、和芯片组总线,该总线可通信地连接电子系统2000的多个内部设备。例如,总线2005将处理单元2010与只读存储器2030、系统存储器2025和永久性存储设备2035可通信地连接。

处理单元2010从这些各种存储器单元检索要执行的指令和要处理的数据,以执行本发明的处理。在不同实施例中,处理单元可以是单个处理器或多核处理器。

只读存储器(ROM)2030存储处理单元2010和电子系统的其他模块所需要的静态数据和指令。另一方面,永久性存储设备2035是读取和写入存储设备。该设备是即使在电子系统2000断电的情况下也存储指令和数据的非易失性存储单元。本发明的一些实施例使用大容量存储设备(诸如磁盘或光盘及其相应的盘驱动器)作为永久存储设备2035。

其他实施例使用可移除的存储设备(诸如软盘、闪存驱动器等)作为永久性存储设备。像永久性存储设备2035一样,系统存储器2025是读取和写入存储设备。但是与永久性存储设备2035不同,系统存储器是易失性读取和写入设备(诸如随机存取存储器)。系统存储器存储处理器在运行时需要的一些指令和数据。在一些实施例中,本发明的处理被存储在系统存储器2025、永久性存储设备2035和/或只读存储器2030中。为了执行一些实施例的处理,处理单元2010从这些各种存储器单元中检索要执行的指令和要处理的数据。

总线2005还连接到输入设备2040和输出设备2045。输入设备使得用户可以对电子系统传送信息和选择命令。输入设备2040包括字母数字键盘和指点设备(也被称为“光标控制设备”)。输出设备2045显示由电子系统产生的图像。输出设备包括打印机和显示设备(诸如阴极射线管(CRT)或液晶显示器(LCD))。一些实施例包括诸如触摸屏的用作输入和输出装置设备的设备。

最后,如图20所示,总线2005还通过网络适配器(未示出)将电子系统2000与网络2065耦合。以这种方式,计算机可以是计算机网络(诸如局域网(“LAN”)、广域网(“WAN”)、或内联网,或网络的网络(诸如因特网))的一部分。电子系统2000的任何或所有组件可以与本发明一起使用。

一些实施例包括电子组件,诸如微处理器、将计算机程序指令存储在机器可读或计算机可读介质中(可选地称为计算机可读存储介质,机器可读介质或机器可读存储介质)的贮存器和存储器。这样的计算机可读介质的一些例子包括RAM、ROM、只读紧凑盘(CD-ROM)、可记录紧凑盘(CD-R)、可重写紧凑盘(CD-RW)、只读数字多功能盘(例如,DVD-ROM,双层DVD-ROM)、各种可记录/可重写的DVD(例如,DVD-RAM、DVD-RW、DVD+RW等)、闪速存储器(例如,SD卡、迷你SD卡,微型SD卡等)、磁盘驱动器和/或固态硬盘驱动器、只读蓝光光盘和可记录蓝光光盘、超密度光盘,任何其它光学或磁性介质、以及软盘。计算机可读介质可以存储可由至少一个处理单元执行的并且包括用于执行各种操作的多组指令的计算机程序。计算机程序或计算机代码的示例包括机器代码(诸如由编译器产生的)和包括由计算机、电子组件、或微处理器使用解释器执行的更高级别的代码的文件。

虽然上述讨论主要指的是执行软件的微处理器或多核处理器,一些实施例由一个或多个集成电路(诸如专用集成电路(ASIC)或现场可编程门阵列(FPGA))执行。在一些实施例中,这样的集成电路执行执行存储在该电路本身中的指令。

如在本说明书中所使用的,术语“计算机”、“服务器”、“处理器”和“存储器”都是指电子设备或其它技术设备。这些术语排除了人或人群。为了说明的目的,术语“显示”或“正在显示”表示显示在电子设备上。如在本说明书中所使用的,术语“计算机可读介质”、“计算机可读介质”和“机器可读介质”完全被限制为对以可被计算机读取的形式存储信息的有形的物理的对象。这些术语排除任何无线信号、有线下载信号、以及任何其他短暂的信号。

虽然参考许多具体细节描述了本发明,但是本领域技术人员将认识到,本发明可以在不偏离本发明的精神的情况下以其它特定形式实施。另外,许多附图(包括图9和图15)概念性地示出了处理。这些处理的具体操作可以不按示出和描述的确切顺序来执行。具体操作可以不在一个连续的操作序列中执行,并且不同的具体操作可以在不同的实施例中执行。此外,处理可以使用几个子处理来实现,或作为更大的大型处理的一部分实现。因此,本领域技术人员将理解,本发明并不受上述说明性细节的限制,而是由所附权利要求来定义。

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