通过网络指定和利用路径的制作方法

文档序号:20770178发布日期:2020-05-15 19:35阅读:239来源:国知局
通过网络指定和利用路径的制作方法



背景技术:

流量工程是指网络管理程序通过其为一系列数据消息流定义通过网络的特定路径的处理。迄今为止使用的方法包括mpls(多协议标签交换)技术,该技术在第2层和第3层报头之间添加路径描述信息。由于路径描述的这个位置,mpls通常被称为2.5层协议。但是,mpls技术和其它先前的流量工程技术并不容易支持封装租户标识符。将这些现有解决方案绑定到租户将需要其它策略以及用于覆盖层和底层的多个封装。



技术实现要素:

对于多租户环境,本发明的一些实施例提供了一种新颖的方法,该方法用于(1)将通过网络的租户数据消息流的特定路径嵌入到封装数据消息流的隧道报头中,并且然后(2)使用嵌入的路径信息来引导数据消息流通过网络。在一些实施例中,封装隧道报头被放置在流中每个数据消息的第2-4层报头前面(即,其外面)。

在一些实施例中,该方法从两个或更多个可行的通过网络的这样的路径中选择用于数据消息流的特定路径。为了从数据消息流的源和目的地之间的一组可行路径中选择路径,在一些实施例中,该方法对数据消息流执行分类操作。在一些实施例中,分类操作可以基于数据消息流的第2-4层报头值(例如,五个元组标识符,即协议、源端口和目的地端口以及源ip地址和目的地ip地址)和/或其相关联的上下文属性,诸如其流量类型(即,数据消息流中携带的内容的类型)、qos(服务质量)等级、第7层参数、进程标识符、用户标识符、组标识符等。

在这些实施例中的一些实施例中,上下文属性是从数据消息流的源机器(例如,虚拟机、容器等)捕获的,和/或在该源机器在其上执行的主机计算机上捕获的。当上下文属性集合包括流的流量类型时,该方法提供了一种新颖的方式来选择数据消息流的流量工程路径、将关于该路径的信息嵌入到数据消息流的隧道报头中,并使用该信息引导数据消息流通过网络。

在为数据消息流选择路径之后,在一些实施例中,该方法将识别出的路径嵌入在它用于封装该流的数据消息的隧道报头中。同样,在一些实施例中,该方法在隧道报头中嵌入租户标识符(例如,嵌入vni、虚拟网络标识符)以指定数据消息与特定租户相关联(例如,是从特定租户的机器发出的)。该方法沿着隧道将封装的消息发送到第一中间转发元件,该第一中间转发元件用作沿着所选择的路径的第一跳。

一些实施例使用通用网络虚拟化封装(geneve)隧道协议来携带路径信息(例如,下一跳索引和跳列表)和租户标识符。在一些实施例中,租户标识符被嵌入在geneve基础报头中,而路径信息被嵌入在geneve隧道报头的选项tlv(类型、长度、值)中。租户标识符的嵌入允许多个租户的数据消息流在两个跳之间使用同一隧道。

在一些实施例中,该方法通过识别和嵌入沿着路径的各跳(例如,中间转发元件)的网络地址(例如,目的地ip地址)列表来识别所选择的路径,并将该路径嵌入到隧道报头中。而且,在一些实施例中,该方法将跳索引值嵌入在隧道报头中,该跳索引值将嵌入的网络地址之一识别为用于识别沿着路径的下一跳的“下一”跳的网络地址。如下所述,当沿着路径的各跳以相反的顺序被嵌入到隧道报头中时(第一跳出现在跳列表中最后一个并且最后一跳出现在跳列表中第一个),沿着路径的每一跳都递减跳索引值。

在一些实施例中,沿着所选择的路径的跳通过隧道集合彼此连接。在一些实施例中,跳中的一些或全部是在主机计算机上执行的软件转发元件(例如,软件交换机或路由器)。在一些实施例中,跳中的一个或多个是硬件转发元件,诸如架顶式交换机、硬件路由器等。

因此,在选择数据消息的路径并用包含沿着该路径的跳的网络地址的隧道报头封装该数据消息之后,在一些实施例中,该方法将封装的数据消息沿着隧道传递给在连接到源机器的转发元件之后(例如,在与源机器在同一主机计算机上执行的软件转发元件之后)的沿着路径的第一跳(例如,第一sfe)。

对于沿着路径连接两个跳的每个隧道,在一些实施例中,每个消息的封装隧道报头包括外部报头,该外部报头包括源和目的地网络地址。在一些实施例中,外部报头的源地址是沿着隧道发送消息的跳的网络地址(例如,ip地址),而目的地地址是沿着隧道接收消息的跳的网络地址。在源机器的转发元件之后的每个特定跳处,该特定跳都会检查嵌入在隧道报头中的信息,以确定该隧道报头将其识别为下一跳。在一些实施例中,特定跳通过从接收到的消息的隧道报头中提取下一跳索引、使用该索引来检索下一跳的网络地址,并且然后确定该网络地址为其地址来做出该确定。

在确定接收到的数据消息将其识别为下一跳之后,特定跳确定它是否被指定为指定路径的最后一跳。如果是,那么该特定跳将检查嵌入在数据消息的报头中的目的地网络地址。该目的地网络地址(例如,ip地址)指定连接到跳的机器(例如,独立计算机、虚拟机或容器)。因此,该特定跳将解封装的数据消息提供给该机器。

另一方面,当特定跳确定它未被指定为沿着嵌入在接收到的数据消息的隧道报头中的路径的最后一跳时,特定跳在调整隧道报头参数之后将封装的数据消息沿着另一个隧道转发到另一跳。具体而言,为了将数据消息转发到另一跳,在一些实施例中,特定跳(1)递减下一跳索引(从接收到的数据消息的隧道报头中提取),以将另一跳的网络地址识别为沿着路径的下一跳的网络地址,(2)将下一跳的网络地址解析为从特定跳开始并终止于下一跳的底层隧道,并且(3)将该递减的跳索引值与租户标识符和沿着路径的各跳的网络地址列表一起嵌入在隧道报头中。在一些实施例中,特定跳将特定跳的网络地址作为封装的数据信息的源网络地址并且将另一跳的网络地址作为封装的数据信息的目的地网络地址嵌入在数据消息的隧道报头的外部部分中。

代替调整隧道报头参数,在其它实施例中,特定跳从接收到的数据消息中解封装(即,移除)隧道报头,并用新的隧道报头重新封装数据消息。普通技术人员将认识到,上述用于处理嵌入路径信息的方法仅仅是用于处理这种信息的一种方式。其它实施例以不同方式处理该信息。例如,其它实施例不在隧道报头中存储下一跳索引,因为每个中间跳被配置为选择下一跳地址(例如,第一跳地址)并在将封装的数据消息传递到沿着路径的下一跳之前从路径跳网络地址的列表中移除其网络地址。而且,在一些实施例中使用上述方法来将所选择的路径嵌入在单个租户环境中。因此,本领域的普通技术人员将认识到,本发明的一些实施例同样适用于单个租户数据中心。

前面的发明内容旨在用作对本发明的一些实施例的简要介绍。这并不意味着是对本文档中公开的所有发明性主题的介绍或概述。以下的具体实施方式和在具体实施方式中提及的附图将进一步描述在本发明内容中描述的实施例以及其它实施例。因此,为了理解由本文档描述的所有实施例,需要对发明内容、具体实施方式、附图和权利要求书进行全面审阅。而且,所要求保护的主题不受发明内容、具体实施方式和附图中的说明性细节的限制。

附图说明

本发明的新颖特征在所附权利要求中阐述。但是,为了解释的目的,在以下图中阐述了本发明的若干实施例。

图1图示了根据本发明的一些实施例的指定和使用特别定义的路径的示例。

图2图示了一些实施例的geneve隧道报头。

图3图示了一些实施例的geneve基础报头。

图4概念性地图示了在一些实施例中由入口跳执行的处理。

图5图示了沿着路径的跳在其接收到geneve封装的数据消息时执行的处理。

图6图示了在一些实施例中用于执行一些实施例的虚拟机、服务机器和路径处理器的主机计算机。

图7图示了在一些实施例中如何管理路径处理器的示例。

图8概念性地图示了用于实现本发明的一些实施例的计算机系统。

具体实施方式

在本发明的以下详细描述中,阐述和描述了本发明的许多细节、示例和实施例。但是,对于本领域技术人员将清楚和显而易见的是,本发明不限于所阐述的实施例,并且本发明可以在没有所讨论的一些具体细节和示例的情况下实践。

对于多租户环境,本发明的一些实施例提供了一种新颖的方法,该方法用于(1)将通过网络的租户数据消息流的特定路径嵌入在封装数据消息流的隧道报头中,并且然后(2)使用嵌入的路径信息来引导数据消息流通过网络。在一些实施例中,封装隧道报头被放置在流中每个数据消息的第2-4层报头前面(即,其外面)。

在一些实施例中,该方法从两个或更多个可行的通过网络的这样的路径中选择用于数据消息流的特定路径。为了从数据消息流的源和目的地之间的一组可行路径中选择路径,在一些实施例中,该方法对数据消息流执行分类操作。在一些实施例中,分类操作可以基于数据消息流的第2-4层报头值(例如,五个元组标识符,即协议、源端口和目的地端口以及源ip地址和目的地ip地址)和/或其相关联的上下文属性,诸如其流量类型(即,数据消息流中携带的内容的类型)、qos等级、第7层参数、进程标识符、用户标识符、组标识符等。当上下文属性集合包括流的流量类型时,该方法提供了一种新颖的方式来选择数据消息流的流量工程路径、将关于该路径的信息嵌入到数据消息流的隧道报头中,并使用该信息引导数据消息流通过网络。

在为数据消息流选择路径之后,在一些实施例中,该方法将识别出的路径嵌入在它用于封装该流的数据消息的隧道报头中。同样,在一些实施例中,该方法在隧道报头中嵌入租户标识符(例如,嵌入vni、虚拟网络标识符)以指定数据消息与特定租户相关联(例如,是从特定租户的机器发出的)。该方法沿着隧道将封装的消息发送到第一中间转发元件,该第一中间转发元件用作沿着所选择的路径的第一跳。

在一些实施例中,该方法通过识别和嵌入沿着路径的各跳(例如,中间转发元件)的网络地址(例如,目的地ip地址)列表来识别所选择的路径,并将该路径嵌入到隧道报头中。而且,在一些实施例中,该方法将跳索引值嵌入在隧道报头中,该跳索引值将嵌入的网络地址之一识别为用于识别沿着路径的下一跳的“下一”跳的网络地址。如下所述,当沿着路径的各跳以相反的顺序被嵌入到隧道报头中时(第一跳出现在跳列表中最后一个并且最后一跳出现在跳列表中第一个),沿着路径的每一跳都递减跳索引值。

在一些实施例中,沿着所选择的路径的跳通过隧道集合彼此连接。在一些实施例中,跳中的一些或全部包括在主机计算机上执行的软件转发元件(sfe)。在一些实施例中,这种sfe的示例包括软件路由器和交换机。在一些实施例中,跳中的一个或多个是硬件转发元件,诸如架顶式交换机、硬件路由器等。

在选择数据消息的路径并用包含沿着该路径的跳的网络地址的隧道报头封装该数据消息之后,在一些实施例中,该方法将封装的数据消息沿着隧道传递给在连接到源机器的转发元件之后(例如,在与源机器在同一主机计算机上执行的软件转发元件之后)的沿着路径的第一跳(例如,第一sfe)。隧道报头的外部部分包括源和目的地网络地址。在入口跳处,外部部分的源地址是最初沿着隧道发送消息的入口跳(或由该跳使用的虚拟隧道端点(vtep))的网络地址(例如,ip地址),并且目的地地址是沿着隧道接收消息的第一跳(或其vtep)的网络地址。

如本文档中所使用的,数据消息是指跨网络发送的特定格式的位集合。本领域普通技术人员将认识到的是,术语“数据消息”在本文档中用于指代可以跨网络发送的各种格式的位集合,诸如以太网帧、ip分组、tcp段、udp数据报等。同样,如本文档中所使用的,对l2、l3、l4和l7层(或第2层、第3层、第4层、第7层)的引用分别是对osi(开放系统互连)层模型的第二数据链路层、第三网络层、第4传输层和第7应用层的引用。

图1图示了根据本发明的一些实施例的指定和使用流量工程路径的示例。在这个示例中,在多租户数据中心中的两个主机104和108上执行的两个客户虚拟机(gvm)102和106之间的网络中,特别指定了两条路径180和185。gvm属于一个租户,该租户在数据中心中与特定的虚拟网络标识符vni相关联。即使在图1所示的示例中嵌入式路径信息允许数据消息流采用通过一个数据中心的特定路径,但本领域的普通技术人员将意识到,在其它实施例中,该路径信息用于指定在同一企业、同一公共云提供商和/或不同公共云提供商的两个或更多个数据中心中的机器之间的路径。类似地,在一些实施例中,该路径信息可以用于指定位于一个或多个私有数据中心或分支机构中的机器与一个或多个公共云数据中心之间的路径。

每条路径180或185开始于在主机104上执行的入口sfe(例如,软件交换机或路由器)120,并终止于在主机108上执行的出口sfe128。这些sfe120和128用作每条路径的入口跳和出口跳。每条路径还具有一个或多个中间跳,其中路径180具有中间跳122和124,并且路径185具有中间跳126。每条路径由一系列沿着该路径的相邻跳之间建立的一系列隧道150-158形成。在这个示例中,每一跳都包括在主机计算机上执行的软件转发元件,但是情况并非必须如此。例如,在一些实施例中,中间跳中的一个或多个跳可以是架顶式交换机、骨干交换机、硬件路由器或任何其它种类的转发元件。

在图1所示的示例中,为从gvm102到gvm106的数据消息流选择路径180。如图所示,入口和中间跳沿着通过隧道150、152和154的路径传递数据消息,该数据消息具有放置在数据消息100的第2-4层报头130前面(即,其外面)的封装隧道报头140。另外,当封装的数据消息沿着每个隧道发送时,隧道报头的外部部分(未示出)将隧道的源和目的地端点的ip地址识别为封装的数据消息的源和目的地ip地址。

在一些实施例中,源和目的地隧道端点是与隧道的两个跳端点相关联的vtep。例如,对于隧道150,隧道报头140的外部部分将入口跳120的vtep的ip地址识别为封装的数据消息的源ip地址,而将跳122的vtep的ip地址识别为封装的数据消息的目的地ip地址。在由入口跳120或中间跳122或124转发的封装的数据消息中,隧道报头140包含租户的vni和路径描述,该路径描述指定了在该跳处路径的剩余部分。如图所示,在一些实施例中,路径描述是根据剩余跳的ip地址列表来表达的。

在一些实施例中,入口跳120包括从源gvm102接收数据消息的sfe,以及在同一主机计算机104上执行的路径处理过滤器。如下面进一步描述的,在sfe的端口中定义了钩子(hook)(例如,回调函数),以拦截由源gvm102发送的数据消息,并将该数据消息转发到路径处理过滤器。然后,该过滤器对数据消息执行分类操作,以便选择数据消息到其目的地gvm106的路径180。

该分类操作从两个候选路径180和185的组中选择路径180,这两个候选路径是已经被特别定义(例如,被控制器或转发元件)以到达目的地gvm106的可行候选路径。在一些实施例中,分类操作基于与数据消息流相关联的属性集合。在一些实施例中,该属性集合仅包括数据消息流的第2-4层报头值。但是,在其它实施例中,属性集合包括与数据消息流相关的上下文属性,诸如数据消息流的流量类型(即,数据消息流中携带的内容的类型)、qos等级、第7层参数、进程标识符、用户标识符、组标识符等。

当上下文属性集合包括流的流量类型时,入口跳为数据消息流选择流量工程路径、将关于该路径的信息嵌入到数据消息流的隧道报头中,并使用该信息来引导数据消息流通过网络。例如,基于在主机计算机104上执行的深度分组检查,在gvm102和106之间的第一数据消息流可以被识别为携带企业执行人员的视频会议数据,而在这两个gvm之间的第二数据消息流可以被识别为携带两个非执行人员之间的聊天消息数据。基于该上下文数据,为第一消息流选择路径180,因为该路径对于延迟或等待时间而言可能更佳,而为第二消息流选择路径185,因为该路径对于成本而言可能更佳。

在为截取的数据消息选择路径之后,入口跳的路径处理过滤器在一些实施例中将所选择的路径嵌入到它用于封装数据消息100的隧道报头140中。如图所示,在一些实施例中,路径处理过滤器根据中间跳122和124以及出口跳128的ip地址来识别并嵌入所选择的路径。除了这些跳的ip地址外,入口路径处理过滤器还将租户标识符(在这种情况下是特定租户的vni)嵌入在隧道报头中,以指定数据消息100与特定租户相关联(例如,是从特定租户的gvm发出的)。

在一些实施例中,入口路径处理过滤器将第一隧道150的端点的网络地址嵌入在隧道报头140的外部部分中。在一些实施例中,该路径处理过滤器还将下一跳值嵌入在隧道报头中,该下一跳值将中间跳122的嵌入的网络地址识别为“下一跳”的网络地址。如下面进一步描述的,在一些实施例中,沿着路径的后续跳使用该索引来识别沿着该路径的下一跳。

在选择了用于数据消息100的路径并使用隧道报头140封装数据消息之后,入口跳120将封装的数据消息沿着隧道150传递到中间跳122。如上所述,在一些实施例中,隧道报头140的外部部分将入口跳120的vtep的ip地址识别为封装的数据消息的源ip地址,而将第一跳122的vtep的ip地址识别为封装的数据消息的目的地ip地址。

在沿着路径180的每个后续跳122、124或128处,跳检查隧道报头并确定接收到的数据消息是寻址到它的。在一些实施例中,每个特定的跳通过从隧道中提取跳索引、使用该索引从隧道报头中检索下一跳的网络地址,并且然后确定该地址为其网络地址来做出该确定。在确定接收到的数据消息将其识别为下一跳之后,特定跳确定是否它是否被指定为指定路径的最后一跳。

如果否,那么该特定跳在调整隧道报头参数之后沿着另一个隧道将封装的数据消息转发到另一跳。具体而言,为了将数据消息转发到另一跳,在一些实施例中,特定跳(1)递减下一跳索引(从接收到的数据消息的隧道报头中提取),以将另一跳的网络地址识别为沿着路径的下一跳的网络地址,(2)将下一跳的网络地址解析为从特定跳开始并终止于下一跳的底层隧道,并且(3)将该递减的跳索引值与租户标识符和沿着路径的各跳的网络地址列表一起嵌入在隧道报头中。

图1通过将跳索引显示为(1)当封装的数据消息离开入口跳时最初引用跳122的ip地址,(2)当封装的数据消息离开跳122时引用跳124的ip地址,以及(3)当封装的数据消息离开跳124时引用跳128的ip地址来图示对该索引的调整。每个特定跳还调整隧道报头的外部部分,使得特定跳的网络地址为封装的数据消息的源网络地址,并且沿着路径180的后续跳的网络地址为封装的数据消息的目的地网络地址。例如,跳122将其ip地址作为外部报头的源ip地址,并且将跳124的ip地址作为目的地ip地址放置在该报头中。类似地,跳124将其ip地址作为外部报头的源ip地址,并且将出口跳128的ip地址作为目的地ip地址放置在该报头中。

在其它实施例中,代替调整隧道报头参数,特定跳从接收到的数据消息中解封装(即,移除)隧道报头,并用新的隧道报头重新封装数据消息。另外,其它实施例不在隧道报头中存储下一跳索引,因为在这些实施例中,每个中间跳被配置为选择下一跳地址(例如,第一跳地址)并在将封装的数据消息传递到沿着路径的下一跳之前从嵌入在隧道中的路径跳网络地址的列表中移除其网络地址。

当封装的数据消息到达出口跳128时,该跳确定它被指定为沿着嵌入在数据消息的隧道报头中的路径的最后一跳(例如,确定下一跳索引为其最小值并且它识别该跳的地址)。因此,它移除隧道报头,并检查嵌入在数据消息报头130中的目的地网络地址。该目的地网络地址(例如,ip地址)是与其连接的gvm106的ip地址。因此,出口跳向该机器提供解封装的数据消息。

在图1中,出口跳可通信地连接到数据消息的目的地机器,而不必经过中间路由/交换架构。在其它示例中,出口跳通过中间架构(例如,通过中间路由器/交换机)连接到消息的目的地(例如,目的地计算机、虚拟机或容器)。在这些情况下,出口跳通过中间架构转发数据消息。

一些实施例使用通用网络虚拟化封装(geneve)隧道协议来携带路径信息(例如,下一跳索引和沿着路径的跳的列表)和租户标识符。在一些实施例中,路径信息被嵌入到由沿着路径的跳进行检查以便识别下一跳(如果有的话)的geneve选项tlv(类型、长度、值)中。

图2图示了在一些实施例中使用的geneve隧道报头200。在一些实施例中,该隧道报头200是标准的geneve隧道报头,其具有选项tlv以存储路径信息和下一跳索引。具体而言,如图所示,该隧道报头包括外部报头205、协议字段210、geneve基础报头215和选项tlv220。如上所述,隧道报头200的外部部分205包括底层网络中的允许封装的数据消息穿过底层网络并到达隧道目的地端点的网络地址(例如,隧道的两个端点的源和目的地ip地址,其中源和目的地指定取决于消息流的方向)。协议字段210指定udp协议以及与该协议相关联的属性。

图3图示了一些实施例的geneve基础报头215。如图所示,在一些实施例中,该报头是64位宽并且存储若干个隧道参数,包括租户标识符和选项长度。它的版本字段305是2位值,其指定正在使用的当前geneve隧道版本。接收到具有未知版本的消息的隧道端点将丢弃该消息。处理具有未知版本号的geneve分组的非端点设备将把这些分组视为具有未知有效载荷的udp分组。

选项长度字段310指定选项字段的长度,其以四个字节的倍数表示,但不包括八个字节的固定隧道报头。这使得geneve报头的总大小最小为8个字节,最大为260个字节。可以使用距基本geneve报头结尾的偏移量找到有效载荷报头的开始。o位315指定数据消息是否是包含控制消息而不是数据有效载荷的oam帧。端点不会转发该消息的有效载荷,并且中转设备也不会尝试解释或处理它。由于控制消息不频繁,因此端点通常会将这些消息定向到高优先级的控制队列。中转设备不会基于该位更改转发行为,诸如ecmp链路选择。

c位320是关键选项字段,其在被设置时指示存在选项。一个或多个选项可以设置该关键位。如果该位被设置,则隧道端点将解析选项列表以解释所有关键选项。在该位被设置之后,如果端点不识别该选项,则它们必须丢弃封装的消息。在不支持选项解析的设备上,将根据基础报头中的“c”位丢弃帧。如果该位未被设置,则隧道端点可以使用“选项长度(optlen)”剥离所有选项,并转发解封装的帧。中转设备不会基于该位丢弃或修改分组。

第一组保留位325是6个位,其在传输时必须为零,并且在接收时被忽略。协议类型位330是16位,其表示出现在geneve报头之后的协议数据单元的类型。vni位335表示用于虚拟网络的唯一元素的24位标识符。在许多情况下,这可以表示l2段;但是,控制平面定义了解封装的分组的转发语义。当跨cpu进行负载均衡时,vni可以用作ecmp转发决策的一部分,或者可以用作区分封装分组中包含的重叠地址空间的机制。第二组保留位340是8位,其在发送时必须为零,并且在接收时被忽略。

geneve基本报头后面跟着选项tlv220。该tlv包含四字节的选项报头和根据选项类型解释的可变数量的选项数据。在一些实施例中,选项数据包括沿着路径的跳的ip地址以及将这些ip地址中的一个识别为沿着路径的下一跳的ip地址的下一跳索引。

图4概念性地图示了一些实施例的由入口跳(比如跳120)执行的处理400。该处理为主机计算机上的租户gvm发送的数据消息选择路径,并且然后在将该封装的消息沿着隧道发送到沿着所选择的路径的第一跳之前,将定义该路径的路径跳列表嵌入在它用来封装数据消息的geneve隧道报头中。在一些实施例中,入口跳包括在主机计算机(例如,计算机104)上执行的sfe(例如,软件交换机)和路径处理过滤器,以及发送数据消息的租户gvm(例如,gvm102)。在一些实施例中,主机计算机上的gvm与sfe可通信地连接,sfe向和从gvm转发数据消息。

如图所示,处理400最初(在405处)从在其主机(例如,104)上执行的租户gvm(例如,gvm102)接收数据消息。在一些实施例中,处理400从在gvm的sfe或vnic的端口中定义的回调函数接收该数据消息。该回调函数拦截由gvm发送的数据消息,并将该数据消息转发到路径处理过滤器。

基于与数据消息相关联的属性集合,处理(例如,路径处理过滤器)对数据消息执行(在410处)分类操作,以便选择通过网络到数据消息的目的地的定义的路径。对于至少一些数据消息,该分类操作从一组两个或多个候选路径中选择路径,这些候选路径是已经被特别定义(例如,由控制器或转发元件)以到达数据消息的目的地的可行候选路径。

在一些实施例中,分类操作基于与数据消息相关联的属性集合。在一些实施例中,该属性集合仅包括数据消息的第2-4层报头值。但是,在其它实施例中,属性集合包括与数据消息相关的上下文属性,诸如数据消息的流量类型(即,数据消息流中携带的内容的类型)、qos等级、第7层参数、进程标识符、用户标识符、组标识符等。当上下文属性集合包括数据消息的流量类型时,该处理基于该消息流中携带的流量选择(在410处)为数据消息流定义的路径。在一些实施例中,处理400使用主机计算机104上的深度分组检查器来对数据消息或其流执行深度分组检查,以便识别数据消息或其流中携带的流量类型。

基于数据消息的属性,在一些实施例中,该处理为数据消息选择从一个或多个度量(诸如成本、延迟、等待时间、丢失等)的角度来看最佳的路径。在一些实施例中,该处理通过将数据消息的一个或多个属性(例如,数据消息的5元组标识符和/或相关联的上下文属性)与存储在规则存储装置中的若干条路径定义规则的标识符进行比较来执行分类操作(在410处)。每条规则指定通过网络的路径,在一些实施例中,该路径被指定为沿着该路径的各跳的ip地址。因此,在将数据消息的属性与规则的标识符集合进行匹配之后,该处理将选择由规则指定的路径作为数据消息的路径。

应当注意的是,处理400允许多租户网络的两个不同的租户不同地优化其流量工程路径。例如,对于两个租户的在相同的源和目的地计算机(每个租户的至少一个源或目的地计算机在其上执行)之间携带相同类型的流量(即,相同类型的有效载荷内容)的两个数据消息流,处理400可以选择两个不同的路径。之所以会发生这种情况是因为一个租户可能希望为该类型的内容使用更快的、较低等待时间的路径,而另一个租户可能希望为该类型的内容使用更便宜的路径。为了实现这一点,一些实施例为不同租户定义不同的路径选择规则,而其它实施例使用租户标识符作为用于执行路径选择分类操作的属性之一。

在识别(在410处)数据消息的路径之后,处理400将识别出的路径嵌入(在415处)在将用于封装接收到的数据消息的geneve隧道报头200的选项tlv220中。如上所述,选项tlv根据沿着路径的各跳的ip地址来存储路径。另外,如上所述,选项tlv以相反的顺序存储这些ip地址,其中第一跳的地址出现在列表的最后,而最后一跳的地址出现在列表的第一个。

在选项tlv中,该处理还存储(在415处)下一跳值。该处理设置该值来识别路径跳列表中的最后一个网络地址,即第一跳的地址。下一跳索引值用于识别“下一跳”的嵌入的网络地址,并且在一些实施例中,后续跳使用该索引来识别沿着路径的下一跳。在415处,处理400还将与发送接收到的数据消息的源gvm相关联的租户的vni嵌入到geneve隧道报头的基本报头215中。vni的嵌入允许使用相同的隧道集合转发不同租户的数据消息。

接下来,在420处,该处理配置geneve隧道报头的其它部分。例如,该处理在隧道报头200的外部部分报头205中存储其vtep(例如,与其sfe相关联的vtep)以及第一跳的vtep的l2和l3网络地址作为源和目的地网络地址。在420处,根据以上讨论和所使用的隧道部署配置,该处理在geneve隧道报头中定义udp协议,并设置需要定义的任何其它字段。

在完成隧道报头配置之后(在420处)之后,该处理将封装的数据消息沿着geneve隧道传递(在425处)到沿着所选择的路径的第一跳(例如,跳122)。为了发送该数据消息,在一些实施例中,该处理将第一跳的ip地址解析为将入口跳连接到第一跳的隧道。在420之后,该处理结束。

图5图示了当跳接收到geneve封装的数据消息时执行的处理500。在一些实施例中,该跳与一个或多个租户机器(例如,gvm)一起在主机上执行。如图所示,该处理检查(在505处)隧道报头,并确定接收到的数据消息是寻址到它的。在一些实施例中,通过从隧道中提取下一跳索引、使用该索引来检索沿着路径的下一跳的网络地址,并且然后确定该地址为其自身的ip地址来做出该确定。

一旦处理500确定(在505处)接收到的数据消息是寻址到它的,该处理就确定它是否是嵌入在隧道报头中的路径中的最后一跳。在一些实施例中,当下一跳索引为其最低值(例如,它为0或1,取决于哪个被定义为最低值)时,将是这种情况,其指示已经到达最后一跳。当处理500确定(在510处)它是嵌入的路径中的最后一跳时,它移除隧道报头(即,对封装的隧道报头进行解封装),并将数据消息转发到由在接收到的数据消息的原始报头(例如,报头130)中识别出的目的地网络地址识别出的目的地机器。

在一些实施例中,处理500由在与目的地机器相同的主机计算机上执行的路径处理过滤器执行。在一些实施例中,在主机计算机上执行的sfe的端口将封装的数据消息传递到路径处理过滤器。在这些实施例中,路径处理过滤器将解封装的数据消息传递回sfe端口(例如,将该消息的句柄传递到该部分),并且sfe端口处理该消息或使sfe处理该消息,使得它可以被转发到在同一主机计算机上执行的目的地计算机(例如,目的地gvm或容器)。在一些实施例中,出口跳通过中间架构(即,通过中间路由器/交换机)连接到数据消息的目的地(例如,目的地计算机、虚拟机或容器)。在这种情况下,出口跳将数据消息通过中间架构转发到数据消息的目的地。

当处理500确定(在510处)它不是嵌入的路径中的最后一跳时,该处理调整(在520处)接收到的封装消息的隧道报头中的下一跳索引值,以便识别由嵌入的路径信息识别的路径中的下一跳。如上所述,在一些实施例中,当在隧道报头中通过跳ip地址的反序列表指定了路径时,该处理通过递减该值来调整下一跳索引值。

接下来,在525处,该处理调整隧道报头的外部报头值,以将其自身的ip地址识别为封装消息的源ip地址,并将下一跳的ip地址(现在由调整后的下一跳索引值识别)识别为封装消息的目的地ip地址。在530处,该处理将下一跳的地址解析为当前跳与下一跳之间的隧道,并且沿着该隧道将封装的数据消息发送到下一跳。在一些实施例中,在沿着已解析的隧道发送封装的数据消息之前,处理500调整(在530处)数据消息的隧道报头中的一个或多个参数(例如,下一个隧道的选项、id或其它属性)以反映将沿着其发送数据消息的新隧道的新属性和/或身份。在530之后,该处理结束。

图6图示了在一些实施例中用于执行一些实施例的gvm、跳处理转发元件和路径处理过滤器的主机计算机600。该主机计算机还执行服务引擎,这些服务引擎在数据中心中执行上下文丰富的、基于属性的服务。主机计算机600包括若干个gvm605、软件转发元件610、上下文引擎650、服务引擎630、基于上下文的服务规则存储装置640、上下文属性存储装置645、属性映射存储装置623、连接状态高速缓存存储装置625、mux(多路复用器)627和上下文引擎策略存储装置643。服务引擎630包括路径处理器622、深度分组检查器624、负载平衡器626、防火墙引擎628和一个或多个其它服务引擎(未示出)。

在图6中,gvm605在管理程序上执行。在一些实施例中,上下文引擎650、软件转发元件610、服务引擎630、基于上下文的服务规则存储装置640、连接状态高速缓存存储装置625、上下文引擎策略存储装置643和mux627在管理程序的内核空间中操作,而vm605在管理程序的用户空间中操作。在其它实施例中,一个或多个服务引擎和/或上下文引擎是用户空间模块(例如,是服务vm)。

在一些实施例中,gvm605是用作数据中心中的一些或所有租户数据消息流的数据端点的租户机器。这种机器的示例包括web服务器、应用服务器、数据库服务器等。在一些情况下,所有vm都属于一个实体,例如,操作主机的企业。在其它情况下,主机600在多租户环境中(例如,在多租户数据中心中)操作,并且不同的vm605可以属于一个租户或多个租户。

每个vm605包括gi代理648,该gi代理648与上下文引擎650通信以向该引擎提供上下文属性集合,并从该引擎接收指令和查询。上下文引擎650与gi代理648之间的通信通过mux627中继。这种多路复用器的一个示例是vmware公司的esx管理程序的端点安全(endpointsecurity,epsec)平台使用的多路复用器。在一些实施例中,上下文引擎650从gi代理648收集的属性包括一组丰富的参数(例如,第7层参数、进程标识符、用户标识符、组标识符等)。2017年7月14日提交的美国专利申请15/650,251进一步描述了通过gi代理648捕获和使用这些上下文属性。美国专利申请15/650,251通过引用并入本文。

如图所示,在一些实施例中,每个gvm605包括虚拟网络接口卡(vnic)655。每个vnic负责在其vm和sfe610之间交换消息。每个vnic连接到sfe610的特定端口660。sfe610还连接到主机的物理网络接口卡(nic)(未示出)。在一些实施例中,vnic是由主机的一个或多个物理nic(pnic)的管理程序创建的软件抽象。

在一些实施例中,sfe610为每个vm的每个vnic维护单个端口660。sfe610(通过nic驱动器(未示出))连接到主机pnic,以发送传出消息并接收传入消息。在一些实施例中,sfe610被定义为包括端口665,该端口665连接到pnic的驱动器以向pnic发送消息和从pnic接收消息。sfe610执行消息处理操作以将其在一个端口上接收到的消息转发到其另一个端口。例如,在一些实施例中,sfe尝试使用消息中的数据(例如,消息报头中的数据)将消息与基于流的规则进行匹配,并在找到匹配后执行由匹配规则指定的动作(例如,将消息传递到其端口660或665之一,后者指示消息被提供给目的地vm或pnic)。

在一些实施例中,sfe610是软件交换机,而在其它实施例中,它是软件路由器或组合的软件交换机/路由器。在一些实施例中,sfe610实现一个或多个逻辑转发元件(例如,逻辑交换机或逻辑路由器),其中sfe在多主机环境中的其它主机上执行。在一些实施例中,逻辑转发元件可以跨越多个主机以连接在不同主机上执行但属于一个逻辑网络的vm。

可以定义不同的逻辑转发元件以为不同的用户指定不同的逻辑网络,并且每个逻辑转发元件可以由多个主机上的多个软件转发元件来定义。每个逻辑转发元件将一个逻辑网络的vm的流量与另一个逻辑转发元件服务的另一个逻辑网络的vm隔离。逻辑转发元件可以连接在同一主机和/或不同主机上执行的vm。在一些实施例中,sfe从数据消息中提取逻辑网络标识符(例如,vni)和mac地址。这些实施例中的sfe使用提取的vni来识别逻辑端口组,然后使用mac地址来识别端口组内的端口。

软件交换机(例如,管理程序的软件交换机)有时被称为虚拟交换机,因为它们在软件中操作并且它们向vm提供对主机的(一个或多个)pnic的共享访问。但是,在本文档中,软件交换机被称为物理交换机,因为它们是物理世界中的项目。这个术语还将软件交换机与逻辑交换机区分开来,逻辑交换机是由软件交换机提供的连接类型的抽象。存在用于从软件交换机创建逻辑交换机的各种机制。vxlan提供了一种创建此类逻辑交换机的方式。vxlan标准在mahalingam,mallik;dutt,dineshg.;等人的(2013-05-08),vxlan:aframeworkforoverlayingvirthalizedlayer6networksoverlayer3networks,ietf中描述。

在一些实施例中,sfe610的端口包括对一个或多个模块的一个或多个功能调用,这些模块对在端口处接收的传入和传出消息实现特殊输入/输出(i/o)操作。由端口660实现的i/o操作的示例包括arp广播抑制操作和dhcp广播抑制操作,如美国专利申请9,548,965中所述。在本发明的一些实施例中,可以如此实现其它i/o操作(诸如防火墙操作、负载均衡操作、网络地址翻译操作等)。通过实现这种功能调用的堆栈,在一些实施例中,端口可以对传入和/或传出的消息实现一系列i/o操作。而且,在一些实施例中,数据路径中的其它模块(诸如vnic655、端口665等)代替端口660或与其结合实现i/o功能调用操作。

在一些实施例中,sfe端口660的一个或多个功能调用可以是针对一个或多个服务引擎630,其处理针对发送到gvm和为gvm接收的数据消息流的服务规则。这些服务规则中的一些是基于上下文的服务规则存储装置640中的基于上下文的服务规则。在一些实施例中,每个服务引擎630具有其自己的基于上下文的服务规则存储装置640、属性映射存储装置623和连接状态高速缓存存储装置625。图6仅呈现了用于所有服务引擎的一个基于上下文的服务规则存储装置640、属性映射存储装置623和连接状态高速缓存存储装置625,以免不必要的细节使该图中的表示不清楚。而且,在一些实施例中,每个vm可以具有其自己的服务引擎实例(例如,其自己的路径处理器622、深度分组检查器624、负载均衡器626和防火墙引擎628的实例)。在其它实施例中,一个服务引擎可以为主机上的多个vm(例如,用于相同逻辑网络的vm)的数据消息流提供服务。

为了执行其对数据消息流的服务操作,在一些实施例中,服务引擎630尝试将流标识符(例如,五元组标识符)和/或流的相关联的上下文属性集合匹配到规则标识符。其服务规则在其基于上下文的服务规则存储装置640中。具体而言,为了让服务引擎630对数据消息流执行其服务检查操作,调用服务引擎的sfe端口660供应端口接收的消息的属性集合。在一些实施例中,该属性集合是消息标识符(诸如传统的五元组标识符)。在一些实施例中,标识符值中的一个或多个可以是为逻辑网络定义的逻辑值(例如,可以是在逻辑地址空间中定义的ip地址)。在其它实施例中,所有标识符值都在物理域中定义。在还有其它实施例中,其中一些标识符值在逻辑域中定义,而其它标识符值在物理域中定义。

然后,在一些实施例中,服务引擎使用接收到的消息的属性集合(例如,消息的五元组标识符)来识别服务引擎已在属性映射存储装置623中为这个流存储的上下文属性集合。在一些实施例中,上下文引擎650将用于新流(即,新网络连接事件)的上下文属性连同流标识符(例如,五元组标识符)一起供应给服务引擎630。上下文引擎策略存储装置643包含控制上下文引擎650的操作的规则。在一些实施例中,这些策略指示上下文引擎生成服务引擎的规则或指示服务引擎生成规则。这些实施例中的服务引擎630将它们从上下文引擎接收的上下文属性存储在属性映射存储装置623中。

在一些实施例中,服务引擎630将每个新流的上下文属性集合与该流的标识符(例如,五元组标识符)一起存储在属性映射存储装置中。以这种方式,服务引擎可以通过在其属性映射存储装置623中搜索具有匹配的流标识符的上下文记录来识别它从sfe端口660接收到的每个新流的上下文属性集合。具有匹配的流标识符的上下文记录包括该流的上下文属性集合。

在一些实施例中,一些或所有服务引擎从上下文引擎中提取新流的上下文属性集合。例如,在一些实施例中,服务引擎将其从sfe端口660接收到的新流的五元组标识符提供给上下文引擎650。然后,该引擎650检查其属性存储装置645,以识别为该五元组标识符存储的属性集合,然后将该属性集合(或其通过过滤服务引擎的识别出的属性集合而获得的该属性集合的子集)提供给服务引擎。

一些实施例通过使用服务令牌来编码用于新消息流的属性集合来实现提取模型。当被通知新的网络连接事件时,在一些实施例中上下文引擎650(1)收集新事件的上下文属性集合,(2)过滤这个集合以丢弃与对流执行一个或多个服务无关的属性,(3)将剩余的过滤属性子集与服务令牌一起存储在属性存储装置645中,以及(4)将服务令牌提供给gi代理648。然后,gi代理648使这个令牌被带内(例如,在代理的vm发送到目的地的数据消息的报头中)或带外(即,与从代理的vm发送到目的地的数据消息分离)传送到(一个或多个)服务引擎。

当服务引擎通过sfe端口660获得新流时,它将这个流的服务令牌提供给上下文引擎,该上下文引擎使用这个服务令牌在其属性存储装置645中识别要提供给服务引擎的上下文属性。在sfe端口不向服务引擎提供该服务令牌的实施例中,服务引擎首先必须通过在将服务令牌供应给上下文引擎之前使用流的标识符搜索其数据存储来识别服务令牌。

在识别出数据消息流的上下文属性集合之后,在一些实施例中,服务引擎630基于存储在基于上下文的服务规则存储装置640中的服务规则来执行其服务操作。为了执行其服务操作,服务引擎630将接收到的属性子集与为服务规则存储的对应属性集合进行匹配。在一些实施例中,基于上下文的服务规则存储装置640中的每个服务规则具有规则标识符和动作参数集合。

如上所述,在一些实施例中,服务规则的规则标识符可以根据不是l2-l4报头参数的一个或多个上下文属性来定义(例如,是l7参数、用户标识符、组标识符、处理名称、加载的模块标识符、消耗参数等)。在一些实施例中,规则标识符还可以包括l2-l4报头参数。而且,在一些实施例中,可以根据个体值或通配符值来指定规则标识符中的一个或多个参数。而且,在一些实施例中,规则标识符可以包括个体值集合或组标识符,诸如安全组标识符、计算构造标识符、网络构造标识符等。

为了使接收到的属性集合与规则匹配,服务引擎将接收到的属性集合与存储在基于上下文的服务规则存储装置640中的服务规则的关联标识符进行比较。在识别出匹配的规则后,服务引擎630基于匹配规则的动作参数集合(例如,基于路径跳列表、允许/丢弃参数、负载均衡标准、加密参数等)执行服务操作(例如,路径处理操作、防火墙操作、负载均衡操作、加密操作、其它中间盒操作等)。

在一些实施例中,基于上下文的服务规则存储装置640以分层方式定义,以在消息的属性子集匹配多个规则时确保在匹配较低优先级规则之前消息规则检查将匹配较高优先级规则。而且,在一些实施例中,基于上下文的服务规则存储装置640包含默认规则,该默认规则指定不能识别任何其它服务规则的任何消息规则检查的默认动作;在一些实施例中,这个默认规则将是所有可能的属性子集的匹配,并确保服务规则引擎将返回针对所有接收到的属性子集的动作。在一些实施例中,默认规则将不指定服务。

例如,当消息是与两个机器之间的一个通信会话相关联的一个流的一部分时,多个消息可以具有相同的消息标识符属性集合。因而,在基于消息的识别出的上下文属性集合在基于上下文的服务规则存储装置640中将数据消息与服务规则匹配之后,一些实施例的服务引擎将服务规则(或对服务规则的引用)存储在连接状态高速缓存存储装置625中,以便稍后可以将这个服务规则用于同一个流的后续数据消息。

在一些实施例中,连接状态高速缓存存储装置625存储服务引擎630针对不同消息标识符集合识别的服务规则或对服务规则的引用(例如,用于识别不同数据消息流的不同五元组标识符)。在一些实施例中,连接状态高速缓存存储装置625存储每个服务规则或对服务规则的引用,其具有从匹配的消息标识符集合生成的标识符(例如,流的五元组标识符)。

在使用基于上下文的服务规则存储装置640检查特定消息之前,一些实施例的服务引擎630检查连接状态高速缓存存储装置625以确定这个存储装置是否先前已经为这个消息的流识别出服务规则。如果不是,那么服务引擎630为消息流识别出上下文属性集合,然后检查基于上下文的服务规则存储装置640以寻找与消息的识别出的属性集合和/或其五元组标识符匹配的服务规则。当连接状态数据存储装置具有特定消息的条目时,服务引擎将基于该服务规则的动作参数集合(例如,基于由连接高速缓存625中的服务规则识别的跳列表)执行其服务操作(例如,其路径选择操作)。

在一些实施例中,在沿着路径的每个跳处,跳路径处理器处理嵌入在数据消息的隧道报头中的路径信息。在主机计算机上,在一些实施例中,软件转发元件610与用作geneve隧道端点的vtep相关联。在一些实施例中,对于入口跳(例如,跳120),路径处理器执行图4的处理400的操作。对于由gvm605在其主机计算机上发送的数据消息,路径处理器622基于数据消息的属性为数据消息选择通过网络到其目的地的工程路径。

如上所述,这些属性在一些情况下可以仅包括消息的流标识符(例如,五个元组标识符),在其它情况下可以仅包括该消息的捕获的上下文元数据,或者可以既包括消息的流标识符又包括捕获的上下文元数据。为了选择路径,在一些实施例中,路径处理器将消息的流标识符和/或上下文元数据属性与路径处理器的存储在规则存储装置640中的路径指定规则的规则标识符属性进行匹配。在一些实施例中,存储装置640中的每条路径指定规则根据沿着该路径的各跳的ip地址列表来指定路径。

在一些实施例中,捕获的数据消息上下文包括数据消息流的流量类型(即,该流中携带的内容的类型)。在一些实施例中,当sfe端口660为相同流中的数据消息和/或其它数据消息调用dpi引擎时,dpi引擎624识别该流量类型。在一些实施例中,dpi引擎将该流量类型提供给上下文引擎650以存储在属性存储装置645中,使得当该处理器请求数据消息的该信息时,上下文引擎650可以随后将流量类型提供给路径处理器622(例如,通过提供消息的流标识符属性或服务令牌)。在其它实施例中,上下文引擎650(通过路径处理器622或另一个服务引擎)将流的流量类型推送到属性存储装置623,使得路径处理器稍后可以在处理流的数据消息时检索流的流量类型。

当捕获的上下文属性包括数据消息的流量类型时,入口跳可以在到数据消息目的地的两条或更多条流量工程路径之间进行选择,前提是预先定义了两条或更多条这样的路径并将其存储在规则存储装置640中。例如,如以上参考图1所述,基于延迟和/或等待时间的考虑,路径180可能是最佳的,而从成本的角度考虑,路径185可能是最佳的。因此,对于在gvm102和106之间承载用于公司执行人员的视频会议数据的第一数据消息流,路径处理器将数据消息流的属性与将路径180识别为该流到gvm106的路径的路径指定规则进行匹配。另一方面,对于这两个gvm之间携带两个非执行人员之间的聊天消息数据的两个数据消息流,路径处理器将数据消息流的属性与将路径185识别为该流到gvm106的路径的路径指定规则进行匹配。

在将消息的属性集合与路径指定规则之一匹配之后,入口节点的路径处理器622将路径指定规则的路径跳列表与上述其它隧道属性一起嵌入在geneve隧道报头中(例如,外部报头参数、下一跳索引等)。在一些实施例中,路径处理器622使服务引擎630中的另一个执行隧道封装。在用geneve隧道报头200封装数据消息之后,路径处理器将数据消息返回给sfe(例如,提供存储器中存储封装的数据消息的位置处的句柄),使得sfe可以沿着geneve隧道将数据消息转发到与在指定的路径跳列表中的第一服务机器相关联的跳。

在一些实施例中,当路径处理器622正在执行非入口跳的操作时,路径处理器执行图5的处理500的操作。例如,它确定隧道封装的数据消息具有将其sfevtep的ip地址识别为下一跳的地址的路径跳列表。

一旦路径处理器622确定接收到的数据消息是寻址到它的,处理器就确定它是否是嵌入在隧道报头中的路径中的最后一跳。在一些实施例中,当下一跳索引将当前跳的地址识别为路径跳地址列表中的第一地址时(即,当下一跳索引具有其最低值时),将是这种情况。当路径处理器622确定它是嵌入的路径中的最后一跳时,它将移除隧道报头(即,对封装的隧道报头进行解封装),并将解封装的数据消息传递回sfe端口(例如,将该消息的句柄传递到该部分),并且sfe端口处理该消息或使sfe处理该消息,使得它可以被转发到在同一主机计算机上执行的目的地机器(例如,目的地gvm或容器)。在一些实施例中,出口跳通过中间架构(即,通过中间路由器/交换机)连接到数据消息的目的地(例如,目的地计算机、虚拟机或容器)。在这种情况下,出口跳将数据消息通过中间架构转发到数据消息的目的地。

当路径处理器不是嵌入的路径中的最后一跳时,路径处理器调整接收到的封装消息的隧道报头中的下一跳索引值,以便识别由嵌入的路径信息识别的路径中的下一跳。如上所述,在一些实施例中,当在隧道报头中通过跳ip地址的反序列表指定了路径时,路径处理器通过递减该值来调整下一跳索引值。

路径处理器622调整隧道报头的外部报头值,以将其跳的ip地址识别为封装消息的源ip地址,并将下一跳的ip地址(现在由调整后的下一跳索引值识别)识别为封装消息的目的地ip地址。路径处理器将下一跳的地址解析为当前跳与下一跳之间的隧道。在一些实施例中,在沿着已解析的隧道发送封装的数据消息之前,路径处理器调整数据消息的隧道报头中的一个或多个参数,以反映数据消息将沿着其发送数据消息的新隧道的属性和/或身份。然后,它将封装的数据消息提供给其sfe,以沿着隧道转发到下一跳。

图7图示了在一些实施例中如何管理路径处理滤波器622的示例。该图图示了数据中心中的多个主机600。如图所示,每个主机包括若干个服务引擎630、上下文引擎650、路径处理过滤器622、若干个gvm605和sfe610。它还图示了用于管理路径处理过滤器622和服务引擎630、gvm605和sfe610的控制器集合705。主机和控制器通过网络710相互通信连接,该网络710可以是局域网、广域网、网络的网络(诸如互联网)等。

控制器集合提供用于管理员根据上下文属性定义基于上下文的服务规则的用户界面,并通过网络710与主机通信以提供这些策略。在一些实施例中,上下文引擎650收集上下文属性,该上下文属性通过网络710传递到控制器中的管理服务器,使得这些上下文属性可以用于定义策略。在一些实施例中,管理服务器与在数据中心中的主机计算机600上执行的发现引擎交互,以获得并刷新在主机上的gvm上运行的所有进程和服务的清单。然后,在一些实施例中,管理平面提供规则创建接口,用于允许管理员为服务引擎和路径处理器622创建基于上下文的服务规则。

一旦在管理平面中定义了高层服务策略,管理平面就将这些策略中的一些或全部直接提供给主机600上的管理代理(未示出),和/或间接地通过配置控制器集合将这些策略中的一些或全部提供给这些代理。在一些实施例中,管理代理将接收到的策略作为规则发布到基于上下文的服务规则存储装置640。在一些实施例中,代理在将这些策略发布到基于上下文的服务规则存储装置640之前对其进行变换。而且,在一些实施例中,主机600上的上下文引擎650基于收集到的上下文属性来解析策略,以便生成用于服务引擎的规则。

在一些实施例中,基于这些流所携带的不同流量内容为来自源gvm的不同数据消息流指定不同的策略。例如,一个策略可能定义使用低等待时间路径用于两个gvm之间用于涉及企业的执行人员的视频会议的数据消息流的路径跳列表,而另一个策略可能定义使用低成本路径用于来自相同的两个gvm的与两个非执行人员之间的聊天有关的数据消息流的路径跳列表。

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

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

图8概念性地示出了实现本发明的一些实施例的计算机系统800。计算机系统800可以用于实现任何上述主机、控制器和管理器。由此,它可以用于执行任何上述处理。该计算机系统包括各种类型的非临时性机器可读介质和用于各种其它类型的机器可读介质的接口。计算机系统800包括总线805、(一个或多个)处理单元810、系统存储器825、只读存储器830、永久存储设备835、输入设备840和输出设备845。

总线805统一地表示通信地连接计算机系统800的众多内部设备的所有系统、外围设备和芯片组总线。例如,总线805将(一个或多个)处理单元810与只读存储器830、系统存储器825和永久存储设备835通信地连接。

从这些各种存储器单元中,(一个或多个)处理单元810检索要执行的指令和要处理的数据,以便执行本发明的处理。(一个或多个)处理单元在不同实施例中可以是单个处理器或多核心处理器。只读存储器(rom)830存储由(一个或多个)处理单元810和计算机系统的其它模块所需要的静态数据和指令。另一方面,永久存储设备835是读和写存储器设备。这个设备是即使当计算机系统800关闭时也存储指令和数据的非易失性存储单元。本发明的一些实施例使用大容量存储设备(诸如磁或光盘及其对应的盘驱动器)作为永久存储设备835。

其它实施例使用可去除存储设备(诸如闪存驱动器等)作为永久存储设备。与永久存储设备835一样,系统存储器825是读和写存储器设备。但是,与存储设备835不同,系统存储器是易失性读和写存储器,诸如随机存取存储器。系统存储器存储处理器在运行时需要的一些指令和数据。在一些实施例中,本发明的处理被存储在系统存储器825、永久存储设备835和/或只读存储器830中。从这些各种存储器单元中,(一个或多个)处理单元810检索要执行的指令和要处理的数据,以便执行一些实施例的处理。

总线805还连接到输入和输出设备840和845。输入设备使用户能够传递信息和选择到计算机系统的命令。输入设备840包括字母数字键盘和定点设备(也称为“光标控制设备”)。输出设备845显示由计算机系统生成的图像。输出设备包括打印机和显示设备,诸如阴极射线管(crt)或液晶显示器(lcd)。一些实施例包括诸如用作输入和输出设备两者的触摸屏的设备。

最后,如图8所示,总线805还通过网络适配器(图中未示出)将计算机系统800耦合到网络865。以这种方式,计算机可以是计算机的网络(诸如局域网(“lan”)、广域网(“wan”)、或内联网、或诸如互联网的网络的网络)的一部分,计算机系统800的任何或所有组件可以与本发明结合使用。

一些实施例包括电子组件,诸如微处理器、在机器可读或计算机可读介质(可替代地称为计算机可读存储介质、机器可读介质或机器可读存储介质)中存储计算机程序指令的存储设备和存储器。这种计算机可读介质的一些示例包括ram、rom、只读压缩盘(cd-rom)、可记录压缩盘(cd-r)、可重写压缩盘(cd-rw)、只读数字多功能盘(例如,dvd-rom,双层dvd-rom)、各种可记录/可重写dvd(例如,dvd-ram、dvd-rw、dvd+rw等)、闪存存储器(例如,sd卡、小型sd卡、微型sd卡等)、磁和/或固态硬盘驱动器、只读和可记录盘、超密度光盘、以及任何其它光或磁介质。计算机可读介质可以存储可由至少一个处理单元执行的并且包括用于执行各种操作的指令集合的计算机程序。计算机程序或计算机代码的示例包括诸如由编译器产生的机器代码,以及包括由计算机、电子组件、或利用解释器的微处理器执行的更高级代码的文件。

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

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

虽然本发明已经参考许多特定细节进行了描述,但是本领域普通技术人员将认识到,在不脱离本发明的精神的情况下,本发明可以以其它特定形式体现。例如,几个图概念性地示出了处理。这些处理的特定操作可能没有以所示出和描述的确切顺序执行。特定操作可能没有在一系列连续的操作中执行,并且不同的特定操作可能在不同的实施例中执行。此外,处理可以使用若干子处理来实现,或者作为更大的宏处理的一部分来实现。

在一些实施例中,使用上述方法来表达单租户环境中的路径信息。因此,本领域的普通技术人员将认识到,本发明的一些实施例同样适用于单租户数据中心。相反,在一些实施例中,当一个实体(例如,一个公司)是不同提供商的多个不同数据中心中的租户时,上述方法用于跨不同数据中心提供商的不同数据中心携带路径信息。在这些实施例中,嵌入在隧道报头中的租户标识符必须是跨数据中心唯一的,或者在它们从一个数据中心遍历到另一个数据中心时必须进行翻译。因此,本领域普通技术人员将理解,本发明不受上述说明性细节的限制,而是由所附权利要求来定义。

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