用于虚拟节点的基于结构路径上下文的转发的制作方法

文档序号:16245560发布日期:2018-12-11 23:32阅读:181来源:国知局
本公开涉及计算机网络,并且更具体地涉及在计算机网络内传达分组。
背景技术
:计算机网络是可以交换数据并且共享资源的互连计算设备的集合。在诸如以太网的基于分组的网络中,计算设备通过将数据划分为被称为分组的可变长度块来传达数据,该可变长度块个体地跨网络从源设备被路由到目的地设备。目的地设备从分组中提取数据并且将数据组装成其原始形式。被称为路由器的某些设备维护表示网络的拓扑结构的路由信息。路由器交换路由信息,以维护经由网络的可用路由的精确表示。通常,“路由”可以被定义为网络上两个位置之间的路径。在接收到传入的数据分组后,路由器检查分组内的信息(通常被称为“密钥”),以按照路由信息来选择要向其转发分组的适当的下一跳。路由器可以包括一个或多个转发组件,例如,分组转发引擎和交换结构(fabric)。分组转发引擎可以经由接口卡接收和发送数据。交换结构提供用于在分组转发引擎之间转发数据以通过网络(例如,互联网)传输的互连机制。在一些示例中,路由器或交换设备可以采用分布式多级交换结构体系架构,其中网络分组遍历位于路由器的分布式转发组件中的交换结构的多个级以从交换结构的入口点行进到交换结构的出口点。路由器使用路由协议来交换路由信息。路由器通常以一个或多个路由表或其他数据结构的形式维护路由信息。路由器可以按照路由信息来生成并且维护转发信息。转发信息将网络路由与路由器的特定转发下一跳和对应的接口端口相关联。在一些示例中,转发信息可以是包含在路由信息内的信息的子集。在转发信息中生成接口端口与下一跳的关联的过程通常被称为路由解析。边界网关协议(bgp)是路由器可以用来交换信息的路由协议,该信息与网络中的网络设备之间(诸如边缘设备的集合之间)的路由和可达性相关联。当最初两台路由器连接时,路由器通常会交换其所有路由信息。路由器随后发送控制消息,以当网络拓扑结构改变时递增地更新路由信息。例如,路由器可以发送更新消息来通告新的可用路由,并且撤消不再可用的路由。在一些示例中,bgp可以被用来通告指定的路由器已经将指定的一个或多个mpls标签绑定到由指定的地址前缀表示的网络目的地。这可以通过发送bgp更新消息来完成,该gbp更新消息具有网络层可达性信息字段,其包含前缀和一个或多个mpls标签;以及下一跳字段,其标识所述前缀与一个或多个标签绑定所在的节点。技术实现要素:一般而言,本公开描述了使用路由协议属性,该属性允许网络设备在路由协议消息的单个属性中通告用于到达一个或多个网络目的地的多个下一跳。本公开的技术还允许路由协议属性的发送者指定正在被通告的多个下一跳之间的关系,并转发与单个路由协议属性中的多个下一跳中的每个下一跳相关联的语义。例如,路由协议消息可以是边界网关协议(bgp)更新消息。在一些示例中,可以发送路由协议属性用于上游分配或下游分配,并且路由协议属性可以包括指定路由协议属性的内容旨在用于上游分配还是旨在用于下游分配的字段。接收到具有路由协议属性的路由协议消息的网络设备可以基于该字段来确定如何处理路由协议属性。在发送路由协议属性用于下游分配的情况下,发送设备的下一跳和转发语义被接收网络设备存储和使用,在确定是否选择发送设备作为用于向一个或多个网络目的地转发网络流量的下一跳中用于参考。在发送路由协议属性用于上游分配的情况下,接收网络设备将由发送设备指定的下一跳和转发语义安装到转发表,并且使用下一跳和转发语义来转发由网络设备接收的网络流量。在一个示例方面中,一种方法包括:通过具有多个转发组件和多个结构链路的单机架网络设备的第一虚拟路由节点选择多个转发组件中的一个转发组件的结构接口,该多个结构链路耦合在多个转发组件的相应结构接口处的多个转发组件的相应对,该结构接口具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;通过第一虚拟路由节点向单机架路由器的第二虚拟路由节点通告指定结构接口作为用于网络目的地的下一跳和要安装结构接口的第二虚拟路由节点的上下文转发表的消息;响应于接收到指定结构接口的消息,通过第二虚拟路由节点将作为用于网络目的地的下一跳的结构接口存储到第二虚拟节点的上下文转发表;通过第二虚拟路由节点并且基于上下文转发表以及指向上下文转发表的第一转发表中的上下文下一跳(context-nexthop)来选择用于转发由第二虚拟路由节点接收的去往网络目的地的网络分组的结构接口;以及通过第二虚拟路由节点向选定的结构接口转发去往网络目的地的网络分组。在另一示例方面中,一种单机架网络设备包括多个转发组件;多个结构链路,其耦合在多个转发组件的相应结构接口处的多个转发组件的相应对;第一虚拟路由节点,其被配置为使用多个转发组件的第一子集来转发分组;以及第二虚拟路由节点,其被配置为使用多个转发组件的第二子集来转发分组,第二子集与第一子集不同。第一虚拟路由节点被配置为:选择多个转发组件中的一个转发组件的结构接口,其具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;向第二虚拟路由节点通告指定结构接口作为用于网络目的地的下一跳和要安装结构接口的第二虚拟路由节点的上下文转发表的消息。第二虚拟路由节点被配置为:响应于接收到指定结构接口的消息,将作为用于网络目的地的下一跳的结构接口存储到第二虚拟节点的上下文转发表,基于上下文转发表以及指向上下文转发表的第一转发表中的上下文下一跳来选择结构接口,用于转发由第二虚拟路由节点接收的并且基于上下文转发表以及指向上下文转发表的第一转发表中的上下文下一跳去往网络目的地的网络分组,以及向选定的结构接口转发去往网络目的地的网络分组。在又一示例方面中,一种计算机可读存储介质包括用于使得单机架网络设备的一个或多个可编程处理器进行以下操作的指令:通过具有多个转发组件和多个结构链路的单机架网络设备的第一虚拟路由节点选择多个转发组件中的一个转发组件的结构接口,该多个结构链路耦合在多个转发组件的相应结构接口处的多个转发组件的相应对,该结构接口具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;通过第一虚拟路由节点向单机架路由器的第二虚拟路由节点通告指定结构接口作为用于网络目的地的下一跳和要安装结构接口的第二虚拟路由节点的上下文转发表的消息;响应于接收到指定结构接口的消息,将作为用于网络目的地的下一跳的结构接口存储到第二虚拟节点的上下文转发表;通过第二虚拟路由节点并且基于上下文转发表以及指向上下文转发表的第一转发表中的上下文下一跳来选择结构接口用于转发由第二虚拟路由节点接收的去往网络目的地的网络分组;以及通过第二虚拟路由节点向选定的结构接口转发去往网络目的地的网络分组。在附图和以下描述中阐述了一个或多个示例的细节。其他特征、目的和优点将从说明书和附图以及权利要求中变得明显。附图说明图1是图示了包括按照本公开中所描述的技术来配置的网络设备的示例网络环境的框图。图2是图示了被配置为按照本公开的技术进行操作的示例网络设备的框图。图3是图示了按照本公开的一个或多个方面的网络设备在处理具有multinexthop属性的路由通告消息时的示例操作的流程图。图4是图示了按照本公开的技术的用于multinexthopbgp属性300的示例格式的框图。图5是进一步详细图示了图4的下一跳转发语义类型长度值(tlv)的示例格式的框图。图6是进一步详细图示了图5的下一跳支路描述符tlv的示例格式的框图。图7是图示了作为下一跳属性子tlv的一个示例的用于ipv4地址子tlv326的示例格式的框图。图8是图示了作为下一跳属性子tlv的一个示例的用于ipv6地址子tlv的示例格式的框图。图9是图示了作为下一跳属性子tlv的一个示例用于带标签的ip下一跳属性子tlv的示例格式的框图。图10是图示了用于具有“附接点标识符”属性子tlv的ipv4地址的示例格式的框图。图11是图示了用于具有“附接点标识符”属性子tlv的ipv6地址的示例格式的框图。图12是图示了用于可用带宽子tlv的示例格式的框图。图13是图示了用于负载平衡因子属性子tlv的示例格式的框图。图14是图示了用于表名称属性子tlv的示例格式的框图。图15是图示了用于转发上下文名称属性子tlv的示例格式的框图。图16是图示了用于转发上下文路由目标属性子tlv的示例格式的框图。图17是图示了包括具有形成全局转发层的全局fib的网络设备以及形成私有转发层的私有上下文fib的示例系统的框图。图18是图示了按照本公开的一个或多个方面的网络设备在使用私有上下文转发层时的示例操作的流程图。图19是图示了描绘使用通过将服务路由绑定到私有mpls平面来缩放的服务路由的网络设备的系统的框图。图20是图示了其中路由器具有全局mplsfib和mpls上下文fib的系统的框图。图21a是图示了包括按照本公开中所描述的技术配置的单机架路由器的逻辑视图的示例网络环境的框图。图21b是按照本公开中所描述的技术的进一步详细图示了图21a的示例性网络环境的框图。图22是图示了使用了按照本公开中所描述的技术的优化结构路径的图21a至图21b的示例单机架路由器的框图。图23是进一步详细图示了图22的控制单元和分组转发引擎的示例实例的框图。图24是图示了根据本公开中所描述的技术的示例操作模式的流程图。图25是进一步详细图示了示例系统的框图,其示出了图21a至图21b的单机架路由器的示例结构接口虚拟节点。图26是图示了示例系统的框图,其示出了包括具有虚拟节点的单机架路由器的示例网络拓扑结构。图27是图示了示例系统的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图28是图示了示例系统的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图29是根据本公开中所描述的技术的图示了示例操作模式的流程图。图30是图示了示例系统的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图31是图示了单机架路由器的转发平面的示例部分的框图。图32是图示了根据本公开中所描述的技术的另一示例操作模式的流程图。图33是图示了示例系统的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图34是图示了单机架路由器的转发平面的示例部分的框图。图35是图示了示例系统的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图36是图示了其中vnode执行用于从ip/mpls核心网向ce发送流量的控制平面信令的示例系统的框图。图37是图示了其中vnode基于图36的控制平面信令来执行从ip/mpls核心网向ce的数据平面分组转发的示例系统的框图。图38是图示了示例系统的框图,其图示了vpe的pfe与vpe之间的vpe间通信。在整个附图和文本中,相同的附图标记表示相同的元件。具体实施方式图1是图示了包括按照本公开中所描述的技术配置的网络设备的示例网络环境的框图。出于示例的目的,相对于图1的简化网络环境2对本公开的技术进行了描述,其中提供商边缘(pe)路由器20a至20c(“pe路由器20”)向客户网络(未示出)提供对核心网10的访问。核心网10还包括耦合到pe路由器20的传送路由器21。pe路由器20和传送路由器21可以交换路由信息以维护网络环境2的拓扑结构的精确表示。尽管出于示例的目的关于pe路由器20和传送路由器21进行了描述,但是本公开的技术可以由网络设备(诸如网关设备、路由反射器、对等设备、服务器等)和/或除了其他功能之外还具有路由功能的网络设备使用。尽管未示出,但是核心网10可以耦合到由其他提供商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施(例如,互联网)的一部分。因此,核心网10可以被视为互联网的核心网。在一些示例中,核心网10可以向诸如客户边缘(ce)路由器22a,22b(“ce路由器22”)之类的计算设备提供对互联网的访问,并且可以允许客户网络内的计算设备彼此通信。在另一示例中,核心网10可以在互联网的核心内提供网络服务。核心网10可以包括pe路由器20和传送路由器21以外的多种网络设备(未示出),诸如附加路由器、交换机、服务器或其他设备。在所图示的示例中,ce路由器22a经由接入链路耦合到核心网10,ce路由器22c经由接入链路耦合到核心网10,并且ce路由器22a经由多个接入链路耦合到核心网10。在一些示例中,接收方16从源18接收流量和/或网络服务。pe路由器交换路由通告消息(例如,bgp更新消息)24,26。客户网络可以包括一个或多个计算设备(未示出),诸如个人计算机、膝上型计算机、手持式计算机、工作站、服务器、交换机、打印机、客户数据中心或其他设备。图1中所图示的网络环境2的配置仅仅是个示例。假设pe路由器20和传送路由器21被配置为将流量从源网络设备18路由到接收方网络设备16。pe路由器20a和20b可以通过输出一个或多个路由协议消息(诸如按照根据边界网关协议的bgp消息)来将它们的可达性通告给接收方16。每个pe路由器20均可以是bgp说话者,即,实现bgp的路由器。交换作为bgp会话的端点的bgp消息的bgp说话者被称为bgp对等方。路由器20可以是彼此的bgp对等方。传送路由器21可能不是bgp说话者,但可以转发bgp消息。bgp更新消息用于在bgp对等方之间传送路由信息。bgp对等方可以使用更新消息中接收到的信息来构造描述bgp对等方是其成员的各种自治系统的关系的图。可达性(例如,网络层可达性信息(nlri))可以是指与指示网络流量可以经由通告可达性信息的特定网络设备被路由到目的地网络设备(例如,接收方网络设备16)或目的地集合(例如,包括接收方网络设备16)相关联的信息。bgp更新消息具有nlri字段,其携带ip地址前缀,其表示具有包含在ip地址前缀中的ip地址的系统集合。bgp更新消息还可以包括一个或多个路径属性。bgp更新消息可以通告一个路径属性集合,但可以是多个目的地,前提是这些目的地共享这些属性。包含在给定bgp更新消息中的所有路径属性适用于bgp更新消息的nlri字段中携带的所有目的地。例如,pe路由器20a和20b可以分别发送路由通告消息24、26,其通告pe路由器20a、20b知道去往接收方16的流量可以被转发的下一跳。pe路由器20a发送指定ce路由器22a作为用于到达接收方16的下一跳的路由通告消息26(例如,bgp更新消息)。pe路由器20b发送指定ce路由器22a和ce路由器22b两者作为用于到达接收方16的下一跳的路由通告消息24(例如,bgp更新消息)。用于接收方16的可达性可以根据网络层可达性信息(诸如包括接收方16的ip地址的网络地址前缀)来表达。按照本公开的技术,路由通告消息24包括指定多个下一跳(即,ce路由器22a和ce路由器22b)的新属性,并且其还指定用于多个下一跳的转发语义,诸如关于多个下一跳之间的关系的信息。尽管图1的示例图示了指定用于到达接收方16的两个下一跳的路由通告消息24,但是在其他示例中,按照本公开的技术,网络设备可以发送指定用于到达接收方的多于两个下一跳的路由协议消息。在一些示例中,路由通告消息24是带标签的单播bgp消息,其通告mpls标签以用于沿着pe路由器20c和pe路由器20b之间的lsp28发送网络流量。在这种情况下,pe路由器20还可以被称为标签交换路由器(lsr)。当两个mplslsr在mpls标签交换路径(lsp)中相邻时,它们中的一个可以被称为“上游lsr”,而另一个可以被称为“下游lsr”。术语“下游”和“上游”是指沿着lsp的网络流量的最终流动的方向,其沿着lsp从上游网络设备流向下游网络设备。在mpls体系架构中,将特定标签l绑定到特定转发等价类(fec)f的决定由标签交换路由器(lsr)做出,该标签交换路由器相对于该绑定而言是下游的。下游lsr随后通知绑定的上游lsr。因此标签是“下游指派的”,并且标签绑定分布在“下游到上游”的方向。e.rosen的multiprotocollabelswitchingarchitecture,网络工作组rfc3031,2001年1月(以下简称“rfc3031”)仅讨论了下游指派的标签绑定。在r.aggarwal的mplsupstreamlabelassignmentandcontext-specificlabelspace,网络工作组rfc5331,2008年8月中对上游标签分配进行了描述,其全部内容通过引用并入本文(下文中,表示为“rfc5331”)。rfc5331描述了mpls体系架构中的上游指派的mpls标签。考虑已经同意将标签l绑定到用于从pe20c发送到pe20b的分组的fecf的两个lsr(pe20c和pe20b)。然后,对于该fec标签绑定,pe20c是“上游lsr”,而pe20b是“下游lsr”。如果l和f之间的绑定由pe20b做出并且被通告给pe20c(例如,经由路由通告消息24),则标签绑定被称为“下游指派的”。如果l和f之间的绑定由pe20c做出并且被通告给pe20b(例如,经由路由通告25),则标签绑定被称为“上游指派的”。在上下文特的定标签空间中查找上游指派的标签。在一些示例中,上游指派的标签可以经由路由通告27由pe20d发送。当mpls标签被上游指派时,mpls标签l的上下文由lsr提供,该lsr指派标签并且将该标签绑定到用于标签交换路径(lsp)28的fecf。指派标签的lsr将绑定和上下文分发给lsrpe20b,该lsrpe20b然后在具有标签l的lsp28上接收mpls分组。当pe20b在lsp28上接收到mpls分组时,pe20b需要能够确定该分组的上下文。如rfc5331中所描述的,这样的上下文的一个示例是可以在其上接收lsp1上的mpls分组的隧道。这样的上下文的另一示例是可以接收lsp1上的mpls分组的邻居。在一些示例中,mpls标签可以被用来建立上下文,即,标识标签空间。“上下文标签”是标识标签表格的上下文标签,在该标签表格中直接位于上下文标签下方的标签应该被查找。在特定多路访问子网/隧道上作为最外层标签携带的上下文标签在该子网/隧道的范围内应当是唯一的。本公开的技术描述了新bgp属性,其允许诸如pe路由器20的bgp说话者通告用于bgp消息的单个bgp属性中的nlri集合的多个下一跳。与说话者限于在更新消息中通告用于nlri集合的一个下一跳的bgp说话者形成对照,该更新消息诸如在顶层bgp下一跳属性(代码3)中或者在mp_reach属性(代码14)内部被编码。而且,与仅允许通告多个下一跳的基本能力的机制(诸如bgp-addpath)形成对照,本公开的技术还允许bgp属性的发送者指定正在被通告的多个下一跳之间的期望关系,以及与单个bgp属性中的多个下一跳中的每一个下一跳相关联的转发语义。例如,所通告的多个下一跳之间的关系可以包括例如相对排序、负载平衡的类型或快速重路由。这些是上游节点处的基于各种附加路径之间的路径选择的本地决定,其可能基于某个任意方面(例如,基于路由器标识符)来进行平局决胜(tie-break)。在一些示例中,从核心网10内的传送路由器21和其他传送路由器(未示出)不是理解bgp消息的内容的bgp说话者(尽管这些运输路由器可能会转发bgp消息)的意义上来说,核心网10可以具有“无bgp的核心”。具有无bgp核心的一些场景可能受益于具有一种机制,其中出口节点可以发信号通知多个下一跳,连同它们与入口节点的关系一起。本文档定义了可以用于此目的的新bgp属性,其在本文中被称为multinexthopbgp属性。multinexthopbgp属性是新bgp可选传送属性,其可以被用来向bgp说话者传送多个下一跳。multinexthopbgp属性使用一个或多个下一跳转发语义tlv来描述用于多个下一跳的转发语义。multinexthopbgp属性可以被用于带标签的bgp族和未带标签的bgp族。如本文中所描述的,对于带标签的族,multinexthopbgp属性在“下游分配”情况下的目的与在“上游分配”情况下的目的不同。例如,以f为标签的族(multinexthopbgp属性)可以被用来在“下游标签分配”模式下描述出口节点处的转发语义,并且在“上游标签分配”场景中,用来描述出口/传送节点处的期望转发语义。通常,下游分配的标签的语义只对出口节点是已知的。接收标签绑定的说话者无法访问通告者处的标签的转发语义的信息。在一些环境中,始发的说话者可以将该信息传送到接收说话者可能是有用的。例如,这可能有助于更好的调试和可管理性,或者使得标签接收说话者(在一些示例中,其可以是集中控制器)能够基于标签的转发语义来更好地决定使用哪个标签。在进行上游标签分配时,本文中所描述的新属性允许pe路由器向接收说话者发信号通知用于标签的转发语义应当是什么。该属性可以被用来传达出口节点处的转发语义。在一些示例中,本公开的技术可以由路由反射器使用。当与其他贡献路径(contributingpath)的下一跳进行比较并且到达要通告给addpath接收方的路径集合时,通告add_path的rr应当使用multinexthop属性。图2是图示了被配置为按照本公开的技术进行操作的示例网络设备50的框图。在一个示例中,如本文中所描述的,网络设备50可以作为发送包括multinexthopbgp属性的bgp更新消息的bgp说话者来操作。在另一示例中,如本文中所描述的,网络设备50可以作为接收包括multinexthopbgp属性的bgp更新消息的bgp说话者来操作。例如,网络设备50可以基本上类似于来自图1的pe路由器20中的任一个pe路由器20来操作。在图2所图示的示例中,网络设备50包括接口卡60a至60n(“ifc60”),其经由传入的链路接收控制和数据分组,并且经由出站链路发送控制和数据分组。ifc60通常经由若干个接口端口耦合到传入的链路和出站链路。网络设备50还包括控制单元54,其确定接收的分组的路由并且相应地经由ifc60转发分组。控制单元54包括路由组件56和转发组件58。路由组件56作为用于路由器50的控制平面来操作并且包括操作系统(未示出),该操作系统可以提供用于执行多个并行进程的多任务操作环境。例如,路由组件56为执行用于网络设备50的路由功能的各种协议66提供操作环境。在图2所图示的示例中,路由组件56包括作为单播路由协议的边界网关协议(bgp)进程70,该单播路由协议用于与网络中的其他网络设备交换路由信息以发现网络拓扑结构,以及更新路由信息62。路由信息62可以描述网络设备50驻留于其中的网络的拓扑结构,并且还可以描述网络内的各种路由以及针对每个路由的适当的下一跳(即,沿着路由中的每个路由的邻居网络设备)。路由信息62可以包括传入接口(iif)的列表和传出接口(oif)的列表,其指示在每个路由中ifc60中的哪些ifc60连接到邻居网络设备。在一些示例中,bgp进程70被配置为按照本公开的技术来生成并且输出路由通告,诸如具有multinexthop属性的bgp更新消息。可替代地或附加地,bgp进程70被配置为按照本公开的技术接收并且处理具有multinexthop属性的bgp更新消息,并且存储来自multinexthop属性的下一跳信息,诸如基于由multinexthop属性指定的其他信息。在一些示例中,诸如响应于bgp进程70确定所接收的multinexthop属性指示multinexthop属性用于下游分配(例如,基于如本文中所描述的具有值0的u位),bgp进程70可以将由接收的multinexthop属性指定的转发语义信息存储到转发语义状态64。当向路由信息62安装路由时和/或用于生成转发信息78中的路由解析时,bgp进程70可以随后引用转发语义状态64。在一些示例中,诸如响应于bgp进程70确定接收的multinexthop属性指示multinexthop属性用于上游分配(例如,基于具有值1的u位),bgp进程70被配置为将由接收的multinexthop属性指定的信息存储到路由信息62。路由协议还可以包括ldp进程72和rsvp-te进程74中的一个或多个,其可以用于ldp和/或rsvp-telsp的标签分配和资源预留。在一些情况下,按照本公开的技术,ldp进程72和rsvp-te进程74可以使用经由multinexthop属性获得的标签。在一些示例中,bgp进程70可以发送或接收具有指定要创建的路由表的multinexthop属性的上下文下一跳发现路由消息。例如,bgp进程70可以接收具有上下文下一跳发现路由消息,其包含指定要创建的转发表的名称的表名称属性子tlv的multinexthop属性。响应于接收到上下文下一跳发现路由消息,bgp进程70在路由信息62中创建指定的转发表(有时被称为路由表)。bgp进程70可以随后接收bgp更新消息,其具有指定下一跳要安装在转发表中的multinexthop属性。在一些示例中,bgp进程可以接收指定要在转发表中安装的标签和相关联的下一跳的私有标签路由消息。路由组件56分析路由信息62以生成安装在转发组件58中的转发信息78。转发组件58为网络设备50提供数据平面功能。尽管未在图2示出,但是转发组件58可以包括中央处理单元(cpu)、存储器和一个或多个可编程分组转发应用专用集成电路(asic)。转发信息78将网络目的地与ifc60的特定下一跳和对应端口相关联。在一些示例中,转发信息78可以存储与下一跳相关联的转发语义,诸如与下一跳、标签、下一跳属性等一起使用的转发动作。在一些示例中,转发信息78可以包括基于接收上下文下一跳发现路由消息而创建的转发表(例如,上下文-fib)。当网络设备50接收到去往网络目的地的网络流量时,通过网络设备并且基于转发信息来将转发动作应用于当向多个下一跳中的一个或多个下一跳转发网络流量时由网络设备接收并且去往网络目的地的网络流量。在一些示例中,网络流量可以经由诸如rsvp-telsp的lsp而被接收,并且网络流量的分组可以具有转发组件58可以按照转发信息78弹出的外部rsvp-te标签。转发信息78可以包括转发动作,其指令转发组件58在上下文fib中查找分组的内层标签以确定用于分组的下一跳以及任何相关联的转发动作。根据本公开的技术的一个示例方面,网络设备50可以接收路由通告消息,其包括用于上游分配的属性,该属性指定信息,其包括用于到达路由通告消息中的网络目的地的第二网络设备的多个下一跳;多个转发语义,其描述与多个下一跳中的每一个下一跳中的相应下一跳以及多个下一跳中的相应下一跳属性相关联的转发动作;以及字段,其指示该属性被提供用于下游分配还是上游分配。响应于bgp进程70确定该字段指示属性被提供用于上游分配,bgp进程70基于多个转发语义来将多个下一跳、转发动作和下一跳属性安装到由网络设备50存储的路由信息62和转发信息78。当向多个下一跳中的一个或多个下一跳转发网络流量时,转发组件78基于转发信息来将转发动作应用于由网络设备50接收并且去往网络目的地的网络流量。响应于bgp进程70确定该字段指示该属性被提供用于下游分配,bgp进程70基于第二网络设备的多个下一跳中的一个或多个下一跳和相关联的转发语义来选择要向其转发流量的第二网络设备。图2中所图示的网络设备50的体系架构仅出于示例目的而示出,并且不应该限于该体系架构。在其他示例中,网络设备50可以以多种方式配置。在一个示例中,控制单元54的功能中的一些功能可以分布在ifc60内。控制单元54可以仅以软件或硬件实现,或者可以被实现为软件、硬件或固件的组合。例如,控制单元54可以包括执行软件指令的一个或多个处理器。在那种情况下,控制单元54的各种软件模块可以包括存储在诸如计算机存储器或硬盘之类的计算机可读介质上的可执行指令。图3是图示了按照本公开的一个或多个方面的网络设备在处理具有multinexthop属性的路由通告消息时的示例操作的流程图。图3被出于示例的目的关于图1至图2的设备进行描述。在图3的示例中,网络设备(例如,图1的pe路由器20b,20c或图2的网络设备50)接收向网络目的地通告路由的路由通告消息(90),其中路由通告消息包括multinexthop属性。例如,multinexthop属性可以具有如图4所描述的格式。例如,路由通告消息可以是bgp更新消息,或者可以是与bgp以外的协议相关联的路由通告消息,诸如例如,路由信息协议(rip)。网络设备标识被包含在路由通告消息中的multinexthop属性(94)。例如,网络设备的控制平面可以配置有对协议的扩展,其允许网络设备识别和处理multinexthop属性。在图2的示例中,bgp进程70可以配置有用于multinexthop属性的bgp扩展,其允许bgp进程标识multinexthop属性。例如,网络设备可以使用与标识multinexthop属性相关联的存储的信息来确定multinexthop属性被包括在路由通告消息中。附加地或可替代地,网络设备可以包括指示从特定网络设备(例如,从路由反射器、控制器或bgp对等方)接收到的路由通告消息包括相应的multinexthop属性的信息。在一些实现方式中,网络设备可以标识路由通告消息中的指示路由通告消息包括一个或多个multinexthop属性的信息。例如,路由通告消息的发送者可以包括路由通告消息中的信息(例如,诸如属性类型码的位集合),其指示该路由通告消息包括multinexthop属性和/或指示与multinexthop属性相关联的路由通告消息的位集合的信息。网络设备还处理将相应的转发动作与相应的下一跳相关联并且描述下一跳的属性的一个或多个下一跳转发语义信息(96),例如,在如图5至图16所描述的包含在multinexthop属性中的tlv和子tlv中。例如,网络设备的bgp进程70可以解析multinexthop属性的tlv和子tlv来提取下一跳转发语义信息。在一些示例中,发送网络设备可以被配置为根据需要将multinexthop属性用于下游分配情形和上游分配情形两者。在这些示例中,multinexthop属性可以包括标志(例如,一个或多个位),其指示multinexthop属性是被发送用于下游分配还是上游分配。在这种情况下,接收网络设备当处理multinexthop属性时确定该位(在本示例中被称为u位)是否被设置(100)。如果设置了u位(100的“是”分支),则在一些实现方式中,这指示multinexthop属性用于上游分配,并且接收网络设备应当在路由信息中安装来自multinexthop属性的下一跳和转发语义,以及包含在子tlv中的任何下一跳属性。也就是说,始发网络设备可以使用multinexthop属性的上游分配功能来控制转发消息的安装,转发信息包括在接收网络设备处的多个下一跳和相关联的转发语义。当网络设备(例如,经由u位)确定multinexthop属性用于上游分配时,网络设备将指定的下一跳和转发语义以及任何下一跳属性安装到其存储的转发信息中(104)。例如,网络设备的bgp进程70可以标识multinexthop属性的下一跳转发语义tlv的转发动作字段中的数值,并且可以基于存储的信息来确定该数值与特定转发动作相对应。bgp进程70可以将转发动作的指示存储为与转发信息中的下一跳相关联。在一些示例中,当向相关联的下一跳转发分组时,bgp进程70可以标识由multinexthop属性和诸如push标签或swap标签的指令之类的转发动作所指定的标签。附加地或可替代地,bgp进程70可以标识multinexthop属性的字段的一个或多个其他值,诸如数值、字符值等中的一个或多个,并且可以确定一个或多个其他值与下一跳属性(诸如下一跳负载平衡百分比、下一跳带宽、要安装下一跳的路由表的名称等)相对应。如果未设置u位(100的“no”分支),这向接收网络设备指示multinexthop属性用于下游分配,并且通知接收网络设备哪些转发语义是用于在multinexthop属性中指定的协议下一跳(pnh)处的下一跳。因此,通过下游分配功能,当确定要安装多个路由、标签或下一跳中的哪一个时,接收网络设备能够考虑到协议下一跳的转发语义和任何下一跳属性。例如,网络设备(例如,pe路由器20c)可以从多个路由对等方(例如,pe路由器20a和pe路由器20b)接收向网络目的地(例如,接收方16)通告可达性的多个路由通告24、26,以及当确定将哪个路由和标签(如果multinexthop属性包括标签)安装在转发信息中并且用于转发去往网络目的地的流量时,网络设备(例如,网络设备的bgp进程70)可以考虑包含在multinexthop属性中的信息(102)。随后,网络设备基于转发信息来使用选定下一跳和标签来路由在网络设备处接收并且去往目的地的流量(108)。例如,与将流量路由到另一个下一跳(例如,基于转发语义的优先级排序)相比较,网络设备可以确定使用特定下一跳(例如,根据与特定下一跳相关联的pnh的转发语义)来路由流量与使得流量被更快地路由、与更少的分组丢失相关联等等。附加地或可替代地,当选择下一跳时,网络设备可以基于选择准则集合(诸如网络性能准则集合等)来将分数指派给多个下一跳,并且可以基于与下一跳相关联的分数来选择下一跳。在一些实现方式中,网络设备可以从在multinexthop属性中被通告的那些下一跳中选择下一跳,用于路由网络流量的一部分(例如,网络分组流、网络分组集合等)。例如,网络设备可以利用下一跳来路由网络流量的第一部分,并且可以利用另一下一跳来路由网络流量的第二部分。在一些实现方式中,网络设备可以基于确定为网络流量的该部分提供优先处理来选择网络流量的一部分。例如,网络设备可以基于与网络流量的该部分相关联的网络流量的类型、网络流量的该部分的来源、与网络流量的该部分相关联的服务参数的质量等来确定网络流量的该部分要接收优先处理。在这种情况下,与其他下一跳相关联的其他转发语义相比较,网络设备可以基于与提供优先处理的转发语义相关联的下一跳来利用下一跳。图3的步骤100和102具有指示这些步骤可选地由网络设备执行的虚线。在一些示例中,网络设备可以被配置为使用单独的bgp属性来用信号通知下游分配信息和上游分配信息。例如,网络设备可以使用multinexthop属性仅用于上游分配,并且可以使用不同的bgp属性用于下游标签分配(诸如例如,如在于2009年3月31日提交的题为“semanticinformationforlabelsinbordergatewayprotocol”的美国专利申请号14/675,318中所描述的标签描述符属性)。因此,在这种情况下,multinexthop属性可能不包括区分下游情况和上游情况的u位。在这个示例中,bgp进程可以从步骤96直接进行到步骤104,并且省略步骤100和102。图4至图16被提供以作为用于作为bgp属性的multinexthop属性的消息格式的示例。包括对于bgp或bgp以外的路由协议而言,其他示例消息格式也是可能的,并且可以不同于关于图4至图16所描述的格式。图4是图示了按照本公开的技术的用于multinexthopbgp属性300的示例格式的框图。multinexthop属性300包括位集合,其提供关于可以由bgp前缀标识的目的地网络设备的可达性的信息。multinexthopbgp属性300可以被包括在诸如bgp更新消息之类的路由协议通信中。multinexthopbgp属性被用来全部在单个消息中用信号通知多个下一跳以及多个下一跳之间的关系。在图1的示例中,multinexthopbgp属性300包括标志字段、属性类型码字段、长度字段、下一跳标志字段(“nh标志”)300、协议下一跳(pnh)长度字段、通告pnh地址字段306、若干个下一跳字段(“num-nexthops”)以及包含一个或多个下一跳转发语义类型长度值(tlv)的字段。协议下一跳(pnh)通常是指如按照诸如bgp的路由协议散播的沿着路由的下一跳。例如,即使启用bgp的路由器可能被一个或多个不启用bgp的路由器连接,启用bgp的路由器也可能被认为是用于另一启用bgp的路由器的pnh。pnh通常指定路由器的互联网协议(ip)地址。因而,接收路由器可以将被指定为pnh的路由器与源自指定路由器的路由相关联。相反,沿着给定路由的来自源路由器的fnh通常是指沿着该路由物理耦合到源路由器的邻居路由器。例如,用于路由的fnh可以为与路由器相关联的接口指定物理接口和媒体访问控制(mac)地址。在一些情况下,pnh可以是与始发multinexthop属性相同的设备,而在其他情况下,pnh可以是代表始发设备正在发送multinexthop属性的设备(例如,作为始发网络设备的路由反射器或控制器,其中pnh是pe路由器)。标志字段包括bgp路径属性标志。标志可以被设置为1101以指示可选传送扩展长度字段。属性类型代码字段包含属性类型,该属性类型将bgp属性标识为multinexthopbgp属性。用于multinexthopbgp属性的属性类型代码仍然要由iana指派。长度字段是两字节的字段,其说明属性值的长度,以字节为单位。nh标志字段302包含标志,例如,16位标志。在一些示例中,只定义了一个位,所有其他位都被保留。r:保留u:1意指multinexthopbgp属性正在被发送以用于上游分配,并且该属性描述接收bgp说话者处的期望转发状态。u:0意指为multinexthopbgp属性正在被发送用于下游分配,该属性描述通告bgp说话者处的转发状态。在nh标志字段302中设置的u位指示该multinexthopbgp属性描述在接收说话者处的上游分配的标签的转发语义应当是什么。nh标志中的所有其他位当前都是保留的,应当由发送者设置为0,并且被接收者忽略。u=0的multinexthop属性被称为“标签下一跳描述符”角色。通告下游分配的标签路由的bgp说话者可以将该属性添加到bgp路由更新中,以向接收说话者“描述”发送说话者处的标签的转发语义是什么。pnh长度字段以位为单位通告在相同bgp消息的next_hop或mp_reach_nlri属性中通告的pnh地址长度。pnh长度字段可以被用于对multinexthopbgp属性进行完整性检查。例如,pnh长度字段可以通告/32或/128作为地址长度。通告pnh地址字段标识将multinexthop属性添加到bgp更新路由通告的设备。当向通告的bgp路由添加multinexthop属性时,bgp说话者必须在通告pnh地址字段中放置与bgp说话者在相同bgp消息的next_hop属性或mp_reach_nlri属性内部的下一跳字段中放置的相同的下一跳地址。在重新通告该路由的同时改变pnh的任何说话者都应当在重新通告时移除multinexthop属性。然而,说话者可能将新multinexthop属性添加到重新通告;在这样做的同时,说话者必须在“通告pnh地址”字段中记录与在next_hop字段或mp_reach_nlri属性中使用的下一跳地址相同的下一跳地址。如果通告pnh字段中包含的下一跳地址与bgp消息的next_hop字段或mp_reach_nlri字段中包含的下一跳地址不相同,则接收multinexthop属性的说话者应当忽略该属性。如果通告pnh与其中携带multinexthop属性的bgp更新路由通告所指定的pnh不同,则接收网络设备被通知bgp更新路由通告已经遍历了不支持本文中所描述的multinexthop属性机制的节点。不支持multinexthop属性的接收路由器可以在bgp路由重新通告期间列出“self”的下一跳。如果下一跳要用于等成本多路径(ecmp)或快速重路由(frr),则在num-nexthops字段中指示的下一跳的数目的值将大于1。multinexthopbgp属性300还包括指定多个下一跳的信息和表达用于多个下一跳的相应转发语义的信息。例如,multinexthopbgp属性300包括包含下一跳转发语义tlv字段,其包含一个或多个下一跳转发语义tlv310。类型字段可以是与标识类型相关联的位的八位元的集合,长度字段可以是与标识值字段的长度相关联的位的八位元的集合,并且该值字段可以是提供信息的子tlv集合。例如,每个下一跳转发语义tlv310包括指定下一跳支路(leg)的转发动作(例如,具有相关联的下一跳的“fwdaction”)的位集合。由下一跳转发语义tlv定义的动作的示例类型如下。图5是进一步详细图示了用于图4的下一跳转发语义tlv310的示例格式的框图。下一跳转发语义tlv310的“下一跳支路”字段基于fwdaction字段312获取适当的值。fwdaction字段312表达用于在下一跳支路描述符tlv316的nhopattributes子tlv(图5中未示出)中表达的下一跳的转发语义。示例fwdaction字段值和含义如下:1转发2弹出并转发3交换4推送5弹出并查找在一些示例中,fwdaction1适用于ip路由和mpls路由两者,而fwdaction2至5仅适用于mpls路由。“转发”操作意指转发ip/mpls分组,并保持目的地fec(ip-dest-addr/mpls-label)值不变。对于ip路由,这是针对包含在bgp路径属性中的下一跳地址给出的转发动作:下一跳(代码3)或mp_reach_nlri(代码14)。对于mpls路由,当使用上游标签分配时,以下将更详细地解释该动作的使用。弹出并转发操作意指从分组中弹出(移除)标签并转发该分组。交换动作意指分组中把第一标签换成第二标签。推送意指将标签推送到分组上。“弹出并查找”动作可能导致从接收到的分组中弹出标签并执行mpls查找或上层(例如,ip层)查找,这取决于被弹出的标签是否是堆栈标签的底部。下一跳转发语义tlv310还包括下一跳支路描述符tlv316,其包括描述fwdaction与之相关联的下一跳支路的各种属性的信息。图6是进一步详细图示了用于图5的下一跳支路描述符tlv316的示例格式的框图。下一跳支路描述符tlv316包括nhopdescrtype字段320,其描述了由在相同bgp更新中通告的所有下一跳共享的转发语义。可以包括在下一跳支路描述符tlv316的nhopdescrtype字段320中的示例nhopdescrtype字段值以及对应的转发语义含义如下:1ipv4下一跳2ipv6下一跳3带标签的ip下一跳4具有poa标识符的ipv4下一跳5具有poa标识符的ipv6下一跳6表下一跳长度字段指示包括标志、相对权重和所有子tlv的下一跳描述符tlv的长度。相对权重字段322指定与下一跳相关联的相对优先次序,消息的接收者使用该相对优先次序学习包含在multinexthopbgp属性300中的多个下一跳之间的关系。例如,相对权重字段322指示用于转发信息库(fib)中的指定相对次序或优先的整数。接收具有multinexthop属性的bgp更新消息的网络设备(诸如网络设备50)将由multinexthop属性指定的所有下一跳分支存储到其转发信息78。基于在相对权重字段322中指定的整数,网络设备50应当在转发信息78中将具有最低相对权重的所有可用支路设置为“活动的”。具有较高相对权重的所有其他下一跳支路可以被设置为非活动的备选下一跳。如果存在具有该权重的多个下一跳分支,则网络设备50可以形成具有最低权重的所有下一跳的ecmp集合。如果所有活动下一跳都失灵,则转发组件58使用备选中的一个备选,诸如通过选择具有下一最低相对权重的一个或多个下一跳并且将所选定的一个或多个下一跳设置为活动的。各种示例下一跳属性子tlv324可以被包括在下一跳支路描述符tlv316中。下一跳属性子tlv324描述由在相同bgp更新中通告的所有下一跳共享的转发语义。下文在图7至图16对下一跳属性子tlv324的一些示例进行更详细地描述。示例子tlv类型和对应的含义如下:1ipv4地址2ipv6地址3带标签的下一跳4具有poa标识符的ipv4下一跳5具有poa标识符的ipv6下一跳6带宽7负载平衡因子8表名称9转发上下文名称10转发上下文路由目标图7是图示了作为下一跳属性子tlv324的一个示例的用于ipv4地址子tlv326的示例格式的框图。ipv4地址子tlv326指定下一跳网络设备的ipv4地址。该子tlv对于具有弹出并转发或转发的fwdaction的下一跳转发语义tlv是有效的。接收包含具有ipv4地址子tlv326的multinexthop属性的bgp更新消息的网络设备50将下一跳的ipv4地址和相关联的转发动作存储到其存储的路由信息62和转发信息78,用于在bgp更新消息中接收的nlri的。因此,<ipv4addr,fwdaction>的组合被用作用于在更新中接收的nlri的nexthop。在数据平面中,转发组件58将直接接口或隧道用于指定的ipv4地址,用于将分组转发到作为下一跳的该ipv4地址。图8是图示了作为下一跳属性子tlv324的一个示例的用于ipv6地址子tlv330的示例格式的框图。ipv6地址子tlv330指定ipv6地址。ipv6地址属性子tlv对于具有弹出并转发或转发的fwdaction的下一跳转发语义tlv将是有效的。接收具有ipv6地址子tlv330的multinexthop属性的网络设备50将下一跳的ipv6地址和相关联的转发动作存储到其存储的路由信息62和转发信息78,用于在bgp更新消息中接收的nlri的。<ipv6addr,fwdaction>的组合因此被用作用于在更新中接收的nlri的nexthop。在数据平面中,转发组件58将网络设备50的直接接口或隧道用于指定的ipv6地址,用于将分组转发到作为下一跳的该ipv6地址。图9是图示了作为下一跳属性子tlv324的一个示例的用于带标签的ip下一跳属性子tlv334的示例格式的框图。“带标签的下一跳”属性子tlv对于具有交换或推送的fwdaction的下一跳转发语义tlv将是有效的。带标签的ip下一跳属性子tlv334指定要向其转发分组的下一跳的ip地址,并且带标签的ip下一跳属性子tlv334还指定标签字段336中的标签以按照相关联的转发动作进行交换或推送。例如,标签可以是mpls标签,例如,按照e.rosen的“usingbgptobindmplslabelstoaddressprefixes”,互联网工程任务组互联网草案,2016年9月16日,draft-ietf-mpls-rfc3107bis-00(“rfc3107bis”)。接收具有带标签的ip下一跳属性子tlv334的multinexthop属性的网络设备50在其路由信息62和转发信息78中存储下一跳的ip地址、相关联的mpls标签以及相关联的转发动作(交换或推送)。随后,网络设备可以针对所接收的分组(该分组去往由multinexthop属性指定的目的地)来使用mpls标签执行指定的转发动作,并且将具有mpls标签的分组转发出网络设备50的接口以朝向下一跳的ip地址转发。图10是图示了用于具有“附接点标识符”属性子tlv340的ipv4地址的示例格式的框图。子tlv340具有指定ipv4地址的ipv4地址字段和指定附接点(poa)标识符的poa标识符字段342。具有“附接点标识符”属性子tlv340的ipv4地址对于具有转发的fwdaction的下一跳转发语义tlv310将是有效的。poa标识符标识由ipv4地址标识的节点处的下一跳的附接点。poa标识符的值对通告节点而言具有本地重要性。例如,poa标识符可以标识该节点与下一跳之间的链路的节点上的未编号接口的链路id。接收具有带有“附着点标识符”属性子tlv340的ipv4地址的multinexthop属性的网络设备将使用从转发平面中的“附接点标识符”属性子tlv340获得的poa标识符来选择将附接点连接到发送节点的正确接口/隧道,并且使用选定接口将分组转发到ipv4地址和附接点标识符。这可以被认为是将分组放置在隧道上,该隧道在远程节点处的指定的poa上终止。在单机架中的多个虚拟节点的示例中,附接点可以是fpc标识符(“fpc-id”),并且发送节点和接收节点是单机架中的虚拟节点。图11是图示了用于具有“附接点标识符”属性子tlv346的ipv6地址的示例格式的框图。子tlv346包括指定ipv6地址的ipv6地址字段以及指定附接点(poa)标识符的poa标识符字段348。具有“附接点标识符”属性子tlv346的ipv6地址对于具有转发的fwdaction的下一跳转发语义tlv将是有效的。poa标识符标识由ipv6地址标识的节点处的下一跳的附接点。poa标识符的值对通告节点而言具有本地重要性。例如,poa标识符可以标识节点上的未编号接口的链路id。接收具有带有“附接点标识符”属性子tlv346的ipv6地址的multinexthop属性的网络设备将使用从转发平面中的“附接点标识符”属性子tlv346获得的poa标识符来选择将附接点连接到发送节点的正确接口/隧道,并且使用选定接口将分组转发到ipv6地址和附接点标识符。这可以被认为是将分组放置在隧道上,该隧道在远程节点处的指定的poa上终止。在单机架中的多个虚拟节点的示例中,附接点可以是fpc-id,并且发送节点和接收节点是单机架中的虚拟节点。图12是图示了作为下一跳属性子tlv324的一个示例的用于可用带宽子tlv350的示例格式的框图。可用带宽子tlv350指定与由tlv所指示的下一跳相关联的可用带宽量。“带宽”属性子tlv对于具有转发、交换或推送的fwdaction的下一跳转发语义tlv将是有效的。在一些示例中,链路的可用带宽可以被表达为ieee浮点格式中的4个八位元,单位是每秒字节数。在一些示例中,该子tlv在具有被重置为(0)的u位(即,用于下游分配)的multinexthop属性中将是有效的。在这些示例中,接收具有可用带宽子tlv350的multinexthop属性的网络设备50将与指定的下一跳相关联的指定的可用带宽量存储到转发语义状态64。在一些示例中,诸如对于上游分配,可用带宽子tlv350可以被接收者用来计算当跨多个不同的下一跳描述符tlv对流量进行负载平衡时使用的隐式平衡百分比。在这些示例中,接收具有可用带宽子tlv350的multinexthop属性的网络设备50可以将与指定的下一跳相关联的指定的可用带宽量安装到路由信息62,并且反过来,路由组件56可以对转发组件58的转发信息78进行编程以包括这个信息。图13是图示了作为下一跳属性子tlv324的一个示例的用于负载平衡因子属性子tlv354的示例格式的框图。负载平衡因子属性子tlv354指定与由tlv指示的下一跳相关联的负载平衡加权(例如,百分比)。“负载平衡因子”属性子tlv对于具有转发、交换或推送的fwdaction的下一跳转发语义tlv将是有效的。由于这些下一跳描述符tlv支路上的负载平衡不等,所以这是发送者所请求的显式“平衡百分比”。该平衡百分比将覆盖使用“带宽”属性子tlv计算的隐式平衡百分比。也就是说,如果指定了“可用带宽”属性子tlv和“负载平衡因子”属性子tlv,则负载平衡因子优先。在下游分配情况下,接收具有负载平衡因子属性子tlv354的multinexthop属性的网络设备50将由负载平衡因子属性子tlv354指定的信息存储到转发语义状态64,并且将使用由负载平衡因子属性子tlv354指定的信息作为用于从多个下一跳中选择到目的地的下一跳的信息。在上游分配情况下,接收具有负载平衡因子属性子tlv354的multinexthop属性的网络设备50将跨已经定义了负载平衡因子属性的下一跳进行不等成本多路径(ucmp)负载平衡。例如,网络设备50将在路由信息62和转发信息78中安装具有用于下一跳的ip地址、负载平衡因子加权以及用于下一跳的转发动作的条目。在接收到去往目的地的网络流量时,网络设备50将按照负载平衡因子加权和转发动作朝向用于下一跳的ip地址转发分组。图14是图示了作为下一跳属性子tlv324的一个示例的用于表名称属性子tlv360的示例格式的框图。表名称属性子tlv对于下一跳描述符类型6“table-nexthop”和具有弹出并查找的fwdaction的下一跳转发语义tlv将是有效的。在上游分配情况下,接收具有表名称属性子tlv360的multinexthop属性的网络设备50将(例如,在路由信息62和/或转发信息78中)创建具有在“tablename”字段326中指定的表名称的转发表。当mplsvpn-uni地址族被用作访问和编程网络设备上的mplsfib的api时,表名称属性子tlv360是适用的。在一个示例中,应用(其可以是,例如,网络控制器)可以指令网络设备利用名称“foo.inet.0”创建转发表,然后发送用于下一跳指向名称“foo.inet.0”的标签“l1”的路由。这将意指l1是标签堆栈的外层标签,到达标签内的流量是ipv4流量。应用可以安装指向foo.inet6.0的不同的标签l2。在这些示例中,标签l1和l2可以被认为是上下文标签,并且接收网络设备将弹出外层上下文标签并且在转发表中查找标签堆栈的下一标签,该上下文标签指向该下一标签作为下一跳。在一些情况下,并非所有的网络设备平台都有能力进行这种转发。无法安装相关联的转发状态的网络设备可能会将路由保持在“不可用状态”,其暗示它们不支持所请求的api。作为一个示例,表名称属性子tlv360可以由单机架路由器内的虚拟节点用于上游分配。在下游分配情况下,接收具有表名称属性子tlv360的multinexthop属性的网络设备50可以将来自子tlv360的信息存储到转发语义状态64。该信息将告知接收网络设备50该标签所指向的转发表,例如,这对于网络的可视化可能是有用的。图15是图示了作为下一跳属性子tlv324的一个示例的用于转发上下文名称属性子tlv364的示例格式的框图。转发上下文名称属性子tlv364对于下一跳描述符类型6“table-nexthop”和具有弹出并查找的fwdaction的下一跳转发语义tlv将是有效的。在上游分配情况下,接收具有转发上下文名称属性子tlv364的multinexthop属性的网络设备50将由multinexthop属性指定的下一跳和转发语义存储到由转发上下文名称指定的网络设备50的转发信息库。如在关于图14所描述的示例中那样,如果应用将使用相同的标签l1来指向路由实例“foo”,并且适合于ipv4类型的流量和ipv6类型的流量,则应用可以使用“fwd-context-name”而非具体的“route-table-name”向网络设备发送路由。这样,在foo.inet.0、foo.inet6.0或fooiso.0的上下文中,根据流量类型,相同的标签l1可以被用来转发到达标签l1下方的ipv4、ipv6或国际标准化组织(iso)流量。在下游分配情况下,接收具有转发上下文名称属性子tlv364的multinexthop属性的网络设备50可以将来自子tlv364的信息存储到转发语义状态64。该信息将告知接收网络设备50该标签指向的转发上下文名称,例如,其对于网络的可视化可能是有用的。图16是图示了作为下一跳属性子tlv324的一个示例的用于转发上下文路由区分符属性子tlv368的示例格式的框图。“标识转发上下文的路由区分符”属性子tlv324对于下一跳描述符类型6“table-nexthop”和具有弹出并查找的fwdaction的下一跳转发语义tlv将是有效的。“标识转发上下文的路由区分符”属性子tlv324标识用于接收网络设备使用来转发上下文的路由实例。例如,接收具有转发上下文路由区分符属性子tlv368的multinexthop属性的网络设备50将弹出外层标签并且在网络设备50的私有转发信息库中查找内层标签,该内层标签与路由区分符相关联。在下游分配情况下,接收具有转发上下文名称属性子tlv368的multinexthop属性的网络设备50可以将来自子tlv368的信息存储到转发语义状态64。该信息将告知接收网络设备50该标签指向的转发上下文名称,例如,其对于网络的可视化可能是有用的。本公开的技术可以在一个或多个使用情况中使用。以下描述了这些技术的使用情况的几个示例。作为一个示例,一般而言,对于未带标签的服务路由或带标签的服务路由,出口节点可以使用该属性来通告具有期望ecmp/ucmp负载平衡或fib行为中优先次序的多个“转发出口端点”。作为另一示例,在下游标签分配情况下,接收说话者可以通过以下方式中的一种或多种方式从下游分配的信息中受益,例如:1.对于前缀,具有启用frr的下一跳集合的标签可以优先于具有不提供frr的下一跳集合的其他标签。2.对于前缀,指向10g下一跳的标签可以优先于指向1g下一跳的另一标签。3.如果所通告的标签集合具有相同的转发语义(例如,每个前缀标签情况的vpn),则它们可以被聚合。作为另一示例,在上游标签分配情况下,接收说话者的转发状态可以由通告说话者控制,从而使得标准化应用编程接口(api)能够在接收节点处对期望的mpls转发状态进行编程。下文对用于用信号通知上游标签分配所需的bgp协议扩展的进一步细节进行描述。以下描述示例错误处理过程。当u位被重置(设置为值0)时,该属性被用来考核由bgp对等方所通告的标签,即,提供与标签有关的上下文信息。如果属性中的值在语法上可解析,但是在语义上不是有效的,那么接收说话者应当优雅地处理错误,而不会拆除bgp会话。当u位被设置(设置为值1)时,该属性被用来指定接收bgp对等方处的转发动作。如果属性中的值在语法上可解析,但是在语义上不是有效的,那么接收说话者应当通过保持路由隐藏而不对其进行动作来优雅地处理错误,并且不应当拆除bgp会话。本公开还描述了用于使用新bgp族来创建虚拟私有mpls转发层的技术,并且给出了关于如何使用这些私有转发层的示例使用情况。如上文所描述的,新bgp族可以被用于发信号通知上游分配,其包括用于上游标签分配。核心网(例如,核心网10)中的mpls转发层是共享的资源。存储在该mpls转发层中的节点处的mplsfib包含在该节点处动态分配且具有本地重要性的标签。对于如上游标签分配之类的一些使用情况,按照本公开的技术,诸如pe路由器20之类的网络设备被配置为在该共享mpls转发层上创建虚拟私有mpls转发层。这允许诸如pe路由器20之类的网络设备在参与该私有转发层的节点处的私有fib中安装确定性私有标签值,同时保留底层共享的“公共”mpls转发层的“本地重要”性质。本公开描述了类似于其中fec是mpls标签而非ip前缀的bgpvpn的机制。本发明定义了两个新地址族:(afi:mpls,safi:vpn-unicast),(afi:mpls,safi:unicast)以及相关联的信令机制。参与私有mplsfib层的bgp说话者可以创建“mpls转发上下文”fib的实例,其使用“上下文协议下一跳”来标识。bgp说话者可以使用新bgp地址族将上下文标签与上下文协议下一跳(cpnh)一起通告给其他bgp说话者。提供者的核心网(诸如图1的核心网10)由网络中的所有租户共享的全局域(p节点和pe节点中的默认转发表)组成,并且还可以包含多个私有用户域(例如,vrf路由表)。全局mpls转发层(“fib层”)可以被视为所有默认mpls转发表的集体。该全局mplsfib层包含对每个节点都具有本地重要性的标签。“标签的本地重要性”使节点能够自由地参与mpls转发,其中在转发硬件中无论什么标签范围该节点都可以支持。在一些使用情况下,使用mpls网络的一些应用可以受益于mpls网络的“静态标签”视图。在其他使用情况下,由本公开的技术提供的进行上游标签分配的标准机制可能是有益的。本公开的技术允许全局mplsfib层保持完整,并且在全局mplsfib层的顶部上构建私有mplsfib层以实现这些要求。如可能对该特定应用有用的私有mpls-fib然后可以被应用使用。私有mpls-fib只需要在可预测的标签值(外部标签分配)被期望的网络中的那些节点处创建。在一些示例中,这可以是例如需要充当需要镜像服务标签的“迂回节点”或“服务转发助手”(sfh)的p路由器。在一些示例中,在网络中的节点上提供这些私有mpls-fib可以是可以与不支持本公开中所描述的特征的节点共存的渐进进程。例如,如下文进一步详细所描述的,这些私有mpls-fib可以通过现的有共享mpls网络隧道或‘私有’上下文接口使用上下文标签中的一个或多个上下文标签拼接在一起以形成“私有mpls-fib层”。然后,应用可以将具有期望标签值的路由安装在具有期望的转发语义的该私有mplsfib层的转发上下文中。以下描述了用于私有mpls转发层的示例体系架构。当配置有私有mpls转发层的网络节点接收到与私有标签一起到达的mpls流量时,该节点借助于到达附接fib的‘私有接口’的mpls流量或到达具有“上下文标签”的共享接口的mpls流量来在正确的私有mpls-fib中查找mpls流量。上下文标签是安装在转发语义为“在私有mpls-fib中弹出并查找”的全局mpls-fib中的具有本地重要性的非保留mpls标签。为了将数据流量发送到该私有mplsfib层,具有利用私有mplsfib层的应用的发送节点应当使用由节点通告的“上下文标签”或由应用拥有的“私有接口”作为句柄,以连接到私有mplsfib层/mpls平面。上下文标签是发送节点的应用需要从网络中学习使用的唯一标签值,以使用私有fib层。应用可以确定要在私有mpls-fib中编程的标签的值。在一些示例中,网络中的节点可以被分组为期望的角色(例如,服务边缘节点或机架顶部(tor)边缘节点),并且外部分配器可以通过附接适当的路由目标将路由安装引导到这些特定节点。例如,pe路由器以及将自己的标签镜像到pe路由器的流量转发助手(sfh)可以位于单独的vpn中,并且路由目标约束可以被用来禁止镜像的服务标签传播到不需要镜像的其他节点。在一些示例中,外部分配器可以是中央控制器,诸如软件定义的联网控制器。在一些示例中,例如,私有mpls-fib可以包含充当传输层标识符的标签,其与回路接口或网络中的p节点的对等接口相对应。这些标签的比例(数量)可能与参与私有fib层的服务端点和传输迂回点的数目成比例。在一些示例中,服务转发助手节点的私有mpls-fib包含用作服务层路由的标签,其将服务层带标签的流量重定向到服务边缘pe路由器。可以在这些私有mpls-fib处执行负载平衡和快速重路由。即使是针对使用多标签堆栈注入的流量,也可以执行快速重路由以防止链路或节点故障。以下定义了本公开中使用的某些术语。lsr:标签交换路由器。p路由器:提供商核心路由器,还被称为lsr。迂回路由器:在流量工程路径中用作宽松跳的p路由器。pe路由器:提供商边缘路由器,其可以托管服务(例如,互联网服务、l3vpn服务等)。se路由器:服务边缘路由器。与pe相同。sfh路由器:服务转发助手。节点使用由se镜像的服务路由来帮助se路由器进行服务流量转发。mplsfib:mpls转发表。全局mplsfib:共享的接口所连接的全局mpls转发表。私有mplsfib:私有接口所连接的私有mpls转发表。私有mplsfib层:网络中的私有mplsfib组,其经由上下文标签连接在一起。上下文标签:指向私有mplsfib的具有本地重要性的非保留标签。上下文下一跳ip地址(cpnh):标识“私有mplsfib层”的ip地址。路由区分符和cpnh(rd:cpnh)的组合标识节点处的私有mplsfib。全局下一跳ip地址(gpnh):全局协议下一跳地址,例如,用作传输隧道端点的网络设备的回路地址。本公开阐述了新bgp族、路由和编码作为用于启用本文中所描述的私有转发层功能的示例机制。尽管出于示例的目的而依据bgp进行了描述,但是在其他示例中,可以使用其他协议来用信号通知私有转发层。本节描述了由本公开定义的示例bgp路由构造。本发明定义了新afi:“mpls”和两个新的bgp地址族。第一示例地址族在本文中被称为:“afi:mpls,safi:vpn-unicast”。该地址族用于将私有mplsfib中的标签通告给使用公共网络接口连接的路由器。除了标识私有mpls-fib所属的私有fib层(vpn)的路由区分符之外,该地址族还将被用于通告上下文标签fib,接收路由器可以用其访问私有mpls。当承载该地址族的网络流量到达的接口是终止于全局mplsfib中的共享的公共接口时,需要上下文标签。安装在全局mpls-fib中的上下文标签指向私有mpls-fib。第二示例地址族在本文中被称为:“afi:mpls,safi:unicast”。该地址族被用来将私有mpls-fib中的标签通告给使用私有网络接口连接的路由器。由于该接口是私有的,并且直接终止于私有mpls-fib中,所以不需要上下文标签来访问私有mpls-fib。根据示例,定义以下类型的路由,以供被配置为使用如本文中所描述的私有转发层的网络节点使用。在一些示例中,上下文下一跳发现路由由具有用于私有mpls-fib层的转发上下文的每个说话者始发。nlri:type1:rd:上下文下一跳ip地址。上下文下一跳发现路由包括以下路由属性:a.本文中所描述的多下一跳属性包含转发语义指令以:将上下文标签朝向全局协议下一跳地址推送;以及b.路由区分符扩展社区,其标识私有fib层。上下文下一跳发现路由由具有用于私有mpls-fib层的转发上下文的每个说话者(网络设备)始发。路由标识符和上下文下一跳(rd:上下文下一跳)的组合唯一标识始发说话者。上下文下一跳地址标识私有fib层。通过共享接口(重新)通告该路由的说话者应当分配转发语义为“弹出并在私有mplsfib中查找”的被称为上下文标签的非保留标签。在一些示例中,在附接到上下文下一跳发现路由的multinexthop属性中该标签被通告。在一些示例中,网络设备被配置为发送和接收“私有标签”路由。发送网络设备使用私有标签路由将私有mpls标签安装到接收网络设备的私有fib,以用于使用私有fib层转发流量。私有标签路由具有nlri:type2:rd:私有标签值:tunnelendpointipaddress。私有标签值:(上游分配的)标签值。tunnelendpointipaddress:该私有标签指向的隧道端点(环回地址)的可选ip地址。该路由上的属性可以包括:c.多下一跳属性,其包含“转发到上下文下一跳ip地址”;以及d.路由目标扩展社区,其标识私有fib层。安装在私有mplsfib中的私有标签路由可以具有使用该fib层(vpn)的应用所需的任何转发语义。该标签在“私有标签路由通告”中被通告给其他说话者,该“私有标签路由通告”包含如本文中所描述的多下一跳属性,其包含执行该操作的指令:转发到上下文下一跳地址。接收该路由的网络设备将递归解析上下文下一跳发现路由,以确定当转发流量时要推送的标签堆栈,以便mpls分组到达该私有mplsfib。附接到路由的路由区分符是标识私有mplsfib层(vpn)的路由区分符。私有标签路由解析属于同一vpn的上下文下一跳路由。图17是图示了包括具有形成全局转发层的相应全局fib410a至410d(“全局fib410”)和形成私有转发层的相应私有上下文fib412a至412d(“私有上下文fib412”)的网络设备406a至406e(“网络设备406”)的示例系统400的框图。被配置为用于特定私有转发层配置的网络设备406中的每个网络设备建立私有上下文fib412,并且通告指定(由cpnh标识的)私有转发层的上下文下一跳发现路由消息,以及对于该特定网络设备406而言是唯一的路由区分符。网络设备通过配置接收cpnh和路由区分符(例如,经由配置消息419从网络管理员或控制器414)。例如,网络设备406d向网络设备406c发送上下文下一跳发现路由消息414,以指示网络设备406d正在参与私有fib层。上下文下一跳发现路由消息414包含具有向全局协议下一跳地址(隧道端点的环回地址)推送标签的转发语义的multinexthop属性,其中标签是上下文标签(例如,cl1),由网络设备406d分配的本地重要标签。因此,网络设备406d使用gpnh的协议下一跳来通告(rd:cpnh)。网络设备406交换私有标签路由以编程私有上下文fib,诸如将应用标签al1和相关联的下一跳(例如,服务端点)编程到私有上下文fib中。当接收节点网络设备406c想要将分组发送到该转发上下文中时,网络设备406c具有cpnh的标识符并且知道它可以到达具有上下文标签cl1的cpnh和gpnh的pnh。网络设备406c将标签栈l1、cl1、al1推送到分组418上,其中标签al1是应用标签,并且将承载标签堆栈的分组输出到隧道402c。标签l1使分组到达网络设备406d,并且网络设备406d在全局fib410d中查找l1。全局fib410具有转发条目,其具有转发语义,以弹出l1和查找cl1,并且cl1是到私有上下文fib412d的表下一跳。网络设备406d弹出标签cl1并且在私有上下文fib412d中查找内层应用标签al1。al1可能具有应用所需要的任何转发语义。例如,al1可以指向网络中的任何节点,诸如例如,服务端点(图17中未示出)或vrf。这样,应用可以在私有上下文fib412d中安装路由,并且标签al1在网络中的每个节点处指向网络中的相同资源。私有转发层因此与全局转发层解耦,并且提供增加的可伸缩性。如果网络设备406中的任一个网络设备通告服务路由,则网络设备406可以将服务路由绑定到cpnh而非gpnh,并且任何网络设备406只需要通过使用cpnh来知道其进入私有转发层的最接近点。也就是说,服务路由将cpnh列为协议下一跳,并且可以被用来经由私有转发层到达服务端点。在一些示例中,网络设备406可以具有多个不同的私有转发层。例如,网络设备406a包括与第一私有转发层相关联的私有上下文fib412a以及与第二私有转发层相关联的私有上下文fib415a。在图17的示例中,仅网络设备406a和406b参与第二私有转发层,并且第一私有转发层通过隧道402b连接,而第二私有转发层通过隧道403连接。网络设备406e不参与这两个私有转发层中的任一个,因此网络设备406e不发送任何上下文下一跳发现路由消息或私有路由消息。图18是图示了按照本公开的一个或多个方面的网络设备在使用私有上下文转发层时的示例操作的流程图。图18解释了每个网络设备如何使用先前章节中所定义的某些转发构造和路由格式。图18的入口网络设备和出口网络设备可以是网络设备,诸如例如,图2的网络设备50、图17的网络设备406、或图21至图22的单机架路由器1012。在一些示例中,控制器(诸如图17的控制器414)如通过发送消息419向配置上下文pnh和相关联的上下文转发表(450)的网络隧道402的出口网络设备发送消息。上下文下一跳地址cpnh是标识私有fib层的ip地址。出口网络设备在与从控制器(452)接收的cpnh相关联的私有fib层中创建上下文转发表(例如,图17的私有上下文fib412),并且在其全局mplsfib中分配并且安装指向上下文转发表的上下文标签路由(454)。例如,bgp进程70可以创建上下文转发表。在一些示例中,这触发出口节点的bgp进程70向其bgp对等方通告上下文下一跳发现路由(458)(例如,消息414)。例如,上下文下一跳发现路由可以指定路由区分符和上下文下一跳地址cpnh(rd:cpnh),其中上下文下一跳地址cpnh是标识私有fib层的ip地址。被配置为参与私有mplsfib层的网络设备中的每个网络设备通告相同的上下文下一跳地址,但是具有唯一的rd。上下文下一跳发现路由消息具有带有“向gpnh推送<上下文标签>”语义的multinexthop属性,其中gpnh是网络具有传送隧道(例如,ldp、rsvp)的出口节点处的回送地址。响应于接收到上下文下一跳发现路由消息(460),隧道402的入口网络设备的bgp进程70使用在该路由消息上接收到的“cpnh→gpnh,上下文标签”信息来解析私有标签的cpnh,并且更新其转发状态(例如,转发信息78、私有上下文fib412)以反映私有标签的cpnh(462)。也就是说,上下文下一跳发现路由消息的到达/改变可以导致bgp进程70执行上下文表的私有标签路由的(重新)解析。出口网络设备的bgp进程70还始发指定作为目的地的私有标签私有标签路由消息416、用于私有标签的出口的路由区分符、与私有mpls转发层(即,私有fib层)相关联的上下文协议下一跳、以及用于私有标签的下一跳(463)。在一些示例中,响应于控制器将私有标签路由添加到出口网络设备(451)的上下文转发表,出口网络设备的bgp进程70可以发送私有标签路由。例如,私有标签路由可以用于rd:l1:sep1,其中sep1是节点处的服务端点ip地址,l1是标识服务端点的私有标签值。该私有标签路由具有cpnh的协议下一跳。发送网络设备使用私有标签路由将私有mpls标签安装到接收网络设备的私有fib,以供使用私有fib层转发流量。可以变化前缀中的rd:l1:sep值以表示不同的出口网络设备、或到相同的sep的不同的隧道、或相同的出口网络设备处的不同的sep。由控制器执行的步骤450和451被指示为可选的。在一些示例中,上下文pnh、上下文转发表和私有标签路由可以通过配置(例如,通过代理或管理员)而被添加。在隧道402的入口网络设备处,入口网络设备接收私有标签路由消息(464)。由私有标签路由消息指定的服务路由借助于具有rd:sep1作为协议下一跳的multi-nexthop属性绑定到由出口网络设备发信号通知的这些隧道。使用递归解析(通过gpnh的通过cpnh的rd:sep1),入口网络设备的bgp进程70确定标签堆栈以推送到达rd:sep1(466),并且将标签堆栈存储到上下文转发表(468)。上下文转发表可能已经存在,例如,通过配置。入口网络设备随后接收具有私有标签的网络分组,或者始发具有私有标签(例如,sep)的网络分组(470),并且将上下文标签栈推送到分组上(使用具有标签堆栈的mpls头来封装分组)并且转发承载上下文标签栈和内部私有标签的网络分组(472)。接收网络分组不是将标签堆栈存储到上下文转发表的结果,但是图18描述了在将标签堆栈存储到上下文转发表之后接收网络分组时如何进行操作。出口节点接收具有上下文标签堆栈和内层私有标签的网络分组,并且假设传输标签已经弹出倒数第二跳,则出口弹出上下文标签,在上下文转发表中查找私有标签(474)。基于查找,上下文转发表指令出口网络设备弹出私有标签并且将有效负载转发到由私有标签标识的资源。出口网络设备弹出私有标签并且转发有效负载(476)。对于私有fib层中的lsr,用nexthop-self重新通告接收的私有标签路由rd:l1:sep1,在私有fib中没有分配新标签。相同的标签l1通过“转发到cpnh”操作安装在私有mpls-fib中,使得l1的值在分组遍历私有mpls层中的多个节点时不发生改变。下文对各种示例使用情况进行描述。一个示例是服务转发助手(sfh)使用情况。在本示例中,服务节点可以将包含在其fib中的mpls标签镜像到sfh节点处的私有上下文转发表中。为此,服务节点将具有rd:l1的私有标签路由通告给sfh节点。私有标签路由通过具有一个或多个支路的multi-nexthop属性被通告,该一个或多个支路具有“转发到sepx”语义,其中sepx是服务节点处的许多服务端点中的一个服务端点。在一些示例中,这可以使得服务边缘虚拟节点能够将本地mpls转发状态镜像到远程服务转发助手虚拟节点,以便在虚拟化环境中进行最优转发,如下文进一步详细描述的,诸如用于发信号通知最佳结构接口。在一些示例中,本公开的技术可以提供使用静态可预测的标签堆栈通过特定迂回宽松跳节点来引导mpls流量的入口能力。网络设备唯一需要知道的是进入私有转发层最近的进入点是什么,以及用于私有转发层的cpnh是什么。网络设备只需要从全局标签空间分配一个标签,然后就可以访问私有转发层的整个标签空间。私有转发层提供可预测的标签堆栈,因为它们不具有本地重要性,并且如全局fib410的全局转发层中那样被动态标记。可预测的静态标签堆栈不是从全局转发层获取,而是从私有转发层获取。在一些示例中,本公开的技术可以被用来使用标准bgp族作为应用编程接口(api)来提供可预测的(外部分配器确定的)标签值。这将避免用于外部分配器(控制器软件)的设备特定api依赖关系,反之亦然。也就是说,基于这种技术的api与设备无关,并且不受不同设备制造商所制造的网络设备上可用的特定标签地址空间的限制。例如,外部分配器可以是控制器414。控制器414可以使用本文中所定义的bgp地址族作为api。在一些示例中,控制器414可以将私有标签路由发送到网络设备406,以将路由编程到用于一个或多个私有转发层的私有上下文fibs412、415。作为另一示例,这些技术可以借助于使用分离的mpls转发上下文来在边缘节点处提供标签诱骗(label-spoofing)保护。唯一使用的通用资源是从一个网络设备到另一网络设备的传送隧道。在私有fib内是由给定应用安装的标签,并且网络设备406不能在私有fib之间注入标签或路由。本公开的技术可以在不同应用之间提供添加的安全性,并且可以避免标签诱骗安全风险。作为另一示例,例如,本公开的技术可以允许私有mpls标签的使用跨多个域/多个自治系统(as)上散布,并且可以与如as间vpn选项c之类的现有技术无缝地工作。本公开的技术不需要将新bgp地址族部署在网络中的所有网络设备上;相反,在一些情况下,只有某些网络设备可以被配置为使用如本文中所描述的私有转发层,而其他网络设备(例如,网络设备406e)可以不使用私有转发层,但可以将流量转发到确实使用私有转发层的网络设备,此处,那些经配置的网络设备可以将流量注入私有转发层。图19是图示了描绘使用通过将服务路由绑定到私有mpls平面来缩放的服务路由的网络设备的系统480的框图。系统480包括传送路由器r5、r3、r1,出口pe路由器pe1和入口pe路由器pe2,其中如下部分中的箭头所示,网络流量从pe2流向pe1。具有有效负载的网络通信的分组使用私有标签来转发,其允许分组进入上下文fib标签空间并且通过传送路由器r5、r3、r1使用上下文标签l4和l3。路由器r1,r3和r5通告上下文下一跳发现路由(在图19中被称为“类型1”路由)和私有标签路由(在图19中被称为“类型2”路由)。路由表482图示了存储在路由器r3的各种路由和转发表中的转发状态。路由器存储全局mplsfibmpls.0,其存储本地分配的标签;mpls上下文fiba.mpls.0,其存储上下文标签。全局mplsfib包含指向mpls上下文fib的路由。路由器使用上下文pnh“cpnh1”来标识与a.mpls.0关联的私有fib层。这可以考虑到通过将流量路由绑定到私有mpls平面缩放的服务路由。如图19的顶部的长箭头所描绘的,路由器使用“上下文pnh,私有标签”而非“pe-lo0,pe本地标签”来标识服务的(单播/任播)pop。路由器可以为每个‘应用’创建私有mpls转发上下文。路由器使用本文中所描述的bgp过程来“拼接”这些mpls转发上下文以创建私有fib层(每个应用mpls平面)。私有fib层由“cpnh”标识。应用的标签分配器(例如,控制器)只能在mpls平面的边缘与网络交互,以安装其私有标签条目。网络在整个私有mpls平面上传播应用私有标签。这可以允许pe路由器停止服务并且投入新pe路由器服务,并且只需要更新私有标签路由,其中mpls层中的节点(r1,r3,r5)可以接收并且解析cpnh。图20是图示了其中具有回送地址lo0的路由器具有存储本地分配的标签的全局mplsfibmpls.0和存储从离盒标签分配器(off-boxlabelallocator)(例如,控制器)接收的上下文标签的mpls上下文fiba.mpls.0的系统490的框图。图20图示了存储在mpls.0和a.mpls.0中的每一个中的转发状态。标签l3是指向a.mpls.0的上下文标签。a.mpls.0包含具有vrf1或nhop1的下一跳的私有标签。路由器通告上下文下一跳发现路由(在图20中被称为“类型1”路由)和私有标签路由(在图20中被称为“类型2”路由)。本公开的一些示例方面涉及单机架路由器中的分组转发,该单机架路由器具有从单机架路由器外部的网络设备的角度看来作为多个不同节点操作的多个协作虚拟路由组件。本文中被称为虚拟节点(“vnode”)的虚拟路由组件各自具有单机架路由器的相关联的转发组件集合,例如,分组转发引擎。转发组件通过转发组件的结构接口处的结构链路彼此耦合,其中结构链路包括用于在转发组件之间交换网络分组的交换结构,以使得单机架路由器能够将外部接收的网络流量转发到其他外部网络设备。入口vnode是数据流量通过其流入(进入)单机架路由器的vnode,并且出口vnode是数据流量通过其流出(离开)单机架路由器的vnode。本公开的技术使得vnode能够当转发数据流量时避免在vnode内做出附加的结构跳。为了避免做出不必要的结构跳,入口vnode应当将流量发送到出口vnode的转发组件,该转发组件具有用于该流量的朝向目的地的传出接口。确保数据流量避免vnode内的附加结构跳的功能在本文中被称为最佳结构路由,并且涉及vnode彼此共享关于vnode已经确定的最佳结构路径(ofp)的信息。一般而言,vnode选择最佳结构路径以实现最佳结构路由依赖于下游vnode以发信号通知最佳结构路径信息,并且依赖于上游节点以使用最佳结构路径信息用于数据转发。上游节点使用最佳结构路径信息的方式可以取决于网络流量在上游到下游方向(例如,核心到边缘或边缘到核心)上流入和流出的位置而变化。在一些示例中,虚拟节点可以使用私有多协议边界网关协议(mp-bgp)、单跳内部bgp会话来用信号通知最佳结构路径信息。下游vnode基于出口接口来计算最佳结构路径和传入的结构接口(ofp下一跳),并且经由bgp会话发送用于被配置为请求ofp的任何前缀的ofp下一跳。例如,用户可以配置所有路由或选择性地选择路由前缀作为请求ofp。在一些示例中,诸如mpls标签和/或ip前缀之类的前缀由vnodeofp功能支持。mpls标签用于mpls服务,而ip前缀用于互联网和传输lsp路径选择。图21a是图示了包括按照本公开中所描述的技术配置的单机架路由器的逻辑视图的示例网络环境1010的框图。出于示例的目的,根据图21的简化网络环境1010对本公开的技术进行描述,其中单机架路由器1012与核心路由器1030a至1030b(“核心路由器1030”)通信,以向客户端设备1022a至1022b(“客户端设备1022”)提供对由设备在互联网协议(ip)/多协议标签交换(mpls)核心网1016中提供的服务的访问。单机架路由器1012可以与核心路由器1030a至1030b交换路由信息,以维护网络环境1010的拓扑结构的精确表示。单机架路由器1012包括虚拟提供商边缘vpe)节点1020a至1020b(“vpe1020”)和虚拟核心路由器(vp)节点1018,其是从单机架路由器1012外部的网络设备的角度看来作为多个不同节点操作的协作虚拟路由组件。按照本公开的技术,单机架路由器1012是具有单个物理机架的路由器,其通过分割路由器的硬件资源而被虚拟化为多个虚拟网络节点(被称为“vnode”),诸如pfe。单机架路由器1012包括物理上耦合并且被配置为作为单独的逻辑路由器进行操作的多个路由组件(例如,路由进程)和转发组件(例如,pfe)。对于网络环境1010的核心路由器1030和ce路由器1023,单机架路由器1012表现为多个路由设备,具体地,虚拟pe(vpe)路由器1020a、vpe路由器1020b和虚拟提供商(vp)路由器1018。例如,尽管单机架路由器1012包括单机架,但是从核心路由器1030的角度来看,单机架路由器1012具有多个外部通告的网络地址并且为每个路由协议维护多个对等路由会话,该路由协议维护与核心路由器1030中的每个核心路由器1030的对等路由会话。在图21a至图21b的示例中,vp1018是将vpe1020a至1020b连接到ip/mpls核心网1016的共享上游链路。可以使用用于vp1018的mplslsrvnode实例来实现共享上游链路。vpe1020共享上游链路带宽。图21a中所图示的网络环境1010的配置仅仅是个示例。尽管未如此图示,但是ip/mpls核心网1016可以耦合到由其他提供商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施(例如,互联网)的一部分。以太网聚合网络1014可以被视为互联网的接入网络。服务提供商网络6可以向耦合到客户端设备1022a至1022b(“客户端设备1022”)的计算设备提供对互联网的访问,并且可以允许客户网络(未示出)内的计算设备彼此通信。在另一示例中,ip/mpls核心网1016可以在互联网的核心内提供网络服务。在任一情况下,除了单机架路由器1012、服务路由反射器(rr)1026、提供商边缘(pe)路由器1028a以及核心路由器1030之外,ip/mpls核心网1016还可以包括多种网络设备(未示出),诸如附加路由器、交换机、服务器或其他设备。客户端设备1022可以是耦合到客户网络和订户设备的接入节点。客户端设备1022是经由服务rr1026由pe路由器1028a提供的服务的客户端。在该示例中,服务提供商网络包括向订户设备提供对聚合网络1014的访问的客户端设备1022和客户边缘(ce)路由器1023。在一些示例中,ce路由器1023可以包括维护订户设备和聚合网络1014之间的路由信息的路由器。例如,ce路由器1023可以包括宽带远程接入服务器(bras)功能,以将来自一个或多个客户端设备1022的输出聚合到到聚合网络1014的更高速的上游链路中。客户端设备1022可以是与耦合到客户边缘(ce)路由器1023的一个或多个客户网络(未示出)相关联的设备。在一些示例中,客户端设备1022可以包括计算设备,诸如例如,个人计算机、膝上型计算机、手持式计算机、工作站、服务器、交换机、打印机、客户数据中心或其他设备。在其他示例中,客户端设备1022可以是端点设备,诸如交换机、路由器、网关或作为客户设备(诸如订户设备)和服务提供商设备之间的分界点操作的另一终端。在一个示例中,客户端设备1022可以包括数字订户线路接入复用器(dslam)或其他交换设备。例如,客户端设备1022可以连接到一个或多个无线无线电站或基站(未示出)以与订户设备无线交换分组化的数据。客户端设备1022可以包括交换机、路由器、网关或将从无线无线电接收的分组化的数据聚合到ce路由器1023的另一终端。在一些示例中,聚合网络1014可以包括光学接入网络。例如,ce路由器1023可以包括经由光纤电缆连接到一个或多个客户端设备1022或光学网络单元(onu)的光学线路终端(olt)。协议下一跳(pnh)通常是指按照路由协议(诸如bgp)散播的沿着路由的下一跳。例如,即使启用bgp的路由器可能被一个或多个未启用bgp的路由器连接,启用bgp的路由器也可能被认为是用于另一启用bgp的路由器的pnh。pnh通常指定路由器的互联网协议(ip)地址。因而,接收路由器可以关联被指定为pnh的路由器,用于源自指定路由器的路由。相反,沿着给定路由的来自源路由器的fnh通常是指沿着该路由物理耦合到源路由器的邻居路由器。例如,用于路由的fnh可以指定用于与路由器关联的接口的物理接口和媒体访问控制(mac)地址。在一些情况下,pnh可以是始发路由通告的设备,而在其他情况下,pnh可以是始发设备正在代表其来发送路由通告的设备(例如,作为始发网络设备的路由反射器或控制器,具有pnh是pe路由器)。服务路由反射器(rr)1026反映从核心路由器1030a到pe路由器1028a以及从pe1028a到核心路由器1030a的路由。传输lsp1038可以在pe1028a和服务rr1026之间建立,并且反过来,分别在服务rr1026和vpe1020a,1020b之间建立传输lsp1040a和1040b(“传输lsp1040”)。传输lsp1040,1038为pe1028a提供传送以经由vpe1020向ce路由器1023的客户端1022提供服务。pe路由器1028a被认为是单机架路由器1012的vp1018的多跳协议下一跳。在单机架路由器1012中的两个vnode之间,供应对于单机架路由器1012外部的设备可见的一个逻辑层3(layer-3)链路。例如,在图21a和图21b中,这些是聚合结构接口(afi)链路1032a至1032b(“afi链路1032”)。afi链路1032中的每个afi链路1032是层3逻辑链路构造。afi向vnode连接性提供vnode。afi链接1032捆绑连接相同vnode的结构互连。afi提供vnodes之间的单个逻辑链路连接性,并且取决于实现,可能会有许多层1、层2或层3结构捆绑。在图21b的示例中,afi链路包括结构互连1033a至1033d,并且afi1032b包括结构互连1033e至1033g(统称为“结构互连1033”)。结构互连终止于pfe1024中的一个pfe1024的结构接口处。结构接口具有通常不被通告给单机架路由器1012外部的设备的标识符。结构互连1033被建模为一对pfc1024之间的点对点以太网链路pfe1024。afi和结构接口(fi)模拟点对点接口。afi链路1032端点具有用户配置的ip地址。如下文进一步详细描述的,从协议的角度来看,afi链路1032端点被用于控制会话终止,并且结构接口被用作在控制会话(例如,ofp会话1034)中交换的下一跳,用于通告单机架路由器1012内的最佳结构路径。在一些示例实现方式中,结构互连端点(即,结构接口)具有自动配置的ip地址。在其他示例实现方式中,对于结构接口不需要ip寻址;相反,结构接口是无编号的接口,并且可以由被建模为子网络附接点(snpa)或mpls标签的pfe标识符(“pfe-id”)来标识。结构接口可以被替换为“afix-node-ip-address,snpa-id-for-pfe”或“afix-node-ip-address,mplslabel-for-pfe”,其中snpa-id或mplslabel是afi范围内的唯一的本地重要标识符。在一些示例中,pfe-id可以用作snpa/标签,并且在单机架路由器中的所有afi上是唯一的。本文中所描述的multinexthop属性支持将结构接口标识符作为ip地址、snpa或标签发信号通知,作为在bgp中发信号通知“编号接口作为下一跳”或“未编号接口作为下一跳”的方式。本文中关于作为ip地址的结构接口标识符对各种示例进行描述,但是同样可以在这些示例中使用未编号的接口标识符。在一些示例中,捆绑的链路和成员链路中的每个链路天然地可以支持ipv4、ipv6和mpls;也就是说,ip路由协议和mpls信令协议在成员链路1033和捆绑的afi链路1032上天然地运行。数据流量可以是单播的和/或多播的。例如,afi链路1032可以提供与以太网接口所提供的功能相似的功能,诸如例如,统计和管理控制。例如,通过结构互连仿真的afi链路可以支持以太网封装。afi的afi连接性(对等方)和ip地址可能是用户供应的。afi的本地ip地址和远程ip地址应该位于同一个子网中,并且在整个网络中应该是唯一的。在一些示例中,成员fi接口的标识符可以从afi连接性导出并且指派给afi。该成员资格关联将由单机架路由器1012的管理虚拟机(未示出)完成。afi链路1032也可以具有基于成员结构互连1033的带宽的累积带宽(链路速度),并且可以是用户可配置的。如本文中所描述的,单机架路由器1012的虚拟节点彼此共享信息以使得其他各方能够通过单机架路由器1012的交换结构来选择结构路径,这些结构路径避免不必要的结构跳。避免不必要的结构跳的结构路径在本文中可以被称为“最佳结构路径”,尽管在其他方式中该结构路径可能不一定被认为是“最佳的”。本文件解决了针对虚拟节点间链路、共享上游链路(su)以及针对某些服务的最佳结构路径(ofp)共享。如本文中所描述的,单机架路由器中的多个虚拟节点可以向彼此发送最佳结构跳信息以用于路由解析,从而允许接收虚拟节点基于最佳结构跳信息来选择结构接口,在该结构接口上,将网络流量朝向单机架路由器内部的交换结构的另一侧上的另一虚拟节点输出,使得这些分组在通过接收虚拟节点被转发到单机架路由器外部的其目的地之前避免在接收虚拟节点处遍历额外的pfe跳。单机架路由器的虚拟节点可以经由路由协议消息(例如,bgp消息)来交换最佳结构跳信息。如本文中所描述的,最佳结构路由功能是服务感知功能。也就是说,vnode被配置为取决于数据流量与之相关联的服务类型而不同地执行最佳结构路由。在一些示例中,服务感知最佳结构路由可以使用这些相关传输协议来支持以下服务:1.具有资源预留协议(rsvp)和标签分发协议(ldp)的互联网;2.vpe间互联网数据流量;3.具有ldp和rsvp的ip虚拟私有网络(ip-vpn)。图21b是按照本公开中所描述的技术的进一步详细图示了图21a的示例性网络环境的框图。在图21b的示例中,vnode1018、1020中的每个vnode包括一个或多个pfe1024a至1024f(“pfe1024”)。各个pfe1024与特定vnode相关联,并且不在多个vnode之间共享。vnode以灵活的可编程集成电路(pic)集中器(fpc)粒度共享转发资源。每个vnode的控制平面(vcp)1025a至1025c(“vcp1025”)使用虚拟机(vm)技术实例化。vcp1025可以在单机架路由器1014的路由引擎(re)内或在re外部。每个vnode可以扮演不同的网络功能角色,诸如互联网服务提供商边缘(pe)、虚拟专用网络(vpn)服务pe(vpe)和多协议标签交换(mpls)标签交换路由器(lsr)(vp)。除了这些虚拟节点之外,在一些示例中,单机架路由器1014还可以包括针对共享资源管理被实例化的管理vm(例如,管理平面,图21a至21b中未示出)。例如,ofp会话34可以是在afi接口上的两个vnode的控制平面之间建立的单跳ibgp会话,以交换最佳结构路径信息。ofp会话1034是用于下游信令的私有bgp会话。在图21b的示例中,在vcp1025a和vcp1025b之间建立ofp会话1034。尽管未示出,但是其他的vcp1025对可能已经建立了ofp会话。在其中虚拟节点(例如,vpe)是域间自治系统(as)虚拟节点的一些示例中,虚拟节点可以使用外部bgp(ebgp)mp-bgp会话作为ofp会话。在那种情况下,虚拟节点然后可以使用与同一as中的rr的mp-bgp会话用于服务。在一个示例中,假设vpe1020a和vpe1020b各自提供基于mpls的vpn服务,并且ce1023连接到pfe1024a。还假定vpe1020a和vpe1020b中的每一个均经由pfe1024e和pfe1024f使用结构等价逻辑路径连接到vp1018。当分组从ip/mpls核心网1016到达vp1018并且去往ce1023时,在没有本公开的技术的情况下,vp1018将基于ecmp负载平衡将数据流量发送到pfe1024a或pfe1024b。假设ce1023从vpe1020a仅经由pfe1024a可达。如果vp1018选择pfe1024a的结构接口1033c用于向ce1023转发流量,则pfe1024b必须再次将分组重新发送到pfe1024a以到达ce1023。这导致vpe1020a内的附加结构跳。在经由ip/mpls核心网1016朝向远程pe的流量中发生相同的问题。假设在图21a的示例中,vpe1020a想要向pe1028发送流量。当分组到达用于pe1028的vpe1020a时,在没有本公开的技术的情况下,vpe1020a将基于ecmp负载平衡将数据流量发送到pfe1024e或pfe1024f。如果vpe1020a选择pfe1024f结构接口用于到pe1028的流量,则pfe1024f必须再次将分组重新发送到pfe1024e以到达pe1028,因为pe1028只能通过来自pfe1024e的输出接口到达。这导致了vp1018内的附加结构跳。本文中所描述的ofp技术由通过afi1032连接的两个相邻vnode来执行。下游vnode(相对于网络流量的最终流)向相邻上游vnode发信号通知ofp结构接口的下一跳(ip地址)或下一跳(pfe-id)作为最佳下一跳,并且上游vnode使用该信息选择下一跳并且转发数据流量。本公开更详细地描述了各种示例ofp机制,包括例如:1.基于上下文-fib的转发。2.带有结构接口标识符的服务路由。3.通过替换afi传输具有最佳结构接口的lsp设置。对于所有以上所述,下游节点发信号通知具有对应的最佳结构接口的前缀。对于场景1和场景2,vpnper-pfe-per-table标签和/或带标签的bgpper-pfe-per-table和/或互联网前缀都使用结构接口的标识符进行通告。对于场景3,本地路由和/或ldp路由在bgp消息中通过结构接口的标识被通告给上游。例如,vcp1025c经由ofp会话1034向vcp1025a发送路由协议消息1036(例如,bgp更新消息)。路由协议消息1036包括ofp信息,诸如作为用于到达cr1030a或远程pe1028a的下一跳的vp1018的结构接口。例如,路由协议消息1036可以在pfe1024e处指定结构互连1033a的结构接口作为用于到达cr1030a或远程pe1028a的下一跳。在没有接收到指定结构接口的路由协议消息1036的情况下,vpe1020a的路由信息可以仅指示使用afi1032a向cr1030a或远程pe1028a的目的地发送网络流量。响应于接收到指定结构接口的路由协议消息1036,vcp1025a将结构接口存储到路由信息,并且可以通过程序命令1039对pfe1024a和1024b处的fib进行编程,以指定结构互连1033a而非afi1032a的结构接口。在其他示例中,vcp1025a可以类似地向vcp1025c发送路由协议消息1036,指定用于到达ce1023的结构接口。在上游方向上,对于多跳协议下一跳,vnode必须进行路由解析以找出哪些直接连接的接口以发出流量。在该路由解析决定中,vpe1020还考虑到出于ofp目的而接收的信息。vp1018(上游路由器)向vpe提供有关远程传送隧道端点以及vp1018如何能够到达它们的信息。传送隧道去往远程pe路由器,诸如pe1028a。远程隧道端点是pe路由器的ip地址。从vp1018的角度来看,vpe1020现在具有关于上游拓扑结构连接性的信息,并且当决定其自己的传出接口时考虑到该信息。这是最佳转发在边缘到核心转发方向上的工作方式。在vpe1020将转发信息编程到pfe中之前,vpe1020必须确定pnh在哪些接口之外是可到达的,以及要推送什么标签等。如果vpe1020与vp具有多个连接并且它们去往不同的出口pfe,按照本公开的技术,vpe1020可以基于vp连接到远程pe1028a的方式来选择那些接口的子集。如果vp1018仅通过pfe1连接到pe1028a,则当进行该pe1028apnh的解析时,vpe1020可以考虑该接收的ofp信息,并且仅选择通过vp1018上的pfe1连接的接口1。如果vpe1020a没有该信息,并且vpe1020a可以将流量发送到去往pfe2的接口2,以及在pfe2处,它将获得vp处的结构间跳,获取次最佳路径。vp1018正在协助最佳转发,vp1018在服务层中对外部网络不可见,但是在传输层vp1018中对外部网络可见。本文中所描述的机制允许vpe1020a和vp1018将流量最佳地转发到另一个的出口点(即,单机架路由器1012的出口接口)。在核心到边缘转发方向上,在vpe正在提供给vp的信息是服务路由(服务平面转发路由)的意义上来说,ofp被用于服务层可达性信息,并且在服务层处进行决定。vpe向vp提供vpn标签或ip前缀,并且通过指定ofp结构接口告知vp其应当将流量发送到哪个出口pfe。在一些示例中,本公开的技术可以应用于vnode,其可能不在单个物理机架中,但可以是分离的物理机架中的多个节点,其操作就像在单机架中一样。图22是按照本公开的技术的图示了图21a至图21b的使用最佳结构路径的示例单机架路由器1012的框图。单机架路由器1012可以包括作为例如虚拟提供商边缘或虚拟客户边缘路由器、虚拟自治系统边界路由器(asbr)、虚拟区域边界路由器(abr)或另一类型的网络设备进行操作的多个虚拟节点,诸如虚拟交换机。在该示例中,单机架路由器1012包括为单机架路由器1012提供控制平面功能的控制单元1118。控制单元1118可以分布在多个实体中,诸如一个或多个路由单元以及可插入到单机架路由器1012中的一个或多个服务卡。在这种实例中,单机架路由器1012因此可以具有多个控制平面。在一些示例中,单机架路由器1012的每个虚拟路由节点可以具有其自己的虚拟控制平面,例如,图21b的vcp1025。单机架路由器1012还包括以示例分组转发引擎1120a至1120n(“pfe1120”)和交换机结构1126的形式的多个转发组件,它们一起提供转发平面用于转发和以其他方式处理订户的流量。控制单元1118可以是例如图21a至图21b的vcp1025中的任一vcp1025,而pfe1120可以是例如pfe1024中的任一个pfe1024。pfe1120经由接口卡1122a至1122n(“ifc1122”)的接口接收并且发送数据分组,每个接口卡与pfe1120中的相应一个pfe1120相关联。pfe1120中的每一个和与其相关联的ifc1122中的ifc1122可以驻留在用于单机架路由器1012的单独线卡上(未示出)。示例线卡包括柔性可编程集成电路(pic)集中器(fpc)、密集端口集中器(dpc)和模块化端口集线器(mpc)。ifc1122中的每个ifc1122可以包括用于层2(l2)技术的各种组合的接口,包括以太网、千兆位以太网(gige)和同步光学联网(sonet)接口。在各种方面中,pfe1120中的每个pfe1120可以包括更多或更少的ifc。交换结构1126提供高速互连,用于将传入的数据分组转发到pfe1120中的选定pfe1120以通过网络输出。交换结构1126可以包括多个结构链路(未示出),诸如图21b的结构链路1033。在一些示例中,交换结构1126可以是分布式多级交换结构体系架构,其中网络分组遍历位于路由器的分布式转发组件中的交换结构的多个级以从交换结构的入口点行进到交换结构的出口点。作为一个示例,交换结构1126可以被实现为单个多级clos交换结构,其跨交换结构的级中继通信。典型的多级clos交换结构具有被互连以形成多个级的多个交换机。在典型布置中,交换结构包括入口(或“第一”)级、一个或多个中间级以及出口(或“最后”)级,其中每个级具有一个或多个交换机(例如,交叉交换机,其通常更简单地被称为“交叉”)。而且,交换结构可以被实现为使得交换机被布置为多个平行结构平面,每个平行结构平面通过多个级提供从入口端口到出口端口的独立转发,这些级中的一个或多个级可以被视为备用结构平面。换句话说,平行结构平面中的每个平行结构平面可以被视为多级clos交换结构的独立部分,其中每个平面提供交换冗余。控制单元1118通过内部通信链路1128连接到pfe1120中的每一个pfe1120。比如,内部通信链路1128可以包括100mbps或1gbps以太网连接。由控制单元1118执行的守护进程(daemon)1114a至1114n(“守护进程1114”)是用户级进程,其可以运行网络管理软件,执行路由协议以与对等路由设备通信,执行从管理员接收的配置命令,维护和更新一个或多个路由表,管理订户流处理,和/或创建一个或多个转发表以安装到pfe1120等功能。在一些示例中,守护进程1114中的一个守护进程可以包括用于认证、授权和记账(aaa)协议的客户端,诸如远程认证拨入用户服务(radius)客户端。控制单元1118可以包括执行软件指令(诸如被用于定义软件或计算机程序的那些)的一个或多个处理器(图22中未示出),这些软件指令被存储到计算机可读存储介质(图22中同样未示出),诸如包括存储设备(例如,磁盘驱动器或光驱)和/或存储器(诸如随机存取存储器(ram))(包括各种形式的动态ram(dram),例如,ddr2sdram或静态ram(sram))的非暂态计算机可读介质、闪速存储器、可以被用来携带或存储形式为指令或数据结构的期望程序代码和程序数据并且可以被处理器访问的另一种形式的固定或可移除存储介质、或存储使得一个或多个处理器执行本文中所描述的技术的指令的任何其他类型的易失性或非易失性存储器。可替代地或另外,控制单元1118可以包括用于执行本文中所描述的技术的专用硬件,诸如一个或多个集成电路、一个或多个专用集成电路(asic)、一个或多个专用特殊处理器(assp)、一个或多个现场可编程门阵列(fpga)、或专用硬件的前述示例中的一个或多个示例的任一组合。pfe1120通过在分组遍历单机架路由器1012的内部体系架构时在相应内部分组处理路径上对每个分组执行一系列操作来处理分组。可以对每个分组执行操作,例如通过对应的入口接口、入口pfe1120、传送pfe1120、出口pfe1120、出口接口或分组先前指向的单机架路由器12的其他组件(诸如一个或多个服务卡)中的任一个。分组处理的结果确定分组被pfe1120从其ifc1122中的一个ifc1122上的输入接口转发或以其他方式处理到ifc1122中的一个ifc1122上的其输出接口的方式。在一些示例中,特定分组可以由多个pfe1120处理。图22的示例示出了当存储包括指向上下文下一跳表1125a的指针的下一跳(nh)表1124a时的pfe1120a。上下文下一跳表(有时被称为上下文转发信息库(fib))提供当查找下一跳时用于在转发平面使用的附加转发上下文。在一些示例中,上下文fib可以通过将来自另一节点的前缀和下一跳导入上下文fib来代表另一节点来启用转发决定。在一些示例中,指向上下文fib的传输lsp标签使得pfe1120在上下文fib中进行转发查找。为了通过示例说明,假设pfe1120a与虚拟节点vp1018相关联,而pfe1120n与虚拟节点vpe1020a相关联。假设vp1018基于用于名为vpe1020a.mpls.0的用于vpe1020a的上下文mplsrib来创建上下文nh表1125a,并且上下文标识符是vpe1020a的环回地址1.1.1.1。例如,响应于控制单元1118a接收具有指定如本文中所描述的上下文表名称的multinexthop属性的bgp更新消息,vp1018可以创建上下文mplsrib,并且进而创建上下文nh表1125a。在该示例中,vp1018构建vpe1020a.mpls.0,并且针对到1.1.1.1的lsp创建上下文标签(比如说1100),其中来自nh表1124a的表下一跳指向vpe1020a.mpls.0。然后,vpe1020a可以使用上游信令在vpe1020a.mpls.0中导入任何标签转发信息。带有标签1100的进入vp1018的流量在vpe1020a.mpls.0中经历转发查找。pfe接口1116呈现接口,通过该接口,守护进程1114可以编程pfe1120以指导分组流转发。守护进程1114经由pfe接口1116指导pfe1120以安装或更新条目到nh表1124或上下文nh表1125。pfe接口1116可以包括一个或多个用户级库或内核级库、程序、工具包、应用编程接口(api),并且可以例如使用套接字经由内部通信链路1128将控制和数据消息传达到pfe1120。例如,按照本公开的技术,守护进程1114中的一个守护进程可以是第一路由协议守护进程,其在与虚拟路由节点中的一个虚拟路由节点相关联的第一虚拟机实例中执行,该第一虚拟机实例从第二路由协议守护进程接收指定用于到达网络目的地的最佳结构路径下一跳的路由通告(例如,前缀),该第二路由协议守护进程在与第二虚拟路由节点相关联的第二虚拟机实例中执行。最佳结构路径下一跳指定用于最佳结构路径的结构链路的内部地址。作为响应,守护进程1114调用pfe接口1116以将最佳结构路径应用于接收的分组流。例如,pfe接口1116指导pfe1120生成或修改用于分组流的ifl1171,以指定仅特定结构链路作为用于去往目的地前缀的分组的下一跳,而非聚合结构链路的所有成员结构链路的列表。在所图示的示例中,守护进程1114a指导pfe1120使用ofpifl消息1127、1129来安装ofp下一跳接口。ofpifl消息1127、1129指定路由以及要为该路由安装的ofp下一跳地址。这样,下一跳表1124、1125被修改以影响单机架路由器1012内的分组的处理路径,以避免不必要的结构跳。作为结果,这些技术可以减少支持任何给定分组流所需的资源的平均数目,并且增加单机架路由器1012可支持的流的数目。图23是进一步详细图示了图22的pfe1120的控制单元1118和分组转发引擎1120a(“pfe1120a”)的示例实例的框图。在该示例中,控制单元1118提供用于执行在用户空间1140中执行的各种用户级守护进程1114的控制平面1178a操作环境。该示例中的守护进程1114包括命令行接口守护进程1132(“cli1132”)、路由协议守护进程1134(“rpd1134”)以及简单网络管理协议守护进程1136(“snmp1136”)。在这方面,控制平面1178a可以为单机架路由器112提供路由平面、服务平面和管理平面功能。控制单元1118的各种实例可以包括图22中未示出的附加守护进程1114,其执行其他控制、管理或服务平面功能和/或驱动,以及以其他方式管理用于单机架路由器1012的转发平面功能。在一些实例中,控制单元1118可以表示服务卡的控制单元或提供路由平面功能的路由单元的控制单元和服务卡的组合。守护进程1114在内核1143上操作并且与该内核1143交互,该内核1143为用户级进程提供运行时操作环境。内核1143可以包括例如诸如linux或伯克利软件分发(bsd)的unix操作系统衍生物。内核1143提供库和驱动程序,通过它们,守护进程1114可以与底层系统交互。内核1143的pfe接口1116包括内核级库,通过该内核级库,守护进程1114和其他用户级进程或用户级库可以与pfe1120a的编程接口1164交互。pfe接口1116可以包括例如用于通过专用网络链路与pfe1120a通信的套接字库。控制单元1118的硬件环境1150包括微处理器1152,其执行从存储装置(在图23中未示出)加载到主存储器(图23中也未示出)中的程序指令,以便执行控制单元1118的软件堆栈,其包括内核1143和用户空间1140两者。微处理器1152可以包括一个或多个通用处理器或专用处理器,诸如数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或任何其他等效逻辑器件。因而,如本文中所使用的术语“处理器”或“控制器”可以是指前述结构中的任一个或多个结构或可操作以执行本文中所描述的技术的任何其他结构。rpd1134执行一个或多个内部路由协议和/或外部路由协议以与其他网络设备交换路由信息,并且将接收的路由信息存储在路由信息库1145(“rib1145”)中。例如,rpd1134可以执行诸如边界网关协议(bgp)中的一个或多个的协议,包括内部bgp(ibgp)、外部bgp(ebgp)、多协议bgp(mp-bgp)、标签分发协议(ldp)以及带有流量工程扩展的资源预留协议(rsvp-te)。rib1145可以包括定义网络的拓扑结构的信息,其包括一个或多个路由表和/或链路状态数据库。rpd1134解析由rib1145中的路由信息所定义的拓扑结构,以通过网络选择或确定一个或多个活动路由,然后将这些路由安装到转发信息库1142(“fib1142”)。通常,rpd1134生成形式为基数(radix)或其他查找树的fib1142以将分组信息(例如,具有目的地信息和/或标签堆栈的头部信息)映射到下一跳,并且最终映射到与相应的pfe1120相关联的接口卡的接口端口。命令行接口守护进程1132(“cli1132”)提供了外壳,通过该外壳,管理员或其他管理实体可以使用基于文本的命令来修改单机架路由器1012的配置。snmp1136包括snmp代理,其从管理实体接收snmp命令以设置和取回用于单机架路由器1012的配置和管理信息。例如,使用cli1132和snmp1136,管理实体可以例如启用/禁用以及配置服务、管理用于分组流的分类和服务类别、安装路由、启用/禁用以及配置速率限制器,配置用于移动网络的流量载体、以及配置接口。在该示例中,rpd1134、cli1132和snmp1136经由pfe接口1116配置转发平面1178b以实现配置的服务,添加/修改/删除路由,以及通过将上下文下一跳表和结构接口作为下一跳安装到pfe1120来修改分组处理路径。pfe接口1116允许守护进程1114驱动pfe1120a的分组处理路径1172的安装和配置。具体地,pfe接口1116包括应用编程接口(api),守护程序1114可以通过该应用编程接口将分组流映射到结构接口以供转发。pfe1120a与单机架路由器1012的其他pfe1120结合实现转发平面1178b(还被称为“数据平面”)功能,以处理从在其上接收分组的入口接口到分组被发送至的出口接口的分组处理。转发平面1178b使用由控制平面1178a安装到转发平面1178b的服务对象和查找数据确定通过单机架路由器1012的数据分组转发、应用服务、对分组流进行速率限制、过滤分组、以及以其他方式处理分组。尽管图23仅详细图示了pfe1120a,但是单机架路由器1012的pfe1120中的每个pfe1120包括执行基本相似功能的类似模块。pfe1120a包括按照本文中所描述的技术执行处理路径1172的基于asic的分组处理器(“asic1168”)。asic1168包括一个或多个可编程应用专用集成电路,其具有执行微代码(或“微指令”)以控制和应用asic1168的固定硬件组件来处理分组“密钥”的密钥引擎1170。分组密钥包括分组字段和其他参数,其确定针对沿着内部处理路径(诸如路径1173)的分组的分组处理流。密钥引擎1170包括密钥缓冲器1163,以存储用于密钥引擎当前正在处理的对应分组的分组字段数据。密钥缓冲器1163还可以提供有限的可写存储器,内部处理路径的元件可以写入该可写存储器以传递可由未来的元件访问的消息。asic1168的一些实例可以包括多个密钥引擎,每个密钥引擎具有相关联的密钥缓冲器。asic1168的内部处理路径1172(“处理路径1172”)包括可编程的可执行的微代码和固定硬件组件,其确定分组处理动作以及由密钥引擎1170执行的其他操作。1120a可以在诸如静态随机存取存储器(sram)的计算机可读存储介质中存储处理路径1172的可执行指令。虽然图示为在asic1168内,但是在一些示例中,处理路径1172的可执行指令可以被存储在pfe1120a中的asic1168外部的存储器中。在一些方面中,处理路径1172包括用于发起处理的下一跳数据结构。在密钥引擎1170的每个处理步骤结束时,结果比如是可以指定附加处理或处理终止的下一跳。另外,下一跳可以指定要由密钥引擎1170执行的一个或多个功能和/或要应用的一个或多个硬件元件(例如,监管器)。密钥引擎1170可以与结果(或“查找”)缓冲器相关联,其存储用于执行下一跳的结果。例如,密钥引擎1170可以执行由下一跳指定的查找并且将查找的结果存储到相关联的结果缓冲器。结果缓冲器的内容可能会影响下一跳链中的下一跳的动作。逻辑接口1171(“ifl1171”)是表或包括一个或多个逻辑接口的其他数据结构。由于存储器约束、pfe微处理器1162可以在处理路径1172中建立路径的速率、控制单元118和pfe1120a之间的带宽、以及控制单元1118可以确定处理路径1172中的路径的速率,所以ifl1171的数目在pfe1120a的各种实现方式中可能受到限制。ifl1171中的每个ifl1171是到路径1173的处理路径的接口。路径1173表示由密钥引擎1170在密钥缓冲器1163上执行的一个或多个处理路径。在一些示例中,每个物理接口设备(或端口)(“ifd”)具有pfe-id(pfe标识符)。pfe-id提供机架内的可寻址点。术语pfe-id可以是可互换的“pfe-snpa”。ifd的该pfe-id从其所关联的pfe导出。结构接口ifd也从结构接口所属的pfe导出pfe-id。在一些示例中,ifd的该pfe-id将通过rosock消息(ifmedia:ifm_fe)可用,以用于感兴趣的守护进程消耗。位置是用于pfe-id的抽象。在一些示例中,pfe-id还可以帮助隐藏rpd1134中的硬件细节。ifd的pfe-id将被称为ifd-location。ifl-location从底层ifd-location导出。ifd-location从rtsock消息(ifmedia:ifm_fe)获知。堆叠在ifd上的所有ifl共享相同的位置。结构接口还可以获得ifl-location。ifl-location与ifl1171相关联。按照本公开的技术,ofp进程1146确定提供避免不必要的结构跳的结构接口下一跳的下一跳的位置,其被称为ofp接口。为了确定下一跳位置,对于ofp流量,入口接口和出口接口应当在相同的pfe中以避免pfe之间的额外结构跳。在一些示例中,转发通过下一跳发生并且下一跳由出口ifl集合组成。下一跳位置可以被认为是下一跳中所有ifl-location的累积唯一位置。术语“ofp会话”是指通过聚合结构接口(afi)在单机架路由器1012的两个虚拟节点之间建立以交换最佳结构路径(例如,图21a的ofp会话1034)的单跳ibgp会话。ofp会话是用于发信号通知的私有bgp会话。由于其单跳性质,经由该会话交换的路径将避免解析器,并且应当能够使用路由器下一跳。在一些示例中,ofp会话将仅支持受限制的特征以启用ofp,并且除非明确提及,否则用于会话的所有其他bgp特征可能都不被支持。ofp会话可能支持mpls(新)地址族、inet、inet6地址族。在一些示例中,在该会话中交换的所有前缀仅包含作为下一跳的结构接口。例如,该会话可能支持来自不同的rib导入和导出。该会话还支持导出策略和导入策略以支持通告的前缀的子集上的ofp。表1阐述了示例导入和导出rib和使用情况。表1通常,通告bgp的前缀下一跳是配置驱动的(地址族默认自身或对等地址或导出策略)。为了执行ofp,ofp进程1146使用ofppnh算法动态计算下一跳,并且向rpd1134提供下一跳用于通告,例如,通过发送具有ofp属性的bgp消息。下一跳被通告,并且接收vnode的ofp进程1146重写rib1145中的下一跳以启用ofp。通告前缀的下一跳和ofppnh应当驻留在相同的pfe中。本文中所描述的ofppnh算法和相关联的bgp属性支持多个结构下一跳、跨下一跳的负载平衡、以及快速重路由(frr)。以下描述ofp进程1146在计算用于ofppnh的结构接口时使用的示例ofppnh算法。ofp进程1146使用连接vnode的聚合结构接口的fi位置(fi-l)和前缀的转发下一跳位置(nh-l)来计算ofppnh。在一个示例中,ofp进程1146在fi-l∩nn-lfi地址的交集中选择作为ofp下一跳的那些fi地址。如本文中所描述的,定义新bgp属性以实现多个下一跳的通告。在一些示例中,该属性可以仅由图21b的ofp会话1034中的rpd1134使用,并且不会进一步传播。pfe微处理器1162管理asic1168并且执行编程接口1164以提供用于控制单元1118的接口或向控制单元1118提供接口。pfe微处理器1162可以执行微内核以提供用于接口的操作环境。编程接口1164从控制单元1118接收指导分组转发引擎1120a配置逻辑接口1171和处理路径1172的路径1173的消息。图24是图示了按照本公开的一个或多个方面的网络设备的示例操作的流程图。出于示例的目的,关于图21a至图21b、图22至图23以及图25和图28对图24进行描述。下游虚拟节点(“vnode”)确定要建立传输lsp(例如,基于配置),并且为要建立的传输lsp选择最佳结构路径结构接口(1180)。例如,ofp进程1146可以使用ofppnh算法选择ofp结构接口。在一些示例中,下游vnode可以是诸如vp1018或vpe1020a之类的虚拟节点。下游vnode通告ofp结构接口和用于传输lsp的对应标签(1182)。例如,上游vnode可以是诸如vpe20a或vp1018之类的虚拟节点。术语“下游”和“上游”涉及数据流量从上游vnode到下游vnode的流动方向。在一些示例中,下游vnode经由其自身与上游vnode之间的ofp会话(例如,ofp会话34)通告ofp结构接口,例如,经由下游vnode和上游vnode之间的单跳bgp会话。通告ofp结构接口的消息还可以将ofp结构接口指定为用于到达网络目的地的下一跳,诸如pe1028a或vpe1020a。下游vnode可以通告ofp结构接口的标识符,诸如指派给ofp结构接口的ip地址或诸如pfe-id的无编号的接口标识符。响应于接收到通告的ofp结构接口和传输lsp标签(1184),上游vnode将ofp结构接口和对应的传输lsp标签存储到路由表,诸如rib1145(图23)。在一些情况下,上游vnode可以将聚合结构接口替换为ofp结构接口作为用于网络目的地的下一跳。例如,在vp1018中,聚合结构接口1032a可以被替换为到上下文rib的表下一跳,并且在vpe1020a中,聚合结构接口1032a被替换为结构接口。当计算用于传输lsp的路径时,上游vnode使用ofp结构接口(1188)。因为上游vnode现在具有ofp结构接口信息,所以上游vnode可以使用该更具体的信息来进行路径计算,而非仅仅使用聚合结构接口。例如,诸如rsvp-te进程或(例如,由rpd1134管理的)ldp进程之类的mpls进程可以使用约束最短路径优先(cspf)算法来计算用于传输lsp的路径,并且可以基于rib1145中反映的网络拓扑结构来计算路径。上游vnode例如通过发送诸如ldp标签映射消息或rsvp-te路径消息之类的一个或多个信令消息,来沿着所计算的路径建立传输lsp(1190)。传输lsp可以是诸如ldp传输lsp1204(图25)的ldplsp或诸如rsvp-te传输lsp1212(图26)的rsvp-telsp。上游vnode可以是传输lsp的入口路由器,即,流量进入上游vnode处的传输lsp。下游vnode可以接收信令消息,并且存储用于传输lsp的状态。在一些示例中,传输lsp可以终止于pe1028a处(例如,pe1028a可以是传输lsp的出口路由器)。然后,上游vnode可以将网络流量转发到传输lsp上,诸如目的地为pe28a的网络流量(1192)。上游vnode可以经由ofp会话使用由下游vnode通告的传输lsp标签来封装在传输lsp上转发的流量。当下游vnode接收到传输lsp上的流量时,下游vnode转发来自ofp接口所驻留的相同pfe的出口接口上的网络分组(1196)。这样,下游vnode可以避免必须执行到不同的pfe的额外的结构跳以在出口上输出网络分组,因为如果上游vnode要使用聚合结构接口而非单独的最佳结构路径结构接口来计算用于传输lsp的路径,则可能必须这样做。下游vnode可以在转发之前将传输lsp标签交换为不同的lsp标签。图25是图示了示例系统1200的框图,其进一步详细示出了图21a至图21b的单机架路由器1012的vnode的示例结构接口1202a至1202f(“结构接口1202”)。结构接口1202是到vnode(未示出)的pfe的接口。例如,结构接口1202d可以是pfe-id为pfe-0的pfe的接口,结构接口1202e可以是pfe-id为pfe-1的pfe的接口,结构接口1202f可以是pfe-id为pfe-2的pfe的接口,以及结构接口1202g可以是pfe-id为pfe-3的pfe的接口。图25的示例被用来描述本公开的技术的各个方面。mpls支持每个下一跳、每个表、每个前缀和每个组标签分配策略。按照本发明的技术,per-pfe-per-table标签分配定义了基于每个表的下一跳的pfe位置(下一跳位置)来分配标签的新方案。前缀共享相同的下一跳pfe位置的集合,并且相同的rib共享公共标签。在图25的示例中,假设ge-0/0/1、ge-0/0/2有pfe-id0,ge-1/0/1有pfe_id1。假设10.1.1.0/24经由ge-0/0/1可到达,10.1.2.0/24经由ge-0/0/2可到达以及10.1.3.0/24经由ge-1/0/1可到达。因为ge-0/0/1和ge-0/0/2在同一个pfe中,所以前缀10.1.1.0/24和10.1.2.0/24共用公共标签(比如说100),并且10.1.3.0/24获得不同的标签(比如说200)。假设另一对前缀10.1.4.0/24和10.1.5.0/24经由ge-0/0/2和ge-0/0/1可到达;因此这两个前缀共享同一标签(比如说300)。实际上,假设所有前缀都在同一rib中,则per-pfe-per-table标签分配为每个pfe集合提供标签。以下示例特定于上下文fib,诸如图23的上下文nh表1125a至1125n。在图25的示例中,假设vp1018为vpe20a提供上下文mplsrib,并且上下文标识符是vpe1020a的环回(lo0)地址1.1.1.1。然后,vp1018构建vpe20a.mpls.0上下文nh表,并且创建到1.1.1.1的用于lsp的上下文标签(比如说100),其中表下一跳指针指向指向vpe20a.mpls.0。然后,vpe1020a和vp1018可以使用上游信令来将任何标签转发信息导入vpe20a.mpls.0中。流量随vp1018中的标签100一起在vpe20a.mpls.0中经历转发查找。例如,ofp标识符可以是ip地址,诸如vpe20a的环回地址。在一些示例中,虚拟节点将bgp更新消息1036(图21b)中的ofp标识符指定为协议下一跳以用于被向诸如服务rr1026(图21a至图21b)的路由反射器或诸如pe路由器1028a的其他pe路由器通告的服务前缀。为了支持前缀的子集上的ofp,在一些示例中,vpe1020a可以在环回中定义辅助地址并且使用辅助地址作为ofp标识符,并且通告具有ofp标识符的前缀作为协议下一跳。当vp1018设置到ofp标识符的传输lsp时,该ofp标识符还可以被vp1018使用。参照图1025的示例,假设vpe1020a使用作为1.1.1.1的协议下一跳向网络通告10.1.1.0/24、10.1.2.0/24和10.1.3.0/24。为了到达这些前缀,远程pe1028设置传送到1.1.1.1的lsp1204,并且使用传输lsp1204将网络流量从pe1028转发到vpe1020a。如果上述所有前缀都需要ofp,则vp可以使用单个传输lsp1204进行ofp。但是,如果仅10.1.3.0/24需要ofp,那么使用携带ofp流量和非ofp流量两者的单个传输lsp进行ofp。为了避免必须使用相同的传输lsp1204来携带ofp流量和非ofp流量,vpe1020a可以使用辅助环回地址(例如,1.1.1.2)作为ofp标识符,并且使用作为1.1.1.2的协议下一跳来通告10.1.3.0/24,并且将环回地址为1.1.1.1的流量前缀中的其余流量前缀通告给网络。这会触发远程pe以设置两个lsp:一个用于ofp流量,另一个用于其他流量。为ofp流量设置一个lsp并且为非ofp流量设置另一lsp,可以在仅针对网络流量子集启用ofp时向用户提供灵活性。例如,用户可以针对与由于ofp而在最佳路径上行进的大型数据流相关联的路由来配置ofp,并且用户不会为具有较小的流的路由配置ofp,其可能保留在次最佳路径上。在图25的示例中,vp1018的ofp进程1146可以如下确定ofppnh。假设10.1.1.0/24和10.1.2.0/24下一跳位置(nh-l)为0并且10.1.3.0/24nh-l为1,以及ecmp前缀10.1.4.0/24(图25中未示出,经由所有左侧接口可达到)nh-l为{0,1}。在结构接口具有作为标识符的ip地址的情况下,如图25所图示的,vpe1020a和vp1018经由afi1032a与结构接口fi-0/0/0和fi-1/0/0连接。fi-0/0/0ifl为0并且fi-1/0/0ifl为1。ofp进程1146确定用于10.1.1.0/24和10.1.2.0/24的ofp主下一跳(pnh)为(fi-l∩nh-l=0)fi-0/0/0地址128.1.1.1。ofp进程1146确定用于10.1.3.0/24的ofp是128.1.1.5。ofp进程1146确定用于10.1.4.0/24的ofppnh是(fi-l∩nn-l={0,1})128.1.1.1和128.1.1.5。在结构接口具有用于pfe的snpa-id的情况下,vpe1和vp经由afi0与{<pfe-0,pfe-1>,<pfe3>}连接。pfe-0afi-l为0且pfe-1afi-l为1。则用于10.1.1.0/24和10.1.2.0/24的ofppnh为(afi-l∩nn-l=0),其为pfe-0。用于10.1.3.0/24的ofppfe-snpa为pfe-0。用于10.1.4.0/24的ofppfe-snpa为(afi-l∩nn-l={0,1})。图26是图示了示例系统1210的框图,其示出了包括具有虚拟节点的单机架路由器的示例网络拓扑结构。图26的示例被用来描述本公开的技术的各个方面,其包括ofp如何与负载平衡/快速重路由一起工作。在一些示例中,对于需要最佳结构路径的前缀,下游vnode(例如,vp1018)可以具有等价多路径(ecmp)路径。下游vnode还可以跨不同pfe中的不同容量链路进行加权负载平衡。在那些情况下,ofp进程1146将转发下一跳(fnh)级负载平衡分布转换为pfe级负载平衡分布。在一些示例中,下游vnode使用本文中所描述的bgpmultinext跳属性来向上游vnode(vpe20a)发送该pfe级平衡。vpe1020a上的ofp进程1146接收pfe级负载平衡分布以使用负载平衡所需的权重来构建其下一跳,并且将下一跳安装在pfe处的适当fib中。例如,假设在图26的示例中,ge-0/0/1、ge-0/0/2和fi-0/0/0具有pfe-id0,而ge-1/0/1和fi-1/0/0具有pfe_id1。换句话说,假设ge-0/0/1、ge-0/0/2和fi-0/0/0具有if-l0,而ge-1/0/1和fi-1/0/0具有if-l1。(或者,在无编号接口的情况下,ge-0/0/1、ge-0/0/2在具有if-l0的pfe-0中,并且ge-1/0/1在具有if-l1的pfe-1中)。用于到达客户边缘(ce)路由器1212a的前缀10.1.1.0/24具有ecmp下一跳ge-0/0/1、ge-0/0/2和ge-1/0/1,以及前缀10.1.1.0下一跳位置将是{0,1}。流量跨所有三个接口1202a至1202c进行负载均匀平衡(33.3%)。用于afi1032a的ofp下一跳为128.1.1.1和128.1.1.5。如果vp1018仅使用两个结构接口进行负载均匀平衡,则下一跳为ge-1/0/1的vpe1020a的接口1202a如果链路本地偏置被启用,则可能会获得更高的分布。为了解决这个问题,ofp下一跳也分布平衡。在上述中,例如,pfe-0平衡将是66.3%,而pfe-1将是33.3。同样地,如果前缀具有备份下一跳,那么该备份属性也被单独作为权重。因此,ofp下一跳格式为{nexthop地址,权重,平衡}。用于10.1.1.0/24的ofp下一跳为{nh1=[pfe-0,0,66.3],nh2==[pfe-1,0,null]}。零平衡指示剩余流量(100-66.3)。如下所描述的,本地链路偏置是配置选项。在负载平衡中,当ecmp可用于前缀时,散列算法选择出口接口。如果没有本地链路偏置,则散列算法可以选择远程pfe而非本地pfe中的接口。这可能会导致附加结构跳。本地链接偏置配置通过仅使用本地链路进行散列来防止选择远程pfe。本地链路偏置防止附加结构跳,但是可能会引入不平衡。为了解决这个问题,上游vnode上的ofp进程1146可以被配置为确定所有链路上的散列和平衡,并且选择ofp下一跳,以便也分布平衡。例如,上述示例中,128.1.1.1平衡将是66.6%,而128.1.1.5将是33.4%。同样地,如果前缀具有备份下一跳,那么该备份属性也被单独作为权重。因此,ofp下一跳格式为{下一跳地址,权重,平衡}。用于10.1.1.0/24的ofp下一跳为{nh1=[128.1.1.1,0,66.6],nh2==[128.1.1.5,0,null]},其中零平衡指示剩余流量(100-66.6)。在用于结构接口标识符的未编号接口的示例中,假设ge-0/0/1、ge-0/0/2在pfe-0中具有if-l0,而ge-1/0/1在pfe-1中并且具有if-l1。10.1.1.0/24具有ecmp下一跳ge-0/0/1、ge-0/0/2和ge-1/0/1,而前缀10.1.1.0下一跳位置将为{0,1},流量在所有3个接口中进行负载均匀平衡(33.3%)。用于afi0的ofpsnpa为{0,1}。如果vp仅使用两个结构点进行负载均匀平衡,则如果链路本地偏置被启用,则vpege-1/0/1可能获得更高的分布。为了解决这个问题,ofp下一跳也分布平衡。在上述中,例如,pfe-0平衡将是66.3%,而pfe-1将是33.3%。同样地,如果前缀具有备份下一跳,那么该备份属性也被单独作为权重。因此,ofp下一跳格式是{nexthop地址,权重,平衡}。用于10.1.1.0/24的ofp下一跳是{nh1=[pfe-0,0,66.3],nh2=[pfe-1,0,null]}。零平衡指示剩余流量(100-66.3)。图27是图示了示例系统1215的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图27的示例被用来描述本公开的技术的各个方面,其包括用于标签分发协议(ldp)的传输lsp设置。图27可以是图24中描述的过程的示例。可以在两个方向(lsp到远程pe1028a,1028b(“pe1028”)和lsp到vpe)中的任一方向上设置传输lsp。在缺少本公开的技术的情况下,从vpe1020a到pe1028的lsp使用聚合结构接口,并且在vp1018的(共享上游链路(su)的)到vpe的lsp使用简单的弹出并向聚合结构接口1032a转发。按照本公开的技术,虚拟节点将通告最佳转发路径信息,使得接收虚拟节点可以用更具体的最佳转发路径路由替换聚合结构接口1032a。例如,在vp1018中,聚合结构接口1032a可以被替换为到上下文rib的表下一跳,并且在vpe1020a中,聚合结构接口1032a被替换为结构接口。vp1018中的本地配置(或特殊路由)通告用于vpe的ofp标识符标签绑定,并且使用到用于vpe的上下文fib的表下一跳来设置标签。与标签一起进入的分组将代表vpe在mpls.0和上下文rib中经历查找。vp1018将其所有ldp路由经由ofp会话导出到具有结构接口的vpe1020a,作为最佳结构路径协议下一跳(ofppnh)。vpe1020a将这些路由导入rib1145的私有rib(例如,bgp-afi([0-64]).inet(6).0)中。vpe1020a的ldp进程(例如,rpd1134的一部分)在该私有rib中使用下一跳以当进行路由解析时,替换聚合结构接口。本文中对用于通过接收节点安装私有rib的示例bgp信令地址族进行进一步详细描述。假设在图27的示例拓扑结构中,vp1018的fi-4/0/1和ge-4/0/1处于同一pfe中(未示出)。在vp1018中,假设用于3.3.3.3的下一跳为ge-4/0/1。vp1018使用ofppnh算法为3.3.3.3选择128.1.1.6作为下一跳。vp1018使用ofp会话将用于3.3.3.3的路由导出到vpe1020a,其中128.1.1.6作为使用ofppnh算法选择的下一跳。vpe1020a将该路由导入到bgp-afi0.inet.0表中。vpe1020aldp具有列出afi32a作为具有由vp1018通告的标签的下一跳的3.3.3.3。在ofp中,vpe20a的ldp进程用rib1145和fib1142中的bgp-afi0.inet.03.3.3.3前缀下一跳(fi-1/0/0)替换3.3.3.3前缀的下一跳(afi32a)。图28是图示了示例系统1220的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图28的示例被用来描述本公开的技术的各个方面,其包括用于资源预留协议(rsvp)的传输lsp设置。图28可以是图24中描述的进程的示例。当vp1018接收针对lsp到vpeofp标识符(vp1018(su)中的本地配置(或特定路由))的信令请求时,,vp1018发信号通知外标签,并且设置到用于vpe1020a的上下文fib的表下一跳。随后进入lsp的分组代表vpe20a在mpls.0和contextrib中经历查找。vp1018将其所有直接路由经由ofp会话导出到具有结构接口的vpe1020a作为最佳结构路径协议下一跳(ofppnh)。vpe1020a将这些路由导入rib1145的私有rib(例如,bgp-afi([0-64]).inet(6).0)中。vpe1020a的rsvp进程(例如,rpd1134的一部分)使用该私有rib中的下一跳来替换rib1145和fib1142中的afi。假设图1028的示例拓扑结构,vpfi-4/0/1和ge-4/0/1处在同一pfe中。vp1018使用具有128.1.1.6作为(使用ofppnh算法通过vp1018的ofp进程1146选择的)下一跳的ofp会话向vpe1020a导出10.1.1.1/30(直接路由)。vpe1020a将该路由导入到bgp-afi0.inet.0表中。vpe1020a使用路径<afi0,ge-4/0/1(10.1.1.1)>计算到pe1028b(lo0:3.3.3.3)的lsp的路径。vpe1020a的rsvp进程(例如,rpd1134的一部分)发信号通知该lsp,并且当发信号通知完成时,rsvp进程将添加3.3.3.3路由,其中afi0作为下一跳。如果需要ofp,则vpe20arsvp将3.3.3.3前缀下一跳(afi0)替换为rib1145和fib1142中的bgp-afi0.inet.03.3.3.3前缀下一跳(fi-1/0/0)。在一些示例中,如果3.3.3.3具有多于一个接口,那么rsvp可能能够使用多个接口。在一些示例中,vnode可以经由ofp会话用信号通知关于afi/fi带宽、afi/fi统计或afi/fi服务类别(cos)中的一个或多个的信息。图29是图示了根据本公开中所描述的技术的示例操作模式的流程图。图29描述了单机架路由器(诸如图21a至图21b的单机架路由器1012)的虚拟节点在在从边缘到核心的互联网流量的上下文中执行ofp技术时的操作。出于示例的目的,关于图29和图29的示例对图29进行描述。vp1018选择最佳结构路径结构接口以供vpe20使用作为到达vp1018的pfe的协议下一跳(pnh),以用于将网络流量从该pfe转发到远程pe网络设备地址(1300)。远程pe网络设备可以能够经由客户边缘(ce)网络设备到达诸如客户网络的网络目的地。例如,vp1018的ofp进程1146可以使用上文所描述的ofp算法来选择ofp结构接口。例如,通过由ofp会话1034(图21b)发送路由协议消息,vp1018经由vp1018与vpe1020a之间的ofp会话将所选择的最佳结构路径结构接口通告给vpe1020a(1302)。例如,vp1018可以经由由rpd1134管理的bgp会话发送bgp消息,该bgp消息具有如本文中所描述的multinext跳属性,其中multinext跳属性将结构接口指定为用于到达远程pe地址的pnh,并且取决于其是在边缘到核心方向上发送还是在核心到边缘方向上发送而指定本地地址和网络目的地,诸如远程pe地址或远程ce地址(例如,ip地址或网络前缀)。例如,在图30的示例中,vp1018可以发送具有multinext跳属性的bgp更新消息,其指定结构接口fi-3/0/0作为用于到达ce1023b可到达的网络前缀10.1.3.0/24的pnh,并且指定pe1028a的环回地址2.2.2.2作为用于网络前缀的pnh。vpe1020a经由ofp会话从vp1018接收所通告的最佳结构路径结构接口(1304),并且将ofp结构接口、vp1018的本地地址和网络目的地地址存储到诸如ofp上下文数据库1148的数据结构(1306)。在一些示例中,multinext跳属性可以包括指定通告是用于下游分配还是上游分配的字段(例如,位)。在这种情况下,multinext跳属性指定通告用于下游分配。例如,响应于确定multinext跳属性指定通告用于下游分配,vpe1020a的ofp进程1146或rpd1134可以将来自multinext跳属性的信息存储到ofp上下文数据库1148。当安装路由时,rpd1134咨询ofp上下文数据库1148,并且基于来自multinext跳跃属性的信息,可以选择并且安装具有结构接口的路由作为rib1145中的下一跳(1308)。rpd1134可以使用可从ofp上下文数据库1148获得的附加信息来从vpe1020a可以朝向vp1018将流量转发到目的地的多个结构接口中做出更为消息灵通的选择。rpd1134然后当执行路由解析时使用在rib1145中具有结构接口的路由来将下一跳和传出接口编程到asic1168中的ifl1171(1310)。随后,vpe1020a使用由vp1018选择和共享的ofp结构接口来转发所接收的去往目的地的分组(1312)。具体而言,vpe1020a在公共接口上接收分组,并且在转发表中查找分组上的标签,以及基于查找来标识在路由解析期间编程的ofp结构接口。例如,vpe1020a在转发表1228(vpe1020a.inet.0(图32))中查找标签。vpe1020a经由ofp结构接口将流量转发到单机架路由器1012的交换结构1126上,并且vp1018在vp1018的pfe处接收结构接口上的分组(1314)。vp1018在诸如转发表1230(mpls.0(图31))的转发表中进行查找以确定分组应当在其上被转发的出口接口。然后vp1018从与在其上接收分组的pfe相同的pfe朝向网络目的地将分组转发出出口接口(1316)。这样,vp1018避免做出如果vp1018接收到与具有出口接口的pfe不同的pfe上的分组则可能发生的不必要的结构跳,如同当使用聚合结构接口而非更具体的ofp结构接口时可能的情况。在vp正在向vpe提供关于传输隧道端点的信息以及用于那些传输隧道端点的到pfe的ofp结构接口的意义而言,在边缘到核心的转发方向上,ofp用于传输层可达性信息,并且最佳转发决定在传输层中正在发生。传输隧道端点(网络目的地)标识远程提供商边缘路由器(例如,pe1028a)。图30是图示了示例系统1225的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图30的示例被用来描述本公开的技术的各个方面,其包括在从边缘朝向核心(例如,朝向ip/mpls核心网1016)的互联网流量的上下文中的ofp。在图30的示例中,vpe1020a和vp1018处于同一机架中,并且核心包括核心路由器(“p路由器”)1030a和远程pe1028a。使用mpls标签协议(ldp/rsvp)启用vpe1020a、vp和pe1028a。传输lsp的全网格可以在pe之间设置(例如,使用图24的技术)。pe1028a和vpe1020a运行bgp会话以交换路由,例如,在inet.0中。pe1028a在无bgp的核心网中通过自己通告inet.0路由(这里为10.1.3/24)。在没有本公开的技术的情况下,图30中的路由器的rib可能包含以下条目。vpe1020a:inet.3/lsp-db2.2.2.2,fnh:{lsp-to-2.2.2.2,egress-ifl:afi0.0(fi-0/0/0,fi-0/0/1)}(out-labelna:inlabel200)inet.010.1.3.0/24,pnh:2.2.2.2,indirectnh:inet.32.2.2.2fnh.vp18:inet.3/lsp-db2.2.2.2,fnh:lsp-to-2.2.2.2(out-label200:inlabel3)mpls.0label:200,fnhpop;ge-4/0/0pe28a:inet.010.1.3.0fnh:ce1inet.3/lsp-db2.2.2.2receive(out-label3:inlabelna)pebgpvpe20ain-rib10.1.3/24:self.从ofp角度来看,感兴趣的rib为vpe1020a的inet.3。在没有ofp的情况下,ldp和rsvp使用afi0.0(fi-0/0/0,fi-0/0/1)。对于ofp,inet.3路由应当只包含fi-0/0/1作为下一跳接口。在上述示例中,在无编号结构接口的情况下,结构接口ip地址将被替换为pfe-id。图31是图示了单机架路由器1012的转发平面1226的示例部分的框图。如所示出的转发平面1226的部分包括vpe1020a的交换结构1126和路由表1228(vpe20a.inet.0),以及vp的mpls路由表1230(mpls.0)。在图31的示例中,进入vpe1020a的出口接口的分组将在路由表1228中进行查找以将结构接口标识为下一跳。该分组将通过交换结构1126在结构接口上输出,并且由vp在其结构接口上接收,以便在mpls路由表1230中查找,以将vp1018的出口接口标识为用于朝向单机架路由器1012外部的其网络目的地输出分组的下一跳。vp1018将基于mpls路由表1230中的查找来在出口接口上输出分组。来自vp1018的ofpbgp会话将直接路由和ldp路由导出到vpe1020a,其中结构接口地址匹配。vpe1020a由这些路由构造ofp上下文数据库1148(可以是路由表)。当安装afi作为下一跳的路由而非安装结构接口fi-0/0/1作为rib1145和fib1142中的下一跳接口时,ldp和rsvp咨询ofp上下文数据库1148。每当底层结构接口改变时,ldp/rsvp重新添加下一跳,以便底层结构接口在rib1145和fib1142中保持最新。这样,vp1018使用mp-bgpofp会话向vpe1020a发送具有(如由ofppnh算法确定的)期望结构接口地址的本地地址和远程pe地址。vpe1020a将该ofp信息存储到ofp上下文db1148,并且使用该附加信息来选择聚合结构接口的成员链路,而非结构接口,并且将该路由安装在rib1145(例如,inet.3)中。当vpe1020a随后基于rib1145来执行路由解析时,正确的成员链路结构接口将被用于编程asic1168。图32是图示了根据本公开中所描述的技术的另一示例操作模式的流程图。图32描述了诸如图21a至图21b的单机架路由器1012的单机架路由器在在从核心到边缘的互联网流量的上下文中执行ofp技术时的虚拟节点的操作。出于示例的目的,关于图30和图31的示例来对图32进行描述。vpe1020选择用于vp1018的最佳结构路径结构接口以作为用于到达vpe1020的pfe的pnh,以用于将网络流量从该pfe转发到目的地前缀,诸如经由ce路由器可达到的前缀(1400)。例如,vpe1020的ofp进程1146可以使用上文所描述的ofp算法来选择ofp结构接口。例如,通过在ofp会话1034(图21b)上发送路由协议消息,vpe1020经由vp1018与vpe1020a之间的ofp会话向vp1018通告所选择的最佳结构路径结构接口(402)。例如,vpe1020可以经由由rpd1134管理的bgp会话发送bgp消息,该bgp消息具有如本文中所描述的multinext跳属性,其中multinext跳属性将结构接口指定为用于到达网络前缀的pnh,并且指定vpe1020的本地地址和网络前缀地址。例如,在图33的示例中,vpe1020可以发送具有multinext跳属性的bgp更新消息,其指定结构接口fi-0/0/0作为用于到达网络前缀10.1.1.0/24的pnh,并且指定vpe1020的环回地址1.1.1.1。multinext跳属性还可以指定在其中安装结构接口的上下文表(例如,上下文路由表和/或上下文转发表),诸如通过包括上下文标签(例如,mpls标签)。上下文表可以是vpe1020的镜像路由表1249,vpe1020针对其镜像路由。例如,在图34的示例中,multinext跳属性可以指定由vp1018存储的名为vpe1020a.inet.0的上下文表,结构接口下一跳信息安装到该上下文表。在一些示例中,vpe1020可能先前发送了multinext跳属性,其指令vp1018将上下文表安装到其路由信息。可替代地,这个指令可能被包含在与指定要在上下文表中安装的结构接口的multinext跳属性相同的multinext跳属性中。vp1018接收通告ofp结构接口的路由协议消息(404)。vp1018的rpd将来自消息的前缀和结构接口导入到指定的路由表(例如,vpe20a.inet.0)中(406)。vp1018的rdp将转发平面编程为包括基于路由表的转发表。在一些示例中,vp1018的rpd可以将关联的mpls表1246(例如,图34的mpls.0)中的传输lsp标签编程为指向上下文转发1248(例如,vpe20a.inet.0)(408)。当vp1018随后从核心网接收传输lsp上的分组时(1410),其上接收到分组的vp1018的分组转发引擎1120在mpls表1246中查找该分组的外层lsp标签,以获得指向上下文转发表1248的表下一跳(1412)。vp1018的分组转发引擎1120然后在上下文路由表1248中查找内层标签或前缀,以选择将分组输出到单机架路由器内的vpe1020a的下一跳的结构接口(1414)。在一些示例中,如图24中所描述的,可以使用最佳结构路径通告如本文中所描述的更早地建立传输lsp。vp1018使用由vpe1020a选择和共享的ofp结构接口将接收的分组转发到单机架路由器1012的交换结构上(1416)。vpe1020a在vpe1020a的pfe处接收结构接口上的分组(1418),并且然后朝向网络目的地从与在其上接收分组的pfe相同的pfe将分组转发出出口接口(1420)。这样,如果vpe1020a在与具有出口接口的pfe不同的pfe上接收到分组,避免了可能出现的不必要的结构跳。就vpe正在提供vp的信息是服务路由(服务平面转发路由)的意义而言,在核心到边缘转发方向上,ofp被用于服务层可达性信息,并且最佳转发决定在服务层正在发生。vpe正在向vp提供vpn标签或ip前缀,并且通过指定ofp结构接口告知vpvp应当将流量发送到哪个出口pfe。在ofp消息中指定的网络目的地标识由连接到结构接口1202a、1202b、1202c的ce网络设备通告的ip前缀,或标识1202a/1202b/1202c的组合的mpls标签。图33是图示了示例系统1240的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图33的示例被用来描述本公开的技术的各个方面,其包括在从核心朝向边缘的互联网流量的上下文中的ofp。在图33的示例中,vpe1020a和vp1018处于同一机架和远程pe1028a中。vpe1020a具有两个pfe(可以处于相同的fpc或不同的fpc中)以及pfe0中的ge-0/0/1和fi-0/0/0还有pfe2中的ge-1/0/1和fi-1/0/0。通过mpls标签协议(ldp/rsvp)启用vpe1020a、vp1018和pe1028a。在pe之间设置全网格传输lsp。在一些示例中,pe和vpe1020a正在运行用于inet单播的bgp以在inet.0中交换路由。在一些示例中,默认情况下,vpe使用ce地址作为下一跳来通告inet.0路由(在这里为10.1.1/24和10.1.2/24)。在一些示例中,用户还可以在无bgp核心中将下一跳配置为路由器本身。在没有本公开的技术的情况下,对于图33的示例中的路由器中的某些前缀,转发表和rib可以如下所示。vpe20a:inet.010.1.1.0/24,fnh:ge-0/0/1(ce212a)10.1.2.0/24,fnh:ge-0/0/2(ce212b)inet.3/lsp-dbvpe20abgpperib-out10.1.1.0/24:self.10.1.2.0/24:self.vp18:inet.3/lsp-db1.1.1.1,fnh:lsp-to-1.1.1.1(out-label100:inlabel3):mpls.0label:100,fnhpop;afi0pe28a:inet.010.1.1.0/24,pnh:1.1.1.1,fnh:lsp-to-1.1.1.110.1.2.0/24,pnh:1.1.1.1,fnh:lsp-to-1.1.1.1:inet.3/lsp-db1.1.1.1(out-label3:inlabelna)pe28abgpvpe20ain-rib10.1.1/24:1.1.1.1.10.1.2/24:1.1.1.1在上述示例中,在无编号结构接口的情况下,结构接口ip地址可能被替换为pfe-id。pe1028a将lsp的传输标签推送到1.1.1.1,并且发出分组到vp1018。vpn1018在mpls表中进行查找,其通常导致弹出标签并且将ip分组发送到vpe1020a。vpe1020a在inet.0中进行查找并且将分组发送到相应的ce1212a至1212b。对于最佳结构路径(ofp),假设从具有为1.1.1.1协议下一跳的vpe1020a通告的所有前缀都需要ofp。从转发角度来看,vpe1020a和pe1028a没有改变。但是vp1018发生了改变,其需要发送到ce托管的pfe,而非简单地弹出并经由afi0转发到vpe1020a。为了启用用于vp1018的这个附加角色,在vp1018处使用连接到相应的ce连接的pfe的afi0的成员链路(fi)来填充上下文inet.0fib。在一个示例中,vp1018的fib如下所示。使用本文中所描述的机制,vpe1020a控制平面扮演在vp1018中填充vpe20a.inet.0表的角色。vp:inet.3/lsp-db1.1.1.1,fnh:lsp-to-1.1.1.1(out-label100:inlabel3):mpls.0label:100,fnhpop;table-nh:vpe20a.inet.0:vpe20a.inet.010.1.1.0/24,fnh:fi-3/0/010.1.2.0/24,fnh:fi-3/0/1在上述示例中,在无编号结构接口的情况下,结构接口ip地址将被替换为pfe-id。在vpe1020a和vp1018之间建立单跳mp-ibgp会话(ofp会话)。并且,vpe1020a使用期望的本地fi的地址作为下一跳而非自身/下一跳地址通告需要ofp(最佳结构路径)的前缀。vpe1020a的ofp进程1146使用ofp算法为前缀动态计算所期望的本地fi的地址,并且重写默认的bgp下一跳。期望fi的地址将驻留在与前缀下一跳相同的pfe中。vp1018通过vpe1020a所通告的下一跳地址导入vpe.inet.0中的该前缀。如果需要ecmp,则在ofp会话中可以使用下一跳属性以及链路社区以用于不等负载平衡。如果聚合被启用朝向核心,则解聚合前缀应当被导出到ofp会话。vpe20a.inet.0还安装指向afi接口的默认路由。如果路由被聚合,则导出的解聚合路由仅用于与ofppnh的ofp会话。通过vp1018的上下文rib中的解聚合路由,可以进行最佳结构跳。在一些情况下,如果只有前缀子集需要ofp,则vpe可以使用辅助环回地址通告需要ofp的前缀,并且使用常规环回地址通告不需要ofp的前缀。vp1018还需要将传输lsp标签编程到表下一跳,而非弹出并转发。在一些示例中,这可以通过vp1018中的本地配置(类似于出口保护)来实现,以将用于lsp-1.1.1.1的标签编程到指向vpe1020a.inet.0的表下一跳。图34是图示了单机架路由器的转发平面1242的示例部分的框图。如所示出的转发平面1242的部分包括vp1018的交换结构1126和mpls路由表1246(mpls.0),其具有指向已经由vpe1020a安装的上下文下一跳路由表(vpe1020a.inet.0)和vpe1020a的路由表(vpe1020a.inet.0)的表下一跳。图35是图示了示例系统1250的框图,其示出了包括具有虚拟节点的单机架路由器的另一示例网络拓扑结构。图35的示例被用来描述本公开的技术的各个方面,其包括l3vpn的上下文中的ofp。对于l3vpn,vpe1020a向pe通告per-pfe-per-table标签。vpe1020a还使用具有新bgpmpls地址族的期望fi接口通告该标签per-pfe-per-tablelabel。vp1018使用基于rfc5331的上下文标签空间将该标签导入vpe1020a.mpls.0,并且将vpe1020a地址绑定到上下文表。类似于上文所描述的互联网解决方案,vp1018在mpls路由表1256中进行mpls.0查找,随后在上下文下一跳mpls路由表1254中进行vpe0.mpls.0查找,以选择最佳结构路径。不同之处在于,与上文所描述的互联网解决方案相比较,第二查找将在vpe1020a.mpls.0中进行,如图35所示。当vpe1020a接收到分组时,它在mpls路由表1256中查找分组以获得到路由表1258的表下一跳,其中它获得出口接口,在该出口接口上,要从相同的pfe输出分组,在该相同的pfe上vpe1020a接收到分组。图36是图示了示例系统1601的框图,其中vnode执行用于从ip/mpls核心网1016向ce1023发送流量的控制平面信令。在图21的示例中,vpe1020a是私有ip(pip)vpe。在其用于pfe1024a的转发信息库(fib)1304中,vpe1020a存储:1.1.1.0/24nh:et-1/0/0.02.2.2.0/24nh:et-1/0/0.0vpe1020a经由用于vpn服务的服务路由反射器(rr)1026向远程pe1028a通告per-vrf-per-pfe标签。例如,vpe1020a向服务rr1026通过mp-bgp会话1608在一个或多个mp-bgp路由通告1610中通告具有结构接口per-pfe-table-label。服务rr1026又向pe1028a反映所通告的路由。例如,在一个或多个路由通告1610中被通告的具有结构接口的per-pfe-table-label包括[2.2.2.0/24,nh:fi-1/1/0,标签:30]和[1.1.1.0/24,nh:fi-1/1/0,标签:20]。响应于接收到所通告的per-pfe-tablelabel,pe1028a将来自路由通告的信息存储到fib1604,如下:1.1.1.0/24bgp-nh:vpe1020aloopbackaddressvpn-label-push-202.2.2.0/24bgp-nh:vpe1020aloopbackaddressvpn-label-push-30例如,在vp1018的vcp25c内执行的bgp进程使用其自身与在vp1018的vcp25a内执行的bgp进程之间的mp-bgp建立ofp会话1034。vp1018通过ofp会话1034通告vp1018的标签和相关联的结构接口作为ofp下一跳。vp1018使用该vpn/服务标签来标识要向其转发分组的vpe1020a的正确pfe。如本文中关于图1至图20所描述的,因为vpe1020a和vp1018之间的单个mp-bgp会话(ofp会话1034)被用来使用新上游标签分配地址族来用信号通知该关联,所以vp1018知道服务标签与pfe的关联。vp1018参考其mpls表和上下文转发表vpe20a.mpls.0来查看传入分组的传输和服务标签,以作出关于在何处转发传入分组的决定。在一些示例中,vpe1020a经由ofp会话1034仅向vp发信号通知服务标签和下一跳信息(前缀信息没有被发信号通知)。例如,基于在ofp会话1034中接收到的ofp信息,vp1018更新其mpls.0表以包括以下条目:label100nh:table-nhvpe20a.mpls.0因此,mpls.0表指向vpe1020a.mpls.0作为用于标签100的表下一跳。响应于接收到mp-bgp路由通告,vpe1020a.mpls.0包括如由ofp进程更新的以下条目,以包括结构接口:label20nh:fi-3/0/0label30nh:fi-3/0/1在一些示例中,该途径可以支持具有属于单个pfe的接口的vrf,以及具有分布在多个pfe和/或线卡中的接口的vrf。从vpe1020a到核心网1016的转发构造描述如下。在一些示例中,按照标签分发协议在vp1018上执行的ldp进程向vpe1020a通告用于远程pe(例如,用于pe1028a)的环回地址的ldp标签,以及所选择的最佳结构接口地址。例如,如本文中的示例所描述的,ldp进程可以与在vp1018上执行的bgp进程通信以触发bgp进程以在bgp消息的multinexthop属性子tlv中通告该信息。每当ldp进程检测到传出下一跳pfe已经改变时,ofp进程可以选择新最佳结构接口并且触发ldp进程,以使得bgp使用更新后的最优结构接口的地址来通告新bgp消息。所选择的(例如,使用本文中所描述的ofppnh算法选择的)ofp结构接口的地址应当与用于给定前缀的传出接口处于相同的pfe中。这会导致传入虚拟结构接口上的分组通过结构进入pfe,并且出口相同的pfe到达核心,而无需附加环路。在这个示例中,用于发信号通知的bgp和bgp还用于其他方向。在一些示例中,本公开的技术可以通过使用vrf-pfe-table-label导致转发状态缩放改善。网络中的附加(服务)标签如下所示:对于一个pfe上托管的vrf:无附加标签(vrf-table-label)。对于m个这样的vrf:标签的数目为m;与vrf-table-label相同。对于n个pfe上托管的vrf:(n-1)个附加标签。对于m个这样的vrf:(n-1)*m个附加标签。vp1018中的附加状态如下所示:vp1018包含用于最佳转发的每个pfe上游流量标签。标签的数目如下:(vpe的编号)*(vrf的编号)*n,其中n=跨其传播vrf的pfe的数目。图37是图示了示例系统1620的框图,其中vnode基于图36的控制平面信令来执行从ip/mpls核心网1016朝向ce1023的分组的数据平面转发。图38是图示了说明vpe1020a的pfe和vpe1020b之间的vpe间通信的示例系统1700的框图。从vpe1020a到vpe1020b的转发构造描述如下:vpe1020a建立到vp(作为gnfrr)节点或vpe1020b的bgp会话(例如,vcp1025a和vcp1025b之间的bgp会话1702)。vpe1020a使用bgp会话通过所选择的ofp虚拟结构接口的地址通告需要进入rr/vpe的vpe间流量的任何本地始发的vpn前缀。对于给定前缀,所选择的(例如,使用本文中所描述的ofppnh算法选择的)ofp结构接口的地址和传出到ce的接口应当处于相同的pfe1024中。这导致传入虚拟结构接口上的分组进入pfe1024(例如,pfe1024c),并且从相同的pfe发出到达核心或ce,而无需附加环路。针对需要vpe间流量的vpnip前缀,入口vpe1020a具有两个路由,一个来自服务rr而另一个来自gnfrrvp1018或vpe1020b。入口vpe1020a从用于需要vpe间流量的vpnip前缀的vpe/rr中选择路由,并且使用所选择的ofp结构接口。vp(su)可以被配置有转发上下文以支持用于互联网和ipvpn示例的ofp。在一个示例方面中,一种方法包括:通过第一网络设备接收路由通告消息,该路由通告消息包括用于上游分配的属性,该属性指定信息,其包括用于到达路由通告信息中的网络目的地的第二网络设备的多个下一跳;多个转发语义,其描述与多个下一跳中的每个下一跳中的各个下一跳以及多个下一跳中的各个下一跳属性相关联的转发动作;以及字段,其指示该属性被提供用于下游分配还是上游分配。该方法还包括:响应于通过网络设备确定该字段指示属性被提供用于上游分配:通过网络设备并且基于多个转发语义来将多个下一跳、转发动作和下一跳属性安装到由网络设备存储的转发信息;以及通过网络设备并且基于转发信息将转发动作应用于由网络设备接收并且当将网络流量转发到多个下一跳中的一个或多个下一跳时去往网络目的地的网络流量。该方法还包括:响应于通过网络设备确定该字段指示属性被提供用于下游分配,基于第二网络设备的多个下一跳中的一个或多个下一跳和相关联的转发语义来选择向其转发流量的第二网络设备。在另一示例方面中,一种网络设备包括一个或多个处理器;控制单元,其可由一个或多个处理器操作并且被配置为接收路由通告消息,该路由通告消息包括用于上游分配的属性,该属性指定信息,其包括用于到达路由通告信息中的网络目的地的第二网络设备的多个下一跳;多个转发语义,其描述与多个下一跳中的每个下一跳中的各个下一跳以及多个下一跳中的各个下一跳属性相关联的转发动作;以及字段,其指示该属性被提供用于下游分配还是上游分配,其中该控制单元被配置为:响应于确定该字段指示属性被提供用于上游分配:基于多个转发语义来将多个下一跳、转发动作和下一跳属性安装到由网络设备存储的转发信息;以及基于转发信息将转发动作应用于由网络设备接收并且当将网络流量转发到多个下一跳中的一个或多个下一跳时去往网络目的地的网络流量;并且其中该控制单元被配置为:响应于确定该字段指示属性被提供用于下游分配,基于第二网络设备的多个下一跳中的一个或多个下一跳和相关联的转发语义来选择向其转发流量的第二网络设备。在又一示例方面中,一种计算机可读存储介质包括用于使得第一网络设备的一个或多个可编程处理器执行以下操作的指令:接收路由通告消息,该路由通告消息包括用于上游分配的属性,该属性指定信息,其包括用于到达路由通告信息中的网络目的地的第二网络设备的多个下一跳;多个转发语义,其描述与多个下一跳中的每个下一跳中的各个下一跳以及多个下一跳中的各个下一跳属性相关联的转发动作;以及字段,其指示该属性被提供用于下游分配还是上游分配;响应于确定该字段指示属性被提供用于上游分配:基于多个转发语义来将多个下一跳、转发动作和下一跳属性安装到由网络设备存储的转发信息;以及基于转发信息将转发动作应用于由网络设备接收并且当将网络流量转发到多个下一跳中的一个或多个下一跳时去往网络目的地的网络流量;以及响应于确定该字段指示属性被提供用于下游分配,基于第二网络设备的多个下一跳中的一个或多个下一跳和相关联的转发语义来选择向其转发流量的第二网络设备。在一个示例方面中,一种方法包括:通过第一网络设备从第二网络设备接收私有标签路由消息,该私有标签路由消息指定作为目的地的私有标签、用于私有标签的出口网络设备的路由区分符、标识私有多协议标签交换(mpls)转发层的上下文协议下一跳地址、以及用于私有标签的下一跳;通过第一网络设备并且基于私有标签路由消息来确定具有多个标签的标签堆栈,该标签堆栈用于向用于私有标签的下一跳转发流量;以及在与私有mpls转发层相关联的上下文转发表中存储私有标签目的地,其中标签堆栈作为用于到达私有标签的下一跳。在另一示例方面中,一种网络设备包括一个或多个处理器;路由组件,其可由一个或多个处理器操作并且被配置为从第二网络设备接收私有标签路由消息,该私有标签路由消息指定作为目的地的私有标签、用于私有标签的出口网络设备的路由区分符、标识私有多协议标签交换(mpls)转发层的上下文协议下一跳地址、以及用于私有标签的下一跳;基于私有标签路由消息来确定具有多个标签的标签堆栈,该标签堆栈用于向用于私有标签的下一跳转发流量;以及转发组件,其可由一个或多个处理器操作并且被配置为在与私有mpls转发层相关联的上下文转发表中存储私有标签目的地,其中标签堆栈作为用于到达私有标签的下一跳。在又一示例方面中,一种计算机可读存储介质包括用于使得第一网络设备的一个或多个可编程处理器执行以下操作的指令:从第二网络设备接收私有标签路由消息,该私有标签路由消息指定作为目的地的私有标签、用于私有标签的出口网络设备的路由区分符、标识私有多协议标签交换(mpls)转发层的上下文协议下一跳地址、以及用于私有标签的下一跳;基于私有标签路由消息来确定具有多个标签的标签堆栈,该标签堆栈用于向用于私有标签的下一跳转发流量;以及在与私有mpls转发层相关联的上下文转发表中存储私有标签目的地,其中标签堆栈作为用于到达私有标签的下一跳。在一个示例方面中,一种方法包括:通过具有多个转发组件和多个结构链路的单机架网络设备的第一虚拟路由节点选择多个转发组件中的一个转发组件的结构接口,该多个结构链路耦合多个转发组件的相应结构接口处的多个转发组件的相应对,该结构接口具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;通过第一虚拟路由节点向第二虚拟路由节点通告作为用于网络目的地的下一跳的结构接口;响应于接收到结构接口,通过第二虚拟路由节点将作为用于网络目的地的下一跳的结构接口存储到第二虚拟节点的上下文转发表;通过第二虚拟路由节点并且基于上下文数据结构来从多个结构接口中选择结构接口作为下一跳用于转发去往网络目的地的网络流量;以及通过第二虚拟路由节点向选定结构接口转发去往网络目的地的网络分组。在另一示例方面中,一种单机架网络设备包括多个转发组件;多个结构链路,其耦合多个转发组件的相应结构接口处的多个转发组件的相应对;第一虚拟路由节点,其被配置为使用多个转发组件的第一子集来转发分组;以及第二虚拟路由节点,其被配置为使用多个转发组件的第二子集来转发分组,第二子集与第一子集不同,其中第一虚拟路由节点被配置为:选择多个转发组件中的一个转发组件的结构接口,其具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;向第二虚拟路由节点通告作为用于网络目的地的下一跳的结构接口,并且其中第二虚拟路由节点被配置为:响应于接收到结构接口,将作为用于网络目的地的下一跳的结构接口存储到第二虚拟节点的上下文转发表;基于上下文数据结构来从多个结构接口中选择结构接口作为下一跳用于转发去往网络目的地的网络流量;以及向选定结构接口转发去往网络目的地的网络分组。在又一示例方面中,一种计算机可读存储介质包括用于使得单机架网络设备的一个或多个可编程处理器进行以下操作的指令:通过具有多个转发组件和多个结构链路的单机架网络设备的第一虚拟路由节点选择多个转发组件中的一个转发组件的结构接口,该多个结构链路耦合多个转发组件的相应结构接口处的多个转发组件的相应对,该结构接口具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;通过第一虚拟路由节点向第二虚拟路由节点通告作为用于网络目的地的下一跳的结构接口;响应于接收到结构接口,将作为用于网络目的地的下一跳的结构接口存储到第二虚拟节点的上下文转发表;通过第二虚拟路由节点并且基于上下文数据结构来从多个结构接口中选择结构接口作为下一跳用于转发去往网络目的地的网络流量;以及通过第二虚拟路由节点向选定结构接口转发去往网络目的地的网络分组。在一个示例方面中,一种方法包括:通过具有多个转发组件和多个结构链路的单机架网络设备的第一虚拟路由节点选择多个转发组件中的一个转发组件的结构接口,该多个结构链路耦合多个转发组件的相应结构接口处的多个转发组件的相应对,该结构接口具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;通过第一虚拟路由节点向第二虚拟路由节点通告作为用于网络目的地的下一跳的结构接口和用于建立传输标签交换路径lsp的标签;响应于通过第二虚拟路由节点接收到结构接口和标签:更新存储的路由信息以将聚合结构接口替换为结构接口,通过第二虚拟路由节点计算用于传输lsp的路径以包括结构接口,以及通过第二虚拟路由节点使用标签沿着所计算的路径建立传输lsp。在另一示例方面中,一种单机架路由器包括多个转发组件;多个结构链路,其耦合多个转发组件的相应结构接口处的多个转发组件的相应对;第一虚拟路由节点,其被配置为使用多个转发组件的第一子集来转发分组;以及第二虚拟路由节点,其被配置为使用多个转发组件的第二子集来转发分组,第二子集与第一子集不同,其中第一虚拟路由节点被配置为:选择多个转发组件中的一个转发组件的结构接口,其具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;向第二虚拟路由节点通告作为用于网络目的地的下一跳的结构接口和用于建立传输标签交换路径(lsp)的标签,并且其中第二虚拟路由节点被配置为:响应于通过第二虚拟路由节点接收到结构接口和标签:计算用于传输lsp的路径以包括结构接口代替结构接口是其成员的聚合结构接口,以及使用标签沿着所计算的路径建立传输lsp。在又一示例方面中,一种计算机可读存储介质包括用于使得单机架网络设备的至少一个可编程处理器进行以下操作的指令:通过具有多个转发组件和多个结构链路的单机架网络设备的第一虚拟路由节点选择多个转发组件中的一个转发组件的结构接口,该多个结构链路耦合多个转发组件的相应结构接口处的多个转发组件的相应对,该结构接口具有朝向网络目的地的出口接口并且与第一虚拟路由节点相关联;通过第一虚拟路由节点向第二虚拟路由节点通告作为用于网络目的地的下一跳的结构接口和用于建立传输标签交换路径lsp的标签;响应于通过第二虚拟路由节点接收到结构接口和标签:计算用于传输lsp的路径以包括结构接口,代替结构接口是其成员的聚合结构接口,以及通过第二虚拟路由节点使用标签沿着所计算的路径建立传输lsp。本公开中所描述的技术可以至少部分地以硬件、软件、固件或其任何组合来实现。例如,所描述的技术的各个方面可以在一个或多个处理器内实现,该一个或多个处理器包括一个或多个微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或任何其他等效集成或离散逻辑电路、以及这些组件的任何组合。术语“处理器”或“处理电路”通常可以是指单独的或与其他逻辑电路组合的前述逻辑电路中的任一者、或任何其他等效电路。包括硬件的控制单元还可以执行本公开的技术中的一种或多种技术。这样的硬件、软件和固件可以在相同的设备内或在分离的设备内实现,以支持本公开中所描述的各种操作和功能。另外,所描述的单元、模块或组件中的任一个可以一起或单独地被实现为离散但可互操作的逻辑设备。将不同特征描绘为模块或单元旨在强调不同的功能方面,并且不一定暗示这些模块或单元必须由分离的硬件或软件组件来实现。相反,与一个或多个模块或单元相关联的功能可以由分离的硬件或软件组件执行,或者在公共的或分离的硬件或软件组件内集成。本公开中所描述的技术还可以在包含指令的计算机可读介质(诸如计算机可读存储介质)中实现或编码。在计算机可读介质中嵌入或编码的指令可以使得可编程处理器或其他处理器例如当指令被执行时,执行该方法。计算机可读介质可以包括非暂态计算机可读存储介质和暂态通信介质。计算机可读存储介质是有形且非暂态的,可以包括随机存取存储器(ram)、只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电子可擦除可编程读取(eeprom)、闪存、硬盘、cd-rom、软盘、盒式磁带、磁性介质、光学介质或其他计算机可读存储介质。应当理解,术语“计算机可读存储介质”是指物理存储介质,而非信号、载波或其他暂态介质。已经对本公开的各个方面进行了描述。这些和其他方面在以下权利要求的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1