一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

服务和拓扑交换协议的制作方法

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

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献