本公开涉及计算机网络,并且更具体地,涉及计算机网络内的工程业务流量。
背景技术:
网络中的路由装置(通常称为路由器)维护描述网络可用的路由的路由信息。路由器使用路由协议来交换和累积描述网络的拓扑信息。这允许路由器构建网络自身的路由拓扑图。在接收到传入分组时,路由器检查分组内的信息,并根据累积的拓扑信息转发分组。
基于分组的网络将标签交换协议用于流量工程和其他目的。多协议标签交换(mpls)是一种机制,用于根据网络中路由器维护的路由信息来设计互联网协议(ip)网络中的流量模式。通过利用mpls协议,例如,具有流量工程扩展的资源预留协议(rsvp-te)或标签分发协议(ldp),标签交换路由器可以使用预先添加到流量的标签,沿着通过网络到目的地装置的特定路径(即,标签交换路径(lsp))来转发流量。
lsp定义了通过网络的不同路径,以将mpls分组从源装置传送到目的地装置。沿着lsp的每个路由器分配与目的地相关联的标签,并将该标签传播到沿着路径最近的上游路由器。沿着路径的路由器添加(推送)、移除(弹出)或交换标签并执行其他mpls操作,以沿着所建立的路径转发mpls分组。
技术实现要素:
通常,描述了为用标签栈实现的标签交换路径(lsp)(例如,具有流量工程扩展的资源预留协议(rsvp-te)lsp)的网络装置提供平滑重启(gracefulrestart)过程的技术。对于用可以称为弹出和释放隧道的标签栈实现的lsp,lsp的相关网络装置从分组的标签栈的顶部移除或弹出标签,以便沿着lsp传播分组。在这种情况下,标签不存储在网络装置的转发平面中。
作为一个示例,用标签栈实现的lsp的网络装置可以使用“平滑重启”过程从重启之前重新获知其控制平面状态,同时保持其转发平面状态,使得流量可以继续转发,而不会中断。代替从转发平面获知下游标签(这对于用标签栈实现的lsp可能是不可能的),本文描述的技术使得重启网络装置能够经由来自lsp中的上游网络装置的信令来获知下游标签(本文称为“label_rx”)。例如,上游路由器可以生成包括恢复对象(例如,恢复记录路由对象(recovery_rro))的路径信令消息(例如,rsvppath消息),该恢复对象定义从lsp的出口网络装置到重启网络装置的lsp的反向路径。更具体地,恢复对象包括来自记录路由对象(rro)的lsp的标签信息,该记录路由对象由上游网络装置在重启之前在来自重启网络装置的预留信令消息(例如,rsvpresv消息)中最后接收。在重启期间,上游路由器可以向重启路由器发送包括恢复对象的路径信令消息,使得重启路由器可以从recovery_rro获知label_rx,并使用label_rx重新实例化其控制平面状态。以这种方式,为用标签栈(例如,rsvp-te弹出和释放隧道)实现的lsp的网络装置提供平滑重启过程。
在一个示例中,一种方法包括由用标签栈实现的标签交换路径(lsp)的网络装置从lsp中的网络装置的上游网络装置接收路径信令消息,该路径信令消息包括定义从lsp的出口网络装置到网络装置的lsp的反向路径的恢复对象,其中,恢复对象至少包括与网络装置相关联的上游标签和下游标签,并且其中,网络装置是重启网络装置。该方法还包括由网络装置基于恢复对象来确定与网络装置相关联的上游标签和下游标签,其中,与网络装置相关联的上游标签包括由网络装置为lsp中的上游网络装置分配的标签,并且其中,与网络装置相关联的下游标签包括由下游网络装置分配给lsp中的网络装置的标签。该方法还包括由网络装置基于恢复对象实例化网络装置的控制平面状态。
在另一示例中,一种方法包括由用标签栈实现的标签交换路径(lsp)的网络装置检测下游网络装置正在重启,其中下游网络装置位于lsp中的网络装置的下游。该方法还包括由网络装置生成包括恢复对象的路径信令消息,其中,恢复对象包括从lsp的出口网络装置到网络装置的lsp的反向路径,并且其中,恢复对象至少包括与下游网络装置相关联的上游标签和下游标签,其中,与下游网络装置相关联的上游标签包括由下游网络装置为lsp中的网络装置分配的标签,并且其中,与下游网络装置相关联的下游标签包括由位于lsp中的下游网络装置下游的网络装置分配的标签。该方法还包括由网络装置向下游网络装置发送路径信令消息。
在另一示例中,一种用标签栈实现的标签交换路径(lsp)的网络装置包括耦接到存储器的至少一个处理器,其中,处理器执行软件,该软件被配置为:接收包括恢复对象的路径信令消息,其中,恢复对象定义从lsp的出口网络装置到网络装置的lsp的反向路径,其中,恢复对象至少包括与网络装置相关联的上游标签和下游标签,并且其中,网络装置是重启网络装置。处理器还执行这样的软件,该软件被配置为:基于恢复对象来确定与网络装置相关联的上游标签和下游标签,其中,与网络装置相关联的上游标签包括由网络装置为lsp中的上游网络装置分配的标签,并且其中,与网络装置相关联的下游标签包括由下游网络装置分配给lsp中的网络装置的标签。处理器还执行这样的软件,该软件被配置为基于恢复对象实例化网络装置的控制平面状态。
在另一示例中,一种用标签栈实现的标签交换路径(lsp)的网络装置包括耦接到存储器的至少一个处理器,其中,处理器执行软件,该软件被配置为:检测下游网络装置正在重启,其中,下游网络装置位于lsp中的网络装置的下游。处理器还执行这样的软件,该软件被配置为:生成包括恢复对象的路径信令消息,其中,恢复对象包括从lsp的出口网络装置到网络装置的lsp的反向路径,并且其中,恢复对象至少包括与下游网络装置相关联的上游标签和下游标签,其中,与下游网络装置相关联的上游标签包括由下游网络装置为lsp中的网络装置分配的标签,并且其中,与下游网络装置相关联的下游标签包括由位于lsp中的下游网络装置下游的网络装置分配的标签。处理器还执行这样的软件,该软件被配置为向下游网络装置发送路径信令消息。
在附图和下面的描述中阐述一个或多个示例的细节。本公开的其它特征、目的和优点将从说明书和附图以及权利要求书中变得显而易见。
附图说明
图1是根据本文描述的技术的示出示例性计算机网络的方框图,其中,网络装置对用标签栈实现的lsp执行平滑重启过程。
图2是示出根据本文描述的技术的另一示例的方框图,其中,网络装置对用标签栈实现的lsp执行平滑重启。
图3是示出执行本公开中描述的技术的各个方面的路由器的方框图。
图4是根据本文描述的技术的示出用标签栈实现的lsp的平滑重启过程的示例操作的流程图。
图5是根据本文描述的技术的示出用标签栈实现的lsp的平滑重启过程的另一示例操作的流程图。
在附图和下面的描述中阐述一个或多个示例的细节。其它特征、目的和优点将从说明书和附图以及权利要求书中变得显而易见。
具体实施方式
图1是根据本文描述的技术的示出示例性计算机网络2的方框图,其中,网络装置对用标签栈实现的lsp执行平滑重启过程。在图1的示例中,网络14可以包括网络装置,例如,路由器12a-12g(统称为“路由器12”),以建立标签交换路径(lsp),包括资源预留协议lsp。例如,资源预留协议lsp是通过发送信令消息(例如,路径信令消息和预留信令消息)而建立的lsp,这些消息请求为lsp预留指定量的带宽。计算机网络2的配置仅仅是一个示例,并且可以包括或多或少的路由器和/或网络。
为了说明性目的,路由器12可以使用资源预留协议,例如,具有流量工程扩展的资源预留协议(rsvp-te),以建立从入口路由器12a延伸到出口路由器12g的rsvp-telsp,例如,rsvp-telsp16。lsp上发送的所有网络流量必须遵循所建立的路径。在图1的示例中,使用rsvp-te协议在一个或多个链路18a-18f(统称为“链路18”)上建立rsvp-telsp16。
由入口路由器12a接收的网络流量的源可以包括一个或多个装置(未示出)和/或向网络14中的入口路由器12a提供流量的任何公共或专用网络或互联网。在资源预留协议lsp上转发的网络流量的目的地可以包括一个或多个目的地装置和/或网络,该网络可以包括包含多个装置的lan或广域网(wan)。例如,目的地装置可以包括个人计算机、膝上型计算机、工作站、个人数字助理(pda)、无线装置、网络就绪设备、文件服务器、打印服务器或经由网络14访问源的其他装置。
如下面进一步描述的,路由器12可以建立用标签栈实现的lsp,例如,通过用弹出和释放隧穿技术使用rsvp-te协议。例如,路由器12可以使用rsvp-te来计算满足网络管理员对rsvp-telsp16施加的某些约束的路径。例如,入口路由器12a可以使用rsvp-te基于关于网络14内的链路18的约束信息(包括例如预留带宽可用性、链路颜色、共享风险链路组(srlg)等)来建立多协议标签交换(mpls)传输lsp。rsvp-te可以使用由来自链路状态内部网关协议(igp)(例如,中间系统-中间系统(isis)协议或开放最短路径优先(ospf)协议)的路由通告累积的预留带宽可用性信息来配置rsvp-telsp16。在计算路径之后,入口路由器12a可以向出口路由器12g发送请求沿着计算的路径建立rsvp-telsp16的路径信令消息,例如,rsvppath消息。
通常,在实现lsp时,路径信令消息(例如,rsvppath消息)包括标签请求对象,该标签请求对象响应于该路径信令消息而请求沿着该路径的每个路由器在预留信令消息(例如,rsvpresv消息)中提供相应的下游分配的预留标签。响应于该路径信令消息,沿着路径的接收包括该标签请求对象的路径信令消息的每个路由器被触发,以为对应的预留信令消息分配相应的标签对象。标签对象向相邻的上游路由器指示发送预留信令消息的路由器是下游的下一跳路由器。
例如,当rsvp-telsp的出口路由器接收rsvppath消息时,出口路由器通过在rsvpresv消息中包括标签对象来响应rsvppath消息中的标签请求对象,该标签对象向转接路由器指示出口路由器是下一跳路由器。出口路由器遵循由rsvppath消息创建的路径状态,以相反的顺序将rsvpresv消息发送回上游的入口路由器。
沿着该路径的每个路由器通常从对应的下游路由器接收具有相应标签对象的rsvpresv消息,并且使用从下游路由器接收的标签(本文称为“label_rx”或“下游标签”)来识别与rsvpresv消息的发送方相关联的传出流量。沿着路径的每个转接路由器通常分配一个新标签(本文称为“label_tx”或“上游标签”),用label_tx交换label_rx,作为rsvpresv消息的标签对象,并将带有label_tx的rsvpresv消息发送到上游路由器。发送到上游路由器的label_tx是上游转接路由器可以用来将传入流量导向其下游路由器的标签。即,每个转接路由器通常可以从下游路由器接收相应的label_rx,将label_rx交换为相应的label_tx并将相应的label_tx发送到上游路由器。
执行标签交换(如上所述)的给定转接路由器基于接收到的下游标签(例如,label_rx)和分配的上游标签(例如,label_tx)对其转发平面进行编程,以便将传入的标签分组映射到下一跳标签转发条目。当rsvpresv消息到达入口路由器时,rsvp-telsp被有效地建立。在d.awduche等人的“rsvp-te:extensionstorsvpforlsptunnels”requestforcomments3209,2001年12月中描述了rsvp-te的进一步示例,其全部内容通过引用结合于此。
路由器12还可以使用标签栈(例如,rsvp-te的弹出和释放隧穿)来实现lsp,以减少转发平面状态并提高系统性能。例如,代替交换标签(如上所述)以发信号通知rsvp-telsp,相反,每个路由器12可以分配相应的弹出标签,该弹出标签使得转接路由器从标签栈的顶部弹出对应的标签,并将分组转发到朝向出口路由器的邻近的下游路由器。对于建立用弹出和释放隧道实现的rsvp-telsp的路由器,弹出标签不存储在网络装置的转发平面中。在h.sitaman等人的“signalingrsvp-tetunnelsonasharedmplsforwardingplane”,draft-ietf-mpls-rsvp-shared-labels-00.txt,2017年12月19日中,描述了rsvp-te弹出和释放标签的进一步示例,其全部内容通过引用结合于此。
在图1的示例中,每个转接路由器12b-12f可以分配相应的弹出标签,例如,弹出标签1001-1005,并且在rsvpresv消息的标签对象中通告相应的弹出标签。当rsvpresv消息朝向入口路由器12a穿过网络14时,每个路由器12b-12f也可以在rsvpresv消息的记录路由对象(rro)中记录相应的弹出标签。rro可用于收集详细的路径信息(本文也称为“子对象”),并可用于环路检测和诊断。例如,rro可以包括对应于给定路径的标签列表。在图1的示例中,路由器12a可以接收rsvpresv消息,该消息包括带有从路由器12a到路由器12g的路径标签的rro。类似地,路由器12b可以接收rsvpresv消息,该消息包括带有从路由器12b到路由器12g的路径标签的rro,依此类推。
入口路由器12a可以接收rsvpresv消息,并且可以根据rro中记录的弹出标签来构建标签栈20。当转发去往出口路由器12g的流量时,入口路由器12a可以将带有标签栈20的分组注入网络14中,以沿着rsvp-telsp16引导该分组。例如,当路由器12b接收具有在标签栈20顶部的标签1001的分组时,路由器12b可以从标签栈20顶部弹出标签1001,并将分组朝向出口路由器12g向下游转发。路由器12c然后可以接收具有在标签栈20顶部的标签1002的分组。路由器12c可以从标签栈20的顶部弹出标签1002,并将分组朝向出口路由器12g向下游转发。这种弹出和转发的过程在剩余的每个转接路由器上继续,直到分组到达出口路由器12g。尽管图1被示出为分配单个标签,但是每个转接路由器12b-12f可以分配与转接路由器的相邻路由器的数量相对应的任意数量的标签。
如果路由通信会话失败,即,会话出错或“发生故障”,则路由器12可以支持“平滑重启”过程。路由器12的重启路由器可以使用平滑重启过程来在重启之前重新获知控制平面状态,同时保持转发平面状态使得可以继续转发流量,而不会中断。在berger,l.的“generalizedmulti-protocollabelswitching(gmpls)signalingresourcereservationprotocol-trafficengineering(rsvp-te)extensions”requestforcomments3473,2003年1月和satyanarayana,a.的“extensionstogmplsresourcereservationprotocol(rsvp)gracefulrestart”requestforcomments5063,2007年10月中,描述了平滑重启的进一步示例,这两者的全部内容通过引用结合于此。然而,在rfc3473和rfc5063中描述的平滑重启过程不能重新实例化用标签栈实现的lsp的路由器的控制平面状态,如下文进一步描述的。
对于在请求评议(rfc)3473中描述的平滑重启过程,重启路由器依赖一个或多个相邻路由器来复制完整的路径状态和相关的预留状态信息。例如,重启路由器的相邻上游路由器通常发送包括recovery_label对象的rsvppath消息,该消息仅指定重启路由器在重启之前向上游路由器通告的上游标签(例如,label_tx)。
重启路由器可以接收包含对应于label_tx的标签值的recovery_label对象,并从其转发平面获知label_rx。例如,重启路由器可以搜索其转发表(通过重启而保留的),以寻找其传入标签(例如,label_tx)等于recovery_label对象中携带的标签的条目。重启路由器然后可以将从转发条目恢复的传出标签(例如,label_rx)放置在rsvppath消息的suggested_label中,并将包括suggested_label的rsvppath消息发送到其下游路由器。当重启路由器接收到rsvpresv消息时,重启路由器可以确定rsvpresv消息中的标签值是否不同于被发送至下游的suggested_label。如果值匹配,则重启路由器可以使用rsvpresv消息中指定的标签重新实例化其控制平面状态。如果rsvpresv消息中的标签值不同于suggested_label,则重启路由器会生成错误消息(例如,resverr消息)。然而,在路由器实现rsvp-te弹出和释放隧穿的示例中,实现rfc3473中描述的平滑重启过程的重启路由器无法从转发平面确定label_rx,因为标签不再存储在转发平面中,并因此无法重新实例化其控制平面状态。
可替代地或者另外,对于rfc5063中描述的平滑重启过程,重启路由器可以另外从下游路由器接收“recoverypath”消息,该消息包括指定来自下游路由器的下游标签(例如,label_rx)的另一recovery_label对象。在该示例中,重启路由器可以使用recoverypath消息中的recovery_label对象以及从上游路由器接收的rsvppath消息中的recovery_label对象来关联控制和转发平面状态,以利用相邻路由器呈现的状态来验证转发平面状态。然而,实现rfc5063中描述的平滑重启过程的重启路由器无法从同一信令消息中获知上游和下游标签。
根据本文描述的技术,描述了用标签栈实现的lsp的平滑重启过程,其中,重启网络装置可以经由信令而不是转发平面来获知上游标签(例如,label_tx)和下游标签(例如,label_rx)。在图1的示例中,路由器12可以通告其支持恢复对象(例如,恢复记录路由对象(在本文称为“recovery_rro”))的能力(例如,比特分配),该恢复对象定义从出口路由器12g到重启路由器(例如,路由器12c)的rsvp-telsp16的反向路径。例如,重启路由器(例如,路由器12c)可以向上游路由器(例如,路由器12b)通告hello消息,该消息包括指示路由器12c能够支持recovery_rro的能力对象。
上游路由器12b可以从rro生成包括rsvp-telsp16的标签信息的recovery_rro,该rro是由路由器12b在重启之前在来自重启路由器12c的预留信令消息(例如,rsvpresv消息)中最后接收的rro。在该示例中,路由器12b接收的rro包括定义从rsvp-telsp16的出口路由器12g到重启路由器12c的反向路径的标签。特别地,标签可以包括与每个路由器12c-12g相关联的上游标签(例如,label_tx)和下游标签(例如,label_rx)。上游路由器12b可以在recovery_rro中包含来自rro的标签。
上游路由器12b可以在rsvppath消息(例如,rsvppath消息22)中包括recovery_rro,并且将recovery_rro发送到重启路由器12c。即,上游路由器12b可以向重启路由器12c发送包括recovery_rro的rsvppath消息22,recovery_rro包括定义从rsvp-telsp16的出口路由器12g到重启路由器12c的反向路径的标签,而不是发送带有recovery_label对象的rsvppath消息,其中recovery_label对象仅指示重启路由器12c在重启之前通告的上游标签(例如,label_tx)。
重启路由器12c可以接收包括recovery_rro的rsvppath消息22,并且可以从recovery_rro确定与重启路由器12c相关联的上游标签(例如,label_tx)和下游标签(例如,label_rx)。例如,重启路由器12c可以获知label_tx并且利用重启之前接收到的label_tx来验证label_tx。重启路由器12c还可以获知label_rx,并将label_rx放置在rsvppath消息的suggested_label中,该rsvppath消息被发送到其下游路由器(例如,路由器12d),该下游路由器正常处理rsvppath消息。当重启路由器12c响应于该rsvppath消息而接收rsvpresv消息时,重启路由器12c可以确定rsvpresv消息中的标签值是否不同于被发送至下游的suggested_label。如果值匹配,则重启路由器12c可以通过使用对应的rsvpresv消息中指定的标签来重新实例化其相应的控制平面状态。如果rsvpresv消息中的标签值不同于suggested_label,则重启路由器12c生成错误消息(例如,resverr消息)。以这种方式,建立用标签栈(例如,具有弹出和释放隧穿的rsvp-te)实现的lsp的重启路由器12c可以经由信令而不是转发平面来确定上游和下游标签。
图2是示出了根据本文描述的技术的另一示例的方框图,其中,网络装置对用标签栈(例如,rsvp-te弹出和释放隧道)实现的lsp执行平滑重启。除了如下所述之外,图2的网络14类似于图1的网络14。
如上所述,使用rfc5063中描述的平滑重启过程的重启路由器可以使用recoverypath消息中的recovery_label对象以及从上游路由器接收的rsvppath消息中的recovery_label对象来关联控制和转发平面状态,并用相邻路由器呈现的状态来验证转发平面状态。然而,在存在多个重启路由器的示例中,上游重启路由器(例如,路由器12c)无法从其下游路由器接收recoverypath消息,这是因为下游路由器(例如,路由器12d)也正在重启。
在图2的示例中,多个路由器12(例如,路由器12c和路由器12d)可以重启。在这个示例中,相邻的上游路由器12b可以检测路由器12c是重启路由器。上游路由器12b可以从rro生成包括恢复对象(例如,recovery_rro)的路径信令消息(例如,rsvppath消息22),该恢复对象具有rsvp-telsp16的标签信息,该rro是由路由器12b在重启之前在来自重启路由器12c的预留信令消息(例如,rsvpresv消息)中最后接收的rro。如上所述,recovery_rro可以包括定义从rsvp-telsp16的出口路由器12g到重启路由器12c的反向路径的标签,例如,与每个路由器12c-12g相关联的上游标签(例如,label_tx)和下游标签(例如,label_rx)。上游路由器12b可以发送包括recovery_rro的rsvppath消息22,该recovery_rro至少包括与重启路由器12c相关联的上游标签(例如,label_tx)和下游标签(label_rx),而不是发送具有仅指定上游标签(例如,label_tx)的recovery_label对象的rsvppath消息。
重启路由器12c可以接收rsvppath消息22,并且可以从recovery_rro确定与重启路由器12c相关联的label_tx和label_rx。例如,重启路由器12c可以获知label_tx并利用重启之前接收到的label_tx来验证label_tx。重启路由器12c还可以从recovery_rro获知label_rx,并可以基于label_rx重新实例化其控制平面状态。例如,当重启路由器12c响应于rsvppath消息22而接收rsvpresv消息时,重启路由器12c可以确定rsvpresv消息中的标签值是否不同于所获知的label_rx。如果值匹配,则重启路由器12c可以使用对应的rsvpresv消息中指定的标签来重新实例化其相应的控制平面状态。
重启路由器12d也可能正在重启。在该示例中,路由器12d还可以在重启之前通告其支持恢复对象(例如,recovery_rro)的能力。例如,重启路由器(例如,路由器12d)可以向上游路由器(例如,路由器12c)通告hello消息,该消息包括指示路由器12d能够支持recovery_rro的能力对象。
重启路由器12c(“上游重启路由器12c”)可以检测到路由器12d正在重启(“下游重启路由器12d”)。重启路由器12c可以修剪recovery_rro,以移除本地子对象,例如,与重启路由器12c相关联的标签,从而构建修改的recovery_rro。即,修改的recovery_rro包括从出口路由器12g到重启路由器12d的反向路径。重启路由器12c可以向重启路由器12d发送包括修改的recovery_rro的rsvppath消息24。
重启路由器12d接收rsvppath消息24,并且可以根据修改的recovery_rro确定与重启路由器12d相关联的label_tx和label_rx。例如,重启路由器12d可以获知label_tx并且利用重启之前接收到的label_tx来验证label_tx。重启路由器12d还可以从recovery_rro获知label_rx,并将该label_rx放置到被发送至其下游路由器(例如,例如,路由器12e)的rsvppath消息的suggested_label中,该下游路由器正常处理rsvppath消息。当重启路由器12d响应于该rsvppath消息而接收rsvpresv消息时,重启路由器12d可以确定rsvpresv消息中的标签值是否不同于被发送至下游的suggested_label。如果值匹配,则重启路由器12d可以使用对应的rsvpresv消息中指定的标签来重新实例化其相应的控制平面状态。如果rsvpresv消息中的标签值不同于suggested_label,则重启路由器12d生成错误消息(例如,resverr消息)。
或者,重启路由器12d可以用从下游路由器12e接收的recoverypath消息26来验证label_rx,该recoverypath消息包括指定从下游路由器12e接收的下游标签的recovery_label对象。重启路由器12d可以使用从下游路由器12e接收到的recoverypath消息26中的信息以及从上游路由器12c接收到的rsvppath消息中的recovery_rro来关联控制和转发平面状态,并用路由器12c和12e呈现的状态来验证其转发平面状态。
图3是示出执行本公开中描述的技术的各个方面的示例路由器40的方框图。路由器40可以代表图1至图2中的任何路由器12。虽然关于路由器40进行了描述,但是这些技术可以由能够利用弹出和释放隧穿至少实现包括资源预留协议(例如,rsvp-te)的路由协议的任何其他类型的网络装置来实现。因此,虽然关于路由器40进行了描述,但是这些技术不应该限于关于图3的示例描述的路由器40。
在图3的示例中,路由器40包括接口卡54a-54n(“ifc54”),接口卡分别经由网络链路56a-56n和57a-57n接收和发送数据单元,例如,分组流。路由器40可以包括底盘(未示出),该底盘具有用于容纳包括ifc54的一组卡的多个插槽。每个卡可以插入底盘的对应插槽中,用于经由高速交换机(未示出)将卡电耦接到路由组件44,高速交换机可以包括例如交换机结构、开关设备、可配置的网络交换机或集线器、或其他高速交换机构。ifc54可以经由多个物理接口端口(未示出)耦接到网络链路56a-56n和57a-57n。通常,ifc54可以各自表示一个或多个网络接口,路由器40可以通过这些网络接口与网络的链路(例如,图1的示例中所示的链路18)接合。
通常,路由器40可以包括控制单元42,其确定接收到的分组的路由并相应地经由ifc54转发分组。在图3的示例中,控制单元42包括路由组件44(控制平面),其配置和控制由分组转发组件46(数据平面)应用的分组转发操作。
路由组件44为在网络堆栈的不同层执行的各种路由协议60提供操作环境。路由组件44负责维护路由信息70,以反映路由器40所连接的网络和其他网络实体的当前拓扑。具体地,路由协议周期性地更新路由信息70,以基于路由器40接收的路由协议消息来准确地反映网络和其他实体的拓扑。协议可以是在一个或多个处理器上执行的软件进程。例如,路由组件44包括在网络堆栈的网络层操作的网络协议,网络协议通常被实现为可执行软件指令。
在图3的示例中,协议60可以包括rsvp-te62以实现具有流量扩展的资源预留协议(rsvp-te)协议,以建立rsvp-telsp(例如,图1的rsvp-telsp16)。例如,rsvp-te62可以实现rsvp-te协议,以生成和发送rsvppath消息和rsvpresv消息,以用于建立lsp。
协议60还可以包括igp64,以实现igp协议来交换链路状态信息,并有助于在端点装置之间转发分组或其他数据单元。在一些示例中,igp64可以包括根据j.moy于1998年4月提出的名为“ospfversion2”的rfc2328、由r.coltun等人于2008年7月提出的名为“ospfforipv6”的rfc5340、由n.sheth等人于2013年1月提出的名为“ospfhybridbroadcastandpoint-to-multipointinterfacetype”的rfc6845以及由a.lindem等人于2013年7月提出的名为“ospfv3lsaextendibility”的internetdraftforthenetworkworkinggroup(draft-acee-ospfv3-lsa-extend-01.txt)中的一个或多个的ospf路由协议,以上每一篇的全部内容都通过引用结合于此,犹如在此阐述一样。在一些示例中,igp64可以包括is-is路由协议,该协议实现了根据由d.oran于1990年2月提出的名为“osiis-isintra-domainroutingprotocol”的rfc1142的在路由域内交换路由和可达性信息的igp,该文献的全部内容通过引用结合于此。igp64可以包括支持具有多协议标签交换(mpls)的流量工程的流量扩展,如tonyli等人于1999年2月提出的名为“igprequirementsfortrafficengineeringwithmpls”的internetdraftfornetworkworkinggroup(draft-li-mpls-igp-te-00.txt)中所描述的,该文献的全部内容通过引用结合于此。
在一些示例中,路由组件44包括弹出和释放组件66,以实现用于资源预留协议(例如,rsvp-te)的弹出和释放隧穿技术,以用于指定路由器40可以如何将标签发信号。例如,弹出和释放组件66可以指示路由器40分配相应的弹出标签,该标签使路由器40从接收到的分组的标签栈的顶部弹出对应的标签,并将该分组朝向出口路由器转发给下游邻居。尽管图3的路由器40被示出为具有为标签栈分配相应的弹出标签的弹出和释放组件66,但是路由器40可以包括可以实现如本文所述的任何类型的lsp的标签栈的任何组件。
在一些示例中,路由组件44包括平滑重启组件68以用于实现资源预留协议(例如,rsvp-te)的平滑重启技术,以支持rsvppath消息中的recovery_label对象(如上述请求评议3473中所述),并支持recoverypath消息中的recovery_label对象(如上述请求评议5063中所述)。在图3的示例中,平滑重启组件68还可以支持恢复对象,例如,恢复对象92。例如,路由器40可以使用平滑重启组件68来通告能力对象,该能力对象向lsp上的其他路由器指示路由器40支持recovery_rro。
通过执行路由协议,路由组件44通过网络识别现有路由,并通过网络确定新路由。路由组件44存储路由信息70,路由信息70包括例如通过网络的已知路由。转发组件46存储包括输出链路57的目的地的转发信息48。可以根据路由信息70生成转发信息48。路由组件44可以使用rsvp-te62与沿着lsp的其他路由器交换标签映射消息,并更新标签信息库(lib)82。
路由组件44可以包括标签信息库(lib)82以用于维护网络内每个路由的下一跳标签到下一跳的映射。路由组件44选择通过网络的特定路径,并使用lib82中的标签映射来构建标签栈,以沿着lsp传播分组。在路由组件44使用弹出和释放组件66的一些示例中,lib82可以包括向上游路由器指示上游标签的上游标签(“label_tx84”)。lib82可以处于各种数据结构的形式,例如,多个表、链表、基数树、数据库、平面文件或其他数据结构。
路径状态块(psb)86存储来自每个建立的lsp会话的rsvppath消息的状态数据。psb86维护每个rsvppath消息的副本,rsvppath消息包括所请求的lsp会话的标签请求对象。预留状态块(rsb)88存储每个建立的lsp会话的rsvpresv消息的预留请求。psb88维护每个rsvpresv消息的副本,rsvpresv消息包括每个建立的lsp会话的标签请求对象。psb88还可以包括记录路由对象(rro)89,记录路由对象定义从出口路由器到重启路由器的反向路径。在由braden等人于1997年9月提出的名为“resourcereservationprotocol(rsvp)--version1messageprocessingrules”,networkworkinggrouprfc2209中,提供了关于psb86和psb88的实现和功能的更多细节,该文献的全部内容通过引用结合于此。
路由组件44可以使用rsvp-te62来记录rro89中的rsvppath消息和rsvpresv消息的标签请求对象。rro89用于收集详细的路径信息(在本文也称为“子对象”),例如,对应于给定路径的标签列表。
根据本公开的技术的一些示例方面,路由组件44可以使用平滑重启组件68来通告能力对象,以向lsp上的其他路由器指示路由器40支持恢复对象,例如,恢复对象92。路由组件44可以包括恢复模块90以生成恢复对象92(例如,recovery_rro)。恢复模块90可以将rro89中包含的信息(例如,路径标签(例如,label_tx和label_rx))包括到恢复对象92中。恢复模块90可以在由rsvp-te62生成的消息(例如,rsvppath消息)中包括恢复对象92,以向重启路由器提供上游标签和下游标签。在存在多个重启路由器的一些示例中,充当上游重启路由器(例如,图2的路由器12c)的路由器40的恢复模块90可以在向下游重启路由器(例如,图2的路由器12d)发送包括修改的recovery_rro的rsvppath消息之前,从recovery_rro92移除本地子对象(例如,与重启路由器12c相关联的标签)。
尽管为了示例的目的,描述了路由器,但是路由器40可以更通常是具有路由功能的网络装置,并且不一定是专用路由装置。图3所示的路由器40的架构仅出于示例目的而示出。本公开的技术不限于该架构。在其他示例中,路由器40可以多种方式配置。在一个示例中,控制单元42的一些功能可以分布在ifc54内。在另一示例中,控制单元42可以包括作为从路由器操作的多个分组转发引擎。
控制单元42可以单独以软件或硬件实现,或者可以以软件、硬件或固件的组合来实现。例如,控制单元42可以包括执行软件指令形式的程序代码的一个或多个处理器。在这种情况下,控制单元42的各种软件组件/模块可以包括存储在诸如计算机存储器或硬盘的计算机可读存储介质上的可执行指令。
图4是示出用弹出和释放隧道实现的资源预留协议lsp的平滑重启过程的示例操作的流程图。为了示例的目的,相对于图1的计算机网络2描述了图4。在该示例中,假设路由器12c是重启路由器。
在重启之前,重启路由器12c可以在重启之前通告包括能力对象的消息(例如,“hello”消息),该能力对象指示路由器12c能够使用恢复对象,例如,recovery_rro。路由器12b可以接收hello消息,并确定路由器12c能够使用recovery_rro。
路由器12b可以检测到路由器12c是重启路由器(402)。例如,路由器12b可以检测路由器12c的路由通信会话故障,即,会话出错或“发生故障”
路由器12b可以生成包括恢复对象(例如,recovery_rro)的路径信令消息(例如,rsvppath消息)(404)。例如,在重启之前,路由器12b可以从下游路由器12c接收包括rro的rsvpresv消息,该rro定义了从lsp的出口路由器到重启路由器(例如,路由器12c)的lsp的反向路径。特别地,rro可以包括与路由器12c相关联的label_tx和label_rx以及对于到出口路由器的每个下游路由器的标签。在重启期间,路由器12b可以将来自rro的标签信息包括在rsvppath消息中,以发送给重启路由器12c。在一些示例中,路由器12b可以在rsvppath消息的recovery_label字段中包括recovery_rro。
路由器12b可以向重启路由器12c发送包括recovery_rro的路径信令消息(406)。重启路由器12c可以接收包括recovery_rro的rsvppath消息(408),并且重启路由器12c可以基于recovery_rro确定与路由器12c相关联的下游标签(例如,label_rx)(410)。
重启路由器12c可以基于下游标签实例化其控制平面状态(412)。例如,响应于获知label_rx,重启路由器12c可以将label_rx放置在rsvppath消息的suggested_label中,并将rsvppath消息发送到其下游路由器,例如,路由器12d,该下游路由器正常处理rsvppath消息。当重启路由器12c响应于该rsvppath消息而接收rsvpresv消息时,重启路由器12c可以确定rsvpresv消息中的标签值是否不同于被发送至下游的suggested_label。如果值匹配,则重启路由器12c可以通过使用对应的rsvpresv消息中指定的标签来重新实例化其控制平面状态。
图5是示出了用弹出和释放隧道实现的资源预留协议lsp的平滑重启过程的另一示例操作的流程图。为了示例的目的,相对于图2的计算机网络2描述了图5。在该示例中,假设路由器12c和12d是重启路由器。
在重启之前,路由器12c可以通告包括能力对象的消息(例如,“hello”消息),该能力对象指示路由器12c能够使用恢复对象,例如,recovery_rro。路由器12b可以接收hello消息,并确定路由器12c能够使用recovery_rro。类似地,路由器12d可以通告包括能力对象的消息(例如,“hello”消息),该能力对象指示路由器12d能够使用恢复对象,例如,recovery_rro。路由器12c可能接收到hello消息,并确定路由器12d能够使用recovery_rro。
路由器12b可以检测到路由器12c是重启路由器(502)。例如,路由器12b可以检测路由器12c的路由通信会话故障,即,会话出错或“发生故障”。
路由器12b可以生成包括恢复对象(例如,recovery_rro)的第一路径信令消息(例如,rsvppath消息)(504)。例如,在重启之前,路由器12b可以从路由器12c接收rsvpresv消息,该消息包括rro,该rro定义了从lsp的出口路由器到重启路由器(例如,路由器12c)的lsp的反向路径。特别地,rro可以包括与路由器12c相关联的label_tx和label_rx以及对于到出口路由器的每个下游路由器的标签。在重启期间,路由器12b可以将来自rro的标签信息包括在rsvppath消息中,以被发送到重启路由器12c。在一些示例中,路由器12b可以在rsvppath消息的recovery_label字段中包括recovery_rro。
路由器12b可以向重启路由器12c发送包括recovery_rro的第一路径信令消息(506)。重启路由器12c可以接收包括recovery_rro的rsvppath消息(508),并且路由器12c可以基于recovery_rro确定与路由器12c相关联的下游标签(例如,label_rx)(510)。
路由器12c可以检测到路由器12d是重启路由器(512)。例如,路由器12c可以检测路由器12d的路由通信会话故障,即,会话出错或“发生故障”。
上游重启路由器12c可以从恢复对象移除与重启路由器12c相关联的一个或多个标签,以构建修改的恢复对象(514)。例如,上游重启路由器12c可以修剪recovery_rro,以移除本地子对象,例如,与路由器12c相关联的对象。即,修改的recovery_rro包括从出口路由器12g到路由器12d的反向路径。
上游重启路由器12c可以向下游重启路由器12d发送具有修改的recovery_rro的第二路径信令消息,例如,rsvppath消息(516)。下游重启路由器12d接收包括修改的recovery_rro的rsvppath消息(518)。下游重启路由器12d可以基于修改的recovery_rro来确定与重启路由器12d相关联的下游标签(例如,label_rx)(520)。
下游重启路由器12d可以基于与重启路由器12d相关联的下游标签实例化其控制平面状态(522)。例如,下游重启路由器12d可以从rsvppath消息中包含的recovery_rro中获知label_rx,并将label_rx放置在发送到其下游路由器(未示出)的rsvppath消息的suggested_label中,该下游路由器正常处理rsvppath消息。当下游重启路由器12d响应于该rsvppath消息而接收rsvpresv消息时,重启路由器12d可以确定rsvpresv消息中的标签值是否不同于被发送至下游的suggested_label。如果值匹配,则下游重启路由器12d可以通过使用在对应的rsvpresv消息中指定的标签来重新实例化其控制平面状态。在一些示例中,下游重启路由器12d可以利用从其下游路由器(未示出)接收的recoverypath消息来验证label_rx。在该示例中,recoverypath消息可以包括recovery_label对象,该对象指定在重启之前从下游路由器(例如,路由器12e)接收的下游标签。重启路由器12d可以使用从下游路由器12e接收的recoverypath消息中的信息以及从上游重启路由器12c接收的rsvppath消息中的recovery_rro来关联控制和数据平面状态,并用路由器12c和12e呈现的状态来验证其转发状态。
上游的重启路由器12c可以基于与重启路由器12c相关联的下游标签来实例化其控制平面状态(524)。例如,当重启路由器12c接收到rsvpresv消息时,重启路由器12c可以确定rsvpresv消息中的标签值是否不同于路由器12c获知的下游标签。如果值匹配,则重启路由器12c可以通过使用在对应的rsvpresv消息中指定的标签来重新实例化其相应的控制平面状态。
本文描述的技术可以硬件、软件、固件或其任意组合来实现。被描述为模块、单元或组件的各种特征可以一起在集成逻辑装置中实现,或者单独实现为分立但可互操作的逻辑装置或其他硬件装置。在一些情况下,电子电路的各种特征可以实现为一个或多个集成电路装置,例如,集成电路芯片或芯片组。
如果以硬件实现,则本公开可以涉及诸如处理器或集成电路装置的的设备,例如,集成电路芯片或芯片组。可替代地或另外,如果以软件或固件实现,则这些技术可以至少部分地由包括指令的计算机可读数据存储介质实现,这些指令在被执行时使处理器执行上述一种或多种方法。例如,计算机可读数据存储介质可以存储这样的指令,以供处理器执行。
计算机可读介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括封装材料。计算机可读介质可以包括计算机数据存储介质,例如,随机存取存储器(ram)、只读存储器(rom)、非易失性随机存取存储器(nvram)、电可擦除可编程只读存储器(eeprom)、闪存、磁或光数据存储介质等。在一些示例中,制品可以包括一个或多个计算机可读存储介质。
在一些示例中,计算机可读存储介质可以包括非暂时性介质。术语“非暂时性”可以表示存储介质不以载波或传播信号体现。在某些示例中,非暂时性存储介质可以存储随时间变化的数据(例如,在ram或高速缓存中)。
代码或指令可以是由处理电路执行的软件和/或固件,该处理电路包括一个或多个处理器,例如,一个或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)或其他等效集成或分立逻辑电路。因此,本文使用的术语“处理器”可以指任何前述结构或适合于实现本文描述的技术的任何其他结构。此外,在一些方面,可以在软件模块或硬件模块内提供本公开中描述的功能。
已经描述了各种的示例。这些和其他示例在所附权利要求的范围内。