用于服务和拓扑交换的中央授权机构的制作方法

文档序号:28082812发布日期:2021-12-18 01:35阅读:131来源:国知局
用于服务和拓扑交换的中央授权机构1.相关申请的交叉引用2.本专利申请与于2016年2月26日提交的题为“name‑basedroutingsystemandmethod(基于名称的路由系统和方法)”、代理人案号为4094/1014并且将melampy、baj、kumar、penfield和timmons任命为发明人的美国专利申请号为15/054,781(现在发布为美国专利no.9,985,883)的专利申请相关,其公开内容通过引用整体被并入本文中。3.本专利申请也与于2015年8月24日提交的题为“networkpacketflowcontrollerwithextendedsessionmanagement(具有扩展会话管理的网络数据包流控制器)”、代理人案号为4094/1011并且将kaplan、kumar、timmons和melampy任命为发明人的美国专利申请号为14/833,571(现在发布为美国专利no.9,762,485)的专利申请相关,其公开内容通过引用整体被并入本文中。
技术领域
:4.本公开总体上涉及针对服务和拓扑交换的中央授权机构,该服务和拓扑交换用于通过网络中的路由器来分发路由信息并且在网络中的路由器之间分发路由信息。
背景技术
::5.诸如来自马萨诸塞州伯灵顿的128技术的128t路由平台的路由平台可以被认为是面向服务的,因为服务配置是数据模型(以及因此配置范式)的焦点。在这样的面向服务的路由平台中,管理员可以限定服务以表示它们的网络被设计为递送到消费者的能力,并且这些服务以及它们的必需策略和特性指示流量模式如何遍历网络。6.128t路由平台包括两个主要组件:会话智能路由器(ssr)和引导器。ssr和引导器一起形成被高度分发的单个逻辑控制层,以及真正地会话感知的数据层。ssr将以服务为中心的控制层与会话感知数据层组合,以提供除了高速分组转发、分类以及安全功能之外的所有ip路由表、特征丰富的策略管理、高级数据收集以及分析。引导器是提供用于分布式ssr的编排、管理、零接触配置、监控和分析——同时维持全网络范围、多租户服务以及策略数据模型的集中管理和策略引擎。通过这些组件,128t路由平台支持从小分支办公室到高容量边缘路由器到超大规模软件限定的数据中心的范围内的广泛的部署模型。7.迄今为止,服务的概念已经被限制于单个“路由器”(节点的集合)或通过引导器的使用被导出到使用显式配置的外部路由器。这可以使难以将服务配置扩展到大量ssr。技术实现要素:8.根据本发明的一个实施例,一种用于实现服务和拓扑交换协议(step)的路由系统包括:被配置为维持step存储库的主step服务器以及多个路由器,每个路由器包括与主step服务器通信的step客户端。每个路由器的step客户端被配置为使用服务和拓扑交换协议来将针对通过路由器可用的至少一个路由或服务的服务和拓扑状态信息发送到主step服务器,以用于存储在step存储库中。主step服务器被配置为:至少部分地基于从路由器接收的服务和拓扑状态信息,针对每个路由器来确定step存储库是否包括针对该路由器的任何服务和拓扑状态信息变化,并且使用服务和拓扑交换协议来向存在服务和拓扑状态信息变化的每个路由器的step客户端仅发送服务和拓扑状态信息变化。9.根据另一示例性实施例,一种用于实现服务和拓扑交换协议(step)的服务器包括:数据存储以及与多个路由器通信的step服务器控制器,每个路由器包括step客户端,step服务器控制器被配置为:将step存储库维持在数据存储中;使用服务和拓扑交换协议,从每个路由器的step客户端通过路由器来接收针对至少一个路由或服务的可用的服务和拓扑状态信息;将接收的服务和拓扑状态信息存储在step存储库中;至少部分地基于从路由器接收的服务和拓扑状态信息,针对每个路由器来确定step存储库是否包括针对路由器的任何服务和拓扑状态信息变化;并且使用服务和拓扑交换协议来向存在服务和拓扑状态信息变化的每个路由器的step客户端仅发送服务和拓扑状态信息变化。10.在以上提到的路由系统和服务器的各种备选实施例中,由主step服务器发送的服务和拓扑状态信息变化可以包括:json补丁文档。step存储库中的信息可以被组织为路径树数据库,并且从路由器接收的服务和拓扑状态信息可以包括:标识路由器的路径定义,以用于将路由器的服务和拓扑状态信息存储在路径树数据库中。该系统还可以包括被配置为将step请求代理到主step服务器的至少一个辅step服务器。至少一个路由器可以是多个分区的成员并且可以发送针对至少一个路由器是其成员的每个分区的单独的服务和拓扑状态信息。至少一个路由器可以是多个分区的成员并且可以从主step服务器接收针对至少一个路由器是其成员的每个分区的服务和拓扑状态信息变化。由路由器发送的服务和拓扑状态信息可以包括:针对给定服务的服务水平协议和给定服务是否在服务等级协议内的指示。至少一个路由器可以是分区的成员,并且至少一个路由器可以发送服务和拓扑状态信息,服务和拓扑状态信息包括从分区的外部获知的路由或服务。至少一个路由器可以发送服务和拓扑状态信息,该服务和拓扑状态信息包括针对路由或服务的至少一个路径度量。主step服务器可以与路由器分离或者可以是路由器中的一个路由器。11.附加的实施例可以被公开和声明。附图说明12.本领域技术人员应当从以下参考紧挨着下面概述的附图所讨论的“具体实施方式”更加充分地认识到本发明的各种实施例的优点。13.图1是示出根据一个示例性实施例的step服务器100的主组件的示意图。14.图2是根据一个示例性实施例的在实现高级step服务器功能中的针对step服务器控制器120的逻辑流程图。15.图3是示出根据一个示例性实施例的step客户端300的主要组件的示意图。16.图4是根据一个示例性实施例的针对在实现高级step客户端功能中的step客户端控制器220的逻辑流程图。17.图5是示出被分割为具有多个邻域的一个分区的示例性拓扑的示意图。18.图6是示出与图5相同的拓扑但是被分割成多个分区的示意图。19.图7是示出包括与彼此对等的两个路由的拓扑的示意图。20.图8是示出将bgp重新分发到服务中的示例的示意图。21.图9是示出将bgp重新分发到step中的示例的示意图。22.图10是示出包括不具有接收器的多播配置的拓扑的示意图。23.图11是示出图10的拓扑但是现在具有在其接口中的两个接口上具有所接收的igmp加入的路由器r2的示意图。24.图12是示出与图6相同的拓扑的示意图。25.图13是示出包括引起环路的分区之间的服务交换的拓扑的示意图。26.图14是示出图13的拓扑但是包括具有环路避免的分区之间的服务交换的示意图。27.图15是示出包括在相同分区内的基于源的路由的拓扑的示意图。28.图16是示出包括跨多个分区的基于源的路由的拓扑的示意图。29.图17是示出网络的热度图视图的示意性线框图。30.图18是根据一个示例性实施例的用于发布聚集的路由或服务的逻辑流程图。31.图19是根据一个示例性实施例的用于环路检测和预防的逻辑流程图。32.图20是根据示例性实施例的用于基于源的路由的逻辑流程图。33.图21是示出包括点到多点svr路由的拓扑的示意图。34.图22是示出包括多播代理路由的拓扑的示意图。35.应当注意,前述附图和其中描绘的元素不必按一致的比例或任何比例绘制。除非上下文另行建议,否则类似的元素由类似的数字指示。具体实施方式36.定义37.如本说明书和随附权利要求书中所使用的,除非上下文另行要求,否则以下术语应具有所指示的含义:38.step代表服务和拓扑交换协议,其用于描述用于在路由器之中和之间分发各种类型的服务和拓扑状态信息和用于在做出智能路由决定中使用这样的分布式服务和拓扑状态信息的各种机制。39.授权机构是包括路由器的集合的单个管理域;通常类似于bgp网络中的自治系统(as)。授权机构可以是单个网络、网络的集合或针对路由器组的单个管理实体。在示例性实施例中,授权机构利用文本字符串被命名。授权机构名称是独特的并且可以由保证独特性的命名授权机构或其他技术来指派/管理。在示例性实施例中,私有命名授权机构被使用,但是在备选实施例中,公共命名授权机构(例如,iana或等同)可以被使用。在示例性实施例中,授权机构名称是符合rfc1737的资源名称。40.邻域是可达性的ip网络。被配置为处于相同邻域内的所有路由器接口预期是相互可达的。这包括由网络边界nat和防火墙分离但是相互可达的接口。在示例性实施例中,邻域是应用于描述路由器之间的期望连接性(对等关系)的网络接口的标签(字符串值)。授权机构内的、共享至少一个邻域标签的任何两个路由器接口被假定为被连接到共同的l3网络,其旨在这两个接口能够到达彼此。在示例性实施例中,ssr上的每个网络接口属于至少一个邻域,并且如果网络接口保持未由管理员配置,那么ssr将自动为它指派邻域名称,该邻域名称在授权机构内的所有接口之间是独特的。网络接口可以是多个邻域的成员并且可以包含全部描述相同的非独特l3网络的邻域的用户排序的列表。在该上下文中,用户排序的列表指定邻域的排序,其中所列出的第一邻域将被认为是“主要”邻域,并且将是与针对分析数据、冗余状态信息以及其他接口特异性度量的目的而到达该网络接口的所有入站会话相关联的邻域。属于相同邻域的两个网络接口实际上被当作具有直接邻居关系,即使两个网络接口之间的通信路径通过一个或多个其他路由器。在示例性实施例中,为了约束哪些接口与彼此对等并且避免不必要的对等关系,每个接口的邻域可以被指派以拓扑类型,如网格状、中心式或辐条状,其中网格接口试图与类型网格状或中心式的所有其他邻域接口对等,中心式接口试图与类型网格状的所有其他邻域接口对等,并且辐条状接口试图与类型网格状或中心式的所有其他邻域接口对等。41.分区本质上是邻域的集合。参与分区中的每个路由器将接收关于相同分区内的每个其他路由器接口的链接状态度量。该信息可以用于将服务状态可用性聚集到其他分区。[0042]“租户”是例如针对安全性、可管理性以及分析而要与所有其他隔离和分离的单个子网络。这类似于vlan或vxlan或vrf。租户是由授权机构或父租户指派的文本字符串。[0043]“服务”是单个命名的应用并且是路由的目标。这类似于在dns或cidr块之后的ip地址。服务利用正常地匹配服务的url的文本字符串来被命名。服务由在路由协议内所使用的文本字符串表示。[0044]“服务组”是例如针对可管理性和分析而要被隔离的子网络(租户)的部分。服务组由在路由协议内使用的文本字符串表示。[0045]“合格服务名称”或“qsn”是可寻址资源。这是租户、服务组或服务的文本表示。在示例性实施例中,每个qsn具有一个独特的授权机构并且使用采用形式qsn://subtenant.tenant.authority/servicegroup/service的由rfc3986限定的uri通用语法。服务组是任选的,并且如果它们不被使用,那么qsn可以被缩短以不包括该文本。在于2016年2月26日所提交的相关美国专利申请号为15/054,781(现在发布为美国专利no.9,985,883)的专利申请中描述了qsn、租户、服务组和服务的一些示例性实施例,通过引用将其并入上文。[0046]svr代表安全向量路由。这是分组如何在128t路由平台中的两个对等ssr之间被转发。svr实现如在相关美国专利申请号为14/833,571(现在发布为美国专利no.9,762,485)的专利申请中描述的基于会话的路由的方面,通过引用将其并入上文。[0047]向量是给定路由器接口上的邻域的属性,并且可以由管理员使用以在由路由器采用的路由决定逻辑(路径选择)上施加控制。鉴于邻域描述路由器之间的拓扑(对等关系),向量描述针对在该拓扑上的服务流量的路径偏好。(在接口内的)每个邻域可以包含向量的名称,其是允许管理员将某种属性归于用于影响路由的该邻域的标签。向量还可以被认为是用于邻域内的两个路由器之间的对等关系的名称。一旦向量被配置,管理员就可以将优先级指派给服务策略配置元素内的那些向量,例如,(经由其策略)服务可以指示针对特定服务的优选类型的向量或向量的层次结构。例如,视频会议服务可以被配置为在mpls向量可用的情况下使用该mpls向量并且在另外的情况下使用基本互联网路径向量。另外,服务策略可以断言某些向量决不会被用于针对给定服务。例如,hd视频会议服务当在lte上发送时可能是不可使用或成本高昂的,因此在示例性实施例中,管理员可以关于hd视频服务将“决不”的优先级指派给lte向量。附加地或备选地,向量可以与用于在选择路由中使用的各种度量(例如,成本或基于性能的度量)相关联。例如,如果网络包括具有10、20、50、60的相应成本的向量a、b、c、d并且路由可以使用向量a/c或向量b/d,那么路由器通常将选择具有总成本为60的向量a/c而非具有总成本为80的向量b/d。到特定目的地的不同路由可以通过例如针对web流量的目的而将不同成本指派到针对不同服务的链接来计算,特定链接可以具有成本x并且针对电子邮件流量的目的,该链接可以具有成本y,使得针对web流量和针对电子邮件流量的路由通过网络来遍历的不同路径,即使两种类型的流量到达相同出口路由器。[0048]除非上下文另行要求,否则术语“发布”和“公布”(以及其变型)被可互换地使用。[0049]“集”包括一个或多个成员。[0050]引言[0051]在示例性实施例中,一种用于实现服务和拓扑交换协议(step)的路由系统包括:被配置为维持step存储库的主step服务器以及多个路由器,每个路由器包括与主step服务器通信的step客户端。每个路由器的step客户端被配置为使用服务和拓扑交换协议来将针对通过路由器可用的至少一个路由或服务的服务和拓扑状态信息发送到主step服务器,以用于存储在step存储库中。主step服务器被配置为:至少部分地基于从路由器接收的服务和拓扑状态信息,针对每个路由器来确定step存储库是否包括针对该路由器的任何服务和拓扑状态信息变化,并且使用服务和拓扑交换协议来向存在服务和拓扑状态信息变化的每个路由器的step客户端仅发送服务和拓扑状态信息变化。[0052]示例性实施例在本文中参考由马萨诸塞州伯灵顿的128技术售卖的会话智能路由器(ssr)类型来描述,但是本领域普通技术人员将理解,所描述的实施例的各种方面可以在现在或未来被应用到其他网络化设备以克服本文中所讨论的网络化和配置问题的类型。[0053]如以上所讨论的,大量ssr的服务配置可以是困难的。另外,由于网络是不断地变化的,所以关于服务和服务可达性的信息需要在ssr之间被交换,因为网络和应用状态是动态的。例如,类似于静态路由,服务路通常被配置用于具有众所周知的目的地的服务。在一些情况下,服务借助于路由以便获知下一跳。这些路由可以以各种方式来获知,诸如经由传统路由协议(例如,ospf、bgp等)、经由静态路由或经由连接的路由。每个ssr可以通过运行不同的路由协议来获知不同的路由。路由需要被最终应用于服务,应用于应用,和/或分发到其他ssr。如果一些路由被撤回,那么服务中的一些服务可以变得不可用,并且该状态变化需要被传播。[0054]另外,ssr当前不具有服务在最终目的地(最后一跳)处是否可用的可见性。从网络化的视角,该可见性的缺乏可以导致对分组的不正确路由。[0055]在示例性实施例中,网络的部分内(例如,在如下面所讨论的授权机构或分区内,直到包括整个网络)的路由器实现服务和拓扑交换协议(在本文中被称为step)以交换服务和拓扑状态信息,使得参与step(在下文中被称为step路由器)中的网络的该部分中的每个路由器从网络的该部分中的全部其他step路由器并且任选地还从网络的该部分外部的step路由器来获得服务和拓扑状态信息。此外,step允许step路由器传播网络状态和网络状态变化以及管理跨路由器的服务,例如,因为更多的路由器变成授权机构或分区的部分。网络可以被分割成多个部分,并且step路由器可以是多个部分的成员,由此参与该路由器是其成员的每个部分内的step交换。一个部分中的step路由器可以公布该部分内和该部分外部的服务和路由两者。当公布该部分外部的服务或路由时,服务或路由可以被公布为聚集的服务或路由,例如标识该部分中的一个特定step路由器,通过该特定step路由器服务或路由可以被访问,并且任选地包括针对聚集的服务或路由的聚集的度量(例如,基于与网络的该部分内的服务或路由相关联的个体链接/路径的度量的、针对聚集的服务或路由的损耗、延时、抖动和/或成本值)。此外,这样的分段路由,例如对网络进行分割并且允许公布跨网络分段的聚集的服务和路由,可以减少分发服务和拓扑状态信息需要的信息流的量。[0056]网络的每个部分内的step路由器通常通过配置的关系来指定,例如指定哪些step路由器属于特定授权机构或分区。从这些配置的关系,如下面进一步讨论的,step路由器可以直接地或间接地交换服务和拓扑状态信息。服务和拓扑状态信息可以包括传统链接状态信息(例如,从诸如ospf或bgp的传统路由协议获得)以及附加信息,诸如服务等级协议(sla)信息(例如,针对特定服务的服务等级协议,并且服务是否在服务等级协议内操作)、路径度量(例如,配置的链接速度、实际计算的链接速度、链接状态上/下、抖动、分组丢失率、延时、向量信息和/或每路径/向量的成本值)、多播成员和权限信息以及与做出智能路由决定相关的其他信息。此外,step因此将比单单从传统路由协议可用的更多的信息提供到step路由器,从而允许每个step路由器做出更智能的路由决定,包括基于服务等级协议(sla)和路径度量来对分组进行路由,做出智能多播路由决定,并且支持智能源路由,仅举几种step可以被利用的方式。[0057]在某些示例性实施例中,step使用集中分布系统(在本文中被称为step服务器或step存储库)来实现以通过路由器和在路由器之间来动态地交换服务和拓扑状态信息,使得路由器可以做出更智能的路由决定。具体地,参与step中的每个路由器(在下文中被称为step路由器)将它自己的服务和拓扑状态信息动态地发送到step存储库并且基于step路由器之间的配置的关系来从step存储库动态地接收针对一个或多个其他step路由器的服务和拓扑状态信息。step存储库由如下面所讨论的各种网络设备中的任何设备中的step服务器管理,并且每个step路由器实现关于该客户端‑服务器模型的step客户端。下面在该集中分布系统的上下文中描述某些示例性实施例,但是应当注意,step可以使用用于分发服务和拓扑状态信息的其他机制来实现,其中的一些机制在下文中描述。[0058]应当注意,step路由器可以包括增强具有本文中所描述的step功能中的一些或全部功能的ssr或其他路由器。[0059]step正在被开发以解决当前ssr网络部署中的以下挑战,但是其通常提供用于分发网络内的信息的机制,其在现在或未来可以用于其他目的。[0060]·与多个路由协议的交互[0061]需要配给以配置在两个ssr对等之间的svr上的bgp,以在两个ssr之间交换bgp路由。这不能跨多个ssr很好地扩展。也存在将来自这些传统路由协议的路由信息映射到服务和服务路由的ssr世界的需要。step提供强制执行这一点的简单方式。其还在需要或期望的情况下提供与任何未来传统协议(如isis等)交互的可扩展方式。利用step,网络管理员将能够将ssr插入任何传统路由器并且将它们映射到服务以及使它们可用于整个网络。[0062]·多播[0063]利用多播(例如,igmp支持),针对组的所有多播接收器由ssr获知。利用step,接收器端点将经由step存储库被公布,并且最佳复制/会合点可以被确定以将多播分组发送到所有接收器,例如分发多播分组所需要的最小树。[0064]·端点可用性[0065]在服务不再可用的情况下能够使远端ssr将服务路由到另一ssr。服务可用性不再限制于路由或路径状态。最终应用状态也可以使用健康api来查询并且不限于仅仅链接状态以确定服务状态。当前,ssr使用路径和接口故障转移技术来解决该缺陷,该技术不能在所有情况下起作用,尤其是当存在总中断时并且当服务在其他路由器上也不可用时。step可以跨整个网络来传播服务可用性信息,使得每个路由器可以做出智能决定并且最小化中断。[0066]·整个网络中的精确定位服务中断[0067]step将服务和拓扑状态信息存储在step存储库中。因此,step存储库一般具有在任何给定时间处的网络的整个视图,并且step存储库还可以在从step路由器接收服务和拓扑状态信息更新时存储历史信息。该当前信息和历史信息可以用于各种目的,诸如,例如,故障排除服务和拓扑问题,做出网络管理决定(例如,以关闭特定路由器,或者控制特定路由器经由step存储库公布什么信息),或者甚至恢复到先前网络状态(例如,通过“重放”网络状态变化的序列),仅举几例。整个网络的服务中断或热度图视图可以在任何给定时间处被容易地生成。这有助于故障隔离并且增强调试网络问题的能力。[0068]·可扩展性[0069]step允许网络容易地扩展并且提供到整个网络中的洞察。step还将帮助网络管理员容易地设计并且扩展现有的或新的网络以及提供到跨整个网络的服务可用性中的洞察。在某些示例性实施例中,将存在step的两种表现形式,被称为“内部step”或“istep”和“外部step”或“estep”。内部step是用于交换授权机构内的服务的协议并且是以下描述的主要焦点。外部step是用于交换跨授权机构的服务的协议并且在以下描述中简单地讨论。[0070]step存储库[0071]现在描述step和与step一起使用的各种网络元素的示例性实施例。[0072]如以上所讨论的,参与step使能的网络中的step路由器发布由step服务器维持在step存储库中的服务和拓扑状态信息。为了方便,由给定step路由器发布的服务和拓扑状态信息在本文中被称为step文档。在特定示例性实施例中,step文档是javascript对象表示法(json)编码的文档,但是在各种备选实施例中可以使用其他机制(例如,html或二进制编码的文档)。服务提供器还可以将信息发布到step存储库,例如以公布来自它们的网络/授权机构的服务信息。由step服务器从step路由器并且任选地从服务提供器接收的step信息被选择性地发布到其他step路由器并且由step路由器使用,以将流量智能地路由到服务并还对网络变化做出反应。[0073]在某些示例性实施例中,step存储库被构建于高效并且可扩展的内存数据库上,该数据库遵循发布‑订阅模型,在本文中被称为路径树数据库。在示例性实施例中,step存储库/服务器执行对服务和拓扑状态信息的收集和发布,并且所有路由决定(发布路由数据的客户端和使用数据来执行路由(例如,最短路径优先决定)的客户端两者)在step路由器上并且不在step服务器上完成。然而,在某些备选实施例中,step存储库/服务器可以被配置为做出路由器决定或促成路由决定。[0074]路径树数据库用于将所有数据存储在step存储库中。如名称所暗示的,每个数据集在路径树数据库中获得它自己的路径。在示例性实施例中,以下路径定义格式将用于发布来自每个step路由器的step相关信息:[0075]/<authority‑name>/<district‑name>/<router‑name>/step=<routerdocument>[0076]其中,[0077]authority‑name:路由器属于的授权机构的名称[0078]district‑name:该路由器属于的分区的名称。[0079]router‑name:路由器的名称[0080]step:json文档被存储的路径的叶子[0081]在以下章节中详细解释分区。目前,分区可以被认为是邻域的集合和分割授权机构内的路由器的方式。[0082]每个step路由器将路由器文档集发布到step存储库。step路由器可以是一个或多个分区的成员,并且每个step路由器发布针对该路由器是其成员的每个分区的一个路由器文档。每个step路由器一般订阅该路由器是其成员的每个分区内的所有其他step路由器的step文档。以这种方式,每个step路由器获知跨该路由器是其成员的每个分区的服务可用性并且可以在每服务的基础上应用算法,以确定针对网络中的服务的可用路径。每个step路由器定期运行路由(例如,spf)计算并且不从服务器接收任何结束通知。[0083]在示例性实施例中,以下类型的信息将被存储在step存储库中:[0084]·每个路由器内的服务可用性[0085]·来自每个路由器可用的对等路径[0086]·在分发到step中的情况下从其他路由协议获知的外部路由[0087]下面更详细地讨论这些类型的信息中的每个类型的信息。[0088]step存储库提供在任何给定时间处的网络服务可用性的完整视图并且还可以维持在一段时间内发生于网络中的变化的历史。此外,该当前信息和历史信息可以用于调试或微调服务策略,例如以在一天的不同时间处对各种服务进行优先级排序,并且还可以用于在必要或期望的情况下有效地恢复到先前网络状态。其他机器学习算法还可以被应用到从step存储库获得的数据,以帮助影响网络中的服务。[0089]作为step存储库的路径树服务器[0090]路径树数据库是轻量级的、可扩展的、内存订阅数据存储。其支持基于套接字的发布者‑订阅者模型。数据集被存储为各种路径,并且客户端可以在各种路径上添加监视以得到变化的通知。下面提供示例。[0091]/p1/p2/p3/key="test"[0092]其中,[0093]/p1/p2/p3/key是路径[0094]test是值。[0095]step客户端可以创建路径并且还可以订阅任何路径上的通知。例如,客户端可以在路径/p1/p2上添加监视并且其将任何情况引起在/p1/p2路径下的创建/改变/移除时得到通知。[0096]路径树客户端将数据集存储为json(但是可以使用任何数据编码)。对数据集的任何进一步更新将被发送为如ietfrfc6902中指定的题为javascript对象表示法(json)补丁和在https://tools.ietf.org/html/rfc6902处可用的json补丁文档(jsondiff),在此通过引用将其整体并入本文中。这提供更新状态以及向监视程序通知更新而非发送整个json文件的有效方式。该机制应当特别好地适用于在仅仅几个路由可以基于路由变化被公布或撤回的情况下路由变化通知。因此,仅那些变化通知将由路径树客户端来发送。[0097]step服务器向所有订阅者通知对它们已经订阅的路径的任何变化。服务器优选地还保持对特定路径的所有jsondiff更新的历史。这些更新被认为是网络路径变化或路由变化。定期地,这些diff将被组合成一个json文档(默认,这被配置为每路径100diff)以允许翻转和聚集。[0098]路径树服务器是无状态的并且是非持久的数据存储。如果重启,那么其丢弃全部状态信息,并且客户端必须利用最新状态(即最新step文档)来重新填充数据存储。[0099]为了将这些状态持续在路径树服务器中,单独的路径树客户端将监听服务器上的所有路径并且将其存储在时间系列数据库中。该路径树客户端可以与路径树服务器共同驻存或者其可以是远程的。该时间系列数据库可以由分析/web客户端使用以确定随时间的网络变化。这在下面更详细地进行讨论。[0100]step存储库/服务器位置[0101]step存储库和step服务器可以被托管在几乎任何地方,但是实际上它们将驻存在以下三个位置中的一个位置:[0102]·引导器[0103]step服务器可以共同定位于引导器上。引导器可由所有路由器访问,其是路由器如何被初始化和引导。因此,一般来说,引导器将是针对step存储库的自然(例如,默认)位置。如果来自路由器的引导器访问在“有损”网络上或具有高延时,那么step存储库应当被托管在靠近路由器的服务器上或在路由器它们本身上。[0104]·可由所有路由器访问的公共服务器[0105]step服务器可以位于与引导器独立的独立服务器上。这一般将要求对来自所有路由器的安全访问的实现。[0106]·路由器它们本身(例如,数据中心)[0107]存在其中到引导器的连接性不可靠并且可能在延长的时间段内不可用使得路由器将不能与彼此交流的若干部署。在这些情况下,路由交换和转发应当仍然能够起作用而没有中断。为了实现该点,step存储库可以驻存在可以由该域中的所有路由器访问的路由器(一般是中心路由器)上。应当注意,托管step存储库的step路由器有效地用作step服务器(用于管理step存储库)和step客户端(用于将服务和拓扑状态信息发送到step存储库/服务器并且用于从step存储库/服务器接收服务和拓扑状态信息)两者。[0108]step服务器和客户端设备[0109]如以上所讨论的,step存储库和step服务器可以以各种类型的设备(诸如,例如,step路由器、引导器或与step路由器和引导器分离的服务器)中的任何设备来实现。图1是示出根据一个示例性实施例的step服务器100的主要组件的示意图。此外,step服务器100包括数据存储110和step服务器控制器120。数据存储110包括路由存储库(在这里被称为易失性路由存储库111)被存储在其中的易失性存储器和历史step信息(在这里被称为持久历史信息112)被存储在其中的持久存储。step服务器控制器120通常包括具有软件的微控制器和相关外设,该软件被存储在有形的、非暂态计算机可读介质中并且在微处理器上运行以实现执行本文中所描述的step服务器功能的一个或多个计算机过程。当step服务器100被实现于step路由器中时,step服务器控制器120被实现于其上的微控制器可以是运行其他路由器功能(诸如,对路由的计算和对分组的路由)的相同的微控制器。[0110]图2是根据一个示例性实施例的在实现高级step服务器功能中的针对step服务器控制器120的逻辑流程图。在框202处,step服务器控制器120将step存储库维持在数据存储中。在框204处,step服务器控制器120使用服务和拓扑交换协议从多个step路由器中的每个step路由器接收服务和拓扑状态信息。在框206处,step服务器控制器120将接收的服务和拓扑状态信息存储在step存储库中。在框208处,step服务器控制器120基于路由器之间的配置的关系、使用服务和拓扑交换协议将来自step存储库的、针对至少一个其他路由器的服务和拓扑状态信息发送到每个路由器,以使每个step路由器能够至少部分地基于来自至少一个其他路由器的服务和拓扑状态信息来做出路由决定。[0111]如以上所讨论的,step客户端被实现于step路由器中。图3是示出根据一个示例性实施例的step客户端300的主要组件的示意图。此外,step客户端300包括数据存储310和step客户端控制器320。step客户端控制器320将用于存储从step服务器接收的step文档的本地step存储库311维持于数据存储310中。step客户端控制器320通常包括具有软件的微控制器和相关外设,该软件被存储在有形的非暂态计算机可读介质中并且在微处理器上运行以实现执行本文中描述的step客户端功能的一个或多个计算机过程。step客户端控制器320被实现于其上的微控制器可以是运行其他路由器功能(诸如,对路由的计算和对分组的路由)的相同的微控制器。利用step,路由器一般还包括step增强的路由引擎340,其使用本地step存储库311中的step信息以及存储在数据存储310中的传统路由信息313(例如,静态路由、连接的路由和/或来自诸如ospf或bgp的路由协议的路由)来确定step增强的路由引擎340在其上路由分组的路由信息库314的路由。[0112]图4是根据一个示例性实施例的针对在实现高级step客户端功能step客户端控制器220的逻辑流程图。在框402处,step客户端控制器220使用服务和拓扑交换协议,将服务和拓扑状态信息发送到step服务器。在框404处,step客户端控制器220基于路由器之间的配置的关系,使用服务和拓扑交换协议从step服务器接收针对至少一个其他路由器的服务和拓扑状态信息。在框406处,step客户端控制器220将针对至少一个其他路由器的接收的服务和拓扑状态信息存储在本地step存储库中以用于在做出路由决定中使用。[0113]如以上所讨论的,step服务器100和step客户端300两者可以被实现于路由器中。[0114]step存储库冗余度[0115]在示例性实施例中,路径树服务器是非持久数据存储。路径树服务器可以被部署有多个实例以增加弹性。如果存在多个路径树服务器,那么服务器中的一个服务器将被推选为主要的并且剩余的服务器将是辅服务器。在示例性实施例中,该推选可以基于最低启动时间戳或基于最高配置的优先级,但是其他推选方案可以被采用。连接到辅服务器的客户端将具有它们的代理到主服务器的请求。辅服务器存储库将不在它们之内维持任何路径树状态。[0116]如果主服务器发生故障或重启,那么基于推选方案(例如,基于下一最低启动时间戳或基于下一最高配置的优先级),辅服务器中的一个辅服务器将承担主服务器的角色。对老的主服务器(其现在是辅服务器)的任何请求将被中继到新的主服务器。如果优先级被配置,那么一旦具有最高优先级的发生故障的主服务器回来了,那么其将再次承担领导责任。新的主服务器需要由所有路由器重新填充,因为其没有保存状态。[0117]所有step服务器(主和辅)应当能够通过l2或l3网络与彼此进行通信。step服务器可以被配置有优先级。在示例性实施例中,最高优先级服务器将是主的并且剩余的服务器将是辅服务器。step主服务器可以在考虑网络中的可达性约束的情况下被配置。下一章节描述其中step服务器可以驻存的各种位置。[0118]step存储库配置[0119](多个)step存储库位置和任选的优先级设置可以由网络管理员基于网络部署的需要来配置。下面给出针对step存储库的数据模型变化。[0120][0121][0122]step服务器可以通过配置以下两个参数来设置:[0123]·ip地址/fqdn[0124]step服务器可以使用ip地址或完全限定域名(fqdn)来标识。step服务器可以是引导器、独立服务器或路由器本身。如果该字段匹配路由器上的接口的ip地址/主机名,那么step服务器将被设立在该路由器上。step服务将针对具有针对每个路由器的对应服务路由的这些ip地址中的每个ip地址来生成,使得路由器上的step客户端可以到达step存储库。这将由配置生成器在配置被向下推送到所有路由器之前完成。下面提供更多细节。[0125]·优先级[0126]这是可选的参数,其在一些网络部署中将非常有用。优先级在存在多个服务器的情况下指示哪个服务器应当是主服务器。默认,具有最长正常运行时间的服务器变成主服务器。然而,在配置了优先级的情况下,具有最高优先级的服务器将代替地变成主服务器。在未能变成主服务器后,下一最高优先级将变成主服务器,以此类推。如果多于两个step服务器被部署并且一些具有配置的优先级并且一些没有,那么活动的具有最高优先级的那个服务器变成主服务器。当配置了优先级的所有服务器不可用时,正常运行时间被用作针对剩余服务器的鉴别器。这在部署中变得有用以指定可由所有网络元素到达的节点上的主服务器。这可以甚至是路由器(例如,在事件引导器中或独立服务器具有有损连接)。[0127]step文档[0128]在示例性实施例中,step文档是由每个step路由器发布到step存储库的json文档。下面的protobuf定义说明了构成json的不同字段。[0129][0130][0131][0132][0133][0134][0135]以上的protobuf定义提供用于第三方路由器通过将它们的路由器文档发布为json文档来与step路由器交互的方案。protobuf具有获得/设置值的访问器并且它们可以被转换至json和来自json。以下是文档的示例json表示:[0136][0137][0138][0139][0140]step文档具有以下字段,其将由每个网络元素填充。[0141]1.路由器[0142]路由器是顶层实体,其包含一个或多个节点。每个step文档属于路由器。路由器可以具有经由互连(背板)连接的一个或多个节点。[0143]2.节点[0144]每个节点列出服务、可从节点到达的对等路径、服务可用性、由其他协议分发的外部路由以及在多个节点之间可用的互连。互连的存在将用于确定节点之间的服务路由的可达性。如果文档中不存在互连,那么这指示节点之间的路径断开并且由(多个)其他节点托管的一些服务将不可经由“该”节点访问。经由断开(文档中不存在)的节点的任何对等路径将不会被考虑用于服务可达性。[0145]3.服务[0146]服务部分表示正在由每个路由器公布的所有服务。如果路由匹配配置的服务前缀或者如果存在配置的服务路由,那么路由器公布服务。简言之,针对路由器的服务条目基本上意味着路由器可以提供该服务。[0147]服务与前缀和下一跳被公布。如果前缀具有与它们相关联的下一跳,那么其意味着路由从路由协议获知并且下一跳是来自路由的。服务内的前缀可以在促成该前缀的路由被撤回的情况下被撤回。配置的服务前缀中的较窄者被公布。例如:如果服务被配置有前缀10.10.10.0/24并且被应用的路由是10.10.10.1/32,那么服务将使用10.10.10.1/32前缀(因为其是较窄的)来公布。来自路由协议的前缀仅在其被分发到step中的情况下被应用于服务。下面描述关于这一点的更多细节。[0148]服务还可以具有前缀而没有下一跳。这些是直接从服务地址配置获得的前缀,针对其存在配置的服务路由。服务路由可以被认为类似于静态路由,因为它们被显式地配置但是为服务特异性的。[0149]服务路由部分指示配置的本地下一跳可用。该部分将仅公布可到达的下一跳。如果下一跳断开,那么服务路由部分将是空的。[0150]4.对等路径[0151]对等路径指示可从给定路由器获得的、到对等中的每个对等的所有路径。该信息可以用于构建表示路由器之间的网络拓扑连接的图。[0152]由于ssr路由是面向服务的,所以对等路径它们本身不给出服务可用性的全貌。每个服务具有与其相关联的服务策略,并且对等路径中的每个对等路径应当在可接受的sla内。每个对等路径具有与其相关联的服务策略的列表并且指示其在针对每个策略的可接受的sla内。每个服务可以因此使用该服务策略信息,以确定这些路径是否可用于特定服务。在示例性实施例中,针对sla值的服务策略包括可配置的抑制计时器,并且路径必须在该计时器期间在被公布为在到step服务器的可接受限制内之前保持在sla内。尊重抑制计时器和用于生成其step文档的sla阈值是路由器(step客户机)的责任。[0153]sla值也在每对等路径被公布。在示例性实施例中,存在可以被设立以定期更新这些值的每邻接的可配置计时器值。sla并入路径的损耗、延时和抖动值。这些通常在路由器它们本身上每几秒钟被测量,但是将不会那么频繁地在step存储库中被更新以便避免快速摆动(flap例如,以下情形:路由器备选地经由一个路由接着另一路由来公布目的地,或者快速顺序地将目的地公布为不可用以及然后再次可用,或者备选地快速连续地将接口公布为断开以及然后接通)并且避免可以预防网络融合的频繁路由更新。这些值可以被更新,例如每5分钟(作为移动平均),其可以被重写。这些值在被公布的情况下将被并入到路由(例如,spf)计算中以基于sla来确定最佳路径。[0154]5.外部路由[0155]外部路由是指从一些其他路由协议(例如,重新分发到step中的bgp)被分发到step中的路由。这是路由协议不被公布到任何服务中而仅仅到step中的情况,使得所有其他路由器可以获知该路由。这些可以在另一step路由器处被重新分发回到bgp中。[0156]邻域[0157]邻域是应用到网络接口以指示网络连接性的标签。当两个网络接口共享相同邻域时,其暗示它们具有网络可达性。邻域可以由每个路由器发布为step文档的部分,包括其向量、网络接口以及租赁信息。[0158]这可以用于确定路由器之间的对等路径连接性。下面给出示例配置。[0159][0160]在示例性实施例中,来自所有路由器配置的邻域由引导器读取,并且邻接配置由配置生成代码生成。每个路由器上的邻接配置用作可用的对等路径。这些对等路径将被公布为step文档的部分。这将允许每个对等者在每服务的基础上创建整个网络的拓扑图。[0161]分区[0162]分区是邻域的逻辑分组。step文档一般在相同分区内的所有路由器之间共享。不存在针对分区的严格界限并且其代替地完全取决于网络拓扑如何被分割。该章节提供相同网络拓扑如何可以被分割为一个分区或多个分区的示例。[0163]单个分区[0164]图5是示出被分割为具有多个邻域的一个分区的示例性拓扑的示意图。在该示例中,分区名称是“common”并且存在中心式和辐条状拓扑。路由器dc1和dc2是中心。路由器br1和br2是连接到路由器dc1的辐条。路由器br3和br4是连接到路由器dc2的辐条。以下邻域被限定:[0165]1.n1[0166]dc1、br1和br2的所有wan接口处于邻域n1中。该邻域是分区“common”的部分。[0167]2.n2[0168]dc2、br3和br4的所有wan接口处于邻域n2中。该邻域也是分区“common”的部分。[0169]3.n3[0170]在dc1与dc2之间可到达的wan接口处于邻域n3中。该邻域也是分区“common”的部分。[0171]在该示例中,全部三个邻域已经被限定为相同的分区“common”的部分。这意味着全部六个路由器将它们的step文档发布到step服务器的相同路径中。以下示出文档被发布的示例路径:[0172]<authority‑name>:auth128[0173]/auth128/common/dc1/step=<json>[0174]/auth128/common/dc2/step=<json>[0175]/auth128/common/br1/step=<json>[0176]/auth128/common/br2/step=<json>[0177]/auth128/common/br3/step=<json>[0178]/auth128/common/br4/step=<json>[0179]多个分区[0180]图6是示出与图5相同的拓扑但是被分割成多个分区的示意图。在该示例中,存在三个分区,具体是:命名为“east”的分区,其包括:路由器dc1、br1和br2;命名为“west”的分区,其包括路由器dc2、br3和br4;以及命名为“central”的分区,其包括路由器dc1和dc2。每个step路由器将其step文档发布在其相应的路径中。以下示出针对图6中示出的分区的示例路径:[0181]<authority‑name>:auth128[0182]districteast[0183]/auth128/east/dc1/step=<json>[0184]/auth128/east/br1/step=<json>[0185]/auth128/east/br2/step=<json>[0186]districtwest[0187]/auth128/west/dc2/step=<json>[0188]/auth128/west/br3/step=<json>[0189]/auth128/west/br4/step=<json>[0190]districtcentral[0191]/auth128/central/dc1/step=<json>[0192]/auth128/central/dc2/step=<json>[0193]可以看出,路由器dc1将其step文档发布到两个分区(east和central)中,并且路由器dc2将其step文档发布到两个分区(west和central)中。路由器br1和br2仅仅与east分区中的路由器dc1对等,因此路由器br1和br2仅将它们的step文档发布到east分区中,因为它们的网络拓扑和服务可用性在每分支的基础上不需要被暴露给其他分区。类似地,路由器br3和br4仅与west分区中的路由器dc2对等,因此路由器br3和br4仅将它们的step文档发布到west分区中,因为它们的网络拓扑和服务可用性在每分支的基础上不需要被暴露给其他分区。如果全部分支被连接为全网格状,那么每个分支路由器将需要知道到每个其他分支的服务可用性和可到达性,但是在这里不是那种情况。在该示例中,路由器dc1可以有效地隐藏来自路由器dc2的所有其分支,反之亦然。[0194]在示例性实施例中,作为多个分区的部分的每个路由器将聚集来自一个分区的服务和路由信息并且将其公布到另一分区。因此,针对两个不同分区上的相同路由器的step文档将看起来不同。下面提供关于如何在分区之间交换服务的附加细节。[0195]分区配置[0196]下面是根据一个示例性实施例的配置分区所需要的数据模型变化。分区是在包含邻域的列表的授权机构等级上的容器。每个邻域可以具有与其相关联的分区的列表。[0197][0198][0199]默认分区[0200]在示例性实施例中,将邻域关联到分区是可选的。当邻域没有与分区显式地相关联时,其将被分配以分区“default‑district”。这样,如果拓扑仅需要单个分区,那么配置分区不是强制性的。在以上参考图5描述的拓扑中,如果所有邻域不是被配置有分组“common”而是没有分区,那么pathtree服务器将具有以下路径。[0201]<authority‑name>:auth128[0202]/auth128/default‑district/dc1/step=<json>[0203]/auth128/default‑district/dc2/step=<json>[0204]/auth128/default‑district/br1/step=<json>[0205]/auth128/default‑district/br2/step=<json>[0206]/auth128/default‑district/br3/step=<json>[0207]/auth128/default‑district/br4/step=<json>[0208]当配置一个示例性实施例中的邻域和分区时以下规则被使用:[0209]·如果路由器r1具有与分区d1中的邻域n1的接口和没有配置邻域的另一接口,那么r1将仅在分区d1下发布路由器文档。其将不会在“default‑district”下发布文档。[0210]·如果路由器r1具有与分区d1中的邻域n1的接口和不是任何分区的部分的另一邻域n2中的另一接口,那么r1将在分区d1和“default‑district”下发布step文档。[0211]·如果路由器r1不具有在其接口中的任何上配置的邻域,那么其将不会发布任何step文档。[0212]使用step的路由计算[0213]路由(例如,spf)计算使用抑制计时器来在路由器上按需运行,例如,如果存在来自step存储库的任何更新(包括本地变化)的话,那么其将被安排以在预定时间量(例如五秒钟)之后重新计算路径。这生成基于服务的路由和下一跳。这些将被向下推送到路由代理以建立转发信息库(fib)条目。计时器的开启指示是时间计算路径了,并且不存在来自服务的结束通知。[0214]一旦路由器读取了所有step文档,其将跨由其他路由器在每服务的基础上公布的所有可用路径来运行其路由算法(例如,经由狄杰斯特拉算法的spf)。在一些情况下,如果服务前缀中的每个服务前缀具有不同的下一跳(这可以是针对从其他协议被分发到服务中的前缀的情况),那么这将在每个服务前缀上运行。[0215]每个路径的成本将被发布在step文档中并且与每个服务相关联的服务策略可以从配置中获得。基于此,逻辑网络拓扑对于每个服务是不同的。spf计算最佳路径和针对每个服务的备选无环路径。如果主路径不可用,那么备选路径将被用作备份。[0216]每个对等路径,sla值定期地被公布。每个邻接,针对这些更新的时间可以被配置。被公布的每个对等路径还指示每个服务策略的sla是否被满足。服务策略将具有路径抑制计时器字段,其可以被配置为控制这些更新。以下是针对路径sla更新的示例数据模型变化:[0217]针对路径sla更新的数据模型变化[0218][0219]针对sla抑制计时器的数据模型变化[0220][0221][0222]服务交换[0223]在示例性实施例中,以下类型的服务在路由器上可用:[0224]a)具有授权机构宽范围的服务。[0225]b)在路由器本地或在n个路由器之间共享的本地服务。[0226]c)针对由用于本地访问的路由器托管的服务的托管的服务。[0227]d)在路由器本地的应用标识服务。[0228]在这些服务类型之中,step仅公布示例性实施例中的step文档中的以下服务:[0229]a)具有授权机构宽范围的服务。[0230]b)在多于一个路由器之间共享的本地服务。如果服务在该路由器本地,那么其将不被公布。[0231]其他两种类型的服务与路由器是仅仅本地相关的并且因此在示例性实施例中将不被发布在step文档中。[0232]图7是示出包括与彼此对等的两个路由的拓扑的示意图。在该示例中,路由器r2具有针对服务s1的服务路由并且在路由器r1与r2之间存在两条对等路径。考虑到,例如,服务s1被配置有前缀1.2.3.0/24和路由器r2上的服务路由。[0233]路由器r1[0234]·经由配置来获得服务s1[0235]·不具有匹配服务前缀s1的路由[0236]·具有两条对等路径[0237]路由器r1不具有要公布的任何服务,因为其既不具有匹配该服务的路由也不具有配置的任何服务下一跳。因此,以下是针对路由器r1的示例step文档:[0238][0239][0240]从以上的step文档,路由器r1不公布任何服务。然而,其的确具有到east路由器r2的对等路径。[0241]路由器r2[0242]·经由配置来获得服务s1[0243]·不具有匹配服务前缀s1的路由[0244]·经由配置获知节点n1上的本地服务路由[0245]·具有两条对等路径[0246]以下是针对路由器r2的示例step文档:[0247][0248][0249]针对路由器r2,服务s1被公布为具有服务‑路由的step文档的部分。这仅意味着服务s1在路由器r2上可用。当路由器r1接收路由器r2的step文档时,其发现服务s1在路由器r2上可用,并且由于对等路径在sla以上,其将建立针对从路由器r1到路由器r2的服务s1的服务拓扑。当路由器r2从路由器r1接收step文档时,其发现没有服务正在被公布。因此,针对服务s1的仅有下一跳将是在路由器r2上的配置的服务路由。以上示例指示如何在相同分区内的多个路由器之间交换服务。[0250]路由器的移除[0251]路由器可以出于各种原因中的任何而变得不可用,这些原因诸如例如路由器的故障、到路由器的不可用或不良的通信连接性、由网络管理员对路由器的关闭或从网络配置对路由器的移除(例如,通过到step服务器的通知)。这样的不可用性可以被传达到step存储库并且从那里,传播到订阅针对现在不可用的路由器的更新的其他路由器。例如,如果路由器发生故障或者关闭,或者如果到路由器的通信被中断,那么路由器可以停止与step服务器/存储库通信,在这种情况下step服务器可以(可能在尝试与服务器重新建立通信预定次数之后)更新step存储库以指示该路由器不可用,例如通过从step存储库移除该路由器的状态信息或通过更新该路由器的状态信息以指示不可用性。类似地,如果路由器从网络配置中被移除,那么step服务器可以更新step存储库以指示该路由器不可用,例如通过从step存储库移除该路由器的状态信息或通过更新该路由器的状态信息以指示不可用性。在任何情况下,step服务器可以直接通知订阅针对现在不可用的路由器的更新的其他路由器,该路由器现在不可用,在这种情况下这些其他路由器可以重新计算一个或多个路由以避免现在不可用的路由器。[0252]将协议重新分发到step中[0253]step路由器通常需要与其他路由协议(如bgp、ospf等)交互,以便获知路由。代替在核心中运行这些协议,step路由器具有将这些路由选择性地分发到step中的独特能力。在一个特定示例性实施例中,以下路由协议可以被分发到step中:[0254]a)bgp[0255]b)ospf[0256]c)静态[0257]d)已连接[0258]以下是用于将路由协议分发到step中的示例性配置:[0259][0260][0261]这可以在未来被扩展以在社区、对等组等上应用过滤策略,以在更多粒度等级上过滤路由。在示例性实施例中,存在这些路由可以被重新分发到step中的两种方式:[0262]a)重新分发到所选择的服务中[0263]b)重新分发为外部路由[0264]将协议重新分发到服务中[0265]图8是示出将bgp重新分发到服务中的示例的示意图。在该示例中,路由器r1与路由器r2对等,并且路由器r2是与非step路由器(r3)对等的bgp。考虑关于路由器r2的以下示例性配置,其中bgp经由step被重新分发到服务s1中:[0266][0267]现在,考虑与先前示例中相同的具有相同前缀1.2.3.0/24的服务s1。在这种情况下,s1不具有配置的服务路由。想法是获知来自bgp的路由并且将它们重新分发到服务s1中。针对该示例,假设仅一个路由经由bgp被获知,具体地是路由1.2.3.4/32。[0268]路由器r1[0269]·经由配置来获得服务s1[0270]·不具有匹配服务前缀s1的路由[0271]·具有两条对等路径[0272]路由器r1不具有任何要公布的服务,因为其既不具有匹配该服务的路由又没有配置任何服务下一跳。以下是针对路由器r1的示例step文档:[0273][0274][0275]从以上的step文档,清楚的是,路由器r1不公布任何服务。其具有到east路由器的对等路径。[0276]路由器r2[0277]·经由配置来获得服务s1[0278]·具有匹配服务前缀s1的bgp路由。较窄的前缀被公布。[0279]·具有两条对等路径[0280]以下是针对路由器r2的示例step文档:[0281][0282][0283]下一跳被提供为成本。由于传统路由协议不知道向量,所以路由的成本被直接使用。该成本将在计算最佳路径以及每条路径上的向量大小时被使用。在示例性实施例中,通过将路径中的as的数量乘以常数(例如,10),as路径长度将被转变为成本,并且成本将被公布在下一跳中。as路径还可以被公布在文档中以在未来针对运送情况来传播它。[0284]针对路由器r2,服务s1被公布为具有较窄前缀并且具有下一跳的step文档的部分。这意味着服务s1在路由器r2上可用。路由器r2将服务s1发布为其路由器文档的部分,因为:[0285]·bgp被重新分发到路由器r2中的服务s1中[0286]·从bgp获知的路由是服务前缀的子集[0287]这些同样可以针对枚举中列出的其他协议而被完成,即,静态的、已连接的以及ospf。[0288]将协议重新分发为外部路由[0289]关于该选项,从bgp获知的路由将作为外部路由被分发到step中。该选项有用的一种使用情况是将对等路由器的、已连接路由公布到bgp中,其中这些用作针对下游非ssr的反向路由。然而,这不被认为是正常操作模式并且应当是公布路由的最不优选的方式,因为step不被认为是跨网络携带传统路由的协议。[0290]图9是示出将bgp重新分发到step中的示例的示意图。在该示例中,路由器r2通过与另一路由器r3对等来经由bgp获知路由。在这种情况下,路由器r2被配置为将bgp分发到step中。在该示例中,这些路由不被分发到服务中。这是来自先前示例的重要分发,其中路由被分发到服务中。考虑其中bgp被重新分发到step中的路由器r2上的该配置:[0291][0292]在这种情况下,路由出现在路由器r2的step文档的外部路由部分中。应当注意,路由器r2不再公布服务s1,因为不存在匹配服务的路由。[0293]路由器r2[0294]·经由配置来获得服务s1[0295]·不具有匹配服务前缀s1的路由,因为bgp未被分发到s1服务中。[0296]·具有外部路由,因为bgp被分发到step中。[0297]·具有两条对等路径[0298]以下是针对路由器r2的示例step文档:[0299][0300][0301]外部路由部分中的协议部分指示哪个协议被分发到step中。该文档指示来自bgp的路由1.2.3.4/32被分发到step中。这不意味着该路由被分发回到路由器r1上的另一协议。该路由的存在不影响任何服务,因为其将不会被应用在任何服务上。在某些示例性实施例中,这些路由可以被使用的仅有方式是如果对等路由器中的一个对等路由器将这些外部路由重新分发回到bgp中。下面提供这一点的附加细节。[0302]将step重新分发到bgp中[0303]每个路由器可以获知来自step存储库的服务和路由并且将它们重新分发回到bgp中。重新分发可以在服务等级上是更多粒度的,其中服务集可以被重新分发。下面示出针对这一点的一些示例性数据模型变化,以粗体突出显示。[0304]对现有配置的这种扩展提供可以被分发到bgp中的服务的列表。通过默认、利用服务枚举,所有服务将被重新分发到bgp中。[0305][0306][0307]增强bgp路由策略配置.[0308][0309][0310][0311]协议内的“step”枚举表示经由step获知的所有外部路由。存在不匹配任何服务但是经由其他协议(例如,bgp、已连接的、静态的等)被分发到step中的路由。[0312]“service”枚举将在从其他路由器获知的所有服务前缀存在于路由器文档中的情况下将它们分发到bgp中,并且在不存在的情况下撤回它们。重新分发命令已经被扩展以在不是所有服务前缀都需要被暴露的情况下提供可以被分发到bgp中的服务的列表。这让每个路由器具有对其选择以公布到bgp中的服务的更精细控制。[0313]多播服务[0314]多播具有许多其中源需要将分组复制到一个或多个接收器的应用。目前,ssr支持被递送到一个目的地的单播服务。单播服务不考虑如igmp协议的多播服务,其用于指示哪些接收器对某个多播组感兴趣。[0315]针对多播服务的访问策略要求也不同于单播服务的访问策略要求。单播服务一般具有仅针对源的访问策略,而多播服务将在每服务的基础上受益于针对源以及接收器的访问策略。[0316]具有多播ip地址的服务是多播服务。多播服务将分组复制到多个端点目的地。目的地可以在路由器本地或者可以是对等路由器。以下是根据示例性实施例的多播服务定义的示例:[0317][0318][0319]这里,命名为“mcast”的多播服务与多播地址233.252.0.2相关联。其还具有允许命名为“blue”的租户的访问策略和允许命名为“red”的租户的发送方策略。重要的是,理解这些术语,因为它们不同于单播世界。[0320]访问策略字段指示哪些接收器被允许接受来自该多播服务的分组。这不同于单播服务如何使用访问策略。单播服务使用访问策略用于分组的发起者(即,源是否具有对该服务的访问)。然而,对于多播服务,其是针对接收器的访问策略。[0321]访问策略确保igmp分组仅从在该服务上允许的接收器租户来接收。多播地址指示多播组。多播接收器可以经由igmp协议被动态地获知。[0322]在以上示例中,访问策略允许被分类为租户blue的接收器。这里,路由器将接受来自其上配置有租户blue的任何接口的igmp加入。针对233.252.0.2组的igmpv2成员查询消息从具有对该多播服务的访问的所有接口被发送出去。路由器上的、具有不具有对服务的访问的租户的任何接口将丢弃针对该多播组接收到的所有igmp成员报告消息。因此,多播服务可以在接收器上施加访问控制。[0323]多播发送方策略指示哪些源被允许将分组发送到该多播服务。以下示出针对多播发送方策略的一些示例性数据模型变化:[0324][0325][0326]任何多播服务需要生成多播分组的源。发送方策略在发送方上施加访问策略。在以上示例中,发送方策略允许租户red。这意味着如果源被分类为租户red,源被允许将分组发送到该多播组。[0327]在示例性实施例中,多播监听器可以被配置在接口上。默认,接收器(亦即,监听器)将基于匹配接口租户的、基于租户的访问策略来设置。然而,可以是以下情况,这需要在每接口的基础上被重写。以下是在示例性实施例中用于配置多播监听器的示例配置定义:[0328][0329][0330]多播监听器配置可以用于重写当前服务访问策略。其可以用于使接收器能够使用启用的标志来加入任何多播服务。其还可以用于甚至在多播服务允许经由访问策略允许它们的情况下禁用接口上的监听器。由于在示例性实施例中租户是授权广泛的,所以这将在一些路由器内存在异常的情况下提供对接收器的更多粒度控制。[0331]在示例性实施例中,存在针对多播服务的两种不同的部署用例,即点到多点svr和多播代理。[0332]针对点到多点svr,svr路径是指两个路由器之间的安全向量路由,其在示例性实施例中是用于单播服务的点到点。但是关于多播服务,路由器将来源的分组复制到在它们上具有接收器的所有其他路由器。因此,它被命名为点到多点svr。在图21中,数据中心具有ssr路由器后面的多播服务器,其将是多播服务的源。分支(分支1和分支2)中的每个分支具有两个多播客户端,其中的每个是接收器。考虑以上示例中定义的具有多播地址233.252.0.2的相同服务“mcast”。每个多播客户端将igmp加入消息发送到针对多播组的分支路由器。因此,每个分支路由器将针对该组注册两个接收器。来源于数据中心的源分组需要被发送到两个分组。[0333]在step环境中,所有step路由器,包括pim(协议无关多播)云中的任何step路由器,可以获得关于多播服务的信息并且确定哪个(多个)路由器和哪个(多个)路径将用于分发源分组。具体地,每个参与的路由器公布与路由器相关联的任何(多个)多播源和/或(多个)多播接收器,并且路由器可以基于所公布的信息来做出路由决定(诸如,选择网络中的(多个)最佳“会合点”路由器,例如分发多播分组所需要的最小树)。例如,与一个或多个多播接收器相关联的路由器(在本文中被称为多播接收器路由器)将公布,其是多播接收器路由器以及关于多播接收器的信息。然而,本文中所描述的类型的多播服务可以被支持在非step环境中,例如通过针对这些分支路由器中的每个分支路由器在数据中心上建立服务路由。[0334]以下是针对图22中示出的网络配置的示例服务路由配置:[0335][0336]利用以上配置,由多播服务器发送到多播组233.252.0.2的任何分组将经由svr路径被转发到每个分支路由器。重要的是,理解这里提到的svr路径是单播路径而不是多播。在示例性实施例中,来自源的多播分组将作为单播分组被发送到分支中的每个分支,使用网络地址转换(nat)来转换针对每个路径的svrip地址和端口并且在分组中的元数据字段中携带原始svrip地址和端口。在该分支处,元数据将用于找到多播服务并且将分组发送到与其相关联的所有接收器。应当注意,在分支路由器已经接收了与元数据相关联的单播分组之后,分支路由器可以建立元数据中的转换的地址/端口号与原始地址/端口号之间的关联,用于处理与多播服务相关联的未来分组,并且其后,源可以停止将随后分组中的元数据发送到该分支路由器,以便减少由元数据引发的开销。还应当注意,在以上示例中,前端(源)路由器将分组复制到所有其他路由器并且不存在用于分组的这种分发的多播树,并且随着更多的分支路由器被添加,前端复制可能变得太低效。因此,为了更有效地扩展,示例性实施例可以具有加入现有多播树下游的多播流或具有可以复制到其他端点的复制端点。[0337]针对多播代理,路由器可以通过加入现有多播树并且在单播与多播之间“代理”分组来递送多播服务。例如,再次参考含有具有地址233.252.0.2的“mcast”服务的图23,数据中心可以将多播分组发送到中间的pim网络中,其中pim网络了解该多播组(例如,在示例性实施例中,pim网络被要求了解正在被复制的实际多播服务ip地址,并且多播地址转换不被支持)。这不同于以上讨论的点到多点svr环境,因为数据中心路由器发送多播分组而非单播分组并且不必须复制用于单播发送到多个分支的分组,即,源分组的仅仅一个副本需要被发送到pim网络。因此,该方案比点到多点svr方案更加可扩展。[0338]应当注意,ssr支持针对点到点svr路径的加密并且因此加密可以被容易地提供在点到多点svr方案中。[0339]将加密提供在多播代理方案中是更复杂的,因为存在多个接收器,尽管例如加密密钥的公共集可以被分发到所有接收器使得源分组可以针对所有接收器被加密一次。[0340]分支路由器的功能与针对启用多播监听器的接口的点到多点部署的功能相同。它从允许多播监听器的接口接收igmp报告。这里的主要差别在于分支路由器需要将这些报告转发到pim网络。为了实现这一点,接口可以被配置为用作多播报告代理(例如,针对pim代理启用的接口的租户应当在多播发送方策略列表中被允许)。这将引起分支路由器加入针对多组233.252.0.2的pim网络并且将开始接收从数据中心多播的分组。这些分组转而将被转发到多播接收器。[0341]以下是将接口建立为多播代理的示例数据模型:[0342][0343]这里,当接口被配置用于多播报告代理时,其将转发从允许多播监听器的任何其他网络接口接收到的所有多播报告。[0344]在示例性实施例中,igmp加入将被列出在路由信息库的显示中,例如如下:[0345]showrib[0346]codes:k‑kernelroute,c‑connected,s‑static,r‑rip,[0347]o‑ospf,i‑is‑is,b‑bgp,e‑eigrp,n‑nhrp,[0348]t‑table,v‑vnc,v‑vnc‑direct,a‑babel,d‑sharp,[0349]f‑pbr,[0350]>‑selectedroute,*‑fibroute[0351]c>*169.254.127.126/31isdirectlyconnected,g4294967294,21:08:01[0352]c>*172.16.1.0/24isdirectlyconnected,g1,21:07:43[0353]k>*224.1.2.3/32[254/0]isdirectlyconnected,g3<==igmpjoinreceived[0354]step中的多播支持[0355]在示例性实施例中,多播服务主要地像任何其他服务一样工作,除了多播服务仅在多播(例如,igmp)加入针对配置的多播地址被接收的情况下由路由器公布。[0356]图10是示出包括不具有接收器的多播配置的拓扑的示意图。在该示例中,路由器r1是源。路由器r2和路由器r3两者都是潜在的接收器。最初,在路由器r2和路由器r3上不存在接收器,并且因此路由器r2和路由器r3都不会公布多播服务。因此,路由器r1不会找到针对该服务的服务路由并且因此将不转发分组。源分组将在路由器r1处被丢弃。[0357]step帮助动态地发现针对特定服务的多播接收器。不存在运行在核心中的pim或传统协议。接收器被简单地发现为多播服务的部分,像任何其他服务一样。[0358]图11是示出图10的拓扑但是现在具有在其接口中的两个上具有接收的igmp加入的路由器r2的示意图。路由器r2现在将公布具有两个服务路由的多播地址。存在两个服务路由,因为存在从其接收igmp加入的两个接口。这类似于路由正从另一路由协议接收或新服务路由正被配置。路由器r2将在它接收到从所有接收器离开的igmp的情况下停止公布服务。由于r2将公布多播服务,所以以下是针对路由器r2的示例step文档:[0359][0360][0361]这里,路由器r1将经由step发现服务s1在路由器r2上可用并且因此其将来自源的所有多播流量发送到路由器r2,其转而将分组转发到所有接收器。[0362]分区之间的服务交换[0363]step路由器发布针对它们是其成员的每个分区的路由器文档。在路由器是多于一个分区的部分的情况下,从一个分区获知的路由和服务将被聚集并且发布到具有下一跳作为自身的其他分区(即,一个分区中的路由器将不会将其已经获知的所有其他对等信息发布到另一分区)。这样,一个分区中的路由器将从另一分区隐藏。这帮助更好地分割网络,因为所有路由器不需要了解网络中的所有其他路由器。[0364]图12是示出与图6相同的拓扑的示意图。在该示例中,存在三个分区,具体地是:命名为“east”的分区,其包括:路由器dc1、br1和br2;命名为“west”的分区,其包括路由器dc2、br3和br4;以及命名为“central”的分区,其包括路由器dc1和dc2。因此,路由器dc1和dc2是两个分区的部分。[0365]考虑服务s1由分区east中的路由器br1发布,并且服务s2由分区west中的路由器br3发布。分支br1和br2将不会发现服务s2,并且分支br3和br4将不会发现服务s1。然而,由于路由器dc1和dc2共享相同分区“central”,所以来自分区“east”的服务可以由br3和br4获知,反之亦然。[0366]由分区“central”中的dc1发布的step文档将具有服务s1,但是具有本地下一跳和成本。这里成本是向量到达分支br1上的服务s1的总成本。类似的操作由路由器dc2针对服务s1来完成。[0367]以下是针对这些路由器中的每个路由器的示例性step文档:[0368]路由器br1[0369]·经由配置来获得服务s1和针对s1的服务路由[0370]·将服务s1发布到分区east中[0371][0372][0373]路由器br3[0374]·经由配置来获得服务s2和针对s2的服务路由[0375]·将服务s2发布到分区west中[0376][0377][0378]路由器dc1[0379]·经由分区“central”从dc2获知服务s2[0380]·将获知的服务s2发布到具有相关联的成本的分区“east”中[0381]·将服务s1发布到分区“central”中[0382]·没有对等拓扑被暴露在分区之间。[0383]dc1文档在分区east下发布[0384][0385]dc1文档在分区central下发布.[0386][0387]路由器dc3[0388]·经由分区“central”从dc2获知服务s1[0389]·将获知的服务s1发布到具有相关联的成本的分区“west”中[0390]·将服务s2发布到分区“central”中[0391]·没有对等拓扑被暴露在分区之间。[0392]dc2文档在分区west下发布[0393][0394]dc2文档在分区central下发布.[0395][0396]针对路由器br2和br4的step文档不被提供,因为它们不公布任何服务。[0397]以上示例说明了服务可以如何被获知并且在分区之间被公布。可能的是,相同服务s1可以经由dc2从分区west获知。其仅意味着服务s1也在分区west中可用。对于分区east中的所有路由器,其将仅仅在dc1上显示为另一下一跳。[0398]图18是根据一个示例性实施例的用于发布聚集的路由或服务的逻辑流程图。在框1902中,第一路由器接收针对至少一个其他路由器的服务和拓扑状态信息。在框1904中,第一路由器使用接收的服务和拓扑状态信息来标识来自另一路由器的路由或服务,针对该另一路由器,对路由或服务的访问通过第一路由器对第二路由器可用。在框1906中,第一路由器计算针对通过第一路由器可用的路由或服务的聚集的度量。在框1908中,第一路由器发布包括聚集的度量和作为用于所发布的路由或服务的下一跳的第一路由器的路由或服务。在某些示例性实施例中,第一路由器通过将路由或服务发送到被配置为将路由或服务传达到第二路由器的中央存储库来发布路由或服务。如本文中所讨论的,第一路由器可以是第一分区和第二分区的成员,第二路由器可以是第二分区的成员,第一路由器可以从第一分区中的至少一个其他路由器接收服务和拓扑状态信息,并且第一路由器可以以从第二路由器隐藏来自第一分区的、与路由或服务相关的信息的方式将路由或服务发布给第二分区中的第二路由器。[0399]利用step的环路预防[0400]分区之间的服务交换可以引起一个分区重新获知它已经公布到另一个分区中什么并且因此可以引起路由环路。图13是示出包括引起环路的分区之间的服务交换的拓扑的示意图。在该示例中,路由器r2托管针对服务s1的服务路由sr1并且将其公布到路由器r3。路由器r3转而将其公布到路由器r2,其处于分区west中。路由器r3然后将其公布回到路由器r2。因此,当路由器r2接收到来自路由器r1的更新时,其将认为存在经由路由器r1的可用于服务s1的另一路径,而实际上路由器r2已经接收到它自己的公布。这可以发生在从路由器r2到路由器r1的方向上。在那种情况下,路由器r2将接收来自路由器r3的更新。这引起网络中的环路。[0401]为了预防环路,路由器源路径被添加到被公布到其他分区中的每个路由。环路预防算法如下:[0402]·将来自一个分区的聚集的路由和服务公布给另一分区的每个路由器将从服务/路由被聚集为下一跳的部分的地方添加分区名称。当服务被分发在整个网络中时,分区路径将被添加到下一跳。[0403]·如果路由器接收具有源路径中的分区的服务前缀/路由并且路由器是该分区的成员,那么路由器将忽略该前缀/下一跳。[0404]这将确保由一个分区公布的相同服务前缀将不会经由另一分区返回到其本身。[0405]图14是示出图13的拓扑但是包括具有环路避免的分区之间的服务交换的示意图。在该示例中,路由器r2具有分区“south”中的针对服务s1的服务路由sr1。以下发生:[0406]·r2将s1公布于分区central中,从而从sr1被获知的地方添加分区south。源路径列表将具有[south][0407]·r3将s1公布于分区west中,从而从sr1被获知的地方添加分区central。源路径列表将具有[south,central][0408]·r1将s1公布于分区east中,从而从sr1被获知的地方添加分区west。源路径列表将具有[south,central,west][0409]·r2从分区east获知服务s1并且发现其所属于的分区south已经处于所公布的服务路由中并且因此将忽略它。这避免环路。[0410]图19是根据一个示例性实施例的用于环路检测和预防的逻辑流程图。在框2002中,第一分区中的给定路由器通过发送第一发布来将第一路由或服务从第一分区发布给第二分区,第一发布包括第一路由或服务和针对第一路由或服务的第一源路径,其中第一分区名称被包括于第一源路径中。在框2004中,给定路由器从另一分区接收包括第二源路径的第二路由或服务的第二发布。在框2006中,给定路由器确定第二源路径是否包括第一分区名称。在框2008中,当第二源路径不包括第一分区名称时,给定路由器将第二路由或服务处理为第一分区中的新获知的路由或服务。在框2010中,当第二源路径的确包括第一分区名称时,给定路由器忽略第二路由或服务。[0411]利用step的基于源的路由[0412]step将支持对基于源的路由的使用以在网络中路由分组。在基于源的路由中,分组或相关分组的组(诸如,用于tcp或其他通信会话)的源路由器基于它的路由算法来确定要由(多个)分组采取的路径,从而考虑经由step针对一个或多个其他路由器所接收的服务和拓扑状态信息。源路由器包括分组中(或,通常在会话的第一分组中)的元数据字段,其中元数据字段指定(多个)分组要通过其被携带的路由器(例如,以路由器列表的形式)。沿着路径的每个路径(在本文中被称为“路径点”路由器)检查元数据以标识路径上的下一预期路由器并且修改分组以将该分组转发到下一预期路由器,例如通过将分组的目的地址修改为下一预期路由器的地址。路径点路由器通常还将分组的源地址修改为路径点路由器本身的地址,并且可以修改分组的其他字段,例如源端口、目的端口以及协议字段。针对会话的原始源和目的寻址信息还可以作为元数据被携带于分组中使得每个路径点路由器可以将分组与特定会话相关联并且使得沿着路径的最终路由器可以将分组中的源和目的地址信息恢复为原始源和目的地址信息。这些操作被描述在例如相关美国专利申请号为14/833,571(现在发布为美国专利no.9,762,485)的专利中,以上通过引用将其并入,但是应当注意,利用基于源的路由,中间路径点路由器不被要求以选择下一个路径点路由器而是代替地从所接收的分组中的元数据获得下一路径点路由器。作为该过程的部分,路径点路由器可以从分组元数据中的路由器列表移除其本身,使得仅仅沿着预期路径的任何剩余路径点路由器保持在路由器列表中,但是这在技术上不做要求(并且在一些实施例中,路径点路由器可以从路由器列表中被排除,因为路径点路由器通过接收分组被隐式地包括于路径中)。每个路径点路由器通常还建立正向(以及任选地还有反向)关联信息以将(多个)会话分组与指定路径相关联,使得与会话相关联的随后分组(其一般不包括元数据字段)可以被标识并且沿着指定路径被转发。路径上的最后的路径点路由器将分组转发到其预期目的地,通常还从分组中移除元数据字段并且恢复针对分组的原始源和目的地址。与会话相关联的随后分组基于正向(以及任选地还有反向)关联信息来遍历路径点路由器。这样的正向和反向关联信息以及基于正向和反向关联信息对分组的转发的示例被描述在例如相关美国专利申请号为14/833,571(现在发布为美国专利no.9,762,485)的专利中,以上通过引用将其并入。[0413]分段路由对在各种异构网络之间交互非常有力。step在提供服务等级路由分离(即,在每服务的基础上,所有路径可以对所有路由器不可用)中更进一步。一个路由器的服务路径可用性视图可以不同于公布路由器的服务路径可用性视图。因此,在示例性实施例中,至关重要的是,由源路由器选择的路由器列表被其他路由器尊重。[0414]图15是示出包括在相同分区内的基于源的路由的拓扑的示意图。在该示例中,路由器r1确定要针对服务s1而被遍历的路径是经由r2和r4的。路由器r1将r2和r4添加到其元数据中的路由器列表。存在从路由器r2经由路由器r3到路由器r4的路径,但是因为路由器r2检查分组中的元数据,所以其将尊重路由器列表并且将分组转发到r4而非r3。应当注意,由路由器r1发送的路由器列表可以排除路由器r2,因为路由器r1将分组发送到路由器r2,因此将路由器r2包括于路由器列表中可以被视为冗余的。类似地,由路由器r2发送的路由器列表可以排除路由器r4,因为路由器r2将分组发送到路由器r4,因此将路由器r4包括于路由器列表中可以被视为冗余的。备选地,假设路由器将决不会出现在路由器列表中两次,那么路由器列表可以在分组在路由器之间传播时保持完好无损,其中每个路由器简单地为其本身检查路由器列表,并且然后标识接收分组的下一路由器(如果有的话)。[0415]图15是在示例性实施例中例示基于源的路由如何工作的简单示例。在没有基于源的路由的情况下,r2将做出独立路由决定,其可以已经将分组发送到r3并且r3可能可以已经将分组发送回到r1。因此,基于源的路由可以帮助环路预防。[0416]在示例性实施例中,当对路由或服务的访问超过多个分区时,元数据中的路由器列表不会超过分区边界。图16是示出包括跨多个分区的基于源的路由的拓扑的示意图。在该示例中,路由器r1确定要针对分区east中的服务s1遍历的路径是经由路由器r2的。因此,路由器r1将具有路由器列表(r2)的分组发送到分区east中的路由器r2。路由器r2将其本身从元数据中弹出,确定经由分区west内的路由器r4到路由器r3的路径,基于其计算的路径来添加新路由器列表(r4,r3)以到达分区west中的最终目的地,并且将具有新路由器列表的分组转发到路由器r4。路由器r4将其本身从元数据移除并且将路由器列表中的(r3)传送到路由器r3。路由器r3将其本身从路由器列表中移除,并且鉴于其是列表中的最后一个路由器,将分组发送到最终目的地。[0417]这里,元数据中的路由器列表不会超过分区边界。每个路由器将仅在相同分区内的路由器之间路由分组。当分组超过分区时,新路由器列表将被添加以便在需要的情况下继续基于源的路由。[0418]应当注意,元数据处理是向后兼容的。任何现有路由器将忽略新元数据字段并且将如其像今天一样工作。启用了step的新路由器中所接收的任何分组将在分组没有路由器列表元数据(例如,来自非step使能的路由器)的情况下将分组转发到下一可用目的地。[0419]图20是根据示例性实施例的用于基于源的路由的逻辑流程图。在框2102中,源路由器确定包括接收与路由或服务相关联的、分组的、连续路由器的有序列表的、针对路由或服务的路径,连续路由器的有序列表以第一连续路由器开始并且以目的地路由器结束。在框2104中,源路由器将具有包括接收与路由或服务相关联的分组的路由器的有序列表中的至少一个剩余路由器的列表的元数据字段的分组发送向第一连续路由器。在框2106中,以第一连续路由器开始的每个连续路由器确定该路由器是否是目的地路由器并且在该路由器不是目的地路由器的情况下将分组转发向路由器的有序列表中的下一连续路由器。源路由器可以被配置为将第一连续路由器包括于元数据字段中或从元数据字段排除第一连续路由器。每个连续路由器可以被配置为在将分组转发到下一连续路由器之前从元数据字段移除其本身。每个连续路由器可以被配置为通过将分组的目的地地址改变为下一个连续路由器的地址并且任选地还将分组的源地址改变为该路由器的源地址来将分组转发到下一连续路由器。目的地路由器可以被配置为从分组移除元数据字段并且将分组转发到目的地。备选地,目的地路由器可以被配置为确定到针对路由或服务的目的地的第二路径,第二路径包括接收与路由或服务相关联的分组的连续路由器的第二有序列表,并且发送具有包括接收与路由或服务相关联的分组的路由器的第二有序列表中的至少一个剩余路由器的列表的新元数据字段的分组。[0420]应当注意,基于源的路由可以被使用在一个分区中而不是在另一分区中。例如,再次参考图16,路由器r1可以使用分区east内的基于源的路由,而路由器r2可以使用分区west内的不同路由方案(例如,使用包括step增强的路由的传统路由,或使用诸如mpls的另一路由),反之亦然。[0421]利用step的网络评估[0422]step存储库具有来自网络中的所有step路由器的step文档,从而公布它们的服务可用性。这意味着step存储库可以提供在任何给定时间处的整个网络的视图并且还可以提供在一段时间内在网络中发生的变化的历史。[0423]在示例性实施例中,用户接口(例如,网页客户端)将被增强以提供与包含于step存储库内的数据相关的服务等级视图和网络等级视图。由于step存储库是非持久的,所以引导器上的step监控客户端将监听网络中的所有step变化并且将它们存储于持久的时间系列数据库中。原数据将在配置的时间量内被存储并且聚集。还将存在用于查看step存储库的内容(例如,以调试路由问题)的接口。[0424]以下是列出所有step存储库和连接到每个step存储库的客户端的数量的“示出”命令的示例:[0425]显示step存储库[0426][0427]位置指示这些step存储库被托管的地方。主存储库是所有记录被存储的地方。所有其他存储库将请求代理到主存储库。客户端部分指示连接到每个存储库的客户端的数量。在主存储库上,客户端的数量优选地包括来自其他step存储库的代理的请求。[0428]以下是示出分区的数量和每分区的路由器的数量的“总结”命令的示例。[0429]显示step存储库总结[0430]授权结构:t128[0431]分区:2[0432]名称路由器[0433]districta4[0434]districtb2[0435]客户端连接:6[0436]每个路由器存储库可以被独立地查询以查看由每个路由器公布的当前状态。其示出路由器是其成员的每个分区和由那些分区中的每个分区中的路由器做出的公布。[0437]显示step存储库路由器r1<district>[0438][0439][0440][0441]先前的命令提供来自每个路由器的视角的网络概览。在对网络中的问题进行故障排除时,网络中发生的最后的变化将比整个网络视图更有用。以下命令示出最后的变化。以下是示出最后的变化的示例。[0442]显示step存储库更新<district><numlastupdates>[0443][0444]用户接口(例如,web客户端)将被增强以示出step存储库变化的历史。step存储库具有每分区的所有网络拓扑变化的diff。因此,在任何时间点处的网络拓扑变化可以在web上被重放以示出路由器变化、路径sla变化以及网络中断。这将用作很有力的工具来监控网络变化并且在特定时间段期间精确定位中断。[0445]图17是示出网络的热度图视图的示意性线框图。[0446]聚集的路由和服务[0447]如以上所讨论的,如果路由器是多于一个分区的部分,那么从第一分区获知的路由或服务将被聚集并且发布到具有该路由器作为针对聚集的路由或服务的下一跳的第二分区(即,一个分区中的路由器将不会将其已经获知的所有其他对等信息发布到另一分区)。以这种方式,第一分区中的路由器将从第二分区隐藏,即,第二分区中的路由器将知道路由或服务可从第一分区中的公布路由或服务的路由器获得,但是将不会具有对路由或服务被提供在第一分区中的具体方式的视图。这帮助更好地分割网络,因为第二分区中的路由器不需要了解第一分区中的所有路由器。[0448]另外,路由器可以发布具有聚集的路径度量的聚集的路由或服务,从而允许第二分区中的路由器将聚集的路由或服务评估为实体而无需知道第一分区中的路由或服务的细节。[0449]附加地或备选地,为了预防环路,第一分区中的路由器将第一分区名称添加到所发布的路由或服务的源路径。之后,如果第一分区中的路由器接收到来自另一分区的路由或服务的发布并且第一分区名称处于所发布的路由或服务的源路径中,那么路由器将忽略所发布的路由或服务。[0450]应当注意,第二分区中的路由器可以从第一分区中的多个路由器接收特定聚集的路由或服务的发布,并且每个可以具有不同的路径度量。因此,例如,如果特定路由或服务可通过特定分区中的两个路由器获得,那么其他分区中的路由器可以选择具有针对特定路由或服务的最佳度量的路由器。[0451]备选发布机制[0452]以上参考发布‑订阅模型来描述示例性step实施例,在发布‑订阅模型中,step路由器将step文档发布到step服务器并且订阅step服务器以接收来自其他路由器的服务和拓扑状态信息。然而,在备选实施例中,step可以使用其他机制来实现以在路由器之中和之间选择性地分发服务和拓扑状态信息来完成如以上所描述的基本上相同功能。[0453]针对一个示例,step服务器可以被配置为实现用于将服务和拓扑状态信息选择性地发送到路由器的“推送”机制。这里,例如,不是step路由器订阅以接收服务和拓扑状态信息,而是step路由器可以基于配置信息来分发从step路由器接收到的服务和拓扑状态信息而无需step路由器订阅以接收服务和拓扑状态信息。[0454]针对另一示例,step路由器可以基于配置信息通过网格传输机制来交换服务和拓扑状态信息。这里,例如,每个step路由器可以被配置为与一个或多个其他step路由器(包括多个分区)交换服务和拓扑状态信息,并且step路由器之后可以建立对等直接或间接通信连接以交换服务和拓扑状态信息。[0455]针对另一示例,step路由器可以通过对等传输机制来交换服务和拓扑状态信息,其中step路由器将服务和拓扑状态信息传送给其他step路由器,使得所有step路由器获得针对需要来自其的服务和拓扑状态信息的其他step路由器的服务和拓扑状态信息。例如,如果路由器a具有到路由器b的邻接,并且路由器b具有到路由器c的邻接,那么路由器c可以将它自己的服务和拓扑状态信息并且任选地将其他收集到的服务和拓扑状态信息传输到路由器b,其转而将它自己的服务和拓扑状态信息以及从路由器c接收的服务和拓扑状态信息传输到路由器a。[0456]因此,step一般涉及在step路由器之中和之间对服务和拓扑状态信息的选择性分发,使得step路由器可以具有关于其的附加信息以做出路由决定并且可以使用各种分发机制来实现。[0457]还应当注意,以上描述的许多应用可以通过其他发布机制被支持于非step路由系统中。例如,非step路由器可以将聚集的路由或服务公布到相邻路由器,例如作为链接状态交换的部分。[0458]其他[0459]应当注意,标题在上文为了方便而被使用并且不应被理解为以任何方式限制本发明。[0460]本发明的各种实施例可以至少部分地以任何常规计算机程序语言来实现。例如,一些实施例可以以过程编程语言(例如,“c”)或以面向对象编程语言(例如,“c++”)来实现。本发明的其他实施例可以被实现为预配置的独立硬件元件和/或被实现为预编程的硬件元件(例如,专用集成电路、fpga和数字信号处理器)或其他相关组件。[0461]在备选实施例中,所公开的装置和方法(例如,参见以上描述的各种流程图)可以被实现为一种用于与计算机系统一起使用的计算机程序产品。这样的实现方式可以包括固定于诸如计算机可读介质(例如,软盘、cd‑rom、rom或固定软盘)的有形非暂态介质上的一系列计算机指令。该系列计算机指令可以体现本文中先前关于系统描述的功能中的全部或部分。[0462]本领域技术人员应当认识到,这样的计算机指令可以以用于与许多计算机架构或操作系统一起使用的许多编程语言来编写。另外,这样的指令可以被存储在任何存储器设备(诸如,半导体、磁性、光学或其他存储器设备)中,并且可以使用诸如光学、红外、微波或其他传输技术的任何通信技术来发送。[0463]此外,这样的计算机程序产品可以被分发为具有随附的打印文档或电子文档(例如,现成软件)的可移除介质、预加载有计算机系统(例如,在系统rom或固定软盘上)或从网络(例如,互联网或万维网)上的服务或电子公告板分发。实际上,一些实施例可以被实现于软件即服务模型(“saas”)或云计算模型中。当然,本发明的一些实施例可以被实现为软件(例如,计算机程序产品)和硬件两者的组合。本发明的另外的其他实施例被实现为完全硬件、或完全软件。[0464]实现先前本文中描述的功能中的全部或部分的计算机程序逻辑可以在不同时间在单个处理器上(例如,并发地)执行或者可以在相同或不同时间在多个处理器上执行并且可以在单个操作系统进程/线程下或在不同操作系统进程/线程下运行。因此,术语“计算机进程”一般是指对计算机程序集合的运行,而不管不同计算机进程是在相同处理器上运行还是在不同处理器上运行,并且不管不同计算机进程是在相同操作系统进程/线程上运行还是在不同操作系统进程/线程上运行。[0465]重要的是,应当注意,本发明的实施例可以采用常规组件,诸如常规计算机(例如,现成的pc、大型主机、微处理器)、常规可编程逻辑设备(例如,现成的fpga或pld)或常规硬件组件(例如,现成的asic或分立硬件组件),其当被编程或配置以执行本文中描述的非常规方法时产生非常规设备或系统。因此,关于本文中描述的本发明没有什么常规的,因为甚至当实施例使用常规组件来实现时,得到的设备和系统(例如,step服务器控制器和step客户端控制器)不必是非常规的,因为缺少的特定编程或配置,常规组件不内在地执行所描述的非常规功能。[0466]本文中描述和要求保护的活动提供对正好在
技术领域
:中出现的问题的技术方案。这些技术方案整体上不是很好理解的、例程的或常规的,并且在任何情况下提供转变并且改进计算机和计算机路由系统的实际应用。[0467]潜在的权利要求[0468]本发明的各种实施例可以由此段落之后(并且在被提供在本技术的末尾处的实际权利要求之前)的段落中列出的潜在的权利要求表征。这些潜在的权利要求形成本技术的撰写的说明书的部分。因此,以下潜在的权利要求的主题可以在涉及本技术或要求基于本技术的优先权的任何申请的稍后诉讼程序中被呈现为实际权利要求。对这样的潜在的权利要求的包括不应当被理解为意味着实际权利要求不涵盖潜在的权利要求的主题。因此,在稍后诉讼程序中不呈现这些潜在的权利要求的决定不应当被理解为将主题捐赠给公众。[0469]没有限制,涉及一种服务和拓扑交换协议的(用字母“p”做前缀以便避免与下面呈现的实际权利要求的混淆)可以被声明的潜在的主题包括:[0470]p1.一种用于实现服务和拓扑交换协议(step)的路由系统,路由系统包括:[0471]主step服务器,被配置为维持step存储库;以及[0472]多个路由器,每个路由器包括与主step服务器通信的step客户端;其中:[0473]每个路由器的step客户端被配置为:使用服务和拓扑交换协议来将针对通过路由器可用的至少一个路由或服务的服务和拓扑状态信息发送到主step服务器,以用于存储在step存储库中;[0474]主step服务器被配置为:基于路由器之间的配置的关系使用服务和拓扑交换协议将来自step存储库的针对至少一个其他路由器的服务和拓扑状态信息发送到每个路由器的step客户端;并且[0475]每个路由器被配置为至少部分地基于来自至少一个其他路由器的服务和拓扑状态信息来做出路由决定。[0476]p2.根据权利要求p1的系统,其中step文档包括json补丁文档。[0477]p3.根据权利要求p1的系统,其中step存储库中的信息被组织为路径树数据库,并且其中每个step文档包括标识路由器的路径定义,以用于将路由器的服务和拓扑状态信息存储在路径树数据库中。[0478]p4.根据权利要求p1的系统,还包括被配置为将step请求代理到主step服务器的至少一个辅step服务器。[0479]p5.根据权利要求p1的系统,其中至少一个路由器是多个分区的成员并且发送包含针对至少一个路由器是其成员的每个分区的服务和拓扑状态信息的单独的step文档。[0480]p6.根据权利要求p1的系统,其中至少一个路由器是多个分区的成员并且接收针对至少一个路由器是其成员的每个分区中的路由器的服务和拓扑状态信息。[0481]p7.根据权利要求p1的系统,其中由路由器发送的服务和拓扑状态信息还包括:针对给定服务的服务等级协议和给定服务是否在服务等级协议内的指示。[0482]p8.根据权利要求p1的系统,其中至少一个路由器是分区的成员,并且至少一个路由器发送服务和拓扑状态信息,该服务和拓扑状态信息包括从分区的外部获知的路由或服务。[0483]p9.根据权利要求p1的系统,其中至少一个路由器发送服务和拓扑状态信息,该服务和拓扑状态信息包括针对路由或服务的至少一个路径度量。[0484]p10.根据权利要求p1的系统,其中主step服务器与路由器分离。[0485]p11.根据权利要求p1的系统,其中主step服务器是路由器中的一个路由器。[0486]p12.一种用于实现服务和拓扑交换协议(step)的服务器,服务器包括:[0487]数据存储;以及[0488]与多个路由器通信的服务和拓扑交换协议(step)服务器控制器,step服务器控制器被配置为:[0489]在数据存储中维持step存储库;[0490]使用服务和拓扑交换协议,从多个路由器中的每个路由器来接收包含服务和拓扑状态信息的step文档以用于存储在step存储库中;以及[0491]基于路由器之间的配置的关系,使用服务和拓扑交换协议将来自step存储库的、针对至少一个其他路由器的服务和拓扑状态信息发送到每个路由器,所发送的服务和拓扑状态信息使每个路由器能够至少部分地基于来自至少一个其他路由器的服务和拓扑状态信息来做出路由决定。[0492]p13.根据权利要求p12的服务器,其中step文档包括json补丁文档。[0493]p14.根据权利要求p12的服务器,其中step存储库中的信息被组织为路径树数据库,并且其中每个step文档包括标识路由器的路径定义,以用于将路由器的服务和拓扑状态信息存储在路径树数据库中。[0494]p15.根据权利要求p12的服务器,其中至少一个路由器是多个分区的成员并且发送包含针对至少一个路由器是其成员的每个分区的服务和拓扑状态信息的单独的step文档。[0495]p16.根据权利要求p12的服务器,其中至少一个路由器是多个分区的成员并且接收针对至少一个路由器是其成员的每个分区的服务和拓扑状态信息。[0496]p17.根据权利要求p12的服务器,其中服务器与路由器分离。[0497]p18.根据权利要求p12的服务器,其中服务器是路由器中的一个路由器。[0498]p19.一种用于实现服务和拓扑交换协议(step)的路由器,路由器包括:[0499]数据存储;以及[0500]与step服务器通信的服务和拓扑交换协议(step)客户端控制器,每个路由器包括step客户端,step客户端控制器被配置为:[0501]使用服务和拓扑交换协议,来将针对通过路由器可用的至少一个路由或服务的服务和拓扑状态信息发送到step服务器;[0502]基于路由器之间的配置的关系使用服务和拓扑交换协议从step服务器接收针对至少一个其他路由器的服务和拓扑状态信息;以及[0503]将接收的针对至少一个其他路由器的服务和拓扑状态信息存储在数据存储中;以及[0504]路由引擎,其被配置为至少部分地基于针对至少一个其他路由器的服务和拓扑状态信息来做出路由决定。[0505]p20.根据权利要求p19的路由器,其中step文档包括json补丁文档。[0506]p21.根据权利要求p19的路由器,其中step存储库中的信息被组织为路径树数据库,并且其中每个step文档包括标识路由器的路径定义,以用于将路由器的服务和拓扑状态信息存储在路径树数据库中。[0507]p22.根据权利要求p19的路由器,其中路由器是多个分区的成员并且发送包含针对路由器是其成员的每个分区的服务和拓扑状态信息的单独的step文档。[0508]p23.根据权利要求p19的路由器,其中路由器是多个分区的成员并且接收针对路由器是其成员的每个分区中的路由器的服务和拓扑状态信息。[0509]p24.根据权利要求p19的路由器,其中由路由器发送的服务和拓扑状态信息还包括:针对给定服务的服务等级协议和给定服务是否在服务等级协议内的指示。[0510]p25.根据权利要求p19的路由器,其中路由器是分区的成员,并且路由器发送服务和拓扑状态信息,该服务和拓扑状态信息包括从分区的外部获知的路由或服务。[0511]p26.根据权利要求p19的路由器,其中由路由器发送服务和拓扑状态信息,该服务和拓扑状态信息包括针对路由或服务的至少一个度量。[0512]p27.根据权利要求p19的路由器,其中路由器还包括被配置为维持step存储库的step服务器。[0513]p28.根据权利要求p1的系统,其中给定step文档仅包括服务和拓扑状态信息变化。[0514]p29.根据权利要求p1的系统,其中由主step服务器发送到给定路由器的step客户端的给定服务和拓扑状态信息仅包括:服务和拓扑状态信息变化。[0515]p30.根据权利要求p12的服务器,其中给定step文档仅包括服务和拓扑状态信息变化。[0516]p31.根据权利要求p12的服务器,其中由主step服务器发送到给定路由器的step客户端的给定服务和拓扑状态信息仅包括服务和拓扑状态信息变化。[0517]p32.根据权利要求p19的路由器,其中给定step文档仅包括服务和拓扑状态信息变化。[0518]p33.根据权利要求p19的路由器,其中由主step服务器发送到给定路由器的step客户端的给定服务和拓扑状态信息包括仅仅服务和拓扑状态信息变化。[0519]没有限制,涉及基于分割的度量的(用字母“p”做前缀以便避免与下面呈现的实际权利要求的混淆)可以被声明的潜在的主题包括:[0520]p1.一种路由系统,包括:[0521]第一路由器;以及[0522]第二路由器,其中第一路由器被配置为:接收针对至少一个其他路由器的服务和拓扑状态信息;使用接收的服务和拓扑状态信息来标识来自另一路由器的路由或服务,针对另一路由器,对路由或服务的访问通过第一路由器对第二路由器可用;计算针对通过第一路由器可用的路由或服务的聚集的度量;并且将包括聚集的度量和作为用于所发布的路由或服务的下一跳的第一路由器的路由或服务发布给第二路由器。[0523]p2.根据权利要求p1的系统,其中第一路由器通过将路由或服务发送到中央存储库来发布路由或服务,中央存储库被配置为将路由或服务传达到第二路由器。[0524]p3.根据权利要求p1的系统,其中:[0525]第一路由器是第一分区和第二分区的成员;[0526]第二路由器是第二分区的成员;[0527]第一路由器从第一分区中的至少一个其他路由器接收服务和拓扑状态信息;并且[0528]第一路由器以从第二路由器隐藏来自第一分区的与路由或服务相关的信息的方式将路由或服务发布给第二分区中的第二路由器。[0529]p4.根据权利要求p3的系统,其中路由或服务处于第一分区中。[0530]p5.根据权利要求p3的系统,其中路由或服务处于第三分区中。[0531]p6.根据权利要求p3的系统,其中第一分区与第一分区名称相关联,并且其中第一路由器被配置为将包括针对所发布的路由或服务的源路径的路由或服务发布给第二分区中的第二路由器,其中第一分区名称被包括于源路径中。[0532]p7.根据权利要求p6的系统,其中第一路由器被配置为从另一分区接收包括源路径的所发布的路由或服务并且将第一分区名称添加到源路径。[0533]p8.一种路由器,包括:[0534]数据存储;以及[0535]服务和拓扑交换协议(step)客户端控制器,其被配置为:[0536]接收针对至少一个其他路由器的服务和拓扑状态信息并且将接收的服务和拓扑状态信息存储在数据存储中;[0537]使用接收的服务和拓扑状态信息来标识来自另一路由器的路由或服务,针对另一路由器,对路由或服务的访问通过第一路由器对第二路由器可用;[0538]计算针对通过路由器可用的路由或服务的聚集的度量;并且[0539]将包括聚集的度量和作为用于所发布的路由或服务的下一跳的路由器的路由或服务发布给第二路由器。[0540]p9.根据权利要求p8的路由器,其中step客户端控制器被配置为通过将路由或服务发送到中央存储库来发布路由或服务,中央存储库被配置为将路由或服务传达到第二路由器。[0541]p10.根据权利要求p8的路由器,其中:[0542]路由器是第一分区和第二分区的成员;[0543]第二路由器是第二分区的成员;[0544]路由器从第一分区中的至少一个其他路由器接收服务和拓扑状态信息;并且[0545]路由器以从第二路由器隐藏来自第一分区的与路由或服务相关的信息的方式将路由或服务发布给第二分区中的第二路由器。[0546]p11.根据权利要求p10的路由器,其中路由或服务处于第一分区中。[0547]p12.根据权利要求p10的路由器,其中路由或服务处于第三分区中。[0548]p13.根据权利要求p10的路由器,其中第一分区与第一分区名称相关联,并且其中路由器被配置为将包括针对所发布的路由或服务的源路径的路由或服务发布给第二分区中的第二路由器,其中第一分区名称被包括于源路径中。[0549]p14.根据权利要求p13的路由器,其中路由器被配置为从另一分区接收包括源路径的所发布的路由或服务并且将第一分区名称添加到源路径。[0550]p15.一种用于检测并且避免被组织到多个分区中的多个路由器之间的环路的路由系统,路由系统包括:[0551]多个路由器,其被组织到多个分区中,多个分组包括至少第一分区和第二分区,每个分区与不同的分区名称相关联,多个路由器包括作为第一分区和第二分区的成员的第一路由器,第一路由器被配置为:[0552]通过发送第一发布来将第一路由或服务从第一分区发布给第二分区,第一发布包括第一路由或服务和针对第一路由或服务的第一源路径,其中第一分区名称被包括于第一源路径中;从另一分区接收包括第二源路径的第二路由或服务的第二发布;[0553]确定第二源路径是否包括第一分区名称;[0554]当第二源路径不包括第一分区名称时将第二路由或服务处理为第一分区中的新获知的路由或服务;并且[0555]当第二源路径的确包括第一分区名称时忽略第二路由或服务。[0556]p16.根据权利要求p15的系统,其中由第一路由器发布的第一路由或服务还将第一路由器标识为针对第一分区中的第一路由或服务的下一跳。[0557]p17.根据权利要求p15的系统,其中将第一路由或服务从第一分区发布给第二分区包括:[0558]从另一分区接收包括第一源路径的第一发布;以及[0559]将第一分区名称添加到第一发布中的第一源路径。[0560]p18.根据权利要求p15的系统,其中第一路由器将第一发布发送到中央存储库并从中央存储库接收第二发布,中央存储库被配置为将路由或服务传达给第二分区中的至少一个路由器。[0561]p19.一种用于检测并避免被组织到多个分区中的多个路由器之间的环路的路由器,多个分区包括第一分区和第二分区,每个分区与不同的分区名称相关联,路由器是第一分区和第二分区的成员,路由器包括:[0562]控制器,其被配置为:[0563]通过发送第一发布来将第一路由或服务从第一分区发布给第二分区,第一发布包括第一路由或服务和针对第一路由或服务的第一源路径,其中第一分区名称被包括于第一源路径中;[0564]从另一分区接收包括第二源路径的第二路由或服务的第二发布;[0565]确定第二源路径是否包括第一分区名称;[0566]当第二源路径不包括第一分区名称时将第二路由或服务处理为第一分区中的新获知的路由或服务;并且[0567]当第二源路径的确包括第一分区名称时忽略第二路由或服务。[0568]p20.根据权利要求p19的路由器,其中由控制器发布的第一路由或服务还将第一路由器标识为针对第一分区中的第一路由或服务的下一跳。[0569]p21.根据权利要求p19的路由器,其中将第一路由或服务从第一分区发布给第二分区包括:[0570]从另一分区接收包括第一源路径的第一发布;以及[0571]将第一分区名称添加到第一发布中的第一源路径。[0572]p22.根据权利要求p19的路由器,其中第一路由器将第一发布发送到中央存储库并从中央存储库接收第二发布,中央存储库被配置为将路由或服务传达给第二分区中的至少一个路由器。[0573]没有限制,涉及对多播信息的分发的(用字母“p”做前缀以便避免与下面呈现的实际权利要求的混淆)可以被声明的潜在的主题包括:[0574]p1.一种用于分发用于多播服务的多播路由信息的路由系统,路由系统包括:[0575]多个路由器,其包括多播源路由器和多个多播接收器路由器,多个路由器提供多播服务,其中路由器被配置为交换与多播服务相关联的包括:对多播源和多播接收器的标识的多播信息。[0576]p2.根据权利要求p1的系统,其中每个路由器被配置为使用服务和拓扑交换协议(step)将路由器的多播信息发送到step存储库并从step存储库接收针对其他路由器的多播信息。[0577]p3.根据权利要求p2的系统,其中中央存储库由主step服务器管理。[0578]p4.根据权利要求p3的系统,其中主step服务器是路由器中的一个路由器。[0579]p5.根据权利要求p3的系统,其中主step服务器处于与路由器分离的设备中。[0580]p6.根据权利要求p2的系统,其中多播信息被发送到step文档中的step服务器。[0581]p7.根据权利要求p6的系统,其中step文档是json文档。[0582]p8.根据权利要求p6的系统,其中step存储库中的信息被组织为路径树数据库,并且其中每个step文档包括标识路由器的路径定义,以用于将路由器的多播信息存储在路径树数据库中。[0583]p9.根据权利要求p1的系统,其中:[0584]多播源遵守指定被允许将分组发送到多播服务的至少一个源租户的基于租户的发送方访问策略;并且[0585]多播接收器遵守指定被允许从多播服务接收分组的至少一个接收器租户的基于租户的接收器访问策略。[0586]p10.根据权利要求p1的系统,其中路由器被配置为基于所交换的多播信息来确定用于分发与多播服务相关联的分组的最佳会合点路由器。[0587]p11.一种用于分发用于多播服务的多播路由信息的路由器,路由器包括:[0588]数据存储,其存储与多播服务相关联的包括对多播源和多播接收器的标识的多播信息;以及[0589]控制器,其被配置为交换与多播服务相关联的包括对多播源和多播接收器的标识的多播信息。[0590]p12.根据权利要求p11的系统,其中每个路由器被配置为使用服务和拓扑交换协议(step)将路由器的多播信息发送到step存储库并且从step存储库接收针对其他路由器的多播信息。[0591]p13.根据权利要求p12的系统,其中中央存储库由主step服务器管理。[0592]p14.根据权利要求p13的系统,其中主step服务器是路由器中的一个路由器。[0593]p15.根据权利要求p13的系统,其中主step服务器处于与路由器分离的设备中。[0594]p16.根据权利要求p12的系统,其中多播信息被发送到step文档中的step服务器。[0595]p17.根据权利要求p16的系统,其中step文档是json文档。[0596]p18.根据权利要求p16的系统,其中step存储库中的信息被组织为路径树数据库,并且其中每个step文档包括标识路由器的路径定义,以用于将路由器的多播信息存储在路径树数据库中。[0597]p19.根据权利要求p11的系统,其中:[0598]多播源遵守指定被允许将分组发送到多播服务的至少一个源租户的基于租户的发送方访问策略;并且[0599]多播接收器遵守指定被允许从多播服务接收分组的至少一个接收器租户的基于租户的接收器访问策略。[0600]p20.根据权利要求p11的系统,其中路由器被配置为基于所交换的多播信息来确定用于分发与多播服务相关联的分组的最佳会合点路由器。[0601]没有限制,涉及多播源和接收器访问控制的(用字母“p”做前缀以便避免与下面呈现的实际权利要求的混淆)可以被声明的潜在的主题包括:[0602]p1.一种用于提供多播访问控制的路由系统,路由系统包括:[0603]多个路由器,其包括多播源路由器和多个多播接收器路由器,多个路由器提供多播服务,其中路由器被配置为强制执行用于多播服务的多播访问控制策略,多播访问控制策略包括接收器访问策略和发送方访问策略,接收器访问策略控制哪些多播接收器被允许从多播服务接收分组,发送方访问策略控制哪些多播源被允许将分组发送到多播服务以用于分发到多播接收器。[0604]p2.根据权利要求p1的系统,其中发送方访问策略包括指定被允许将分组发送到多播服务的至少一个源租户的基于租户的发送方访问策略。[0605]p3.根据权利要求p1的系统,其中接收器访问策略包括指定被允许从多播服务接收分组的至少一个接收器租户的基于租户的接收器访问策略。[0606]p4.根据权利要求p3的系统,其中路由器接受仅来自与至少一个接收器租户相关联的接口的多播加入。[0607]p5.根据权利要求p3的系统,其中除非基于租户的接收器访问策略由一个或多个接口上的配置重写,否则路由器接受仅仅来自与至少一个接收器租户相关联的接口的多播加入。[0608]p6.根据权利要求p5的系统,其中至少一个路由器被配置为接受来自不是指定接收器租户的接口的多播加入。[0609]p7.根据权利要求p5的系统,其中至少一个路由器被配置为拒绝来自作为指定接收器租户的接口的多播加入。[0610]p8.根据权利要求p3的系统,其中路由器被配置为发送与至少一个接收器租户相关联的接口上的成员查询消息。[0611]p9.根据权利要求p3的系统,其中路由器被配置为丢弃具有不能访问多播服务的租户的任何接口上的成员报告消息。[0612]p10.根据权利要求p1的系统,其中路由器被配置为交换与多播服务相关联的包括对多播源和多播接收器的标识的多播信息。[0613]p11.根据权利要求p10的系统,其中每个路由器被配置为将路由器的多播信息发送到中央存储库并且从中央存储库接收针对其他路由器的多播信息。[0614]p12.根据权利要求p10的系统,其中至少源路由器被配置为基于所交换的多播信息来确定用于分发与多播服务相关联的分组的最佳会合点路由器。[0615]p13.根据权利要求p1的系统,其中多播源路由器被配置为将针对多播服务的单播分组发送到与至少一个多播接收器相关联的每个多播接收器路由器。[0616]p14.根据权利要求p1的系统,其中多播源路由器被配置为加入多播树并且将多播分组发送到多个多播接收器路由器。[0617]p15.一种用于提供多播访问控制的路由器,路由器包括:[0618]数据存储,其存储用于多播服务的多播访问控制策略,多播访问控制策略包括接收器访问策略和发送方访问策略,接收器访问策略控制哪些多播接收器被允许从多播服务接收分组,发送方访问策略控制哪些多播源被允许将分组发送到多播服务以用于分发到多播接收器;以及[0619]控制器,其被配置为强制执行用于多播服务的多播访问控制策略。[0620]p16.根据权利要求p15的路由器,其中发送方访问策略包括:指定被允许将分组发送到多播服务的至少一个源租户的基于租户的发送方访问策略。[0621]p17.根据权利要求p15的路由器,其中接收器访问策略包括指定被允许从多播服务接收分组的至少一个接收器租户的基于租户的接收器访问策略。[0622]p18.根据权利要求p17的路由器,其中控制器被配置为接受仅仅来自与至少一个接收器租户相关联的接口的多播加入。[0623]p19.根据权利要求p17的路由器,其中控制器被配置为:除非基于租户的接收器访问策略由一个或多个接口上的配置重写,否则接受仅仅来自与至少一个接收器租户相关联的接口的多播加入。[0624]p20.根据权利要求p19的路由器,其中控制器被配置为接受来自不是指定接收器租户的接口的多播加入。[0625]p21.根据权利要求p19的路由器,其中控制器被配置为拒绝来自作为指定接收器租户的接口的多播加入。[0626]p22.根据权利要求p17的路由器,其中控制器被配置为发送与至少一个接收器租户相关联的接口上的成员查询消息。[0627]p23.根据权利要求p17的路由器,其中控制器被配置为丢弃具有不能访问多播服务的租户的任何接口上的成员报告消息。[0628]p24.根据权利要求p15的路由器,其中控制器被配置为与其他路由器交换与多播服务相关联的包括:对与路由器相关联的任何多播源和任何多播接收器的标识的多播信息。[0629]p25.根据权利要求p24的路由器,其中控制器被配置为将路由器的多播信息发送到中央存储库并且从中央存储库接收针对其他路由器的多播信息。[0630]p26根据权利要求p24的路由器,其中控制器被配置为基于所交换的多播信息来确定用于分发与多播服务相关联的分组的最佳会合点路由器。[0631]p27.根据权利要求p15的路由器,其中控制器被配置为将针对多播服务的单播分组发送到与至少一个多播接收器相关联的每个多播接收器路由器。[0632]p28.根据权利要求p15的路由器,其中控制器被配置为加入多播树并且将多播分组发送到多个多播接收器路由器。[0633]没有限制,涉及分发服务和拓扑状态信息变化的中央授权机构的(用字母“p”做前缀以便避免与下面呈现的实际权利要求的混淆)可以被声明的潜在的主题包括:[0634]一种用于实现服务和拓扑交换协议(step)的路由系统,路由系统包括:[0635]主step服务器,其被配置为维持step存储库;以及[0636]多个路由器,每个路由器包括与主step服务器通信的step客户端;其中:[0637]每个路由器的step客户端被配置为使用服务和拓扑交换协议来将针对通过路由器可用的至少一个路由或服务的服务和拓扑状态信息发送到主step服务器,以用于存储在step存储库中;以及[0638]主step服务器被配置为:至少部分地基于从路由器接收的服务和拓扑状态信息,针对每个路由器来确定step存储库是否包括针对路由器的任何服务和拓扑状态信息变化,并且使用服务和拓扑交换协议来向存在服务和拓扑状态信息变化的每个路由器的step客户端仅发送服务和拓扑状态信息变化。[0639]p2.根据权利要求p1的系统,其中由主step服务器发送的服务和拓扑状态信息变化包括json补丁文档。[0640]p3.根据权利要求p1的系统,其中step存储库中的信息被组织为路径树数据库,并且其中来自路由器的服务和拓扑状态信息包括标识路由器的路径定义,以用于将路由器的服务和拓扑状态信息存储在路径树数据库中p4.根据权利要求p1的系统,还包括被配置为将step请求代理到主step服务器的至少一个辅step服务器。[0641]p5.根据权利要求p1的系统,其中至少一个路由器是多个分区的成员并且发送针对至少一个路由器是其成员的每个分区的单独的服务和拓扑状态信息。[0642]p6.根据权利要求p1的系统,其中至少一个路由器是多个分区的成员并且从主step服务器接收针对至少一个路由器是其成员的每个分区的服务和拓扑状态信息变化。[0643]p7.根据权利要求p1的系统,其中由路由器发送的服务和拓扑状态信息还包括针对给定服务的服务等级协议和给定服务是否在服务等级协议内的指示。[0644]p8.根据权利要求p1的系统,其中至少一个路由器是分区的成员,并且至少一个路由器发送服务和拓扑状态信息,该服务和拓扑状态信息包括从分区的外部获知的路由或服务。[0645]p9.根据权利要求p1的系统,其中至少一个路由器发送服务和拓扑状态信息,该服务和拓扑状态信息包括针对路由或服务的至少一个路径度量。[0646]p10.根据权利要求p1的系统,其中主step服务器与路由器分离。[0647]p11.根据权利要求p1的系统,其中主step服务器是路由器中的一个路由器中。[0648]p12.一种用于实现服务和拓扑交换协议(step)的服务器,路由器器包括:[0649]数据存储;以及[0650]与多个路由器通信的step服务器控制器,每个路由器包括step客户端,step服务器控制器被配置为:[0651]将step存储库维持在数据存储中;[0652]使用服务和拓扑交换协议从每个路由器的step客户端接收针对通过路由器可用的至少一个路由或服务的服务和拓扑状态信息;[0653]将接收的服务和拓扑状态信息存储在step存储库中;[0654]至少部分地基于从路由器接收的服务和拓扑状态信息,针对每个路由器来确定step存储库是否包括针对路由器的任何服务和拓扑状态信息变化;并且[0655]使用服务和拓扑交换协议来向存在服务和拓扑状态信息变化的每个路由器的step客户端仅发送服务和拓扑状态信息变化。[0656]p13.根据权利要求p12的服务器,其中由step服务器控制器发送的服务和拓扑状态信息变化包括json补丁文档。[0657]p14.根据权利要求p12的服务器,其中step存储库中的信息被组织为路径树数据库,并且其中从路由器接收到的服务和拓扑状态信息包括标识路由器的路径定义,以用于将路由器的服务和拓扑状态信息存储在路径树数据库中。[0658]p15.根据权利要求p12的服务器,其中至少一个路由器是多个分区的成员并且发送针对至少一个路由器是其成员的每个分区的单独的服务和拓扑状态信息。[0659]p16.根据权利要求p12的服务器,其中至少一个路由器是多个分区的成员并且从step服务器控制器接收针对至少一个路由器是其成员的每个分区的服务和拓扑状态信息变化。[0660]p17.根据权利要求p12的服务器,其中服务器与路由器分离。[0661]p18.根据权利要求p12的服务器,其中服务器是路由器中的一个路由器。[0662]没有限制,涉及跨多个分区的基于源的路由的(用字母“p”做前缀以便避免与下面呈现的实际权利要求的混淆)可以被声明的潜在的主题包括:[0663]p1.一种用于路由针对路由或服务的分组的路由系统,路由系统包括:[0664]多个路由器,其包括源路由器,其中:[0665]源路由器被配置为:基于路由器之间的配置的关系使用服务和拓扑交换协议接收来自step存储库的针对至少一个其他路由器的服务和拓扑状态信息;基于服务和拓扑状态信息来确定到针对路由或服务的目的地的第一路径,第一路径包括接收与路由或服务相关联的分组的连续路由器的有序列表,连续路由器的有序列表以第一连续路由器开始并且以目的地路由器结束;并且将具有第一元数据的分组发送向第一连续路由器,第一元数据包括接收与路由或服务相关联的分组的路由器的有序列表中的至少一个剩余路由器的列表;并且[0666]以第一连续路由器开始的每个连续路由器被配置为接收分组并基于与接收到的分组相关联的元数据来确定路由器是否是目的地路由器;并且[0667]当路由器不是目的地路由器时,将分组转发向路由器的有序列表中的下一个连续路由器。[0668]p2.根据权利要求p1的路由系统,其中源路由器被配置为将第一连续路由器包括于第一元数据中。[0669]p3.根据权利要求p1的路由系统,其中源路由器被配置为将第一连续路由器从第一元数据中排除。[0670]p4.根据权利要求p1的路由系统,其中每个连续路由器被配置为在将分组转发到下一个连续路由器之前从第一元数据移除它本身。[0671]p5.根据权利要求p1的路由系统,其中每个连续路由器被配置为通过将分组的目的地地址改变为下一个连续路由器的地址来将分组转发到下一个连续路由器。[0672]p6.根据权利要求p5的路由系统,其中每个连续路由器被配置为通过进一步将分组的源地址改变为转发路由器的地址来将分组转发到下一个连续路由器。[0673]p7.根据权利要求p1的路由系统,其中目的地路由器被配置为将没有元数据的分组转发到目的地。[0674]p8.根据权利要求p1的路由系统,其中源路由器被配置为将第二元数据包括于分组中,第二元数据包括会话标识信息。[0675]p9.根据权利要求p1的路由系统,其中目的地路由器被配置为:确定到针对路由或服务的目的地的第二路径,第二路径包括接收与路由或服务相关联的分组的连续路由器的第二有序列表,并且发送具有第二元数据的分组,第二元数据包括接收与路由或服务相关联的分组的路由器的第二有序列表中的至少一个剩余路由器的列表。[0676]p10.一种用于路由针对路由或服务的分组的路由器,路由器包括:[0677]数据存储;以及[0678]控制器,其包括源路由器逻辑,源路由器逻辑被配置为:[0679]基于路由器之间的配置的关系使用服务和拓扑交换协议接收来自step存储库的针对至少一个其他路由器的服务和拓扑状态信息;[0680]基于服务和拓扑状态信息来确定到针对路由或服务的目的地的第一路径,第一路径包括接收与路由或服务相关联的分组的连续路由器的有序列表,连续路由器的有序列表以第一连续路由器开始并且以目的地路由器结束;并且[0681]将具有第一元数据的分组发送向第一连续路由器,第一元数据包括接收与路由或服务相关联的分组的路由器的有序列表中的至少一个剩余路由器的列表。[0682]p11.根据权利要求p10的路由器,其中源路由器逻辑被配置为将第一连续路由器包括于第一元数据中。[0683]p12.根据权利要求p10的路由器,其中源路由器逻辑被配置为将第一连续路由器从第一元数据中排除。[0684]p13.根据权利要求p10的路由器,其中源路由器逻辑被配置为将第二元数据包括于分组中,第二元数据包括会话标识信息。[0685]p14.根据权利要求p10的路由器,其中控制器还包括连续路由器逻辑,连续路由器逻辑被配置为:[0686]接收分组并基于与接收到的分组相关联的元数据来确定路由器是否是目的地路由器;并且[0687]当路由器不是目的地路由器时,将分组转发向路由器的有序列表中的下一个连续路由器。[0688]p15.根据权利要求p14的路由器,其中连续路由器逻辑被配置为在将分组转发到下一个连续路由器之前从第一元数据移除它本身。[0689]p16.根据权利要求p14的路由器,其中连续路由器逻辑被配置为通过将分组的目的地地址改变为下一个连续路由器的地址来将分组转发到下一个连续路由器。[0690]p17.根据权利要求p16的路由器,其中连续路由器逻辑被配置为通过进一步将分组的源地址改变为转发路由器的地址来将分组转发到下一个连续路由器。[0691]p18.根据权利要求p14的路由系统,其中连续路由器逻辑被配置为当路由器是目的地路由器时将没有元数据的分组转发到目的地。[0692]p19.根据权利要求p14的路由系统,其中连续路由器逻辑被配置为:确定到针对路由或服务的目的地的第二路径,第二路径包括接收与路由或服务相关联的分组的连续路由器的第二有序列表,并且发送具有第二元数据的分组,第二元数据包括当路由器是目的地路由器时接收与路由或服务相关联的分组的路由器的第二有序列表中的至少一个剩余路由器的列表。[0693]结论[0694]尽管以上讨论公开了本发明的各种示例性实施例,但是应当明显是,本领域技术人员可以进行将实现本发明的优点中的一些而不偏离本发明的真正范围的各种修改。除非上下文另行要求,否则对“本发明”的任何引用旨在指代本发明的示例性实施例并且不应当被理解为指代本发明的所有实施例。所描述的实施例应在所有方面上被认为是仅仅说明性的而非限制性的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1