。在一些实施例中,主机机器可以具有连接到单个MPSE的多个MPRE,其中在主机机器中的 每个MPRE实现不同的LRE JPRE和MPSE被称为"物理"路由/交换元件,以便与"逻辑"路由/交 换元件进行区分,即使MPRE和MPSE在一些实施例中用软件实现。在一些实施例中,MPRE被称 为"软件路由器"并且MPSE被称为"软件交换机"。在一些实施例中,LRE和LSE被统称为逻辑 转发元件(LFE),而MPRE和MPSE被统称为受管理的物理转发元件(MPFE)。
[0075] 在一些实施例中,MPRE 330包括一个或多个逻辑接口(LIF),每个逻辑接口用作与 网络的特定段的接口。在一些实施例中,每个LIF可通过其自己的IP地址寻址并且用作用于 其网络特定段的网络节点(例如,VM)的缺省网关或ARP代理。如下面详细描述的,在一些实 施例中,在不同主机机器中的所有MPRE都可通过相同的"虚拟" MAC地址寻址,而每个MPRE也 被分配"物理" MAC地址,以便指示MPRE在哪个主机机器中操作。
[0076] 上行链路模块370在MPSE 320和物理NIC 395之间中继数据。上行链路模块370包 括出口链和入口链,其中每一个都执行多个操作。这些操作中的一些是用于MPRE 330的预 处理和/或后处理操作。上行链路模块370的操作将在下面通过参考图14-15进一步描述。 [0077] 如由图3所示,虚拟化软件305具有来自多个不同LRE的多个MPRE。在多租户环境 中,主机机器可以操作来自多个不同用户或租户的虚拟机(即,连接到不同的逻辑网络)。在 一些实施例中,每个用户或租户在主机中具有用于处理其L3路由的相应的MPRE具体实例。 在一些实施例中,虽然不同的MPRE属于不同的租户,但是它们都共享MPSE 320上的同一 vPort,并且因此共享同一L2MAC地址。在一些其它实施例中,属于不同租户的每个不同的 MPRE具有其自己到MPSE的端口。
[0078] MPSE 320和MPRE 330使得数据分组有可能在VM 311-314之中转发,而无需通过外 部物理网络390发送(只要VM连接到同一逻辑网络,因为不同租户的VM将彼此隔离)。
[0079] 图4示出了通过MPSE 320的L2转发操作。标记为"Γ的操作表示VM 311到VM 312之 间的网络流量,其完全在主机机器300内发生。这与标记为"2"的操作形成对比,其中标记为 "2"的操作表示在VM 313和另一个主机机器上的另一个VM之间的网络流量。为了到达另一 个主机机器,MPSE 320通过NIC 395将分组发送到物理网络390。
[0080] 图5a-b示出了通过与MPSE 320结合MPRE 330进行的L3路由操作。MPRE 330具有相 关联的MAC地址并且可以从VM 311-314中的任何一个接收L2层流量。图5a示出了用于其目 的地与MPRE 330在同一主机中的分组的第一L3路由操作。在标记为"Γ的操作中,VM 312通 过利用MPRE的MAC地址将数据分组发送到MPRE 330。在标记为"2"的操作中,MPRE 330通过 将接收到的数据分组的目的地L3层IP地址解析为L2层目的地MAC地址对该数据分组执行L3 路由操作。如下面详细描述的,这可能需要MPRE330发送地址解析协议(ARP)请求。路由的分 组然后在标记为"3"的操作中发送回到MPSE 320。由于目的地MAC地址用于主机机器300内 的VM(即,VM 311),因此MPSE 320在操作"3"中将路由的分组直接转发到目的地VM,而无需 分组曾经到达物理网络390。
[0081]图5b示出了用于其目的地在只能通过物理网络到达的远程主机内的分组的第二 L3路由操作。操作"4"和"5"与"Γ和"2"的操作类似,在此期间,VM 312发送数据分组到MPRE 330并且MPRE 330对接收到的数据分组执行(一个或多个)L3路由操作并且将路由的分组发 送回到MPSE 320(再一次,有可能发送ARP请求来将目的地IP地址解析为MAC地址)。在操作 "6"期间,MPSE 320基于目的地的L2MAC地址通过物理NIC 395将路由的分组发送出到物理 网络。
[0082] 图5a_b示出了用于在与MPRE同一主机机器中的VM的L3路由操作。在一些实施例 中,也可以使用MPRE来为MPRE的主机机器之外的实体执行L3路由操作。例如,在一些实施例 中,主机机器的MPRE可以用作用于为不具有其自己的MPRE的另一个主机机器执行L3路由的 "指定的实例"。用作"指定的实例"的MPRE的例子将在下面部分II. C中进一步描述。
[0083] 图6a-b示出了由MPRE 330为从物理网络390进入主机300的分组执行的L3路由操 作。虽然从还操作其自己的MPRE的主机上的VM发送的分组将被该MPRE路由,但是分组也可 以从本身不操作VDR MPRE的其它主机机器发送到VM 311-314。图6a示出了用于从物理网络 接收到的并且在操作"Γ至"3"中发送到主机300内的虚拟机的分组的路由操作。在操作"Γ 中,外部实体通过寻址MPRE的MAC地址通过到MPSE 320的物理网络将分组发送到MPRE 330。 在标记为"2"的操作中,MPRE 330通过将接收到的数据分组的目的地L3层IP地址解析为L2 层目的地MAC地址对该数据分组执行L3路由操作。路由的分组然后在标记为"3"的操作中经 由MPSE 320发送到目的地虚拟机。
[0084]图6b示出了在操作"4"至"6"中用于从外部实体发送到另一个外部实体(例如,在 另一个主机机器中的虚拟机)的分组的路由操作。操作"4"和"5"是与"Γ和"2"类似的操作, 在此期间,MPRE 330从物理网络和MPSE 320接收分组,并且对接收到的数据分组执行L3路 由操作。在操作"6"中,MPRE 330将数据分组发送回到MPSE 320,MPSE 320基于解析的MAC地 址将分组发送到在另一个主机机器中的另一个虚拟机。如下面所述,当MPRE 330是用于与 不操作LRE的外部主机通信的LRE的指定的具体实例时,这可能发生。
[0085]在一些实施例中,主机机器300是通过用于形成能够支持逻辑网络的网络虚拟化 基础设施的物理网络互连的许多主机机器之一。这种网络虚拟化基础设施能够通过同时实 现一个或多个用户指定的逻辑网络支持多个租户。这种逻辑网络可以包括用于在虚拟机之 间执行L3层路由的一个或多个逻辑路由器。在一些实施例中,逻辑路由器通过跨多个主机 机器实例化的MPRE共同实现。
[0086]图7概念性地示出了具有由跨不同主机机器的MPRE实现的逻辑路由器的逻辑网络 701和702。逻辑网络701和702在包括通过物理网络互连的若干个主机机器的网络虚拟化基 础设施上同时被实现。如在该图中所示,第一逻辑网络701是用于租户X并且第二逻辑网络 702是用于租户Y。每个租户的逻辑网络包括多个虚拟机。租户X的虚拟机被划分到段A、B、C 和D中。租户Y的虚拟机被划分到段E、F、G和Η中。在一些实施例中,在段中的虚拟机能够利用 L2链路层协议通过逻辑交换机彼此通信。在一些实施例中,至少一些段是封装覆盖网络,诸 如VXLAN网络。在一些实施例中,每个段形成不同的IP子网。
[0087] 每个逻辑网络具有其自己的逻辑路由器。用于租户X的逻辑网络701具有LRE 711 作为用于在段A、B、C和D之间路由的逻辑路由器。用于租户Y的逻辑网络702具有LRE 712作 为用于在段E、F、G和Η之间路由的逻辑路由器。每个逻辑路由器在网络虚拟化基础设施中通 过跨不同主机机器实例化的MPRE来实现。在LRE 711中的一些MPRE具体实例与在LRE 712中 的一些MPRE具体实例在同一主机机器中操作。
[0088]每个网络段具有其自己的到逻辑路由器的逻辑接口,并且每个逻辑路由器具有其 自己的一组逻辑接口。如所示出的,逻辑路由器711具有分别用于段A、B、C和D的逻辑接口 LIF A、LIF B、LIF C和LIF D,而逻辑路由器712具有分别用于段E、F、G和Η的逻辑接口LIF E、LIF F、LIF G和LIF Η。每个逻辑接口具有其自己的、在网络虚拟化基础设施中唯一的标 识符(例如,IP地址或覆盖网络标识符)。因此,租户X的网络流量可以与租户Y的网络流量完 全隔离。
[0089]图8示出了在网络虚拟化基础设施的主机机器中的逻辑路由器的物理实现。具体 而言,该图示出了在主机机器801和802中的逻辑网络701和702的(部分)实现。如所示出的, 主机机器801正在托管虚拟机811-815,并且主机机器802正在托管虚拟机821-826。在这些 虚拟机中,虚拟机811-812和821-823是租户X的虚拟机,而虚拟机813-816和824-826是租户 Y的虚拟机。
[0090] 每个主机机器包括用于两个不同租户的两个MPRE。主机机器801具有分别用于租 户X和Y的MPRE 841和842。主机802具有分别用于租户X和Y的MPRE 843和844。主机801操作 用于在虚拟机811-816和MPRE 841-842之间执行L2层分组转发的MPSE851,而主机802正在 操作用于在虚拟机821-826和MPRE 843-844之间执行L2层分组转发的MPSE 852。
[0091] 每个MPRE具有一组用于与在其主机机器上操作的虚拟机接口的逻辑接口。由于 MPRE 841和843是用于租户X的MPRE,因此它们只能具有用于租户X的网络段(即,段A、B、C或 D)的逻辑接口,而租户Y MPRE 842和844只能具有用于租户Y的网络段(即,段E、F、G和H)的 逻辑接口。每个逻辑接口与网络IP地址相关联。附连到MPRE的逻辑接口的IP地址允许MPRE 可通过运行在其本地主机上的VM寻址。例如,VM 811是在主机801上运行的段A虚拟机,其通 过利用LIF A的IP地址,8卩,1.1.1.253,使用MPRE 841作为其L3路由器。在一些实施例中, MPRE可以包括被配置为不活动的LIF。例如,MPRE 841的LIF D处于活动状态,这是因为主机 801不操作任何在段D中的VM。即,在一些实施例中,用于特定LRE的每个MPRE被配置有所有 LRE的逻辑接口,但是,基于在具有本地LRE具体实例的主机机器上操作的VM,LRE的不同本 地具体实例(即,MPRE)可能具有不同的LIF不活动。
[0092] 值得注意的是,在一些实施例中,即使用于相同段的LIF被附连到不同主机中的不 同MPRE,这些LIF也具有相同的IP地址。例如,在主机801上的MPRE 842具有用于段E(LIF E) 的逻辑接口,并且主机802上的MPRE 844也一样。MPRE 842的LIF E与MPRE 844的LIF E共享 同一IP地址4.1.1.253。换句话说,VM 814(在主机801上运行的段E中的VM)和VM 824(在主 机802上运行的段E中的VM)两者都使用同一IP地址4.1.1.253来访问其各自的MPRE。
[0093] 如所提到的,在一些实施例中,在同一主机机器上运行的不同MPRE共享MPSE上的 同一端口,这意味着在同一主机上运行的所有MPRE共享L2MAC地址。在一些实施例中,使用 逻辑接口的唯一IP地址来分离来自不同租户和不同数据网络段的数据分组。在一些实施例 中,使用其它识别机制将来自不同网络段的数据分组定向到不同的逻辑接口。一些实施例 使用用于不同段的唯一标识符来分离来自不同段的分组。对于是子网的段,一些实施例使 用分组中的IP地址来查看该分组是否来自正确的子网。对于对应于覆盖网络的段,一些实 施例使用网络段标识符来将数据分组定向到其相应的逻辑接口。在一些实施例中,网络段 标识符是作为逻辑网络的段的覆盖网络的标识符(例如,VNI、VXLAN ID或VLAN标签或ID)。 在一些实施例中,与段的类型无关,逻辑网络的每个段被分配VNI作为该段的识别符。
[0094] 图9示出了来自不同段的虚拟机的数据分组如何被定向到主机801内的不同逻辑 接口。如所示出的,VM 811-816被连接到MPSE851的不同端口,而租户X的MPRE 841和租户Y 的MPRE 842被连接到具有MAC地址"01: 23:45:67:89 :ab"的端口(对于本文的讨论,被称为 "VMAC")。来自段A VM 811的分组901和来自段G VM 815的分组902被发送到MPSE 851中。 MPSE 851又基于用于分组901和902的目的地MAC地址"VMAC"将这两个分组定向到用于MPRE 841和842的虚拟端口。分组901携带用于段A的VNI ( "VNI A"),而分组902携带用于段G的VNI ("VNI dMPRE 841的逻辑接口 "LIF A"基于其网络段标识符"VNI A"接受分组901,而 MPRE 842的逻辑接口 "LIF G"基于其网络段标识符"VNI G"接受分组902。由于租户不共享 相同的网络段,并因此不共享VNI,因此来自不同租户的数据分组被安全地彼此隔离。
[0095]虽然这个图示出了使用分组上的VNI(网络标识符标签)来将分组分离到正确的逻 辑路由器和逻辑路由器接口,但是不同的实施例可以使用其它鉴别机制。例如,一些实施例 使用分组的源IP地址(以确保该分组是通过具有与源VM相同网络前缀的LIF发送的),或者 源IP地址和网络标识符标签的组合。
[0096] 对于一些实施例,图10示出了在主机机器中操作的示例MPRE具体实例1000的框 图。如所示出的,MPRE 1000在虚拟端口 1053处被连接到MPSE 1050 JPSE 1050被连接到与 MPRE 1000在同一主机中操作的虚拟机以及通过上行链路模块1070和物理NIC 1090连接到 物理网络。MPRE 1000包括数据链路模块1010和路由处理器1005、逻辑接口数据储存装置 1035、查找表储存装置1040、以及配置数据储存装置1045。路由处理器1005包括入口管道 1020、出口管道1025、定序器1030。
[0097] 数据链路模块1010是用于MPRE 1000与MPSE 1050的链路层(L2)接口。它接受寻址 到分配给端口 1053的MAC地址(在所示的例子中是"01:23:45:67:89: ab")的到来数据分组。 它也将外出数据分组发送到MPSE 1050。在一些实施例中,数据链路模块还接受具有广播地 址("ff: ff: ff: ff: ff: ff")和/或组播地址的数据分组。
[0098]入口管道1020用于使到来数据分组在它们顺序地被路由定序器1030处理之前排 队。在一些实施例中,入口管道还包括对到来数据分组执行不同处理操作的多个管道阶段。 在一些实施例中,这些入口处理操作包括入口访问控制(根据访问控制列表ACL)和源网络 地址转换(NAT)。在一些实施例中,这些操作中的至少一些是基于存储在查找表储存装置 1040和逻辑接口数据储存装置1035中的数据的路由或桥接操作。在一些实施例中,入口管 道根据为识别为用于到来分组的入站LIF的逻辑接口指定的数据执行动作。
[0099] 出口管道1025是用于使由路由定序器1030产生的外出数据分组在通过MPSE 1050 被数据链路模块1010发送出之前排队。在一些实施例中,出口管道还包括对外出数据分组 执行不同处理操作的多个管道阶段。在一些实施例中,这些出口处理操作包括出口访问控 制(根据访问控制列表ACL)和目的地网络地址转换(NAT)。在一些实施例中,这些操作中的 至少一些是基于存储在查找表储存装置1040和逻辑接口数据储存装置1035中的数据的路 由或桥接操作。在一些实施例中,出口管道根据为识别为用于外出分组的出站LIF的逻辑接 口指定的数据执行动作。
[0100] 定序器1030在入口管道1020和出口管道1025之间执行顺序操作。在一些实施例 中,路由定序器执行诸如ARP操作和桥接操作的顺序操作。在一些实施例中,当必要时,诸如 产生ARP查询和响应时,路由定序器创建新的分组并将其注入到网络中。它从入口管道1020 检索预处理的数据分组并且将外出分组存储到出口管道中用于后处理。
[0101] 一些实施例的路由处理器1005通过首先将到来数据分组分类到各个逻辑接口中 做出其路由决策。路由处理器1005还在逻辑接口数据储存装置1035中更新和维持每个逻辑 接口的当前状态。例如,基于逻辑接口的当前状态,路由处理器1005产生对附连到第一逻辑 接口的第一网络段中的第一虚拟机的ARP响应,同时将来自附连到第二逻辑接口的第二网 络段中的第二虚拟机的数据分组传递到附连到第三逻辑接口的第三网络段中的第三虚拟 机。第一、第二和第三逻辑接口的当前状态然后被相应地更新并且存储在逻辑接口数据储 存装置1035中。在一些实施例中,路由处理器1005还代表特定的逻辑接口再一次基于该特 定逻辑接口的当前状态产生新的数据分组(例如,用于ARP请求)。
[0102]路由处理器1005也基于查找表储存装置1040的内容做出其路由决策。在一些实施 例中,查找表储存装置1040存储用于L3到L2的地址解析(例如,从网络层IP地址到链路层 MAC地址)的解析表(或ARP表)。在一些实施例中,路由定序器不仅执行L3层路由(例如,从一 个IP子网到另一个IP子网),而且还执行在相同IP子网中操作的不同覆盖网络之间(诸如 VXLAN网络和VLAN网络之间)的桥接。在这种实施例的一些中,查找表储存装置1040存储将 网络段标识符(VNI)与MAC地址绑定所需的桥接表。路由处理器1005还通过从到来分组获知 来更新桥接表和ARP表中的条目。
[0103] MPRE 1000还包括配置数据储存装置1045。储存装置1045存储用于配置MPRE 1000 内的各种模块的数据。例如,在一些实施例中,在储存装置1045中的配置数据指定多个逻辑 接口,以及每个逻辑接口的参数(诸如其IP地址、相关联的网络段、活动/非活动状态、LIF类 型,等等)。在一些实施例中,配置数据还指定其它参数,诸如被同一主机机器中的虚拟机使 用来寻址MPRE 1000的虚拟MAC地址(VMAC)和被其它主机机器使用来寻址MPRE 1000的其物 理MAC地址(PMAC)。在一些实施例中,配置数据还包括用于ACL、NAT和/或防火墙操作的数 据。在一些实施例中,在配置数据存储1000中的数据经由在主机机器中的控制器代理(诸如 图3的控制器代理340)从控制器集群接收。配置数据和控制平面操作将在下面部分III中进 一步描述。
[0104] 图11概念性地示出了当处理来自MPSE的数据分组时由MPRE执行的一些实施例的 过程1100。在一些实施例中,处理1100由路由处理器1005执行。当MPRE接收到来自MPSE的数 据分组时,过程1100开始。该过程基于例如网络段标识符(例如,VNI)识别(在1110处)用于 入站数据分组(入站LIF)的逻辑接口。
[0105]该过程然后确定(在1120处)入站LIF是用于桥接的逻辑接口(桥LIF)还是用于执 行L3路由的逻辑接口(路由LIF)。在一些实施例中,逻辑接口或者被配置为路由LIF或者被 配置为桥LIF。如果识别的入站LIF是桥LIF,则过程前进到1123。如果识别的入站LIF是路由 LIF,则过程前进到1135。
[0106] 在1123处,该过程获知源MAC和到来分组的网络段标识符(例如,VNI)之间的配对。 由于源MAC确定是在由VNI识别的网络段中,因此这个信息对于桥接具有相同MAC地址作为 其目的地地址的分组是有用的。在一些实施例中,该信息被存储在桥表中,以提供在这个 MAC地址与它的VNI之间的配对。
[0107] 接下来,该过程确定(在1125处)在到来数据分组中的目的地MAC是否是需要桥接 的MAC。需要桥接的目的地MAC是在源网络段中没有已知的目的地的MAC,并且不能被路由 (例如,因为它与源VNI在同一IP子网上)。如果目的地MAC需要桥接,则过程前进到1130,否 贝1J,该过程结束。
[0108] 在1130处,该过程通过根据桥接表将未知目的地MAC与VNI绑定执行桥接操作。在 一些实施例中,如果没有找到这种条目,则过程泛洪附连到MPRE的所有其它桥LIF,以便找 到匹配的用于未知目的地MAC的VNI。在一些实施例中,如果为这个桥LIF启用了防火墙,则 该过程将不执行桥接。桥接操作将在下面的部分II .D中进一步描述。在一些实施例中,操作 1130是由诸如定序器1030的顺序模块执行的顺序操作。在执行桥接之后,该过程前进到 1150〇
[0109] 在1135处,该过程确定在到来数据分组中的目的地MAC是否寻址到MPRE。在一些实 施例中,所有的MPRE回答通用的虚拟MAC地址(VMAC)作为目的地。在一些实施例中,在MPRE 中的各个LIF回答其自己的LIF MAC(LMAC)作为目的地。如果目的地MAC地址用于MPRE(或 LIF),则该过程前进到1140。否则,该过程1100结束。
[011 0] 在1140处,该过程解析(1140)到来数据分组中的目的地IP地址。在一些实施例中, MPRE首先尝试通过在ARP表中查找IP地址来在本地解析IP地址。如果在ARP表中没有找到匹 配的条目,则该过程将发起ARP查询并且获取目的地MAC地址。ARP操作将在下面部分II.B中 进一步描述。在一些实施例中,操作1140是由诸如定序器1030的顺序模块执行的顺序操作。
[0111] 该过程下一步识别(1150)用于到来分组的出站LIF(或者在这一点上更合适地,外 出分组)。对于通过作为桥LIF的入站LIF进来的数据分组,出站LIF是由通过桥绑定提供的 VNI识别的桥LIF。对于通过作为路由LIF的入站LIF进来的数据分组,一些实施例通过检查 目的地IP地址识别出站LIF。在一些实施例中,出站LIF是由通过ARP解析表提供的VNI识别 的路由LIF。
[0112] 在识别出站LIF之后,该过程通过利用出站LIF将外出分组发送(在1160处)到正确 的目的地段。在一些实施例中,出站LIF通过例如利用目的地段的网络段标识符标记外出分 组来准备用于目的地段的分组。该过程1100然后结束。
[0113] II.VDR分组处理操作
[0114] A.本地和远程访问MPRE
[0115] 如所提到的,在以上部分I中描述的LRE是虚拟分布式路由器(VDR)。它将路由操作 (无论L3层路由还是桥接)分布在不同主机中作为MPRE的LRE的不同具体实例上。在一些实 施例中,采用VDR的逻辑网络通过使所有MPRE对所有虚拟机看起来相同进一步增强网络虚 拟化。在这些实施例中的一些实施例中,每个MPRE可在L2数据链路层通过对于系统中所有 MPRE都相同的MAC