检测并防止网络环路的制作方法

文档序号:17816216发布日期:2019-06-05 21:43阅读:564来源:国知局
检测并防止网络环路的制作方法

本申请是于2016年7月21日提交的标题为“detectingandpreventingnetworkloops”的美国非临时专利申请no.15/216,666的继续申请;并且同此提交的标题为“detectingandpreventingnetworkloops”的代理人案号cpol1003450-us.02有关;其内容通过引用整体地并入本文。

本技术涉及网络环路,并且更具体地涉及用于检测并防止网络环路的机制。



背景技术:

随着工程师和制造商急于跟上改变的数据消费格局和渐增的网络可伸缩性要求,对网络数据的猛增需求已稳步推动了联网技术的演进。已精确地发展了各种网络技术以满足对网络数据的这种猛增需求。例如,覆盖网络解决方案(诸如虚拟可扩展局域网(vxlan))以及虚拟化和云计算技术已作为对网络数据的这种增长需求的流行解决方案被越来越成功地广泛地实现在网络中。

然而,虽然网络技术中的进步已允许网络能够支持对网络数据的增加需求,但是它也已导致更大且更复杂的网络,涉及大量业务数据正在通过网络不断地路由。并且随着由网络处理的业务量增长,确保高效且无错误的路由和交换策略变得日益重要。准确地说,不良的路由和交换策略可对网络产生巨大负担,这仅随着业务量增长而恶化,并且可导致效率低且昂贵的业务路由和交换以及路由和交换错误,诸如路由抖动和网络环路。不足为奇,适当的布线和交换配置对处理大量业务来说也很重要,因为它们可帮助提高网络效率和环路。遗憾的是,随着网络的复杂性增长,管理网络中的各种布线、交换机和路由器配置并且检测网络中的精确故障点变得日益困难。

附图说明

为了描述可获得本公开的上述及其他优点和特征的方式,将通过参考被图示在附图中的其具体实施例来呈现上面简要地描述的原理的更特定描述。在理解这些附图仅描绘本公开的示例性实施例并且因此不应被认为是限制其范围后,通过使用附图来以附加详情和细节描述并说明本文的原理,在附图中:

图1a图示了示例网络架构的示意框图;

图1b图示了示例覆盖网络;

图2图示了网络设备的示例配置的示意图;

图3图示了示例环路的示意图;

图4图示了结构与l2网络之间的示例环路;

图5图示了用于检测环路的示例操作;

图6a图示了在环路拓扑中配置的示例路径的示意图;

图6b图示了基于设置在转发模式下的路径中的每个节点的节点数据库为图6a中的示例路径中的节点所编译的用于检测环路的故障诊断数据的表;

图7a图示了用于检测涉及设置在阻塞模式下的端口的环路的第一示例方法;

图7b图示了用于检测涉及设置在阻塞模式下的端口的环路的第二示例方法;

图8图示了用于检测具有设置在转发模式下的端口的路径中的环路的示例方法;

图9a图示了用于检测两个或更多个虚拟隧道端点之间的环路的第一示例方法;

图9b图示了用于检测两个或更多个虚拟隧道端点之间的环路的第二示例方法;

图9c图示了用于检测两个或更多个虚拟隧道端点之间的环路的第三示例方法;

图9d图示了用于检测环路的第四示例方法实施例;

图10图示了示例网络设备的示意图;以及

图11a和图11b图示了示例系统架构的示意图。

具体实施方式

在下面详细地讨论本公开的各种实施例。虽然讨论了具体实施方式,但是应该理解的是,这样做仅为了图示目的。相关领域的技术人员应认识到,在不脱离本公开的精神和范围的情况下,可以使用其他组件和配置。

概要

在独立权利要求中陈述本发明的各方面并且在从属权利要求中陈述优选的特征。一个方面的特征可以被单独或者与其他方面相结合地应用于每个方面。

如先前提及的,不适当的布线、交换机和路由器配置可对网络具有有害的且甚至毁灭性的影响。例如,网络中的不适当的布线或端口配置可导致在网络中形成转发环路。网络中的环路可严重地破坏并常常使网络瘫痪。在一些情况下,取决于外部连接,环路可在网络中甚至造成致命崩溃。此外,当通过连接到环路中的链路来发送广播或多播消息时,网络可能特别易受致命崩溃影响。然而随着在网络环境中实现新的更大网络和更复杂配置,错误检测和校正(诸如环路检测和校正)变成网络工程师的重大挑战。

然而,遗憾的是,当前解决方案未能针对尤其在更大更复杂环境上的不适当的布线、路由配置和软件错误提供适当的预防,并且缺少用于智能地且动态地检测此类不适当的配置和条件的有效机制。因此,实现允许智能地且有效地检测并校正网络中的网络环路的机制将是有利的。

可实现本文陈述的方法以解决上述问题,例如,通过检测网络中的环路并执行校正动作,诸如阻塞或者重新配置环路中的一个或多个链路。本文的方法提供了基于误布线、误配置、软件错误等检测网络中的环路的各种方式。

公开的是用于检测网络中的网络环路的系统、方法和非暂时性计算机可读存储介质。如下,相对于执行用于环路检测的步骤的系统来描述主题技术的方法。这里,系统可指代如在下面进一步描述的设备,诸如网络设备,包括交换机。

系统可识别处于阻塞状态的端口,所述端口使得能够丢弃具体类型的分组并防止端口转发具体类型的分组,以及确定端口是否仍然无法丢弃和/或将分组转发到环路中。例如,系统可确定通过系统上的硬件层(诸如系统上的asic(专用集成电路))经由端口发送的分组的第一数量。系统还可确定通过系统上的软件层经由端口发送的控制分组的第二数量。

系统可确定分组的第一数量是否大于控制分组的第二数量,并且当分组的第一数量大于控制分组的第二数量时,确定阻塞状态未能防止端口转发一种或多种类型的分组。

描述

所公开的技术解决在本领域中对网络中的网络环路的准确且高效检测的需要。公开的是用于检测网络环路的系统、方法和计算机可读存储介质。本文公开了如图1至图4中所图示的示例性系统和网络的简要介绍性描述。网络环路以及用于检测并防止网络环路的机制的详细描述然后将接着。应随着在本文中陈述各种实施例而描述这些变化。本公开现在转向图1。

图1a图示了示例网络架构100的示意框图。架构100包括网络结构112,在该网络结构112中主干交换机102a、102b、...、102n(统称为“102”)连接到叶交换机104a、104b、104c、...、104n(统称为“104”)。

主干交换机102可以是结构112中的第3层(“l3”)交换机。然而,在一些情况下,主干交换机102可另外或以其他方式执行第2层(“l2”)功能性。主干交换机102连接到结构112中的叶交换机104。叶交换机104可包括访问端口(或非结构端口)和结构端口。结构端口可向主干交换机102提供上行链路,然而访问端口可为设备、主机、vm或外部网络提供到结构112的连接。

叶交换机104可驻留在结构112与租户或客户空间之间的边界处。在一些情况下,叶交换机104可以是架顶式(“tor”)交换机、聚合交换机、行尾(eor)、行中间(mor)交换机等。

叶交换机104可负责路由和/或桥接租户分组并应用网络策略。在一些情况下,叶交换机可执行一个或多个附加功能,诸如实现映射高速缓存、当在高速缓存中存在未命中时向代理功能发送分组,封装分组,实施入口或出口策略等。

此外,叶交换机104可包含虚拟交换和/或隧道功能性,诸如如在下面在图1b中所说明的虚拟隧道端点(vtep)功能。因此,叶交换机104可将结构112连接到覆盖网络150和/或软件定义网络。

结构112中的网络连接可流经叶交换机104。叶交换机104可向结构112提供服务器、资源、端点、外部网络或vm访问,并且可将叶交换机104彼此连接。在一些情况下,叶交换机104可将端点组(“epg”)连接到结构112和/或任何外部网络。例如,每个epg可经由叶交换机104中的一个或多个连接到结构112。

端点110a-e(统称为“110”)可经由叶交换机104连接到结构112。例如,端点110a和110b可直接地连接到叶交换机104a,所述叶交换机104a可将端点110a和110b连接到结构112和/或叶交换机104中的其他任一个。类似地,端点110e可直接地连接到叶交换机104c,所述叶交换机104c可将端点110e连接到结构112和/或叶交换机104中的其他任一个。另一方面,端点110c和110d可经由l2网络106连接到叶交换机104b。此外,广域网(wan)108可连接到叶交换机104n。

端点110可以包括任何通信设备,诸如计算机、服务器、交换机等。在一些情况下,端点110可包括配置有将覆盖网络(诸如下面的覆盖网络150)与结构112连接的虚拟隧道端点功能性的服务器或交换机。例如,在一些情况下,端点110可表示具有虚拟隧道端点能力并且运行虚拟环境(例如,管理程序、虚拟机、容器等)的主机(例如,服务器)。与端点110相关联的覆盖网络可托管物理设备,诸如服务器;应用;epg;虚拟网段(segment);虚拟工作负载;等。同样地,端点110还可托管可与结构112或任何其他设备或网络(包括外部网络)连接的虚拟工作负载和应用。

图1b图示了示例覆盖网络150。覆盖网络150可使用覆盖协议(诸如vxlan、vgre、v03或stt)来在l2和/或l3分组中封装业务,所述l2和/或l3分组可跨越网络中的覆盖l3边界。如图1b中所图示的,覆盖网络150可包括经由网络结构112互连的主机110a-d。

可将主机110a-d配置为虚拟隧道端点(vtep)158a-d,其可以是被配置为根据网络150的具体覆盖协议来封装并解封装数据业务的虚拟节点或交换机,用于覆盖网络150的各种虚拟网络标识符(vnid)152a-i。在一些实施例中,网络150可以是vxlan网络,并且vtep158a-d可以是vxlan隧道端点。本文引用的vtep不限于任何特定类型的覆盖或虚拟化网络技术。例如,vtep可为任何类型的覆盖网络(包括但不限于vxlan、vgre、v03、stt等)提供隧道、封装和解封装功能性。

vnid可表示覆盖网络150中的分离虚拟网络。覆盖隧道(vtep158a-d)中的每一个均可包括一个或多个vnid。例如,vtep158a可包括vnid1和2,vtep158b可包括vnid2和3,vtep158c可包括vnid1和2,并且vtep158d可包括vnid1-3。如本领域的普通技术人员将容易地认识到,在其他实施例中,任何特定vtep可具有许多vnid,包括多于图1b中所图示的3个vnid。

可根据具体vnid在逻辑上分离覆盖网络150中的业务。这样,意在供vnid1使用的业务可由驻留在vnid1中的设备访问,同时可防止驻留在其他vnid(例如,vnid2和3)中的其他设备访问这种业务。换句话说,连接到具体vnid的设备或端点可与连接到相同的具体vnid的其他设备或端点进行通信,同时可使来自单独的vnid的业务隔离以防止其他具体vnid中的设备或端点访问不同的vnid中的业务。

端点和vm154a-i可连接到它们相应的vnid或虚拟网段,并且与驻留在相同的vnid或虚拟网段中的其他端点或vm进行通信。例如,端点154a可与端点154c和vm154e、154g进行通信,因为它们全部驻留在相同的vnid即vnid1中。类似地,端点154b可与vm154f、154h进行通信,因为它们全部驻留在vnid2中。

vtep158a-d可根据所实现的具体覆盖协议(诸如vxlan)来封装针对覆盖网络150中的各种vnid1-3的分组,所以可将业务适当地发送到正确的vnid和接受者。此外,当交换机、路由器或其他网络设备接收到要在覆盖网络150中发送到接受者的分组时,它可分析路由表,诸如查找表,以确定需要在哪里发送这种分组,使得业务到达适当的接受者。例如,如果vtep158a从端点154b接收到意在供端点154h使用的分组,则vtep158a可分析将预定端点(端点154h)映射到被配置为处理意在供端点154h使用的通信的具体交换机的路由表。vtep158a在它从端点154b接收到分组时可能最初不知道应该将这种分组发送到vtep158d以便到达端点154h。因此,通过分析路由表,vtep158a可查找作为预定接受者的端点154h,并且确定应该将分组发送到vtep158d,如基于端点至交换机映射或绑定在路由表中所指定的,所以分组可被如预期发送到端点154h并且由端点154h接收。

然而,继续先前的示例,在许多实例中,vtep158a可以分析路由表并且未能找到与预定接受者(例如,端点154h)相关联的任何绑定或映射。这里,路由表可能仍然尚未学习到有关端点154h的路由信息。在此场景中,vtep158a可能很可能广播或者多播分组以确保与端点154h相关联的适当的交换机可接收该分组并且进一步将它路由到端点154h。

在一些情况下,可通过移除不必要的或陈旧的条目并且添加新的或必要的条目来动态地且连续地修改路由表,以便使路由表维持最新、准确且高效,同时减小或者限制表的大小。

如本领域的普通技术人员将容易地认识到,上面提供的示例和技术简单地用于清楚和说明目的,并且可包括许多附加概念和变型。

图2图示了网络设备104a的示例配置200的示意图。网络设备104可具有用于执行转发和路由操作的一个或多个asic(专用集成电路)以及用于执行转发和路由操作的cpu进程204。asic202可特定于端口、线卡或一组端口。例如,在一些示例中,网络设备104a可具有用于每一端口和/或每一线卡的asic。用于端口或线卡的asic可针对该具体端口或线卡执行转发或路由操作。

asic202可执行硬件路由,诸如转发、发送、接收等。网络设备104a还可包括用于路由操作(诸如转发、发送、接收等)的cpu进程204。cpu进程204可包括用于经由cpu进程204执行路由操作的软件。该软件可包括转发或管理程序引擎、路由表、安全和策略规则、设备和/或地址映射、端口配置和映射等。此外,cpu进程204可由网络设备104a的一个或多个处理器(未示出)驱动。

在一些情况下,cpu进程204可被配置为发送和/或接收网络设备104a的控制平面业务,诸如桥接协议数据单元(bpdu)分组、链路聚合控制协议(lacp)分组、链路层发现协议(lldp)分组、cisco发现协议(cdp)分组、syn/ack分组等。cpu进程204还可被配置为发送和/或接收数据平面业务(例如,用户内容)。asic202可被配置为发送和/或接收控制平面业务和/或数据平面业务。

asic202和cpu进程204还可与彼此进行通信。例如,在一些情况下,asic202可以被配置为与主机110a、110b进行通信,但是也可以与cpu进程204进行通信以将分组转发到cpu进程204或者请求路由或策略信息。asic202还可以向cpu进程204咨询路由信息,诸如前缀查找。

在一些情况下,由网络设备104a处理的控制平面业务必须在到达cpu进程204之前通过asic202运送。例如,控制平面业务可以被指定为由cpu进程204处理,但是可以在到达cpu进程204之前由asic202处理。其他业务(诸如数据平面业务)的转发可由asic202执行。然而,在一些情况下,asic202可以向cpu进程204咨询转发判定。

cpu进程204可被配置为处理网络设备104a的所有控制平面业务(例如,bpdu类业务)。然而,由cpu进程204处理的控制平面业务还可由asic202处理,所述asic202还可以处理到和/或来自cpu进程204的所有控制平面业务。因此,如果cpu进程204在一小时时段期间处理200个控制平面分组,则asic202还将“看到”或者处理那200个控制平面分组。

为了管理业务的路由和/或交换并且防止网络环路,asic202和/或cpu进程204可被配置为在转发状态或阻塞状态下运行。例如,如果asic202处于转发状态,则asic202被允许转发由asic202处理的任何业务。另一方面,如果asic202被设置为阻塞状态,则asic202应该然后丢弃它接收的任何分组,而不是沿着其路径转发分组。在一些情况下,asic202仍然可以在处于阻塞状态的同时接收、发送和/或转发某种类型的业务,诸如控制平面业务(例如,bpdu类业务)。例如,某些协议(诸如stp(生成树协议))可以允许asic202丢弃除用于管理和/或监视网络环路和/或其他条件的某些控制平面分组(诸如bpdu分组)之外的所有业务。

阻塞状态可特定于协议,诸如stp。此外,可按端口和/或按端口通道配置阻塞状态。例如,可将网络设备104a中的每个端口具体地设置为阻塞状态或转发状态。阻塞状态和转发状态可被配置为允许路由和/或交换业务,同时防止或者限制环路。环路可因各种原因而发生。例如,作为阻塞状态在硬件中未被适当地编程或者未适当地运行的软件错误的结果可创建环路。例如,如果asic202未被适当地编程为在阻塞状态下运行,则asic202将很可能继续转发应该被丢弃的分组,这可潜在地产生环路。

在另一场景中,由于不适当的配置或布线可创建环路。例如,端口可在环路中逻辑上和/或物理上连接,从而导致由那些端口处理的业务在环路中被转发。此外,在另一场景中,作为在网络中使用来防止环路的协议的禁用或失败的结果可创建环路。例如,如果在网络中实现stp以防止环路并且stp被禁用,则将另外由stp设置以在环路中丢弃分组的任何端口将在环路中转发此类分组。可通过本文公开的技术来检测、防止并校正所有这些网络环路场景。

本公开现在转向网络中的各种示例环路。

图3图示了示例环路308的示意图300。网络环路308可流经端口302-306。例如,端口302-306可以是网络设备中的个别端口,诸如叶104a或端口通道。网络环路308可以是示例网络环路。环路308可以是软件错误、stp的禁用和/或端口302-306的误配置或误布线的结果。环路308可以继续直到问题被校正并且/或者端口302-306中的一个被适当地设置为阻塞业务为止。

特别地,环路308是当在端口302-306中的一个上发送分组并且在环路中通过端口302-306转发分组时创建的。例如,如果端口302-306互连并且全部都被设置为转发模式,则将继续在环路308中通过端口302-306转发分组。

如果广播或多播分组由端口302-306中的一个发送,则由环路308生成的业务可使网络瘫痪并导致崩溃场景。这里,广播或多播分组将通过每当分组环回时创建它本身的多个副本以指数方式增加网络上的负载。最终,负载可能使网络负担过重从而导致网络的致命崩溃。

端口302-306可驻留在一个或多个网络设备(例如,交换机)上。网络设备可包括物理交换机(诸如tor)和/或虚拟交换机,诸如运行交换和/或vtep功能的软件交换机或管理程序。此外,端口可驻留在一个或多个网络(包括l2网络、vlan、epg、覆盖网络、l3网络等)上。

图4图示了结构112与l2网络106之间的示例环路400。结构112可包括托管tor端口1和2(402,404)的一个或多个tor交换机。tor端口1和2(402,404)可将结构112连接到l2网络106。此外,tor端口1和2(402,404)可通过l2网络106来互连。通过l2网络106的tor端口1和2(402,404)之间的这种互连可产生环路400。特别地,当在tor端口1和2(402,404)上到l2网络106的连接被设置为属于相同的桥接器域(“bd”)但是不同的vlan或epg时环路400可形成,同时tor端口1和2(402,404)在l2网络106上被标记为相同vlan的一部分。

例如,如果l2网络106在tor端口1(402)上被配置为在vlan50和bd1上,同时l2网络106在tor端口2(404)上被配置为在相同的bd1而是vlan60上(与vlan50相反),并且tor端口1和2(402,404)全部在l2网络106上被标记为在vlan50上,则这可产生环路400。这里,tor端口1和2将按照三角形通过l2网络106来互连,使得分组将在环路中遍历连接。

在这种情况下,stp不会打断环路400,因为stpbpdu在vlan上但不通过bd洪泛。因为stpbpdu不跨越不同的vlan,所以l2网络106中的交换机将不会通过其他端口发现在一个端口(具有该端口的vlan)上发送的任何bpdu。因此,l2网络106将使端口保持在转发状态下。然而,从结构112的角度来看,两个端口都是相同洪泛域(相同bd)的一部分。因此,将形成环路400并且通过tor端口1和2中的一个外出的分组将通过l2网络106被返回到结构。

为了在这种场景中检测环路400,结构112上的叶交换机可被配置为像在下面进一步描述的那样执行洪泛和学习操作。

图5图示了用于检测环路的示例操作500。在一些情况下,例如,操作500可检测作为端口和/或设备上的软件错误的结果而生成的环路。

一般地,阻塞端口(例如,stp阻塞端口)仅承载bpdu类业务(例如,stpbpdu、lacp、lldp、cdp等)。所有这些分组在cpu(即,cpu进程204)处发起(tx)和/或终止(rx)。任何其他分组预期被硬件(例如,asic202)丢弃。可监视进出cpu(例如,cpu进程204)的分组,并且可为这些端口和业务类收集数据以及业务速率。

例如,网络设备104的硬件(例如,asic202)可获得tx/rx分组计数器和每端口速率、vlantx/rx计数器、丢弃计数器等的统计。

在cpu(例如,cpu进程204)针对bpdu类分组的发送/接收速率或统计的帮助下,我们可针对给定端口和/或vlan确定在链路上预期的速率。对照各种硬件计数器(包括tx/rx速率、vlantx/rx速率、丢弃速率等)来比较这个可帮助确定在可以产生第2层环路的阻塞端口上发送/接收的任何额外分组。

另外,对于阻塞端口,如果接口在cpu(例如,cpu进程204)中接收到bpdu类之外的分组,则cpu可将此分组和/或端口标记为潜在环路,因此在bpdu类之外的分组不应该由cpu进程204接收。

用于操作500的图例如下:

cpu_tx_pps可指代在端口上针对bpdu业务从cpu进程204发送的分组的速率或量。

cpu_rx_pps可指代在端口上针对bpdu业务在cpu进程204中接收的分组的速率或量。

hw_tx_pps可指代在端口上由硬件(即,asic202)发送的分组的速率或量。

hw_rx_pps可指代在端口上由硬件(即,asic202)(即,asic202)接收的分组的速率或量。

hw_drop_rx_pps可指代在端口上由硬件(即,asic202)丢弃的接收分组的速率或量。

hw_drop_tx_pps可指代在端口上由硬件(即,asic202)丢弃的发送分组的速率或量。

hw_vlan_tx可指代通过端口在vlan上发送的分组。

hw_vlan_rx可指代通过端口在vlan上接收的分组。

t1可指代分组速率或量的阈值(例如,100pps)。例如,阈值t1可用于避免来自异常的不正确报告。此外,阈值t1可以是可选的,并且可以基于期望的容差或灵敏度来调整。

现在转向操作500,当hw_tx_pps(510)大于cpu_tx_pps(512)+t1(514)时,可以针对处于阻塞状态的端口来检测发送路径502上的网络环路。在稳定状态下,由硬件(即,asic202)发送的分组的速率或量应该与从cpu进程204为控制或bpdu类所生成的分组相同或基本上相同。因此,如果hw_tx_pps(510)大于cpu_tx_pps(512)+t1(514),则端口正在发送额外分组(即,被设置为被阻止或者丢弃的分组)。

阻塞端口可接收控制或bpdu类之外的一些业务,因为端口阻塞状态对网络设备(例如,叶104或主干102)而言是局部的并且通信的另一侧/端可以是转发。然而,当处于阻塞状态时,这些分组预期被丢弃。因此,当hw_rx_pps(516)-wh_drop_rx_pps(518)大于cpu_rx_pps(520)+t1(514)时,可针对处于阻塞状态的端口来检测接收路径504上的网络环路。也就是说,如果hw_rx_pps(516)-hw_drop_rx_pps(518)大于cpu_rx_pps(520)+t1(514),则端口不在丢弃控制或bpdu类之外的分组中的一些或全部。这可以是端口上的误配置或错误(诸如软件错误)的结果。

可针对在端口上仅具有一个vlan的访问端口以及干线中的所有vlan被标记为阻塞的干线端口来计算以上针对发送路径502和接收路径504的操作。

然而,在一些场景中,干线端口可承载多个vlan,其中一些vlan被设置在转发模式下并且其他vlan在阻塞模式下。在此类场景中,操作可变化如下。

在vlan发送路径506上,当hw_tx_pps(510)-hw_vlan_fwd_tx_pps(520)大于用于阻塞vlan的cpu_tx_pps(cpu_vlan_tx_pps522)的和+t1(514)时可检测到网络环路,其中hw_vlan_fwd_tx_pps(520)可指代端口处于转发状态的vlan上的业务的速率或量。硬件(即,asic202)可提供vlan等级tx计数,所以我们可合并所有转发vlan并确定速率。因为这些vlan处于转发状态,所以此类分组预期在电线或链路上传出。如果hw_tx_pps(510)-wh_vlan_fwd_tx_pps(520)大于用于阻塞vlan的cpu_tx_pps(522)的和+t1(514),其中hw_vlan_fwd_tx_pps(520),则端口很可能正在发送不应该被发送的额外分组,这可以指示环路。

此外,在vlan接收路径508上,当hw_rx_pps(516)-hw_vlan_fwd_rx_pps(524)-hw_drop_rx_pps518)大于cpu_rx_pps(520)+t1(514)时可检测到网络环路,其中hw_vlan_fwd_rx_pps(524)可指代端口处于转发状态的vlan上的业务的速率。例如,如果hw_rx_pps(516)-wh_vlan_fwd_rx_pps(524)-hw_drop_rx_pps518)大于cpu_rx_pps(520)+t1(514),则端口很可能正在接收应该但未被丢弃的额外分组。

硬件(即,asic202)可提供vlan等级rx计数,所以我们可合并所有转发vlan并确定速率。因为这些vlan处于转发状态,所以此类分组不预期被阻塞在接收路径508上。

图6a图示了在环路拓扑中配置的示例路径600的示意图。用于路径的环路拓扑可由一个或多个节点(即,端口、交换机、端口通道等)的误配置或用于防止环路的协议(例如,stp)的禁用产生。路径600包括节点602-608。节点602-608可包括网络设备(例如,交换机)、端口和/或端口通道。

路径600中的节点602-608全部处于转发状态。因此,因为节点602-608处于转发状态并且节点602-608中的至少两个(即,节点604、606)通过多于一个链路(链路612、614)互连,所以然后节点602-608被配置为在路径600中创建环路。

例如,在路径600中,节点a(602)经由链路l1(610)连接到节点b(604)。因此,由节点a(602)接收的业务经由链路l1(610)被转发到节点b(604)上。节点b(604)经由链路l2(612)和链路l3(614)连接到节点c(606)。由节点b(604)接收的业务因此经由链路l2(612)被转发到节点c(606)。节点c(606)经由链路l4(616)连接到节点d(608)。因此,由节点c从节点b接收的业务经由链路l4(616)被转发到节点d(608)。然而,因为节点c具有到节点b的第二链路,即链路l3(614),所以由节点c从节点b接收的业务也经由链路l3(614)被转发回到节点b,从而形成环路。

此外,可像在下面在图6b中进一步描述的那样检测路径600中的环路。

参考图6b,可编译故障诊断数据650以用于通过遍历节点602-608中的每一个处的路径600和链路l1-l4来检测路径600中的环路。故障诊断数据650可包括指定路径中的每个节点处的链路或互连以及针对每个节点的下一跳的数据库或表。

可通过遍历与在路径600中在转发模式下运行的端口(例如,节点602-608)相关联的所有链路并且为每跳构建节点数据库以及识别每个节点处的物理链路和下一跳来生成故障诊断数据650。

例如,故障诊断数据650可包括种子节点652、节点数据库654,物理链路656和下一跳658(例如,下一跳端口或交换机)。可通过遍历路径600中的每个链路来确定字段652-658的信息。

为了图示,我们通过遍历路径600中的链路li(610)而开始。这里,种子节点652是节点a。用于节点a的节点数据库654将包括[‘a’],其是在路径600中迄今为止遍历的唯一节点。此外,在此跳处,与节点a相关联的物理是链路l1,并且经由链路l1用于节点a的下一跳是节点b。

我们然后遍历路径600中的下一个链路l2(612)。这里,种子节点652是节点b。用于节点b的节点数据库654将包括[‘a’,‘b’],其是在路径600中迄今为止遍历的唯一节点。在此跳处,与节点b相关联的物理链路是链路l2,并且经由链路l2用于节点b的下一跳是节点c。我们检查以看经由链路l2用于节点b的下一跳是否被列举在用于节点b的节点数据库654中。因为下一跳节点c未被列举在用于节点b的节点数据库654中,所以然后此时未识别环路。

接下来我们遍历路径600中的链路l4(616)。此时的种子节点652是节点c。用于节点c的节点数据库654将包括[‘a’,‘b’,‘c’],其是在路径600中迄今为止遍历的节点。在此跳处,与节点c相关联的物理链路是链路l4,并且通过链路l4用于节点c的下一跳是节点d。我们检查以看通过链路l4用于节点c的下一跳是否被列举在用于节点c的节点数据库654中。因为下一跳节点d未被列举在用于节点c的节点数据库654中,所以然后此时未识别环路。

我们然后遍历路径600中的链路l3(614)。种子节点652在这里也是节点c。用于节点c的节点数据库654将包括[‘a’,‘b’,‘c’],其是在路径600中迄今为止遍历的节点。此跳处的物理链路是链路l3,并且通过链路l3的下一跳是节点b。我们检查以看通过链路l3用于节点c的下一跳是否被列举在用于节点c的节点数据库654中。因为下一跳节点b被列举在用于节点c的节点数据库654中,所以然后我们检测到环路。

因此,通过比较故障诊断数据650中的节点数据库字段654和下一跳字段658,我们可识别在涉及种子节点字段652中的节点的路径中是否存在任何环路。例如,如果在下一跳字段658中列举的节点也存在于节点数据库字段654中则我们可检测到环路。

为了补救路径600中的环路,可禁用端口或者将端口设置为阻塞状态,以便阻塞通过节点b(604)与节点c(606)之间的链路l2(612)或链路l3(614)的业务。此外,当检测到环路时,可采取一个或多个校正和/或响应动作,诸如生成警报或通知、禁用一个或多个端口或设备、发送错误等。

在已公开一些基本系统组件和概念后,本公开现在转向图7和图10中所示的示例性方法实施例。为了清楚起见,在图1a、图1b和图2方面描述方法。本文概述的步骤是示例性的并且可被以其任何组合(包括排除、添加或者修改某些步骤的组合)实现。

图7a图示了用于检测涉及设置在阻塞模式下的端口的环路的第一示例方法。在步骤700处,方法可包括识别在网络设备(例如,叶104a)上处于阻塞状态的端口。阻塞状态可用于丢弃一种或多种类型的分组,诸如数据分组或非控制分组,并且防止端口转发一种或多种类型的分组。

在步骤702处,方法可包括确定由网络设备上的硬件元件(例如,asic202)通过端口发送的分组的第一数量(例如,hw_tx_pps)。分组可包括控制分组和/或数据分组。此外,分组的第一数量可指代在一段时间期间由网络设备上的硬件经由端口发送的分组的速率和/或量。硬件元件可以是网络设备上的asic,其可经由端口接收并发送分组。

在步骤704处,方法可包括确定由网络设备上的cpu进程(例如,cpu进程204)通过端口发送的控制分组的第二数量(例如,cpu_tx_pps)。控制分组可包括桥接协议数据单元(bpdu)分组、链路聚合控制协议(lacp)分组、链路层发现协议(lldp)分组、cisco发现协议(cdp)分组或任何其他控制分组。

在步骤706处,方法可包括确定分组的第一数量(即,来自步骤702)是否大于控制分组的第二数量(即,来自步骤704)。此计算可通过hw_tx_pps>cpu_tx_pps来表示,如图5中所图示的。当分组的第一数量大于控制分组的第二数量时,在步骤708处,方法可包括确定阻塞状态未能防止端口转发一种或多种类型的分组。换句话说,尽管被设置为阻塞此类分组但是端口已转发一种或多种类型的分组。这可指示端口正在转发被配置为阻塞或者丢弃的分组的软件错误。

在一些配置中,方法还可并入在步骤706处加到控制分组的第二数量的阈值(例如,t1)以防止或者限制不正确报告的数量(例如,hw_tx_pps>cpu_tx_pps+t1)。在此示例中,当分组的第一数量大于控制分组的第二数量加上阈值时确定阻塞状态失败。因此,阈值可确保只有当分组的第一数量超过控制分组的第二数量达多于一定量时才做出阻塞状态已失败的确定。这可防止或者限制误报或不正确读数的数量/量。

例如,如果分组的第一数量仅超过控制分组的第二数量达到5,则这种差可以归因于除阻塞状态下的故障以外的某个异常。因此,如果阈值被设置为高于5的数量,例如50,则此示例中的差5将不会触发端口的阻塞状态下的故障的确定。例如,可基于所期望的灵敏度调整阈值,或者基于历史数据或过去结果微调阈值。

端口可以是端口上的所有vlan都被标记为阻塞的访问端口或干线端口。在一些情况下,端口还可包括不同的vlan,其中一些vlan被标记为阻塞并且其他vlan被标记为转发。如果端口正在承载在端口上设置为转发的vlan的业务则也可使用vlan计数器。

例如,方法可包括确定由硬件元件在端口处于转发状态的vlan上发送的分组的第三数量(例如,hw_vlan_fwd_tx_pps)。

方法然后可包括将由硬件元件通过端口发送的分组的第一数量减去由硬件元件在端口处于转发状态的vlan上发送的分组的第三数量。此减法可产生分组的减去数量。接下来,方法可包括确定分组的减去数量是否大于由cpu进程通过端口发送的控制分组的第二数量。此计算可通过(hw_tx_pps-hw_vlan_fwd_tx_pps)>用于阻塞vlan的cpu_tx_pps的和来表示,如图5中所图示的。

当减去数量大于由cpu进程发送的控制分组的第二数量时,方法可包括确定阻塞状态未能防止端口转发一种或多种类型的分组。减去数量大于由cpu进程发送的控制分组的第二数量可指示尽管被设置为阻塞或丢弃但是正在发送一种或多种类型的分组。

减法还可考虑阈值(例如,t1)以防止或者限制误报或其他异常。例如,方法可包括确定分组的减去数量是否大于由cpu进程通过端口发送的控制分组的第二数量加上阈值(例如,t1)。计算可通过((hw_tx_pps-hw_vlan_fwd_tx_pps)>用于阻塞vlan的cpu_tx_pps的和+t1)来表示,如图5中所图示的。

图7b图示了用于检测涉及设置在阻塞模式下的端口的环路的第二示例方法。在步骤750处,方法可包括识别在网络设备(例如,叶104a)上处于阻塞状态的端口。阻塞状态可用于丢弃一种或多种类型的分组,诸如任何或所有非控制分组,并且防止端口转发一种或多种类型的分组。

在步骤752处,方法可包括确定由网络设备上的硬件元件(例如,asic202)通过端口接收的分组的第一数量(例如,hw_rx_pps)。在步骤754处,方法可包括确定由端口上的硬件元件丢弃的接收分组的第二数量(例如,hw_drop_rx_pps)。

在步骤756处,方法可包括确定由网络设备上的cpu进程(例如,cpu进程204)通过端口接收的控制分组的第三数量(例如,cpu_rx_pps)。在步骤758处,方法可包括将分组的第一数量减去接收分组的第二数量以产生分组的减去数量(例如,hw_rx_pps-hw_drop_rx_pps)。

在步骤760处,方法可包括确定分组的减去数量是否大于控制分组的第三数量(例如,hw_rx_pps-hw_drop_rx_pps>cpu_rx_pps)。在步骤762处,当分组的减去数量大于控制分组的第三数量时,方法可包括确定阻塞状态未能防止端口转发一种或多种类型的分组。

端口可以是具有标记为阻塞的所有vlan的访问端口或干线端口。然而,在一些情况下,端口可包括多个vlan,其中至少一个vlan被标记为转发并且另一vlan被标记为阻塞。在此类场景中,vlan计数器可用于确定环路。

例如,方法可包括确定在端口处于转发状态的vlan上通过端口的分组的第四数量(例如,hw_vlan_fwd_rx_pps)。

方法然后可包括将由硬件元件在端口上接收的分组的第一数量(例如,hw_rx_pps)减去在端口处于转发状态的vlan上的分组的第四数量(例如,hw_vlan_fwd_rx_pps)和被丢弃的接收分组的第二数量(例如,hw_drop_rx_pps),以产生分组的减去数量。

方法可包括确定分组的减去数量是否大于由cpu进程通过端口接收的控制分组的第三数量(例如,hw_rx_pps-hw_vlan_fwd_rx_pps-hw_drop_rx_pps用于阻塞的vlan)>用于阻塞vlan的cpu_rx_pps的和)。在一些情况下,方法还可包括加到由cpu进程接收的控制分组的第四数量的阈值(例如,t1)。

当减去数量大于由cpu进程接收的控制分组的第三数量时,方法可包括确定阻塞状态未能使端口丢弃一种或多种类型的分组。在一些情况下,阈值可被包括在计算中,使得当减去数量大于由cpu进程接收的控制分组的第四数量加上阈值时确定阻塞状态已失败。

图8图示了用于检测具有设置在转发模式下的端口的路径中的环路的示例方法。在步骤800处,方法可包括识别沿着路径(例如,路径600)处于软件转发状态的一组端口(例如,节点602-608)。

在步骤802处,方法可包括遍历路径中的端口之间的每个链路(例如,链路l1-l4610-616)。遍历每个链路可意指遵循路径中的每个链路、识别路径中的每个链路、识别沿着路径的每跳、识别沿着路径的跳的顺序、理解通过路径中的链路的通信的流、准备遵循路径中的链路以像在下面进一步描述的那样探知每跳处的信息和/或对路径中的链路的任何其他分析。

在步骤804处,方法可包括,针对每个链路处的每跳,识别下一跳(例如,下一跳658)和一个或多个先前跳(例如,节点数据库654)。

在步骤806处,方法可包括针对每个链路处的每跳,将下一跳与一个或多个先前跳中的每一个相比较。当下一跳与来自一个或多个先前跳的跳匹配时,在步骤808处,方法可包括检测路径中(例如,路径600)的环路。

当环路被识别时,方法可包括生成警报或通知以通知用户或设备已在路径中检测到环路。方法还可包括将路径中的一个或多个端口设置为阻塞状态。特别地,方法可包括将导致环路的端口设置为阻塞状态以便打断环路。

图9a图示了用于检测两个或更多个虚拟隧道端点之间的环路的第一示例方法。虚拟隧道端点(vtep)可以是被配置为封装/解封分组以便在底层(诸如结构112)与覆盖(诸如覆盖网络150)之间传送的物理和/或虚拟系统(例如,叶104和/或vtep158a-d)。如本文所使用的,vtep不一定限于任何具体覆盖协议,诸如vxlan,并且可用任何覆盖技术或协议(包括当前的覆盖协议和技术以及将来的覆盖技术和协议)加以实现。

此示例方法可与控制器一起使用洪泛和学习或evpn来检测环路。evpn(以太网vpn)使得能够使用第2层(l2)虚拟桥接器来连接一组分散的客户站点或数据中心。

在步骤900处,每个vtep(例如,叶104)向控制器114通告所有其本地接口介质访问控制(mac)地址以及交换机mac地址。例如,如果vtep104a具有32个本地接口,则它将通告用于那32个接口的mac地址以及vtep的交换机mac地址,从而通告33个mac地址。可周期性地、按预定计划或者响应于事件而发送这些更新或通告。例如,每当vtep启动时,每当交换机被配置或者启用以作为vtep运行时,或者每当本地接口mac地址(诸如用户定义的mac地址)存在任何配置变化时,可发送更新或通告。

在步骤902处,每当检测到新的mac地址时每个vtep将其mac表更新到控制器114。在步骤904处,每个vtep针对每个配置的vlan通告其stp根桥接器标识符(id)。每次stp桥接器id改变、新的vlan被添加、根桥接器被选择等时可发送更新。

控制器114可使用此信息来然后检测环路如下。

在步骤906处,如果两个vtep不是vpc对等体(例如,在虚拟端口以太通道或虚拟端口通道(vpc)中)或多宿主对等体(即,根据如通过引用整体地并入本文的rfc7432中所描述的多宿主场景),并且两个vtep对于任何vlan看到相同的stp根桥接器id,则控制器114确定两个vtep共享相同的lan网段(例如,位于相同的lan网段中)。如果两个vtep共享相同的本地lan网段或者具有到相同的本地lan网段的连接,则这种配置可导致l2环路。因此,通过确定两个vteps共享相同的lan网段,控制器114推理vtep被配置在环路中。

在步骤908处,当第一vtep(例如,叶104a)在其mac表中学习到第二vtep(例如,叶104b)的本地接口mac时,控制器114可确定第一vtep和第二vtep共享相同的lan网段(例如,位于相同的lan网段中),并且因此被配置在环路中。异常可以是在第一vtep和第二vtep是多宿主对等体(例如,根据rfc7432的多宿主)的情况下。如果vtep是多宿主对等体,则当不存在环路时vtep将能够相互学习。

另一异常可以是当第一vtep和第二vtep是vpc对等体时。例如,如果vtep是vpc对等体,则vtep可在mct(多机架干线)上相互学习。然而,如果vpc对等体在除mct以外的任何接口上相互学习,则应该将此类vpc对等体视为vpc对等体之间的环路。

在步骤910处,当控制器114检测到环路时,它可通过在两个vtep中的一个上挂起vlan如下来打断环路。在步骤912处,如果vtep中的一个是根桥接器,则控制器114可在另一个vtep的根端口上挂起vlan。在步骤914处,如果两个vtep都是非根,则控制器114可在这些vtep中的一个上的根端口上挂起vlan。控制器114可使用vtep的ip来判定应该挂起哪一个vlan。在一些示例中,具有最低vtepip的vtep可以是所指定的vtep并且在另一个vtep上可挂起vlan。

在步骤916处,如果未配置stp并且使用学习到的接口或交换机mac检测到环路,则控制器114可在学习到对等体vtep的接口或交换机mac的接口上挂起vlan。可使用与仲裁器相同的vtepid来判定应该在哪一个vtep上挂起vlan。

图9b图示了用于检测两个或更多个虚拟隧道端点之间的环路的第二示例方法。此示例方法可以在没有控制器的情况下使用洪泛和学习来检测环路。在步骤920处,每个vtep(例如,叶104)经由消息向多播组通告所有其本地接口介质访问控制(mac)地址以及交换机mac地址。消息可通过所有vtep都知道的udp端口号。除此之外,每个vtep还应该经由消息向多播组通告其stp根桥接器id以及每个配置的vlan。

一旦跨越vtep交换了信息,每个vtep就可使用此信息来然后检测环路如下。

在步骤922处,如果一vtep确定另一vtep不是vpc对等体或多宿主vtep(例如,如rfc7432中所描述的多宿主),并且该vtep对于任何vlan看到与另一个vtep相同的stp根桥接器id,则该vtep可确定两个vtep在相同的lan网段中,并且因此被配置在环路中。

在步骤924处,当第一vtep(例如,叶104a)在其mac表中学习到第二vtep(例如,叶104b)的本地接口mac时,第一vtep可确定第一vtep和第二vtep共享相同的lan网段,并且因此被配置在环路中。异常可以是在第一vtep和第二vtep是多宿主对等体的情况下,vtep将能够相互学习。

另一异常可以是当第一vtep和第二vtep是vpc对等体时。例如,如果vtep是vpc对等体,则vtep可在mct上相互学习。然而,如果vpc对等体在除mct以外的任何接口上相互学习,则应该将此类vpc对等体视为vpc对等体之间的环路。

在步骤926处,当vtep检测到环路时,它可通过在两个vtep中的一个上挂起vlan如下来打断环路。在步骤928处,如果这些vtep中的一个是根桥接器,则vtep可在不是根桥接器的vtep的根端口上挂起vlan。在步骤930处,如果两个vtep是非根,则vtep可在这些vtep中的一个上的根端口上挂起vlan。vtep的ip可用于判定应该挂起哪一个vlan。在一些示例中,具有最低vtepip的vtep可以是所指定的vtep并且在另一个vtep上可挂起vlan。

在步骤932处,如果未配置stp并且使用学习到的接口或交换机mac检测到环路,则vtep可在学习到对等体vtep的接口或交换机mac的接口上挂起vlan。可使用与仲裁器相同的vtepid来判定应该在哪一个vtep上挂起vlan。

图9c图示了用于检测两个或更多个虚拟隧道端点之间的环路的第三示例方法。此示例方法可在没有控制器的情况下使用evpn来检测环路。

在步骤940处,每个vtep通过evpn通告所有它自己的接口mac和交换机mac。在步骤942处,每个vtep通过evpn针对每个vlan通告其stp根桥接器id。在步骤944处,所有vtep构建远程vtep接口mac和交换机mac的相应表。在步骤946处,所有vtep针对每个vlan构建远程vtep的相应表及其stp根桥接器id。

在步骤948处,如果vtep看到它自己的stp根桥接器id中的任一个由不是其vpc对等体或者因该vtep成多宿主的vtep通告,则vtep与这种其他vtep共享相同的lan网段,并且因此具有环路。

在步骤950处,当vtep在其本地lan网段后面学习到主机mac时,vtep可对照远程vtep接口和交换机mac表来检查,并且执行步骤952-956以检测环路。

图9d图示了用于检测环路的第四示例方法实施例。该方法可允许通过通过向本地lan网段发送单播arp请求而验证主机(例如,110a)mac移动是合法移动来检测环路。主机移动可以各种方式发生。例如,主机移动可包括相同的ip但不同的mac(例如,vmotion),或者包括相同的ip和相同的mac。

在步骤960处,当vtep确定本地主机被声明为被移动到另一vtep(例如,通过mac移动或evpn路由通告)时,它可向本地lan网段(例如,网络106)发送单播arp请求(例如,针对该主机mac)以查看主机是否仍然是本地的。

在步骤962处,如果vtep接收到响应,则检测到环路。在步骤964处,如果vtep确实未接收到响应,则移动是有效移动。

在步骤966处,当vtep确定远程主机声明为在其本地lan网段后面移动时,vtep可向远程vtep发送单播arp请求。

在步骤968处,如果vtep接收到响应(例如,来自远程vtep或本地lan网段),则vtep确定存在环路。作为响应,可像先前提及的那样挂起vlan以打断环路。

在步骤970处,如果vtep确实未接收到响应,则vtep确认移动是有效的。

图10图示了适合于高可用性和故障转移的示例网络设备1000。网络设备1000可包括主中央处理单元(cpu)1004、接口1002和总线1010(例如,pci总线)。当在适当的软件或固件的控制下行动时,cpu1004可负责执行分组管理、错误检测和/或路由功能。cpu1004可在包括操作系统和任何适当的应用软件的软件的控制下完成所有这些功能。cpu1004可以包括一个或多个处理器1008,诸如来自motorola系列微处理器或mips系列微处理器的处理器。在替代配置中,处理器1008是用于控制网络设备1000的操作的专门地设计的硬件。在一些情况下,存储器1006(诸如非易失性ram、rom、tcam等)也可形成cpu1004的一部分。然而,存在能将存储器耦合到网络设备1000的许多不同的方式。

可将接口1002作为接口卡(有时称为“线卡”)来提供。

一般地,接口1002可控制通过网络发送和接收分组,并且支持与网络设备1000一起使用的其他外围设备。在可以提供的接口当中的是以太网接口、帧中继接口、电缆接口、dsl接口、令牌环接口、第1层接口、光纤接口等。此外,可以提供各种甚高速接口,诸如快速令牌环接口、无线接口、以太网接口、千兆以太网接口(例如,10、25、40、50、100gbe等)、atm接口、hssi接口、pos接口、fddi接口等。一般地,这些接口可以包括适于与适当的介质通信的端口。在一些情况下,它们还可以包括独立处理器,并且在一些实例中,包括易失性ram。独立处理器可以控制如分组交换、介质控制和管理这样的通信密集任务。通过为通信密集任务提供单独的处理器,这些接口允许主微处理器1004高效地执行路由计算、网络诊断、安全功能等。

网络设备1000还可包括专用集成电路或asic1012。asic1012可经由总线1010与网络设备1000中的其他组件(例如,接口1002、cpu1004、存储器1006、处理器1008等)进行通信。asic1012可以是为特定用途(诸如路由操作,包括转发操作)所定制的集成电路。

尽管图3中所示的系统是本发明的一个具体网络设备,然而它决不是可在上面实现本发明的唯一网络设备架构。例如,常常使用具有处理通信以及路由计算等的单个处理器的架构。进一步地,其他类型的接口和介质也能与路由器一起使用。

不管网络设备的配置如何,它可以采用被配置为存储用于针对本文描述的漫游、路由优化和路由功能的通用网络操作和机制的程序指令的一个或多个存储器或存储器模块(包括存储器1006)。例如,程序指令可以控制操作系统和/或一个或多个应用的操作。一个或多个存储器还可以被配置为存储诸如移动性绑定、注册和关联表等的表。

图11a和图11b图示了示例系统实施例。当实践本技术时更适当的实施例对于本领域的普通技术人员而言将是显而易见的。本领域的普通技术人员还将容易地领会的是,其他系统实施例也是可能的。

图11a图示了常规系统总线计算系统架构1100,其中系统的组件使用总线1106彼此电连通。示例性系统1100包括处理单元(cpu或处理器)1104和系统总线1106,所述系统总线1106将包括系统存储器1120(诸如只读存储器(rom)1118和随机存取存储器(ram)1116)的各种系统组件耦合到处理器1104。系统1100可包括与处理器1104直接地连接、与处理器1104极为接近或者作为处理器1104的一部分集成的高速存储器的高速缓存。系统1100可将数据从存储器1120和/或存储设备1108复制到高速缓存1102以便由处理器1104快速访问。以这种方式,高速缓存可通过避免处理器1104在等待数据时延迟的性能提高。这些和其他模块可控制或者被配置为控制处理器1104以执行各种动作。也可以使用其他系统存储器1120。存储器1120可包括具有不同的性能特性的多种不同类型的存储器。处理器1104可包括任何通用处理器以及被配置为控制处理器1104以及软件指令被并入到实际的处理器设计中的专用处理器的硬件模块或软件模块,诸如存储在存储设备1108中的模块11110、模块21112和模块31114。处理器1104可以基本上是完全独立计算系统,包含多个核心或处理器、总线、存储器控制器、高速缓存等。多核心处理器可以是对称的或不对称的。

为了使得用户能够与计算设备1100交互,输入设备1122可表示任何数量的输入机制,诸如用于语音的麦克风、用于手势或图形输入的触敏屏幕、键盘、鼠标、动作输入装置、语音等。输出设备1124也可以是为本领域的技术人员所知的许多输出机制中的一种或多种。在一些实例中,多模态系统可使得用户能够提供多种类型的输入来与计算设备1100进行通信。通信接口1126一般地可统治并管理用户输入和系统输出。对在任何特定硬件布置上操作没有限制,并且因此基本特征在这里可以容易地取代改进的硬件或固件布置。

存储设备1108是非易失性存储器并且可以是硬盘或可存储可由计算机访问的数据的其他类型的计算机可读介质,诸如磁盒、闪存卡、固态存储器设备、数字通用盘、盒式磁带、随机存取存储器(ram)1116、只读存储器(rom)1118及其混合。

存储设备1108可包括用于控制处理器1104的软件模块1110、1112、1114。设想了其他硬件或软件模块。存储设备1108可连接到系统总线1106。在一个方面中,执行特定功能的硬件模块可包括连同必要的硬件组件(诸如处理器1104、总线1106、输出设备(例如,显示器)1124等)一起存储在计算机可读介质中以执行该功能的软件组件。

系统1100还可包括专用集成电路或asic1128。asic1128可经由总线1106与系统1100中的其他组件(例如,组件1102-1126)进行通信。asic1128可以是为特定用途(诸如路由操作,包括转发操作)所定制的集成电路。

图11b图示了具有可在执行所描述的方法并且生成和显示图形用户界面(gui)时使用的芯片组架构的示例计算机系统1150。计算机系统1150是可用于实现所公开的技术的计算机硬件、软件和固件的示例。系统1150可包括处理器1152,表示能够执行被配置为执行识别的计算的软件、固件和硬件的任何数量的物理上和/或逻辑上根本不同的资源。处理器1152可与芯片组1154进行通信,所述芯片组1154可控制到处理器1152的输入和来自处理器1152的输出。在此示例中,芯片组1154将信息输出到输出设备1162,诸如显示器,并且可读取信息并向存储设备1164写入信息,所述存储设备1164例如可包括磁介质和固态介质。芯片组1154还可从ram1166读取数据并且将数据写入到ram1166。可提供用于与各种用户接口组件1158对接的桥接器1156以便与芯片组1154对接。此类用户接口组件1158可包括键盘、麦克风、触摸检测和处理电路、指点设备(诸如鼠标)等。一般而言,到系统1150的输入可来自各种源(机器生成的和/或人类生成的)中的任一种。

芯片组1154还可与可具有不同的物理接口的一个或多个通信接口490对接。此类通信接口可包括用于有线和无线局域网、用于宽带无线网络以及个域网的接口。用于生成、显示并使用本文公开的gui的方法的一些应用可包括通过物理接口接收有序数据集或者由机器它本身通过处理器1152分析存储在存储装置1164或1166中的数据来生成。进一步地,机器可经由用户接口组件1158从用户接收输入并且执行适当的功能,诸如通过使用处理器1152来解释这些输入的浏览功能。

可领会的是,示例系统1100和1150可具有多于一个处理器或者是联网在一起以提供更大处理能力的计算设备的组或集群的一部分。

总之,描述了用于检测网络环路的系统、方法和计算机可读存储介质。在一个实施例中,系统可以针对来自网络中的多个vtep的每个虚拟隧道端点(vtep)识别相应的介质访问控制地址数据,所述相应的介质访问控制地址数据包括相应的vtep的相应的本地接口介质访问控制地址以及由相应的vtep学习到的相应的介质访问控制地址。系统可确定vtep是否正在运行生成树协议(stp),并且由第一vtep所学习到的介质访问控制地址是否与第二vtep的相应的本地接口介质访问控制地址匹配。当由第一vtep所学习到的介质访问控制地址与第二vtep的相应的本地接口介质访问控制地址匹配时系统可检测到环路。当vtep正在运行stp并且第一vtep和第二vtep看到相同的stp根桥接器时系统也可检测到环路。

为了说明的清楚,在一些实例中本技术可以被呈现为包括包括有含有设备、设备组件、在软件或硬件和软件的组合中具体实现的方法中的步骤或例行程序的功能块的个别功能块。

在一些实施例中,计算机可读存储设备、介质和存储器可包括包含比特流等的有线或无线信号。

可使用被存储或者可以其他方式从计算机可读介质获得的计算机可执行指令来实现根据上述示例的方法。此类指令可包括例如引起或者以其他方式将通用计算机、专用计算机或专用处理设备配置为执行某个功能或功能组的指令和数据。使用的计算机资源的部分可通过网络访问。计算机可执行指令可以是例如二进制文件、诸如汇编语言的中间格式指令、固件或源代码。可用于存储指令、所使用的信息和/或在根据描述的示例的方法期间创建的信息的计算机可读介质的示例包括磁盘或光盘、闪速存储器、提供有非易失性存储器的usb设备、联网存储设备等。

实现根据这些公开的方法的设备可包括硬件、固件和/或软件,并且可采用各种形状因数中的任一种。此类形状因素的典型示例包括膝上型电脑、智能电话、小形状因数个人计算机、个人数字助理、机架式设备、独立设备等。还可将本文描述的功能性具体实现在外围设备或附加卡中。作为另一示例,还可在不同芯片之间的电路板或在单个设备中执行的不同进程中实现这种功能性。指令、用于传达此类指令的介质、用于执行它们的计算资源以及用于支持此类计算资源的其他结构是用于提供这些公开中描述的功能的模块。

为了说明的清楚,在一些实例中本技术可以被呈现为包括包括有含有设备、设备组件、在软件或硬件和软件的组合中具体实现的方法中的步骤或例行程序的功能块的个别功能块。

尽管使用各种示例和其他信息来说明所附权利要求的范围内的方面,然而不应该基于此类示例中的特定特征或布置暗示对权利要求的限制,因为普通技术人员将能够使用这些示例来导出各式各样的实施方式。进一步地并且尽管可能已用特定于结构特征和/或方法步骤的示例的语言描述了一些主题,然而应当理解的是,所附权利要求中限定的主题不一定限于这些描述的特征或行为。例如,可不同地分布或者在除本文标识的那些组件以外的组件中执行这种功能性。相反,所描述的特征和步骤作为所附权利要求的范围内的系统和方法的组件的示例被公开。此外,叙述集合“中的至少一个”的权利要求语言表明该集合的一个成员或该集合的多个成员满足该权利要求。

本公开的声明包括:

声明l:一种方法,所述方法包括:识别在网络设备上处于阻塞状态的端口,所述阻塞状态用于丢弃一种或多种类型的分组并且防止所述端口转发所述一种或多种类型的分组;确定由所述网络设备上的硬件元件通过所述端口发送的分组的第一数量;确定由所述网络设备上的cpu进程通过所述端口发送的控制分组的第二数量;确定分组的第一数量是否大于控制分组的第二数量;以及当分组的第一数量大于控制分组的第二数量时,确定所述阻塞状态未能防止所述端口转发所述一种或多种类型的分组。

声明2:根据声明1所述的方法,其中,所述控制分组包括桥接协议数据单元(bpdu)分组、链路聚合控制协议(lacp)分组、链路层发现协议(lldp)分组和cisco发现协议(cdp)分组中的至少一个。

声明3:根据声明1或声明2所述的方法,进一步包括:确定由所述硬件元件通过所述端口接收的分组的第三数量;确定由所述cpu进程通过所述端口接收的控制分组的第四数量;确定由所述硬件元件丢弃的与所述端口相关联的接收分组的第五数量;确定由所述硬件元件接收的分组的第三数量与由所述硬件元件丢弃的分组的第五数量之间的差是否大于由所述cpu进程接收的控制分组的第四数量;以及当所述差大于接收的控制分组的第四数量时,确定所述阻塞状态未能使所述端口丢弃所述一种或多种类型的分组。

声明4:根据声明1至3中的任一项所述的方法,其中,所述端口是访问端口或干线端口中的一个,其中,在所述干线端口上配置的所有虚拟局域网(vlan)被标记为阻塞。

声明5:根据声明1至4中的任一项所述的方法,其中,所述端口与第一虚拟局域网和第二虚拟局域网相关联,其中,所述端口被配置为阻塞与所述虚拟局域网相关联的一种或多种类型的分组并且转发与所述第二虚拟局域网相关联的一种或多种类型的分组,所述方法进一步包括:确定通过所述端口发送的与所述第二虚拟局域网相关联的分组的第三数量;将由所述硬件元件通过所述端口发送的分组的第一数量减去与所述第二虚拟局域网相关联的分组的第三数量,以产生分组的减去数量;确定分组的减去数量是否大于由所述cpu进程通过所述端口发送的与一个或多个阻塞虚拟局域网相关联的控制分组的第四数量;以及当所述减去数量大于控制分组的第四数量时,确定所述阻塞状态未能防止所述端口转发所述一种或多种类型的分组。

声明6:根据声明1至5中的任一项所述的方法,其中,所述端口与第一虚拟局域网和第二虚拟局域网相关联,其中,所述端口被配置为阻塞与所述虚拟局域网相关联的分组并且转发与所述第二虚拟局域网相关联的分组,所述方法进一步包括:确定由所述硬件元件通过所述端口接收的分组的第三数量;确定由所述cpu进程通过所述端口接收的控制分组的第四数量,控制分组的第四数量与一个或多个阻塞虚拟局域网相关联;确定由所述硬件元件丢弃的与所述端口相关联的接收分组的第五数量,接收分组的第五数量与所述一个或多个阻塞虚拟局域网相关联;确定通过所述端口接收的与所述第二虚拟局域网相关联的分组的第六数量;将由所述硬件元件通过所述端口接收的分组的第三数量减去与所述第二虚拟局域网相关联的分组的第六数量和由所述硬件元件丢弃的与所述端口相关联的接收分组的第五数量,以产生分组的减去数量;确定分组的减去数量是否大于由所述cpu进程通过所述端口接收的控制分组的第四数量;以及当所述减去数量大于由所述cpu进程接收的控制分组的第四数量时,确定所述阻塞状态未能使所述端口丢弃所述一种或多种类型的分组。

声明7:根据声明1至6中的任一项所述的方法,其中,发送的分组的第一数量包括发送的分组的速率,并且其中,发送的控制分组的第二数量包括接收的控制分组的速率。

声明8:根据声明1至7中的任一项所述的方法,其中,所述一种或多种类型的分组包括排除所述控制分组的所有分组,其中,所述硬件元件包括专用集成电路。

声明9:一种网络设备,所述网络设备包括:一个或多个处理器;以及在其中存储有指令的计算机可读存储介质,所述指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行包括以下步骤的操作:识别在所述网络设备上处于阻塞状态的端口,所述阻塞状态用于丢弃一种或多种类型的分组并且防止所述端口转发所述一种或多种类型的分组;确定由所述网络设备上的硬件元件通过所述端口发送的分组的第一数量;确定由所述网络设备上的cpu进程通过所述端口发送的控制分组的第二数量;确定分组的第一数量是否大于控制分组的第二数量;以及当分组的第一数量大于控制分组的第二数量时,检测与所述阻塞状态相关联的错误,所述错误包括防止所述端口转发所述一种或多种类型的分组的失败。

声明10:根据声明9所述的网络设备,其中,所述控制分组包括桥接协议数据单元(bpdu)分组、链路聚合控制协议(lacp)分组、链路层发现协议(lldp)分组和cisco发现协议(cdp)分组中的至少一个。

声明11:根据声明9或10所述的网络设备,所述计算机可读介质具有存储在其中的指令,所述指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行包括以下步骤的操作:确定由所述硬件元件通过所述端口接收的分组的第三数量;确定由所述cpu进程通过所述端口接收的控制分组的第四数量;确定由所述硬件元件丢弃的与所述端口相关联的接收分组的第五数量;确定由所述硬件元件接收的分组的第三数量与由所述硬件元件丢弃的分组的第五数量之间的差是否大于由所述cpu进程接收的控制分组的第四数量;以及当所述差大于接收的控制分组的第四数量时,检测到与所述阻塞状态相关联的错误,所述错误包括由所述端口在所述阻塞状态期间丢弃所述一种或多种类型的分组的失败。

声明12:根据声明9至11中的任一项所述的网络设备,其中,所述端口与第一虚拟局域网和第二虚拟局域网相关联,其中,所述端口被配置为阻塞与所述虚拟局域网相关联的一种或多种类型的分组并且转发与所述第二虚拟局域网相关联的一种或多种类型的分组,所述计算机可读介质具有存储在其中的指令,所述指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行包括以下步骤的操作:确定通过所述端口发送的与所述第二虚拟局域网相关联的分组的第三数量;将由所述硬件元件通过所述端口发送的分组的第一数量减去与所述第二虚拟局域网相关联的分组的第三数量,以产生分组的调整后数量;确定分组的调整后数量是否大于由所述cpu进程通过所述端口发送的与一个或多个阻塞虚拟局域网相关联的控制分组的第四数量;以及当所述调整后数量大于所述第二数量时,在所述阻塞状态期间检测到错误,所述错误包括防止所述端口转发所述一种或多种类型的分组的失败。

声明13:根据声明9至12中的任一项所述的网络设备,其中,所述端口与第一虚拟局域网和第二虚拟局域网相关联,其中,所述端口被配置为阻塞与所述第一虚拟局域网相关联的一种或多种类型的分组并且转发与所述第二虚拟局域网相关联的一种或多种类型的分组。

声明14:根据声明9至12中的任一项所述的网络设备,其中,所述计算机可读介质存储附加指令,所述附加指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行包括以下步骤的操作:确定由所述硬件元件通过所述端口接收的分组的数量;确定由所述cpu进程通过所述端口接收的控制分组的数量,由所述cpu进程接收的控制分组的数量与一个或多个阻塞虚拟局域网相关联;确定由所述硬件元件丢弃的与所述端口相关联的接收分组的数量,所述接收分组与一个或多个阻塞虚拟局域网相关联;确定通过所述端口接收的与所述第二虚拟局域网相关联的分组的数量;将由所述硬件元件通过所述端口接收的分组的数量减去与所述第二虚拟局域网相关联的分组的数量和由所述硬件元件丢弃的与所述端口相关联的接收分组的数量,以产生分组的减去数量;确定分组的减去数量是否大于由所述cpu进程通过所述端口接收的控制分组的数量;以及当所述减去数量大于由所述cpu进程接收的控制分组的数量时,确定所述阻塞状态未能使所述端口丢弃所述一种或多种类型的分组。

声明15:根据声明9至14中的任一项所述的网络设备,其中,所述一种或多种类型的分组包括排除所述控制分组的所有分组,其中,所述硬件元件包括专用集成电路。

声明16:一种在其中存储有指令的非暂时性计算机可读存储介质,所述指令当由处理器执行时,使所述处理器执行包括以下步骤的操作:识别在网络设备上处于阻塞状态的端口,所述阻塞状态使所述端口丢弃一种或多种类型的分组并且防止所述端口转发所述一种或多种类型的分组;确定由所述网络设备的硬件元件通过所述端口接收的分组的第一数量;确定由所述网络设备的cpu进程通过所述端口接收的控制分组的第二数量;确定经由所述端口接收并且由所述硬件元件丢弃的分组的第三数量;确定由所述硬件元件接收的分组的第一数量与由所述硬件元件丢弃的分组的第三数量之间的差是否大于由所述cpu进程接收的控制分组的第二数量;以及当所述差大于接收的控制分组的第二数量时,确定所述端口未能在所述阻塞状态期间丢弃所述一种或多种类型的分组。

声明17:根据声明16所述的非暂时性计算机可读存储介质存储附加指令,所述附加指令当由所述处理器执行时使所述处理器执行包括以下步骤的操作:确定由所述网络设备上的所述硬件元件通过所述端口发送的分组的第四数量;确定由所述网络设备上的所述cpu进程通过所述端口发送的控制分组的第五数量;确定发送的分组的第四数是否大于控制分组的第五数量;以及当分组的第四数量大于控制分组的第五数量时,检测到所述端口的阻塞状态的问题,所述问题基于所述端口已在所述阻塞状态期间转发了所述一种或多种类型的分组的确定。

声明18:根据声明16或17的非暂时性计算机可读存储介质,其中,所述端口与第一虚拟局域网和第二虚拟局域网相关联,其中,所述端口被配置为阻塞与所述第一虚拟局域网相关联的一种或多种类型的分组并且转发与所述第二虚拟局域网相关联的一种或多种类型的分组,所述非暂时性计算机可读存储介质存储附加指令,所述附加指令当由所述处理器执行时,使所述处理器执行包括以下步骤的操作:确定通过所述端口发送的与所述第二虚拟局域网相关联的分组的第四数量;将由所述硬件元件通过所述端口发送的分组的第五数量减去与所述第二虚拟局域网相关联的分组的第四数量,以产生分组的调整后数量;确定分组的调整后数量是否大于由所述cpu进程通过所述端口发送的控制分组的第六数量,其中,控制分组的第六数量与一个或多个阻塞虚拟局域网相关联;以及当所述调整后数量大于由所述cpu进程发送的控制分组的第六数量时,在所述阻塞状态期间检测到错误,所述错误基于所述端口已在所述阻塞状态期间转发了所述一种或多种类型的分组的确定。

声明19:根据声明16至18中的任一项所述的非暂时性计算机可读存储介质,其中,所述端口与第一虚拟局域网和第二虚拟局域网相关联,其中,所述端口被配置为阻塞与所述第一虚拟局域网相关联的一种或多种类型的分组并且转发与所述第二虚拟局域网相关联的一种或多种类型的分组,所述非暂时性计算机可读存储介质存储附加指令,所述附加指令当由所述处理器执行时,使所述处理器执行包括以下步骤的操作:确定通过所述端口接收的与所述第二虚拟局域网相关联的分组的第四数量;将由所述硬件元件通过所述端口接收的分组的第一数量减去与所述第二虚拟局域网相关联的分组的第四数量和由所述硬件元件丢弃的与所述端口相关联的接收分组的第三数量,以产生分组的调整后数量;确定分组的调整后数量是否大于由所述cpu进程通过所述端口接收的控制分组的第二数量,其中,控制分组的第二数量与一个或多个阻塞虚拟局域网相关联;以及当所述调整后数量大于由所述cpu进程收到的控制分组的第二数量时,确定所述端口已遇到错误,所述错误包括由所述端口在所述阻塞状态期间丢弃所述一种或多种类型的分组的失败。

声明20:根据声明16至19中的任一项所述的非暂时性计算机可读存储介质,其中,所述一种或多种类型的分组包括除所述控制分组之外的所有类型的分组,其中,所述控制分组包括桥接协议数据单元(bpdu)分组、链路聚合控制协议(lacp)分组、链路层发现协议(lldp)分组和cisco发现协议(cdp)分组中的至少一个。

声明21:一种系统,所述系统包括用于执行根据声明1至8中的任一项的方法的模块。

声明22:一种方法,所述方法包括:识别具有多个跳的网络路径,所述多个跳包括相应的节点,其中,所述相应的节点全部被配置在转发模式下;遍历所述网络路径的至少一部分以针对来自所述相应的节点的每个节点识别相应的下一跳;基于针对每个节点的所述相应的下一跳,确定来自所述相应的节点的两个或更多个节点是否具有相同的相应的下一跳;以及当所述两个或更多个节点具有所述相同的相应的下一跳时,确定所述网络路径具有网络环路。

声明23:根据声明22所述的方法,其中,所述相应的节点包括设置在转发模式下的端口,其中,所述端口中的每一个均与相应的交换机相关联。

声明24:根据声明22或23所述的方法,其中,所述网络包括虚拟局域网,其中,确定所述网络路径具有所述网络环路包括确定所述虚拟局域网具有所述网络环路。

声明25:根据声明22至24中的任一项所述的方法,进一步包括:针对所述网络中的多个虚拟局域网中的每一个识别相应的网络路径,所述相应的网络路径包括相应的多个跳,所述相应的多个跳包括相应的多个节点,所述相应的多个节点被配置在转发模式下;遍历每个相应的网络路径以针对所述相应的多个节点中的每个相应的节点识别第二相应的下一跳;基于针对每个相应的节点的所述第二相应的下一跳,确定来自所述相应的多个节点的两个或更多个节点是否共同具有特定下一跳;以及当所述两个或更多个节点共同具有所述特定下一跳时,确定所述相应的虚拟局域网具有相应的网络环路。

声明26:根据声明22至25中的任一项所述的方法,进一步包括:针对来自所述相应的节点的每个节点,将所述相应的下一跳记录在数据库中的相应的下一跳字段中;并且其中,确定来自所述相应的节点的两个或更多个节点是否具有所述相同的相应的下一跳包括:针对来自所述相应的节点的每个节点,比较所述数据库中的所述相应的下一跳字段以产生比较;以及基于所述比较,确定所述相同的相应的下一跳是否被列举在与所述相应的节点中的两个或更多个相关联的所述相应的下一跳字段中。

声明27:根据声明22至26中的任一项所述的方法,进一步包括:当所述相同的相应的下一跳被列举在所述相应的下一跳字段中时:确定所述两个或更多个相应的节点具有所述相同的相应的下一跳;以及确定所述网络环路包括所述相应的节点中的两个或更多个。

声明28:根据声明22至27中的任一项所述的方法,其中,所述网络路径包括连接所述多个跳的多个链路,所述相应的节点中的每一个均与来自所述多个链路的相应的链路中的至少一个相关联,其中,针对每个节点识别所述相应的下一跳包括针对每个节点的每个相应的链路识别所述相应的下一跳。

声明29:根据声明22至28中的任一项所述的方法,其中,所述网络路径包括连接所述多个跳的多个链路,其中,来自所述相应的节点的一节点与来自所述多个链路的第一链路和第二链路相关联,其中,所述第一链路和所述第二链路将所述节点连接到不同的下一跳。

声明30:根据声明22至29中的任一项所述的方法,其中,所述不同的下一跳中的一个是所述相同的相应的下一跳,并且其中,所述节点是具有所述相同的相应的下一跳的所述两个或更多个节点中的一个。

声明31:根据声明22至30中的任一项所述的方法,其中,所述相同的相应的下一跳是来自所述相应的节点的第二节点,所述方法进一步包括确定所述网络环路是在所述节点与所述第二节点之间。

声明32:一种系统,所述系统包括:一个或多个处理器;以及在其中存储有指令的计算机可读介质,所述指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行根据声明22至31中的任一项的方法。

声明33:一种在其中存储有指令的非暂时性计算机可读介质,所述指令当由一个或多个处理器执行时,使所述一个或多个处理器执行根据声明22至31中的任一项的方法。

声明34:一种系统,所述系统包括用于执行根据声明22至31中的任一项的方法的模块。

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