背景技术
如以太网、VoIP(Voice over Internet Protocol,网络电话)、VPN(Virtual Private Network,虚拟私有网)和IPTV(Internet Protocol TV,交互式网络电视)等分组业务的传送,以及以数据业务为主的移动回传,给传送网络带来了新的需求和挑战。传送网络分组化,即分组传送网(Packet Transport Network,PTN)已经逐渐成为业界的一种趋势。一方面,人们希望PTN可以真正有效地实现分组业务的传送;另一方面,人们希望PTN能够继承传统的传送网络(如SONET(Synchronous Optical Network,同步光纤网络)/SDH(Synchronous Digital Hierarchy,同步数字体系)网络)的高可靠性,以及易操作、维护和管理等特性。
目前,实现分组化传送主要有两条技术途径:一种是基于以太网技术的PBB(Provider Backbone Bridge,运营商骨干桥接技术),主要由IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)开发;另一种是基于MPLS(Multi-Protocol Label Switching,多协议标签交换)技术的T-MPLS(Transport MPLS,传送MPLS)/MPLS-TP(MPLS Transport Profile,MPLS传输技术架构),由ITU-T(Telecommunication Standardization Sector of the International Telecommunications Union,国际电信联盟电信标准化部门)和IETF(Internet Engineering Task Force,因特网工程任务组)联合开发。
在实现T-MPLS/MPLS-TP时,需要以MPLS TE(Traffic Engineering,流量工程)双向隧道作为分组传输隧道。MPLS TE双向隧道由正、反两个单向的MPLS TE隧道组成,需要实现双向隧道功能,以支持1:1和1+1保护倒换,承载MPLS传输所需要的OAM(Operations,Administration,and Maintenance,操作、管理和维护)和PSC(Protection State Coordination,保护状态调整)等带内检测工具和信令。
目前,通常采用BFD(Bidirectional Forwarding Detection,双向转发检测)方法来检测MPLS TE双向隧道的状态,以实现故障的快速、准确检测。BFD是一种用于快速检测、监控网络中链路或者IP路由的转发连通状况的检测机制,能够保证邻居设备之间快速检测到通信故障,从而快速建立起备用通道恢复通信。BFD提供了一个通用的、标准化的、介质无关、协议无关的快速故障检测机制,可以为各上层协议如路由协议、MPLS等统一地快速检测两台相邻路由器之间的双向转发路径的故障。
图1是MPLS TE双向隧道的组网示意图。图1中,两台路由器RouterA和RouterB之间建立了MPLS TE双向隧道:RouterA→RouterB(“→”表示“至”)的TE隧道(即为图1中的正向MPLS TE隧道)和RouterB→RouterA的TE隧道(即为图1中的反向MPLS TE隧道)。RouterA处于Active(主动)角色,配置BFD检测RouterA→RouterB的TE隧道,BFD会话建立之后,RouterA周期性地发送BFD控制报文给RouterB,若RouterB在预定时间内未接收到RouterA发来的报文,则认为RouterA→RouterB的路径发生故障;同样,RouterB也会周期性地发送BFD控制报文给RouterA,若RouterA在预定时间内未接收到RouterB发来的报文,则认为RouterB→RouterA的路径发生故障。但是,RouterA发送给RouterB的BFD控制报文走的是MPLS标签转发(即通过正向MPLS TE隧道到达RouterB),而RouterB发送给RouterA的BFD控制报文则可能走的是路由转发,这样就会出现以下两种问题:
1、在BFD检测MPLS TE双向隧道时,如果RouterB→RouterA的TE隧道在转发路径上出现了故障,但是由于RouterB发送的BFD控制报文走的是路由,而不是RouterB→RouterA的TE隧道,从而导致RouterA并不能快速检测到RouterB→RouterA的TE隧道发生了故障,即不能快速地感知到MPLS TE双向隧道出现了故障;
2、RouterB发送的BFD控制报文的转发路径是路由,如果该路由出现了故障,RouterA就可能会认为是RouterB→RouterA的TE隧道发生了故障,从而存在误报的可能性。
针对上述问题,现有方案通常采用再在RouterB上使能对RouterB→RouterA的TE隧道的BFD检测,即,在Router和RouterB上各使能一个BFD。RouterA与RouterB上的BFD检测是相互独立的,也就是说,对一组MPLS TE双向隧道的完整检测至少需要两个BFD来保证,但是这种方案只能解决上述的第一个问题,而不能解决第二个问题,而且,MPLS TE双向隧道两端都配置BFD,还会占用BFD会话资源。
具体实施方式
实施例一
在如图2所示的MPLS TE双向隧道的组网中,第一路由设备上配置了第一路由设备→第二路由设备的MPLS TE隧道(称为第一隧道),第二路由设备上配置了第二路由设备→第一路由设备的MPLS TE隧道(称为第二隧道),第一隧道与第二隧道组成一对MPLS TE双向隧道。其中,路由设备可以是路由器,也可以是路由交换机等,本发明对此不做限定。
需要说明的是,第一路由设备、第二路由设备并不特指某一个路由设备,第一路由设备可以是网络中的任意一个路由设备,而第二路由设备可以是任意一个与第一路由设备之间建立了MPLS TE双向隧道的路由设备。
如图3所示,图2中的第一路由设备作为主动端时,MPLS TE双向隧道的BFD检测方法包括以下步骤:
步骤S302,第一路由设备欲在第一隧道上建立BFD会话时,判断第二路由设备是否已经在第二隧道上建立了BFD会话,若已经建立了,则进入步骤S304,若没有建立,则进入步骤S306;
其中,判断第二路由设备是否已经在第二隧道上建立了BFD会话的方式可以为:第一路由设备在本地查找是否有与第一隧道对应的BFD鉴别值(或与第一隧道ID对应的BFD鉴别值),若查找到了,则确定第二路由设备已经在第二隧道上建立了BFD会话,否则,确定第二路由设备没有在第二隧道上建立BFD会话。
显然,第二路由设备在第二隧道上建立BFD会话的过程,同步骤S302~S306(此时第二路由设备作为主动端),建立完成后,作为被动端的第一路由设备中会保存第一隧道与协商好的BFD鉴别值的对应关系,因此,通过查找本地是否保存有与第一隧道对应的BFD鉴别值即可以判断出第二路由设备是否已经在第二隧道上建立了BFD会话。
步骤S304,第一路由设备终止在第一隧道上建立BFD会话;在此种情 况下,后续的BFD检测过程可以参见实施例二。
如果第二路由设备在第一路由设备要建立BFD会话之前,就已经建立了BFD会话,那么第一路由设备就不再建立BFD会话了,从而仅在一对MPLSTE隧道的两端中的其中一端配置BFD,即只通过一个BFD来检测一组MPLSTE双向隧道。
步骤S306,第一路由设备与第二路由设备协商BFD鉴别值;
具体的协商过程可以如下:
步骤1,第一路由设备向第二路由设备发送携带有第二隧道的标识(ID)的MPLS RSVP-LSP ping报文;
在配置MPLS TE双向隧道时,第一路由设备和第二路由设备会获取到对端的Tunnel ID(隧道ID),从而,第一路由设备中保存有第二隧道的ID。
实际应用中,在MPLS RSVP-LSP ping报文中携带第二隧道的ID的方法可以有多种,例如:
方法一:在MPLS RSVP-LSP Ping报文中的Extended(扩展)Tunnel ID字段填写第二隧道的ID(在RFC4379中的sections 3.2.3和3.2.4,RFC3209中sections 4.6.1.1和4.6.2.1有相关说明);
方法二:在MPLS RSVP-LSP ping报文中添加一个TLV(BER编码一种,ASN1标准,TLV的全称为Tag(标签),Length(长度),Value(值),T、L字段的长度往往固定(通常为1~4bytes(字节)),V字段长度可变),在该TLV字段中填写第二隧道的ID(RFC4379sections 3有相关说明)。
显然,还可以根据实际需要采用其他的方法在MPLS RSVP-LSP ping报文中携带第二隧道的ID,本发明对此不做限定。
步骤2,第一路由设备接收第二路由设备针对MPLS RSVP-LSP ping报文返回的MPLS RSVP-LSP ping replay报文,其中,MPLS RSVP-LSP ping replay报文是第二路由设备通过第二隧道发来的;
第二路由设备接收到第一路由设备发来的MPLS RSVP-LSP ping报文之 后,会将协商的BFD鉴别值携带在MPLS RSVP-LSP ping replay(响应)报文中,并在该报文中压入第二隧道对应的标签,通过第二隧道对应路径发送给第一路由设备。
步骤3,第一路由设备从MPLS RSVP-LSP ping replay报文中获取到协商好的BFD鉴别值,并保存第一隧道与该BFD鉴别值的对应关系。
步骤S308,协商成功后,第一路由设备在第一隧道上建立BFD会话,其中,第二路由设备上保存第二隧道与协商好的BFD鉴别值的对应关系;
在BFD鉴别值协商好之后,第二路由设备会保存第二隧道与协商好的BFD鉴别值的一一对应关系(具体为第二隧道的ID与该BFD鉴别值的对应关系)。
通过以上的步骤S302~S306,第一路由设备完成了在第一隧道建立BFD会话(即,在第一隧道使能BFD)的过程,同时,也通过上述步骤建立了BFD与MPLS TE双向隧道的联动(第一路由设备中保存了第一隧道与BFD鉴别值的一一对应关系,第二路由设备中保存了第二隧道与该BFD鉴别值的一一对应关系)。
步骤S310,在对MPLS TE双向隧道进行BFD检测的过程中,第一路由设备根据是否在预定时间段内接收到第二路由设备发来的BFD控制报文,来确定第二隧道的状态,其中,该BFD控制报文是第二路由设备在查找到与BFD鉴别值对应的第二隧道后,通过第二隧道发送来的。
由于BFD会话建立之后,第一路由设备会通过第一隧道周期性地发送BFD控制报文给第二路由设备,此方向的检测过程与现有技术相同,这里不再赘述。同时,第二路由设备也会周期性地向第一路由设备发送BFD控制报文,由于第二路由设备在本地保存了第二隧道与步骤S306中协商好的BFD鉴别值的一一对应关系,因此,在发送BFD控制报文时,可以先根据该对应关系,查找到与BFD鉴别值对应的隧道(或隧道ID):第二隧道(或第二隧道的ID),再查找到与第二隧道对应的隧道标签,将该隧道标签压入BFD 控制报文后,将该BFD控制报文通过第二隧道发送给第一路由设备。第一路由设备就可以根据是否在预定时间段内接收到第二路由设备通过第二隧道发来的BFD控制报文,来判断第二隧道的状态(是否发生故障)。
本发明实施例中,MPLS TE双向隧道的任意一端的路由设备(称为第一路由设备)作为主动端要建立BFD会话时,先判断对端设备(称为第二路由设备)是否已经建立了BFD会话,若已经建立了,则不再建立BFD会话,若没有建立,才与第二路由设备协商BFD鉴别值并建立BFD会话。而第二路由设备在BFD鉴别值协商好后,会保存隧道与该BFD鉴别值的对应关系,后续在对MPLS TE双向隧道进行BFD检测时,会通过BFD鉴别值找到对应的隧道,从而通过该隧道发送BFD控制报文给第一路由设备。这样,作为被动端的第二路由设备发给作为主动端的第一路由设备的BFD控制报文也会通过隧道转发,即,不管是第一路由设备→第二路由设备的方向还是第二路由设备→第一路由设备的方向,BFD控制报文的收发都是基于MPLS TE双向隧道的两条隧道,所以只要其中一条隧道故障,BFD都能够快速感知,达到仅通过在双向隧道的一端配置一个BFD就能够有效、准确地检测一组双向隧道的两条隧道的状态的效果,节省了BFD的会话资源。
同时,第二路由设备发来的BFD控制报文的路径是第二路由设备→第一路由设备的MPLS TE隧道,而不是路由,从而可以避免第二路由设备的路由变化或者转发路径变化而导致的BFD功能错误和发生误报的可能性。不管是主动端、还是被动(passive)端发出的BFD控制报文都是走相应的隧道,BFD检测目标都是很明确的,报文转发路径也是确定的,因为BFD控制报文的转发路径就是TE隧道的路径,所以这种一对一的BFD检测方式能够很及时、准确地检测MPLS TE双向隧道的连通性。
实施例二
如图4所示,图2中的第一路由设备作为被动端,没有在第二隧道建立BFD会话时,MPLS TE双向隧道的BFD检测方法包括以下步骤:
步骤S402,第一路由设备与作为主动端的第二路由设备协商BFD鉴别值;
此时,作为主动端的第二路由设备在与作为被动端的第一路由设备进行BFD鉴别值协商之前,第二路由设备的操作同实施例一中的步骤S302~S304,这里不再赘述。
具体协商过程可以如下:
步骤1,第一路由设备接收第二路由设备发来的MPLS RSVP-LSP ping报文;
步骤2,第一路由设备判断该MPLS RSVP-LSP ping报文中是否携带有第一隧道的标识(MPLS RSVP-LSP ping报文中携带第一隧道的标识的方法可以参见实施例一),若携带了,则通过第一隧道向第二路由设备返回携带有BFD鉴别值的MPLS RSVP-LSP ping replay报文。
步骤S404,在协商成功后,第一路由设备保存第一隧道与在步骤S402中协商好的BFD鉴别值的对应关系(具体为第一隧道的ID与该BFD鉴别值的对应关系);
通过在协商过程中,在MPLS RSVP-LSP Ping报文中携带对端隧道的Tunnel ID,并且在协商完成后,保存BFD鉴别值与Tunnel ID的一一对应的关系来建立BFD与双向隧道的联动。
步骤S406,在对MPLS TE双向隧道进行BFD检测的过程中,第一路由设备会周期性地发送BFD控制报文给第二路由设备,发送时,会根据第一隧道与协商好的BFD鉴别值的对应关系,查找与该BFD鉴别值对应的第一隧道以及与第一隧道对应的MPLS标签,将查找到的MPLS标签压入BFD控制报文中,通过第一隧道发送给第二路由设备,其中,该BFD控制报文中携带有该BFD鉴别值。同时,第二路由设备也会通过第二隧道周期性地发送BFD控制报文给第一路由设备,此方向的检测过程与现有技术相同,这里不再赘述,并且,第二路由设备会根据是否在预定时间段内接收到了第一路由 设备通过第一隧道发来的BFD控制报文,来检测第一隧道的状态。
本实施例二中的第一路由设备即为实施例一的第二路由设备,本实施例二中的第二路由设备即为实施例一的第一路由设备。
实施例三
本实施例三中,路由设备为路由器,如图5所示,RouterA上配置TunnelA,RouterB上配置TunnelB,TunnelA与TunnelB形成一组MPLS TE双向隧道。本实施例中,RouterA和RouterB对MPLS TE双向隧道进行BFD检测的流程可以如下:
当RouterA欲在TunnelA上使能BFD(mplste bfd enable)时,判断是否为双向隧道(即判断TunnelA是否与其他隧道存在双向隧道的绑定关系),若不是双向隧道,则按照现有技术处理;若是双向隧道,则先查找是否有与TunnelA的ID(记为TunnelA ID)对应的BFD鉴别值,存在以下1)和2)两种情况:
1)如果没有找到与TunnelA的ID对应的BFD鉴别值,说明RouterB还没有在TunnelB上建立BFD会话,就运行MPLS RSVP(ReSource reserVation Protocol,资源预留协议)-LSP Ping来与RouterB协商BFD鉴别值来建立BFD会话。具体的,通过MPLS RSVP-LSP Ping报文携带TunnelB的ID(记为TunnelB ID),通过TunnelA发送给RouterB。
RouterB接收到MPLS RSVP-LSP ping报文之后,首先会根据该报文中是否携带了TunnelB ID来判断是否是双向隧道(即判断RouterA中是否将TunnelA和TunnelB绑定为双向隧道),如果不是双向隧道发送过来的MPLS RSVP-LSP ping报文,就按单向隧道的处理流程处理;如果是双向隧道发送过来的MPLS RSVP-LSP ping报文,就继续判断TunnelB ID对应的隧道是否也是双向隧道(即判断本机中是否将TunnelA和TunnelB绑定为双向隧道):
a)如果TunnelB ID对应的隧道是双向隧道,则RouterB在MPLS RSVP-LSP ping replay报文中压入TunnelB对应的标签,并在该报文中携带BFD鉴别值,走TunnelB对应的路径发送给RouterA。且在BFD鉴别值协商好后,RouterB 和RouterA都会保存各自的Tunnel ID与BFD鉴别值一一对应的关系。即,RouterB保存TunnelB ID与协商的BFD鉴别值的对应关系,RouterA保存TunnelA ID与该BFD鉴别值的对应关系。
b)TunnelB ID对应的隧道不是双向隧道,则不发送MPLS RSVP-LSP ping replay报文,这样,BFD鉴别值协商不成功,从而RouterA不能建立BFD会话。
2)如果找到了TunnelA ID对应的BFD鉴别值,就说明RouterB已经在TunnelB上建立了BFD会话了(因为RouterB在TunnelB上建立BFD会话之后,作为被动端的RouterA会保存TunnelA ID与协商的BFD鉴别值的对应关系),就不需要发送MPLS RSVP-LSP Ping报文来与RouterB协商BFD鉴别值,从而建立BFD会话了。
后续,在对MPLS TE双向隧道进行BFD检测时,RouterA会通过TunnelA周期性地向RouterB发送BFD控制报文,RouterA若在预定时间段内没有收到BFD控制报文,则认为TunnelA发生了故障,此方向的BFD检测过程同现有技术。同时,RouterB也会周期性地向RouterA发送BFD控制报文,发送BFD控制报文时,首先根据BFD鉴别值找到对应的Tunnel ID:TunnelB ID,然后,找到与TunnelB ID对应的隧道转发信息(即标签),在BFD控制报文中压入该标签,并将该BFD鉴别值携带在BFD控制报文中,通过TunnelB发送BFD控制报文(即走MPLS TE转发),而不是基于路由进行转发。从而,避免了路由故障导致的BFD误报。
实施例四
本发明实施例提供了一种路由设备(对应于实施例一和二中的第一路由设备),如图6所示,该路由设备包括:判断模块10、协商模块20、建立模块30和BFD检测模块40,其中:
判断模块10,用于在本路由设备作为主动端,欲在第一隧道上建立BFD会话时,判断与本路由设备相邻的第二路由设备是否已经在第二隧道上建立了BFD会话,其中,第一隧道是本路由设备上配置的本路由设备→第二路由 设备的MPLS TE隧道,第二隧道是第二路由设备上配置的第二路由设备→本路由设备的MPLS TE隧道,第一隧道与第二隧道绑定为一对MPLS TE双向隧道;
协商模块20,用于在判断模块10的判断结果为第二路由设备没有在第二隧道上建立BFD会话时,与第二路由设备协商BFD鉴别值;
建立模块30,用于在判断模块10的判断结果为第二路由设备已经在第二隧道上建立了BFD会话时,终止在第一隧道上建立BFD会话,以及,在协商模块20与第二路由设备协商BFD鉴别值成功后,在第一隧道上建立BFD会话;
BFD检测模块40,用于在建立模块30在第一隧道上建立了BFD会话之后,对MPLS TE双向隧道进行BFD检测的过程中,根据是否在预定时间段内接收到第二路由设备发来的BFD控制报文,来确定第二隧道的状态,其中,该BFD控制报文是第二路由设备在本地保存的第二隧道与协商好的BFD鉴别值的对应关系中查找到与BFD鉴别值对应的第二隧道后,通过第二隧道发送来的。
为了实现与第二路由设备进行BFD鉴别值协商,如图7所示,协商模块20可以包括:发送模块202,用于向第二路由设备发送携带有第二隧道的标识的MPLS RSVP-LSP ping报文;接收模块204,用于接收第二路由设备针对MPLS RSVP-LSP ping报文返回的MPLS RSVP-LSP ping replay报文,其中,MPLS RSVP-LSP ping replay报文是第二路由设备通过第二隧道发来的;保存模块206,用于从接收模块204接收到的MPLS RSVP-LSP ping replay报文中获取到协商好的BFD鉴别值,并保存第一隧道与该BFD鉴别值的对应关系。
如图7所示,判断模块10包括:查找模块102和确定模块104。其中,查找模块102查找保存模块206中是否有与第一隧道对应的BFD鉴别值,若查找到了,则确定模块104确定第二路由设备已经在第二隧道上建立了BFD 会话,否则,确定模块104确定第二路由设备没有在第二隧道上建立BFD会话。
另外,协商模块还可以用于在本路由设备作为被动端,且没有在第二隧道建立BFD会话时,与作为主动端的第二路由设备协商BFD鉴别值,在协商成功后保存第一隧道与协商好的BFD鉴别值的对应关系;BFD检测模块还可以用于在对MPLS TE双向隧道进行BFD检测的过程中,根据第一隧道与协商好的BFD鉴别值的对应关系,查找与该BFD鉴别值对应的第一隧道以及与第一隧道对应的MPLS标签,将查找到的MPLS标签压入BFD控制报文中,通过第一隧道发送给第二路由设备,其中,该BFD控制报文中携带有该BFD鉴别值。
此时,协商模块中的接收模块还可以用于接收第二路由设备发来的MPLS资源预留协议RSVP-标签交换路径LSP ping报文;发送模块还可以用于判断接收模块接收到的MPLS RSVP-LSP ping报文中是否携带有第一隧道的标识,若携带了,则通过第一隧道向第二路由设备返回携带有BFD鉴别值的MPLS RSVP-LSP ping replay报文。
综上,本发明上述实施例中,不管是正向,还是反向,BFD控制报文的收发都是基于MPLS TE双向隧道的两条隧道,所以只要其中一条隧道故障,BFD都能够快速感知,达到仅通过在双向隧道的一端配置一个BFD就能够有效、准确地检测一组双向隧道的两条隧道的状态的效果,节省了BFD的会话资源。
同时,被动端发来的BFD控制报文走的是MPLS标签转发,而不是路由,从而可以避免被动端的路由变化或者转发路径变化而导致的BFD功能错误和发生误报的可能性。不管是主动端、还是被动端(passive)发出的BFD控制报文都是走相应的隧道,BFD检测目标都是很明确的,报文转发路径也是确定的,因为BFD控制报文的转发路径就是TE隧道的路径,所以这种一对一的BFD检测方式能够很及时、准确地检测MPLS TE双向隧道的连通性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。