包括分解式网络元件的逻辑路由器的制作方法

文档序号:26012652发布日期:2021-07-23 21:33阅读:92来源:国知局
包括分解式网络元件的逻辑路由器的制作方法

相关申请的交叉引用

本申请要求于2018年11月26日提交的申请号为62/771,407、标题为包括分解式网络元件的逻辑路由器的美国临时申请的权益,该临时申请的全部内容通过引用并入本文。



背景技术:

数据中心已经变得越来越普遍和复杂。随着这种复杂性,使数据中心的计算机之间能够通信的网络的复杂性也在增加。特别地,需要减少并简化,并且能够为大量计算机配置网络路由容量。

附图说明

为了使本发明的优点容易理解,将通过参照附图中示出的特定实施例来对以上简要描述的本发明进行更具体的描述。应当理解的是,这些附图仅描绘了本发明的典型实施例,因此不应视为对本发明范围的限制,将通过使用附图以附加的特征和细节来描述和解释本发明,其中:

图1是根据本发明的实施例的逻辑路由器的示意性框图;

图2是根据本发明的实施例的用于路由逻辑路由器中的数据包的方法的进程流程图;

图3是根据本发明的实施例的与控制平面元件组合的逻辑路由器的示意性框图;

图4是根据本发明的实施例的与控制平面元件和管理lan交换机组合的逻辑路由器的示意性框图;

图5是示出根据本发明的实施例的管理lan交换机到逻辑路由器和控制平面元件的连接的示意性框图;

图6是根据本发明的实施例的用于对逻辑路由器进行编程和管理的组件的示意性框图;

图7是示出根据本发明的实施例的逻辑路由器的编程的示意性框图;

图8是示出根据本发明的实施例的逻辑路由器的接口的配置的示意性框图;

图9是根据本发明的实施例的配置逻辑路由器的接口的方法的进程流程图;

图10是示出根据本发明的实施例的路由(routing)逻辑路由器内带有接口标签的数据包的示意性框图;

图11是示出根据本发明的实施例的沿相反方向路由逻辑路由器内带有接口标签的数据包的示意性框图;

图12、图13和图14是示出根据本发明的实施例的逻辑路由器的控制元件之中的冗余和故障转移(failover)的实施方案的示意性框图;

图15是根据本发明的实施例的独立逻辑路由器的示意性框图;

图16是根据本发明的实施例的图15的、包括用于标记从入口端口到出口端口的数据包的表的独立逻辑路由器的示意性框图;

图17是根据本发明的实施例的图15的、包括用于标记路由到控制器的数据包的表的独立逻辑路由器的示意性框图;

图18是根据本发明的实施例的用于建立独立逻辑路由器的方法的进程流程图;并且

图19是根据本发明的实施例的适用于实施方法的计算机系统的示意性框图。

具体实施方式

将容易理解的是,如本文的附图中总体上描述和示出的,本发明的组件可以以多种不同的配置来布置和设计。因此,附图中所示的本发明的实施例的以下更详细的描述不旨在限制要求保护的本发明的范围,而仅表示根据本发明的当前设想的实施例的特定示例。通过参照附图将最佳地理解当前描述的实施例,其中相同的部分始终用相同的附图标记表示。

根据本发明的实施例可以实现为装置、方法或计算机程序产品。因此,本发明可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微型代码等)或本文中通常统称为“模块”或“系统”的、软件与硬件组合方面的实施例的形式。此外,本发明可以采取以具有在介质中实现的计算机可用程序代码的表达的任意有形的高速介质实现的计算机程序产品的形式。

可以利用一种或多种计算机可用或计算机可读介质的任意组合。例如,计算机可读介质可以包括以下中的一个或多个:便携式计算机软盘、硬盘、随机存取存储器(ram)装置、只读存储器(rom)装置、可擦可编程只读存储器(eprom或闪存)装置、便携式光盘只读存储器(cdrom)、光学存储装置和磁性存储装置。在所选择的实施例中,计算机可读介质可以包括任意非暂时性介质,其可以包含、存储、通信、传播或传输供指令运行系统、设备或装置使用或与其结合使用的程序。

可以以一种或多种编程语言的任意组合来编写用于执行本发明的操作的计算机程序代码,包括:面向对象的编程语言,诸如java、smalltalk、c++等;或者常规的过程编程语言,诸如“c”编程语言或类似的编程语言,并且还可以使用描述性或标记语言,诸如html、xml、json等。程序代码可以全部在计算机系统上作为独立软件数据包运行、在独立硬件单元上运行、部分在距计算机一定距离的远程计算机上执行、或者全部在远程计算机或服务器上执行。在后者情况下,远程计算机可以通过包括局域网(lan)或广域网(wan)的任意类型的网络连接到计算机,或者可以连接到外部计算机(例如,通过使用因特网服务提供商的因特网)。

下面参照根据本发明的实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图描述本发明。将理解的是,流程图和/或框图的每个方框以及流程图和/或框图中的方框的组合可以由计算机程序指令或代码来实现。可以将这些计算机程序指令提供给通用计算机、专用计算机或其它可编程数据处理设备的处理器以生产机器,使得经由计算机或其它可编程数据处理设备的处理器运行的指令创建用于实施流程图和/或框图一个或多个方框中指定的功能/动作的装置。

这些计算机程序指令还可以存储在非暂时性计算机可读介质中,其可以指导计算机或其它可编程数据处理设备以特定方式作用,使得计算机可读介质中存储的指令生成包括指令装置的制品,该指令装置实施流程图和/或框图一个或多个方框中指定的功能/动作。

计算机程序指令还可以被加载到计算机或其它可编程数据处理设备上,以使对计算机或其它可编程设备执行的一系列操作步骤产生计算机实施进程,使得在计算机或其它可编程装置上运行的指令提供用于实施流程图和/或框图一个或多个方框中指定的功能/动作的进程。

本文公开的系统和方法涉及用于计算机数据路由系统的逻辑路由器。具体地,本文描述的系统和方法涉及一种逻辑路由器“机箱(chassis)”,其由不一定在相同机箱中或联接到机箱的相同底板的一组分解式网络元件形成。逻辑路由器可以包括具有分布式数据平面的管理和控制的单个逻辑点。逻辑路由器还包括卸载到外部计算系统的控制平面,以便减小网络拓扑大小。这还允许控制平面迁移到其它计算机系统,以利用新一代的中央处理器(cpu)。可以使用并入本文公开的系统和方法中的专用网络组件来实施包括逻辑路由器的分解式网络元件。在下面公开的实施例中,网络元件包括诸如博通(broadcom)开发的jericho(杰里科)2和ramon(拉蒙)的硅装置。这些仅仅是示例性的,并且提供这些装置的基本网络路由功能的其它网络元件也可以类似的方式使用。

图1示出了逻辑路由器100的示例架构。如图1所示,逻辑路由器100包括多个脊元件(spineelement)102、多个叶元件(leafelement)104以及将每个脊元件102联接到一个或多个叶元件104的织网(fabric)接口106。在下面的示例中,脊元件102是ramon类的硅装置,叶元件104是一组多个jericho2类的硅装置。装置102、104的织网接口106可以通过诸如10g或100g以太网线缆、光纤线缆或其它类型的网络连接的网络线缆彼此联接。

在逻辑路由器100中,每个脊元件102用作自路由(self-routing)织网的织网元件。这种自路由织网在硅中实施所有相关联的路由协议,包括在不需要任何软件辅助的情况下处理链路故障。如图1所示,逻辑路由器中的每个织网元件通过织网接口与一个或多个叶元件104接口连接。叶元件104的集合可以被用于实施基于单元的织网,在基于单元的织网中叶元件104的集合将数据包拆分为单元。这些单元遍及基于单元的织网分布并在从叶元件104中的一个离开时重新组合。这种实施方案允许更有效地利用织网。每个叶元件104还可以利用允许叶元件104与网络通信的网络接口108来配置。

图2示出了可以使用逻辑路由器100来实施的示例方法200。特别地,方法200示出了使用逻辑路由器100进行端到端数据包调度的实施方案。方法200可以由外部控制器(参见下面对控制元件300的讨论)或在叶元件104上运行的代码来实施,诸如其入口端口接收根据方法200处理的数据包的叶元件104。

方法200可以包括:通过逻辑路由器100,将数据包排队202到与逻辑路由器100相关联的入口上,诸如在其端口接收数据包的叶元件104中的一个上。接着,入口将队列请求发送204到逻辑路由器100,诸如发送到与数据包的目的地地址相对应的第二叶元件104。与逻辑路由器100相关联的出口(例如,第二叶元件104)利用信用授予(creditgrant)来响应。最后,入口将数据包发送到出口,诸如由脊元件102实施的织网。

参照图3,针对下面的设计考虑,如本文所公开的逻辑路由器100提供以下期望性能:

·系统吞吐量

·逻辑机箱配置

·机箱启用引导(bootstrapping)

·机箱规模(scaling)

·系统状态规模

·调试和故障排除(troubleshooting)

·应对织网故障、软件故障和组件故障的韧性

在图3的实施例中,脊元件102联接到叶元件104以实施一级状态clos(克洛斯)织网。特别地,每个叶元件104可以联接到每个脊元件102。

图3的系统可以具有以下属性:提供具有由可以是jerricho2硅装置的叶元件104实施的480x400g或1920x100g端口的48个叶元件104接口规模。在可选规模中,可能存在提供240x400g端口或960x100g端口的24个叶元件。为了本公开的目的,符号“axb”指示a端口具有b吞吐量。图3的配置是出于说明性目的,并且可以类似的方式使用其它装置的其它配置。

在所示的实施例中,存在13个脊元件102。图3的逻辑路由器架构中的脊元件102可以各自包括一个或多个元件,诸如一个或多个ramon类元件。在一些实施方案中,脊轮廓(即,脊元件102的组成)可以包括单个24端口ramon类元件和两个48端口ramon类元件。

图3的逻辑路由器100还包括48个叶元件。可以使用实施400gqsfp-dd(双密度四小型可插拔连接,quadsmallform-factorpluggableconnectiondoubledensity)的光学连接器和400g协议的通信链路,将每个脊元件102与每个叶元件104接口连接。然而,也可以使用其它连接器类型和协议。在一些实施方案中,每个叶元件104由单个j2类硅装置组成,其包括10x400或40x100接口、broadwell(8核)cpu和32gbram(随机存取存储器)。每个叶元件104可以利用用于与外部网络通信的40x100g接口来配置。

在一些实施方案中,逻辑路由器100可以由使用计算系统(例如,参见下文描述的图19的示例计算系统)实施的一个或多个控制平面元件300来管理。控制平面元件是逻辑路由器外部的计算机系统(即,逻辑路由器100的这些组件之中的叶元件104、脊元件102和互连织网)。每个控制平面元件300可以使用例如10g通信链路与一个或多个叶元件104接口连接。控制平面元件300可以用作配置代理,其执行路由器状态管理,以便利用逻辑路由器100实施机箱抽象模型,使得逻辑路由器的分离元件102、104用作单个路由器,如同在公共机箱中并连接到公共底板一样。

参照图4,逻辑路由器100可以通过管理和控制的单点来管理。管理lan(局域网)交换机400执行逻辑路由器100和相关控制平面元件300的所有管理和控制功能。可以通过管理lan交换机400来管理逻辑路由器100,逻辑路由器100包括与多个叶元件104接口连接的多个脊元件102,而多个叶元件104还与控制平面元件300接口连接。管理lan交换机400可以与脊元件102、叶元件104和控制平面元件300中的每一个接口连接。

参照图5,lan交换机400可以以图示的方式与逻辑路由器100的元件接口连接。例如,叶元件104a和叶元件104b可以各自独立地与控制平面元件300连口连接。叶元件104a、104b和控制平面元件300中的每一个都独立地与管理lan交换机400接口连接。在一些实现方案中,虽然也可以使用其它连接类型,但是管理lan交换机的接口的每一个经由2x10g链路实施的。

每个叶元件104a、104b与控制平面元件300之间的接口可以与带内(in-band)网络500和主机数据包路径相关联。另一方面,与管理lan交换机400的每个接口可以与带外(oob,out-of-band)网络502相关联。管理lan交换机400可以通过oob网络502与元件104a、104b、300进行通信,以执行诸如启用引导/图像下载、系统状态分布以及收集系统统计信息和类似数据的功能。

参照图6,与逻辑路由器100相关联的软件可以包括路由处理器软件600、路由器状态数据库602和线卡软件604(本文中也称为线卡软件模块604)。在逻辑路由器100的一些实施方案中,所有软件作为容器部署和管理。路由处理器软件600可以对加载到其上的装置进行编程,以与路由器状态数据库602双向共享关于系统状态和统计信息的数据。路由器状态数据库602可以被编程,以与线卡软件604双向共享关于系统状态和统计信息的数据。

在一些实施方案中,路由处理器软件600实施下面的功能或数据结构:

·系统范围内的接口控制(遍布逻辑路由器100的元件102、104)

·路由协议、arp(地址解析协议)、ipv6nd(互联网协议v6邻居发现)

·路由信息库(rib)

·向北api(应用编程接口)

·配置管理

·数据存储

·linux主机路径

·遥测

·特征-acl(访问控制列表)、qos(服务质量)、copp(控制平面策略)

·虚拟机箱管理

在一些实现方案中,路由器状态数据库602包括下面的功能或数据结构:

·路由器状态

·统计信息

·共享

·复制

·聚群

在一些实现方案中,线卡软件604利用下面的功能或数据结构来实施:

·asic(专用集成电路)/sdk(软件开发套件)编程

·统计资料

·线卡卸载(bfd(双向转发检测)、lldp(链路层发现协议)、sflow(采样流)等)

图7描绘了如何在实际逻辑路由器实现方案中实施三个软件构建块600、602、604。如图7所示,可以在每个脊元件102和每个叶元件104中实施分离的线卡软件模块604(即,线卡软件604的实例)。线卡软件模块604中的每一个与主要控制平面元件300中的路由器状态数据库602(“路由器状态db602a”)通信。主要控制平面元件300a还可以运行路由器处理器软件600(本文中也称为路由处理器模块600)的实例。如图7所示,主要控制平面元件300a与第一次要控制平面元件300a共享数据。如图7所示,第一次要控制平面元件300b与第二次要控制平面元件300c共享数据。第一次要控制平面元件300a和第二次要控制平面元件300b中的每一个分别包括路由器状态数据库602b、602c,以实施诸如数据冗余的功能。如本文所讨论的,在主要控制平面元件300a发生故障的情况下,第一次要控制平面元件300b和第二次要控制平面元件300c可以各自用作备用。

如上面关于图1至图7所描述的,逻辑路由器100与控制元件300和管理lan交换机400可以一起在下面描述的各种操作场景中使用。

图8示出了通过逻辑路由器100生成接口的场景。如图8所示,在linux计算系统上运行的控制平面元件300包括元件状态数据库800和路由处理器600。尽管全文描述了linux计算系统,但是也可以使用其它操作系统,诸如unix、macos、microsoftwindows或本领域已知的其它操作系统的其它变体。

可以是路由器状态数据库602的一部分或等同于路由器状态数据库602的元件状态数据库800可以联接到每个脊元件102和叶元件104以形成逻辑路由器100的一部分。元件状态数据库800可以存储与每个脊元件102和叶元件104相关联的数据,诸如其配置信息(端口,端口与其它元件102、104、300的连接,元件102、104、300的地址等)。控制平面元件300可以使用本文公开的织网发现技术(例如,lsoe、lldp)中的任意一种来发现该信息。元件状态数据库800将该数据提供给路由处理器。针对每个脊元件102和叶元件104上的每个接口,路由处理器600在路由处理器600自身创建唯一接口(图8中的swp1/1……swp1/40、swp2/1……swp2/40……swp48/1……swp48/40),其中符号swpa/b表示元件a(即,脊元件102或叶元件104)的端口b上的接口。唯一接口可以是linux接口。在使用另一类型的操作系统的情况下,可以根据该操作系统创建网络接口。路由处理器可以针对逻辑路由器100的所有分解式元件102、104创建所有接口状态。图9示出了创建唯一接口的流程图。

参照图9,控制平面元件300可以执行所示出的方法900。方法900包括:控制平面元件300的元件状态数据库800接收902与到达逻辑路由器100的脊元件102和叶元件104相关联的数据。元件数据库800将在步骤902接收的数据通知904给在控制平面元件300上运行的路由处理器600。然后,路由处理器参照在步骤902接收的数据针对每个脊元件102和叶元件104创建906唯一接口,诸如linux接口。

一旦已经在运行路由处理器600的控制元件300上的linux(或其它操作系统)实例中创建了接口,则可以将单独的叶元件104的前板上的实际接口“拼接(stitch)”到与其相对应的已创建接口。实现其的一种方式是向每个叶元件104上的每个前板接口分配唯一vlan(虚拟lan)标签,每个vlan标签被进一步映射到在控制元件300上创建的接口中的一个。

图10示出了使用根据方法900创建并与叶元件104的接口相关联的接口的数据包路由的示例。叶元件104a上运行的软件接收数据包1000并编程数据路径中的规则,其查找与数据包1000的目的地相对应的入口接口,并将相应的vlan标签添加到数据包以获得数据包1002,并将数据包1002与标识叶元件104b的出口端口的目的地标识符一起转发到连接到控制平面元件300的叶元件104b。可以在不执行ttl(生存时间,timetolive)递减的情况下将数据包1002发送到叶元件104b。数据包1002通过一个或多个脊元件102的方式发送到出口叶元件104b。如在图10中显而易见的,数据包1002可以包括用于通过织网106路由数据包1002的信息,例如“bcmfabricheader,dest=2005”(bcm=broadcom)。

出口叶104b在接收到数据包1002时将其转发到控制平面元件300。然后,在控制平面元件300上运行的linux实例标识由数据包1002的vlan标签引用的接口1004,剥离vlan标签,并将剥离后的数据包1006注入相应的接口1004。数据包1006照常流经linux数据路径,并且诸如边界网关协议(bgp)模块的应用1008看到该数据包进入接口1004。

图11示出了相对于图10所示的相反方向的传输。应用1008根据数据包的目的地和由路由数据库602定义的路由将数据包1100注入到适当的接口1004中。诸如linux数据路径的数据路径可能已被编程,以将每个接口映射到唯一地标识出数据包的目的地地址的出口前板接口的vlan标签。

特别地,入口叶104b(连接到控制平面元件300)从应用1008接收数据包1100,并针对适当的出口叶104a查找vlan标签,出口叶104a即数据包应该根据如上所述的路由数据库602的编程而被路由到的出口叶。入口叶104b利用vlan标签标记数据包1100并且通过逻辑路由器100的元件102、104将所标记的数据包1102转发到出口叶104a(参见数据包1104)。出口叶104a剥离vlan标签,并将剥离后的数据包1106转发到正确的前板端口的外部,即,与vlan标签相关联、并且对应于与数据包的目的地相对应的路由、并且根据路由数据库602进行编程的前板端口。

参照图12、13和14,可以对逻辑路由器100和控制平面元件300进行编程,以实施下面功能中的一些或所有:

·进程层重启

·路由处理器冗余

·路由状态数据库冗余

·织网元件、链接故障

图12、图13和图14的示例及其相应的讨论示出了如何使用包括多个控制平面元件300来提供抵抗故障的逻辑路由器100的实施方案。

图12示出了用于实施高可用性逻辑路由器100的控制平面元件300的配置。如图12所示,三节点控制平面元件集群包括控制平面元件300a、300b、300c。控制平面元件300a是主要控制平面元件,其运行路由处理器600的实例600a,其被指定为主要路由处理器600a。控制平面元件300b运行路由处理器600的实例600b,其被指定为次要路由处理器600b。在该示例中,控制平面元件300c不运行路由处理器600的实例。

每个控制平面元件300a、300b、300c可以分别包括单独的路由器状态数据库602a、602b、602c。路由处理器600a、600b中的每一个在另一路由处理器600b、600a上运行健康检查诊断(600b检查600a,600a检查600b)。如图12所示,主要路由处理器600a可以将控制平面元件300a、300b、300c中的每一个与每个路由器状态数据库602a、602b、602c接口连接。

控制平面元件300a中的路由器状态数据库602a与控制平面元件300b中的路由器状态数据库共享健康检查复制数据。路由器状态数据库602b与控制平面元件300c中的路由器状态数据库602c共享健康检查复制数据。通过这种方式,与主要和次要路由处理器600a、600b的健康相关联的数据被冗余地存储在多个数据库602a、602b、602c上。

在一些实施方案中,主要路由处理器600a在路由器状态数据库602a、602b、602c中检查所需状态。如图12所示,可以在所有集群节点上产生路由器状态数据库602a、602b、602c。此外,可以在内部复制路由器状态数据库602a、602b、602c的数据碎片以用于冗余,并且每个路由处理器600a、600b可以执行内部健康检查以检测故障转移。如图13所示,在对主要路由处理器600a的健康检查失败的情况下,所示的次要路由处理器600b可以成为主要路由处理器,并接管主要路由处理器600a的功能。

图13示出了主要路由器600a的故障以及主要状态到次要路由处理器600b的转移。如图所示,次要路由处理器600b与路由器状态数据库602a、602b和602c中的每一个建立连接,并读取检查点数据以恢复系统状态(例如,每个检查点的次要路由处理器600b的状态和/或逻辑路由器100的元件102、104的状态)。因此,次要路由处理器600b接管主要路由处理器600a的角色。通过这种方式,可以重新建立与相邻控制平面元件300a、300c的连接,并且可以顺利重启。例如,一旦系统状态已经恢复,则新的主要路由处理器600a的功能可以如上面关于路由处理器600a的功能所描述的那样继续进行。

参照图14,一些实施方案还可包括解决主要控制平面元件300a的故障的措施。主控平面元件发生故障的示例场景如图14所示。

在主要控制平面元件300a发生故障的情况下,响应于在主要路由处理器600a上进行的一个健康检查期间检测到故障,主管次要路由处理器600b的控制平面元件300b可以承担主控平面元件的角色。然后,如图14所示,路由处理器600b将承担主要路由处理器的角色,并与健康路由器状态数据库602b、602c建立连接。路由状态数据库602b、602c可以被配置成在内部处理与主要控制平面元件300a的故障相关联的任何碎片故障转移。

上面关于图1至图14描述的实施例可以提供下面的功能和益处:

·基于织网的clos的基于现有硅网络装置,诸如jericho2和ramon类装置。

·自路由织网

·基于单元的高效负载平衡

·端到端调度

·控制平面在外部服务器上运行

·逻辑机箱管理

·单盒外观和感受

·可缩放的冗余路由状态数据库

·所有层的弹性

图15至图18示出了用于实施逻辑路由器100的可选方法。可选方法包括路由底板织网,其使用独立的交换机作为底板的脊单元。底板自身基于经由前板端口拼接的clos织网。使用下面的主要组件实现路由底板结构:

·第3层(l3)织网端口

·lsoe(以太网链路状态),用于发现织网邻居

·边界网关协议最短路径优先(bgp-spf)控制平面,用于单元间ip可达性

·用于“交换机端口”发现的bgp-spf扩展

·至/自远程“交换机端口”的多协议隧道交换(mpls)隧道设置

要注意的是,在该设计中,lsoe和bgp-spf是标准化协议,用于基于分解式机箱的逻辑路由器100构建路由底板。下面将详细讨论这种路由底板的设计。

图15示出了使用独立的底板结构来实施的逻辑路由器100的物理连接性。在该实施方案中,中央控制器1500与n个脊单元1502(su-1至su-n)接口连接。每个脊单元1502的前板端口中的每一个可以被指定为织网端口。该系统还包括m个线路单元1504(lu-n+1至lu-n+m)。线路单元1504的底板端口也可以被指定为织网端口。控制器可以类似地实施联接到脊单元1502的织网端口。n个脊单元1502中的每一个可以使用脊单元1502的织网端口和线路单元1504的织网端口与m个线路单元1504中的每一个接口连接。此外,m个线路单元1504中的每一个可以包括x个前板端口,每一个前板端口被指定为交换机端口。在图15中,使用下面的符号:

·lu:线路单元

·su:脊单元

·n:脊单元的数量

·m:线路单元的数量

·x:每个线路单元上的交换机端口的数量

·swpa/b:线路单元a上的交换机端口编号b

·fpa/b:单元a上的织网端口编号b(控制器、脊单元或线路单元从0到n+m的编号)。

图15的实施例可以使用与上面关于图1至图14描述的相同的clos连接性。clos连接性可以用于分布由用户配置和路由控制平面所产生的内部交换机状态,以及用于需要流经单元1502、1504的运行时间操作数据,以实施独立的底板结构。

由脊单元1502的织网端口与线路单元1504之间的相互连接实施的底板织网提供遍布所有线路单元1504和控制器1500的数据业务数据包传输。mpls路由织网可以用作遍布所有线路单元1504和控制器织网端口的传输底层。织网可能具有下面的性能中的一些或所有:

·每个线路单元1504织网端口被自动配置为具有专用ip(互联网协议)地址的内部织网vrf(虚拟路由和转发)中的第3层路由端口。

·bgp-spf用作内部织网路由协议,以在织网vrf内的所有织网端口之间建立第3层可达性。

·每个线路单元1504、脊单元1502和控制器节点1500在其本地织网端口上运行bgp-spf路由协议的实例。

·lsoe用作发现协议,以发现第3层织网邻居和相应封装。

·lsoe学习的邻居被推入bgp,以通过直接连接的第2层织网端口调用bgp-spf会话。

·作为结果,在织网中的每个叶-脊连接上建立bgp-spf同级化(peering)。

·在每个节点上学习织网拓扑,并经由bgp-spf计算来建立到每个路由的织网端口的织网-vrfip可达性。

·进一步设置mpls传输,并在本文的后面更详细地描述。

包括外部bgp同级化、igp(内部网关协议)路由协议、arp和nd(邻居发现)的逻辑路由器100的大多数面向外部的控制平面可以被主管在控制器节点1500上。换言之,除了遍布所有节点1500、1502、1504分布的底板织网控制平面之外,大多数逻辑路由器控制平面功能可以被集中在控制器节点1500上。然而,所示架构将允许特定功能(诸如bfd(双向转发检测)、lldp(链路层发现协议)、vrrp(虚拟路由器冗余协议,)和lsoe)根据需要在线路单元1504之间分布。单元1502、1504的数据路径可以被相应地编程,以将本地绑定的数据包发送到本地cpu(用于分布式功能)或者将其发送到控制器节点1500(以实施集中式控制平面)。

在控制器节点1500上运行的集中式逻辑路由器控制平面驱动在线路单元1504之间分布的数据平面的编程。一级转发模型被定义为以下中的一种:(a)所有第3层路由在入口线路单元1504上查找完成,以及(b)结果重新写入和出口端口在入口线路单元1504上被解析。所有结果封装重新写入被放置在数据包上,并且将数据包发送到具有结果出口端口信息的底板传输织网上的出口线路单元1504。所有数据包编辑发生在入口线路单元1504。出口线路单元1504简单地在出口端口1504上转发数据包。如上定义的一级转发模型在该逻辑路由器100中的独立的线路单元1504之间进行模拟,以实现在线路单元之间的第3层转发:

·l1重新写入被解析并写入到入口线路单元(lu)1504上

·通过mpls隧道,将数据包传输到出口lu1504

·mpls标签解析出口lu1504上的出口端口

在一些实施例中,如上所述,所有线路单元1504的前板端口(除了被指定为织网端口的端口外)被指定为外部交换机端口。这些交换机端口中的每一个将表示为逻辑路由器100中的接口。所有逻辑路由器接口将表示为在控制器1500上的数据平面、控制平面和管理平面中以及在所有线路单元1504的数据平面中。例如,将在所有线路单元1504上的数据平面中对表示线路单元3上的端口2的接口“swp3/2”进行编程。在控制器节点1500上主管的管理平面中以及在控制器1500上主管的路由控制平面中也将是可见的。

在一些实施例中,所有路由器接口,包括远程线路单元1504上的路由器接口,在每个线路单元1504上的数据平面中进行编程,以便完成如上定义的线路单元1504之间的一级转发。线路单元1504上的本地接口简单地解析为本地端口。然而,在线路单元1504上的远程接口在数据平面中进行编程,使得将该远程接口输出的数据包发送到远程线路单元1504,以从远程线路单元1504上的相应路由器端口中输出。为此目的,设置底层织网传输隧道,以拼接到线路单元1504的出口的数据路径,并且可以使用覆盖封装来识别出口线路单元1504上的路由器端口。

关于传输隧道和覆盖封装,存在两种选择可以用于此目的:

·纯ip织网传输(ip隧道)和vxlan(虚拟可扩展lan)覆盖封装(诸如虚拟网络标识符(vnid))以识别出口端口

·mpls架构传输(诸如标签交换路径(lsp))和mpls覆盖内部标签,以识别出口端口

在该架构中可以使用mpls传输和覆盖。但是,整体架构不排除使用ip传输与vxlan隧道来实现。

为了改善或优化数据包上的内部标签封装的数量,可以将传输标签和接口标签折叠成单个标签,其既标识物理端口又提供至/自主管物理接口的线路单元1504的传输lsp。该覆盖标签识别用于朝向出口线路单元1504(例如,出口线路卡)和接口的交换的出口流量的出口接口,以及用于需要接入到主管在该接口上运行的路由协议的控制器1500的接口的入口流量的入口接口。为此目的,可以定义两个内部标签分配:

·针对每个本地端口(lc,端口)分配的出口标签,用于从入口lu隧道到远程出口端口,识别交换的流量的出口端口

·针对每个(控制器,端口)分配的入口标签,用于从入口lu隧道到控制器,识别主管目标流量的入口端口

上面的标签情景中的每一个可以在全局范围内,遍布逻辑路由器100内的所有节点1500、1502、1504,并且识别物理端口以及定向lsp。上述标签分配方案实质上导致针对逻辑路由器100内的每个路由器端口分配两个全局标签。为此目的,mpls标签可以被静态地保留并在交换端口接口发现时被分配,并且在一些实施例中,这些保留的标签将不可用于外部使用。

针对每个线路单元1504的每个本地路由器端口分配的全局范围的标签(在所有逻辑路由器节点1500、1502、1504之间)识别出口路由器端口以及从入口线路单元到主管物理端口的出口线路单元的传输lsp。该标签在逻辑路由器节点1500、1502、15014上进行编程,如下:

·在入口线路单元1504上,该标签是被重新写入在数据包上以从远程接口输出的隧道封装结果的一部分。

·在脊单元1502上,该标签交换到出口线路单元,以相同的出口标签重新写入织网下一路由器(fabric-next-hop)。

·在出口线路单元上,该标签仅指向出口接口(不重新写入数据包)。

图16中示出了该进程。图16中使用了下面的符号:

·l(e,x,y):lu-y上的交换机端口x的出口标签

·l(i,x,y):lu-y上的交换机端口x的入口标签

·mac-x:单元x的路由器mac(机器存取代码)

数据包可以由入口线路单元1504(lu-(n+m))接收。在退出入口线路单元lu-(n+m)之后,根据所示的标签表1600标记数据包,其中包括出口接口(“[12.1.1.2,swp(n+2)/1]->mac-a”)以及传输lsp,即,到出口接口(“mac-a->l(e,x,y)+mac-1,port:fp(n+m)/1->l(e,x,y)+mac-n,port:fp(n+m)/n”)的隧道路径。将数据包发送到脊单元1502(su-n)。脊单元su-n根据标签表1602重新写入数据包,其包括织网下一路由器重新写入(“l(e,x,y)->mac-n+2,port:fpn/2”)和出口标签。脊单元su-n将重新写入的数据包转发到出口线路单元1504(lu(n+2)),其根据简单地指向出口接口(l(e,x,y)->swp(n+2)/1)的表1604来转换数据包的标签。

参照图17,全局范围的标签(在所有逻辑路由器节点1500、1502、1504之间)可以分配给每个(控制器、路由器端口),并识别入口路由器端口以及从入口线路单元到控制器卡的传输lsp。该标签在逻辑路由器节点上进行编程,如下:

·在入口线路单元1504上,该标签是隧道封装结果的一部分,其被重新写入在数据包上,以便将数据包插入(punt)到控制器中(参见图17中的表1700,位于线路单元lu-(n+m)上)

·在脊单元1502上,该标签仅交换到控制器,以相同的出口标签重新写入织网下一路由器(参见表1702,位于脊单元su-n上)

·在控制器1500上,该标签识别主机堆栈中的入口接口(参见表1704)

需要将插入的数据包注入linux内核,使其看起来如同其到达与数据包到达的前板端口相对应的linux接口上。在独立的系统上,主机路径在交换机的本地cpu上运行的linux内核中运行,即线路单元1504,其在图17的示例中为线路单元lu-(n+m)。线路单元1504上的asic添加系统标头(header),其指示数据包到达哪个入口接口。然后,内核中的bcm中网(knet)模块将硬件入口接口映射到linux接口,并将数据包注入linux数据路径。

在所示的架构中,主机数据路径在多个位置运行。在线路单元1504上,可能需要将数据包插入到在线路单元1504上运行的bgplsvr(链路状态矢量路由)实例。如果数据包的目的地是控制器1500上运行的控制平面协议实例,则线路单元1504需要能够将数据包传送到控制器。由于该路径中没有系统标头,因此需要识别入口接口并将其封装在数据包自身内。

如前面部分所述,这是使用识别入口接口的唯一标签来实现的。acl规则可以用于在入口接口上进行匹配,并提供相应的标签和后续的转发链。然而,仅当确实需要将数据包发送到控制器1500时才需要使用该结果。在其它情况下,转发查找应当驱动封装。

图18示出了根据图15至图17的方法来调用(bringup)独立的底板织网的方法。调用底板织网并在启动时自动进行编程,而无需任何明确的用户配置或干预,使得:

·在织网vrf内的所有启用的第3层织网端口之间建立第3层(l3)底板可达性

·至/自在所有逻辑路由器组件:线路单元1504、脊单元1502和控制器1500之间的所有路由器端口设置覆盖传输隧道

如图18所示,用于调用底板织网的方法1800可以包括:将织网配置下载1802到正被管理的每个单元1500、1502、1504。这可包括ip寻址、卡角色、端口角色和端口mpls标签。方法1800进一步包括:在每个单元1500、1502、1504的织网端口上调用1804l3寻址。方法1800可以进一步包括:在织网端口上调用1806lsoe,其包括发现织网邻居并将以这种方式获取的每个单元的1500、1502、1504邻居数据库推送到控制器1500上的bgp-lsvr。方法1800可以进一步包括:通过bgp-spf实例,在每个单元1500、1502、1504上执行1808:调用同级化、学习织网拓扑并且在织网vrf中安装织网ip路由。

第3层底板织网的自动调用可以根据以下说明来安排,其中r0表示控制器1500。

具有启动配置的自动配置r0:

假定r0已经被映像,并且管理以太网(ma1)已启动并寻址。r0读取具有下面的启动配置文件(与映像封装在一起):

·拓扑:脊单元、线单元

·向南织网接口的专用寻址

·覆盖接口隧道的mpls标签

·针对线路单元ma1管理ip地址池

·线路单元和脊单元的ztp(零接触配置)/启动配置。

调用线路单元:

r0通过从启动配置文件寻址来调用其向南织网接口(图15至图8的拓扑中的脊单元1502和线路单元1504)。

r0运行dhcpd(动态主机配置协议后台程序),因此线路单元1504和脊单元1502的管理以太网mals可以从启动配置文件中所给的池中获取地址。假设单元1502、1504的线卡编号为其所连接的r0端口。r0对单元1502、1504运行ztp服务。

将启动配置推送到线路单元:

r0将启动配置推送到线路单元1504和脊单元1502。该配置针对每个单元1502、1504识别卡角色;将每个本地端口识别为“织网端口”或“路由器端口”,指定北向织网接口寻址,并为路由器端口覆盖隧道提供mpls标签(每个端口两个标签)。

然后,单元1502、1504在织网端口上运行lsoe,以确保其按照启动配置所期望的进行连线。lsoe发现第3层织网邻居和相应的封装。按照标准lsoe功能,将通过lsoe学习的信息数据库导出到bgp-spf。

bgp-spf同级化被建立在每个线路单元到脊单元织网链路上。在每个单元1502、1504上学习织网拓扑,并经由bgp-spf计算来建立到每个路由的织网端口的织网-vrfip可达性。bgp-spf对织网vrf内具有织网路由的每个本地线路单元/脊单元rib(路由器信息库)进行编程。此时,所有织网端口ip地址都具有ip可达性。

交换机端口发现和隧道调用:

可以在每个线路单元1504上发现本地路由器端口。将所发现的路由器端口以及所分配的mpls标签推送到每个线路单元1504上的本地bgp-lsvr实例中。可以进一步增强bgp-spf,以使其能够携带独立于ip寻址的端口+标签。因此,bgp-spf可以被配置成计算到逻辑路由器中的每个“交换机端口”的最短路径优先(spf)。bgp-spf还可以独立于配置其的用户vrf将这些外部交换机端口并入其织网-vrf拓扑中。每个单元1504上的bgp针对每个接口实例化覆盖mpls隧道的入口/出口,每个接口经由织网-vrf下一路由器来进行解析。隧道的可达性可以通过织网-vrf下一路由器来解析,并且可以如前所述在每个单元1504上使用所分配的mpls标签对隧道进行编程。

r0上的用户配置跟随底板织网的调用,并且可以在控制器1500上进行处理。作为该用户配置和控制平面的结果计算的交换机状态可以进一步分布以在一些或所有的线路单元1504之间进行编程。

示例数据包路径

本节使用前面各节中描述的控制节点1500和单元1502、1504的数据路径编程来重温一些常见的数据包路径如何在系统中工作。

arp解析

单元1502、1504上的收集(glean)处理通过在目的地ip地址上的入口l3路由查找来执行,其解析为不完整的下一路由器或子网(收集)路由,其被编程指向punt路径。punt路径是预先编程的、指向控制器1500的入口接口隧道。入口第2层数据包封装有入口接口标签+重新写入为织网-脊-下一路由器。封装的数据包在织网端口上传输到脊单元1502中的一个。脊单元1502终止于外部的第2层。在脊单元1502上的mpls标签内查找指向入口接口标签+重新写入为织网-控制器-下一路由器。该信息用于将数据包路由到控制器1500。控制器终止于外部的第2层。控制器1500被编程为执行mpls标签内查找动作作为pop(接入点),并且识别入口接口上下文。控制器在数据包的目标ip上执行l3路由查找,并且解析为不完整的下一路由器或子网(收集)路由。然后,控制器1500使用下一路由器或子网路由利用入口接口的arp解析来递送数据包。

arp请求

控制器1500在入口l3接口上生成广播arp请求。控制器l3接口解析为出口-接口-隧道端口。广播arp请求的arp数据包被封装有出口接口标签+重新写入为织网-脊-下一路由器。封装的数据包在织网端口上传输到脊单元1502中的一个。脊单元1502终止于外部的第2层。在脊单元1502上的mpls标签内查找指向出口接口标签+重新写入为织网-线路单元-下一路由器。根据mples标签内查找,封装的数据包在织网端口上被发送到出口线路单元1504。出口线路单元1504终止于外部的第2层。出口线路单元1504执行mpls标签内查找,从而在从mpls标签内查找所识别的出口线路单元的出口接口上进行pop和转发。

arp应答

可以利用到控制器1500的punt路径来对arp应答数据包进行编程。punt路径被预先编程并且指向控制器1500的入口接口隧道。来自线路单元1504的入口l2arp数据包可以根据punt路径被封装有入口接口标签+重新写入为织网-脊-下一路由器。封装的数据包在织网端口上传输到脊单元1502中的一个。脊单元1502终止于外部的第2层。在脊单元1502上的mpls标签内查找指向入口接口标签+重新写入为织网-控制器-下一路由器。该信息用于将arp数据包转发到控制器1500。

控制器1500终止于外部的第2层。控制器1500执行mpls标签内查找动作并且被编程为pop。控制器1500根据查找动作来识别入口接口环境。将封装在来自线路单元1504的数据包中的内部数据包被识别为arp数据包,并传递给在控制器1500上运行的arp模块,其根据地址解析协议(arp)处理arp应答。

入口lc->出口lc路由的数据包漫游

入口线路单元1504在数据包的目的地ip上执行入口l3路由查找,并且解析为下一路由器重新写入、l3-出口-接口、l2-出口-接口-隧道端口。数据包利用来自路由查找以及从出口l3接口和l2端口衍生的vlan编辑的下一路由器重新写入结果而重新写入。导致的第2层数据包封装有出口接口标签+重新写入为织网-脊-下一路由器。封装的数据包在织网端口上根据织网-脊-下一路由器被传输到脊单元1504中的一个。脊单元1504接收所封装的数据包,终止于外部的第2层,并且执行mpls标签内查找,其指向出口接口标签+重新写入为织网-出口-线路单元-下一路由器。脊单元1504将所封装的数据包传输到由织网-出口-线路单元-下一路由器所引用的出口线路单元1504。出口线路单元1504终止于外部的第2层,执行mpls标签内查找结果以获得pop,并且在由所封装的数据包引用的出口线路单元1504的出口接口上转发所封装的数据包。

图19是示出示例计算装置1900的框图,其可以用于实施本文公开的系统和方法,诸如控制平面元件300、控制器1500或逻辑路由器100的各个元件102、104、1502、1504。

计算装置1900可以用于执行诸如本文所讨论的各个进程。计算装置1900可以用作服务器、客户端或任意其它计算实体。计算装置可以执行本文讨论的各个监控功能,并且可以运行一个或多个应用程序,诸如本文描述的应用程序。计算装置1900可以是诸如以下的各种计算装置中的任意一种:膝上型计算机、笔记本计算机、服务器计算机、手持计算机、平板计算机等。

计算装置1900包括全部联接到总线1912的一个或多个处理器1902、一个或多个存储器装置1904、一个或多个接口1906、一个或多个大容量存储装置1908、一个或多个输入/输出(i/o)装置1910及显示装置1930。处理器1902包括一个或多个处理器或控制器,其运行存储器装置1904和/或大容量存储装置1908中存储的指令。处理器1902还可以包括各个类型的计算机可读介质,诸如高速缓存存储器。

存储器装置1904包括诸如易失性存储器(例如,随机存取存储器(ram)1914)和/或非易失性存储器(例如,只读存储器(rom)1916)的各种计算机可读介质。存储器装置1904还可以包括诸如闪速存储器的可重新写入的rom。

大容量存储装置1908包括诸如磁带、磁盘、光盘、固态存储器(例如,闪速存储器)等的各种计算机可读介质。如图19所示,特定的大容量存储装置是硬盘驱动器1924。大容量存储装置1908中还可包括各种驱动器,以实现从各种计算机可读介质读取和/或写入到各种计算机可读介质。大容量存储装置1908包括可移动介质1926和/或不可移动介质。

i/o装置1910包括允许将数据和/或其它信息输入到计算装置1900或从计算装置1900检索数据和/或其它信息的各个装置。示例i/o装置1910包括光标控制装置、键盘、小键盘、麦克风、监视器或其它显示装置、扬声器、打印机、网络接口卡、调制解调器、镜头、ccd或其它图像捕获装置等。

显示装置1930包括能够向计算装置1900的一个或多个用户显示信息的任意类型的装置。显示装置1930的示例包括监视器、显示终端、视频投影装置等。

接口1906包括允许计算装置1900与其它系统、装置或计算环境交互的各个接口。示例接口1906包括任意数量的不同网络接口1920,诸如到以下网络的接口:局域网(lan)、广域网(wan)、无线网络和因特网。其它接口包括用户接口1918和外围装置接口1922。接口1906还可以包括一个或多个用户接口元件1918。接口1906还可以包括一个或多个外围接口,诸如用于打印机、定点装置(鼠标、触控板等)、键盘等的接口。

总线1912允许处理器1902、存储器装置1904、接口1906、大容量存储装置1908、i/o装置1910彼此通信,以及联接到总线1912的其它装置或组件彼此通信。总线1912表示几种类型的总线结构中的一种或多种,诸如系统总线、pci总线、ieee1394总线、usb总线等。

出于说明性目的,程序和其它可运行程序组件在本文中被示出为离散块,但是应当理解的是,这种程序和组件可以在不同时间存在于计算装置1900的不同存储组件中并由处理器1902运行。可选地,本文描述的系统和过程可以以硬件或者硬件、软件和/或固件的组合来实施。例如,可以对一个或多个专用集成电路(asic)进行编程,以执行本文所述的系统或过程中的一个或多个。

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