本申请涉及通信领域,尤其涉及一种报文发送的方法和装置。
背景技术
当网络出现链路故障后,网络节点(即网络设备,例如路由器(router,RT))保存的路由需要进行收敛。网络中可以运行内部网关协议(Interior Gateway Protocol,IGP)或边界网关协议(Border Gateway Protocol,BGP)。如图1所示,当RT1与RT7之间的链路发生故障后,RT1到RT7的路由由原来的RT1->RT7收敛为RT1->RT2->RT7,RT2到RT7的路由由原来的RT2->RT1->RT7收敛为RT2->RT3->RT7,以此类推,直至收敛到RT7。在上述收敛过程中,如果网络节点间的收敛性能存在差异,会导致收敛环路(收敛微环)问题。例如,如果RT2的收敛速度比RT1的收敛速度慢,那么就会在RT1和RT2间形成环路,即RT1将需要发送给RT7的报文转发给RT2后,由于RT2收敛较慢,RT2接收到RT1发送的报文后,会根据收敛前的流量转发路径(即路径RT2-RT1-RT7)转发该报文,即重新将该报文发送给RT1,形成环路。
相关技术中,可以采用分段路由(segment routing,SR)技术解决收敛环路问题。如图2所示,假设RT1与RT7之间的链路发生故障,RT1收敛后,可以根据转发需求为原本需要通过故障链路转发的报文重新确定一条转发路径(label switching path,LSP),并将该转发路径对应的标签栈添加在待转发的报文中。其中,该标签栈包括LSP经过的链路信息,例如链路分段标识(segment identification,SID)。该标签栈例如可以是{1001,1002,1003,1004,1005},其中,1001是RT2和RT3之间的邻居段标签(adjacency segment identifier,Adj-SID),Adj-SID也可以称为链路标签,1002是RT3和RT4之间的链路标签,1003是RT4和RT5之间的链路标签,1004是RT5和RT6之间的链路标签,1005是RT6和RT7之间的链路标签。这样,经过RT1转发到RT7的流量可以按照RT1压入的标签栈进行转发,而不依赖其他网络节点(例如,RT2)的收敛,从而避免出现收敛环路问题。
但是,受硬件能力限制,每个网络节点的标签栈能力是有限的,即每个网络节点的标签栈中能够压入的标签的层数是有限制的(比如2层、3层、6层或10层等)。转发路径越长时,标签栈就会越长(也可以称为越深),当标签栈的长度超过网络节点的标签栈能力后,标签栈就无法压入,即无法根据标签栈转发报文。例如,如图2所示,当转发路径对应的标签栈包括5层标签时,而RT1的标签栈能力是3层时,RT1无法根据标签栈转发报文。
技术实现要素:
本申请实施例提供一种报文发送的方法和装置,能够缩短报文的标签栈的长度,在网络设备的标签栈能力不变的情况下,可以支持更多的场景(例如可以支持较长的转发路径的场景)。
第一方面,本申请实施例提供一种报文发送的方法,包括:第一网络节点确定用于转发报文的第一转发路径不可用;响应于确定第一转发路径不可用,第一网络节点确定用于转发报文的第二转发路径;第一网络节点在报文中添加对应第二转发路径的标签栈,标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的网络节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的网络节点;第一网络节点发送添加了标签栈的报文。
基于本申请实施例提供的方法,可以根据标签栈中第二网络节点的节点标签将报文转发至第二网络节点,无需在标签栈中添加第一网络节点至第二网络节点之间的一个或多个链路标签或节点标签,可以缩短标签栈的长度,在网络设备的标签栈能力不变的情况下,可以支持更多的场景(例如可以支持较长的转发路径的场景)。
在一种可能的实现方式中,用于转发报文的第一转发路径不可用包括以下至少一种:第一转发路径的最小链路开销大于等于预设阈值;或者第一转发路径发生故障;或者第一转发路径发生拥塞。
在一种可能的实现方式中,第二网络节点是M个网络节点中与第一网络节点相隔最远的网络节点,M个网络节点分别位于第二转发路径上,且第一网络节点分别到M个网络节点中的每个网络节点之间的最短路径都不包括第一转发路径,M为大于或等于1的整数。可以理解的是,第二网络节点是M个网络节点中与第一网络节点距离最远的网络节点,即第二网络节点是M个网络节点中与第一网络节点相隔网络节点跳数最多的网络节点,由于标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签或节点标签,可以较大程度缩短标签栈的长度。
在一种可能的实现方式中,第二转发路径包括第三网络节点,第三网络节点是第二转发路径中第二网络节点的下一跳网络节点,该方法还包括:第一网络节点确定第二网络节点与第三网络节点之间的最小链路开销是否大于第一网络节点与第三网络节点之间的最小链路开销;当第二网络节点与第三网络节点之间的最小链路开销大于第一网络节点与第三网络节点之间的最小链路开销时,标签栈还包括第二网络节点与第三网络节点之间的链路标签。这是由于当第二网络节点与第三网络节点之间的最小链路开销大于第一网络节点与第三网络节点之间的最小链路开销时,第二网络节点与第三网络节点之间的直连链路并非第二网络节点与第三网络节点之间的最短路径,由于第二网络节点可能还未收敛或还未获知网络中的链路发生了故障,因此第二网络节点自主确定的第二网络节点与第三网络节点之间的最短路径可能包括故障链路,导致环路问题。因此需要在标签栈中添加第二网络节点与第三网络节点之间的链路标签,这样,第二网络节点可以根据第二网络节点与第三网络节点之间的链路标签将报文发送至第三网络节点,避免环路问题。
在一种可能的实现方式中,第二转发路径包括第三网络节点,第三网络节点是第二转发路径中第二网络节点的下一跳网络节点,该方法还包括:第一网络节点确定第二网络节点与第三网络节点之间的最小链路开销是否小于等于第一网络节点与第三网络节点之间的最小链路开销;当第二网络节点与第三网络节点之间的最小链路开销小于等于第一网络节点与第三网络节点之间的最小链路开销时,标签栈不包括第二网络节点与第三网络节点之间的链路标签。这是由于当第二网络节点与第三网络节点之间的最小链路开销小于等于第一网络节点与第三网络节点之间的最小链路开销时,第二网络节点与第三网络节点之间的直连链路是第二网络节点与第三网络节点之间的最短路径,第二网络节点可以自主(即根据自身的路径规划)将报文发送至第三网络节点,因此无需在标签栈中添加第二网络节点与第三网络节点之间的链路标签。
在一种可能的实现方式中,第二转发路径包括第四网络节点,第四网络节点是第二转发路径中第三网络节点的下一跳网络节点,该方法还包括:第一网络节点确定第三网络节点与第四网络节点之间的最小链路开销是否大于第一网络节点与第四网络节点之间的最小链路开销;第三网络节点与第四网络节点之间的最小链路开销大于第一网络节点与第四网络节点之间的最小链路开销时,标签栈还包括第三网络节点与第四网络节点之间的链路标签。
在一种可能的实现方式中,第二转发路径包括第四网络节点,第四网络节点是第二转发路径中第三网络节点的下一跳网络节点,该方法还包括:第一网络节点确定第三网络节点与第四网络节点之间的最小链路开销是否小于等于第一网络节点与第四网络节点之间的最小链路开销;第三网络节点与第四网络节点之间的最小链路开销小于等于第一网络节点与第四网络节点之间的最小链路开销时,标签栈不包括第三网络节点与第四网络节点之间的链路标签。
在一种可能的实现方式中,当标签栈不包括第二网络节点与第三网络节点之间的链路标签,且标签栈包括第三网络节点与第四网络节点之间的链路标签时,标签栈还包括第三网络节点的节点标签。这是由于第二网络节点可能无法识别第三网络节点与第四网络节点之间的链路标签,当报文转发至第二网络节点时,第二网络节点无法根据第三网络节点与第四网络节点之间的链路标签确定如何发送报文。因此需要在标签栈中添加第三网络节点的节点标签,以便第二网络节点将报文发送给第三网络节点,由第三网络节点根据第三网络节点与第四网络节点之间的链路标签将报文转发给第四网络节点。
第二方面,本申请实施例提供一种第一网络节点,包括:确定单元,用于确定用于转发报文的第一转发路径不可用;确定单元,还用于响应于确定第一转发路径不可用,确定用于转发报文的第二转发路径;处理单元,用于在报文中添加对应第二转发路径的标签栈,标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的网络节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的网络节点;发送单元,用于发送添加了标签栈的报文。
在一种可能的实现方式中,用于转发报文的第一转发路径不可用包括以下至少一种:第一转发路径的最小链路开销大于等于预设阈值;或者第一转发路径发生故障;或者第一转发路径发生拥塞。
在一种可能的实现方式中,第二网络节点是M个网络节点中与第一网络节点相隔最远的网络节点,M个网络节点分别位于第二转发路径上,且第一网络节点分别到M个网络节点中的每个网络节点之间的最短路径都不包括第一转发路径,M为大于或等于1的整数。
在一种可能的实现方式中,第二转发路径包括第三网络节点,第三网络节点是第二转发路径中第二网络节点的下一跳网络节点,确定单元还用于:确定第二网络节点与第三网络节点之间的最小链路开销是否大于第一网络节点与第三网络节点之间的最小链路开销;当第二网络节点与第三网络节点之间的最小链路开销大于第一网络节点与第三网络节点之间的最小链路开销时,标签栈还包括第二网络节点与第三网络节点之间的链路标签。
在一种可能的实现方式中,第二转发路径包括第三网络节点,第三网络节点是第二转发路径中第二网络节点的下一跳网络节点,确定单元还用于:确定第二网络节点与第三网络节点之间的最小链路开销是否小于等于第一网络节点与第三网络节点之间的最小链路开销;当第二网络节点与第三网络节点之间的最小链路开销小于等于第一网络节点与第三网络节点之间的最小链路开销时,标签栈不包括第二网络节点与第三网络节点之间的链路标签。
在一种可能的实现方式中,第二转发路径包括第四网络节点,第四网络节点是第二转发路径中第三网络节点的下一跳网络节点,确定单元还用于:确定第三网络节点与第四网络节点之间的最小链路开销是否大于第一网络节点与第四网络节点之间的最小链路开销;第三网络节点与第四网络节点之间的最小链路开销大于第一网络节点与第四网络节点之间的最小链路开销时,标签栈还包括第三网络节点与第四网络节点之间的链路标签。
在一种可能的实现方式中,第二转发路径包括第四网络节点,第四网络节点是第二转发路径中第三网络节点的下一跳网络节点,确定单元还用于:确定第三网络节点与第四网络节点之间的最小链路开销是否小于等于第一网络节点与第四网络节点之间的最小链路开销;第三网络节点与第四网络节点之间的最小链路开销小于等于第一网络节点与第四网络节点之间的最小链路开销时,标签栈不包括第三网络节点与第四网络节点之间的链路标签。
在一种可能的实现方式中,当标签栈不包括第二网络节点与第三网络节点之间的链路标签,且标签栈包括第三网络节点与第四网络节点之间的链路标签时,标签栈还包括第三网络节点的节点标签。
第三方面,本申请还提供了一种通信装置,该通信装置可以是第一网络节点或芯片。该通信装置包括处理器,用于实现上述第一方面提供的任意一种方法。该通信装置还可以包括存储器,用于存储程序指令和数据,存储器可以是集成在该通信装置内的存储器,或设置在该通信装置外的片外存储器。该存储器与该处理器耦合,该处理器可以调用并执行该存储器中存储的程序指令,用于实现上述第一方面提供的任意一种方法。该存储器可以设置在处理器中,或该存储器与处理器独立设置。该通信装置还可以包括收发器(通信接口/接口电路),该收发器用于该通信装置与其它设备(例如,第一网络节点的下一跳网络节点)进行通信。
第四方面,本申请提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述第一方面提供的任意一种方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面提供的任意一种方法。
第六方面,本申请提供了一种芯片系统,该芯片系统包括处理器,还可以包括存储器,用于实现上述第一方面提供的任意一种方法。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
第七方面,本申请提供了一种报文发送的系统,包括第一网络节点和第二网络节点,其中:第一网络节点用于确定用于转发报文的第一转发路径不可用;响应于确定第一转发路径不可用,确定用于转发报文的第二转发路径;在报文中添加对应第二转发路径的标签栈;标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的网络节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的网络节点;向第二网络节点发送添加了标签栈的报文;第二网络节点接收添加了标签栈的报文,并根据所述标签栈发送所述报文。
附图说明
图1为现有技术中的一种网络架构的示意图;
图2为现有技术中的又一种网络架构的示意图;
图3为本申请实施例提供的一种网络架构示意图;
图4为本申请实施例提供的一种第一网络节点的结构示意图;
图5为本申请实施例提供的一种报文发送的方法适用的信号示意图;
图6为本申请实施例提供的又一种网络架构示意图;
图7为本申请实施例提供的一种RT1的最短路径树的示意图;
图8为本申请实施例提供的又一种网络架构示意图;
图9为本申请实施例提供的又一种网络架构示意图;
图10为本申请实施例提供的又一种第一网络节点的结构示意图。
具体实施方式
本申请实施例提供一种报文发送的方法,可以应用于自治网络系统中,例如应用于IGP网络中。示例性的,可以应用于IGP网络中出现链路故障或拥塞等场景中。
如图3所示,为本申请实施例提供的一种网络架构示意图。该网络架构可以包括第一网络节点、第六网络节点以及其他网络节点(例如,网络节点1-网络节点5)。
当第一网络节点确定用于转发报文的第一转发路径不可用时,响应于确定第一转发路径不可用,第一网络节点确定用于转发报文的第二转发路径。示例性的,第一转发路径可以包括第一网络节点与第六网络节点之间的链路,当该链路发生故障时,第一网络节点确定用于转发报文的第二转发路径,该第二转发路径可以包括转发节点1-转发节点5之间的链路,即第一网络节点可以通过转发节点1-转发节点5将报文转发到第六网络节点。第一网络节点可以在报文中添加对应第二转发路径的标签栈,以便转发节点1-转发节点5可以根据该标签栈转发报文。
受硬件能力限制,每个网络节点的标签栈能力是有限的,即每个网络节点的标签栈中能够压入的标签的层数是有限制的(比如可压入的标签为2层、3层、6层或10层等,即可压入2个标签,3个标签、6个标签或10个标签等)。转发路径越长时,标签栈就会越长(越深),当标签栈的长度超过网络节点的标签栈能力后,网络节点将无法正确处理包含该标签栈的报文。
本申请实施例提供一种报文发送的方法,包括:第一网络节点确定用于转发报文的第一转发路径不可用;响应于确定第一转发路径不可用,第一网络节点确定用于转发报文的第二转发路径;第一网络节点在报文中添加对应第二转发路径的标签栈,标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的节点;第一网络节点发送添加了标签栈的报文。
基于本申请实施例提供的方法,可以根据标签栈中第二网络节点的节点标签将报文转发至第二网络节点,无需在标签栈中添加第一网络节点至第二网络节点之间的一个或多个链路标签或节点标签,可以缩短标签栈的长度,在网络设备的标签栈能力不变的情况下,可以支持更多的场景(例如可以支持较长的转发路径的场景)。
本申请实施例图3中的第一网络节点可以由一个设备实现,也可以是一个设备内的一个功能模块,本申请实施例对此不作具体限定。可以理解的是,上述功能既可以是硬件设备中的网络元件,也可以是在专用硬件上运行的软件功能,或者是平台(例如,云平台)上实例化的虚拟化功能,或者是芯片系统。本申请实施例中,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
例如,用于实现本申请实施例提供的第一网络节点的功能的装置可以通过图4中的装置400来实现。图4所示为本申请实施例提供的装置400的硬件结构示意图。该装置400中包括至少一个处理器401,用于实现本申请实施例提供的第一网络节点的功能。装置400中还可以包括总线402以及至少一个通信接口404。装置400中还可以包括存储器403。
在本申请实施例中,处理器可以是中央处理器(central processing unit,CPU),通用处理器、网络处理器(network processor,NP)、数字信号处理器(digital signal processing,DSP)、微处理器、微控制器、可编程逻辑器件(programmable logic device,PLD)或它们的任意组合。处理器还可以是其它任意具有处理功能的装置,例如电路、器件或软件模块。
总线402可用于在上述组件之间传送信息。
通信接口404,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local area networks,WLAN)等。通信接口404可以是接口、电路、收发器或者其它能够实现通信的装置,本申请不做限制。通信接口404可以和处理器401耦合。本申请实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。
在本申请实施例中,存储器可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,也可以与处理器耦合,例如通过总线402。存储器也可以和处理器集成在一起。
其中,存储器403用于存储程序指令,并可以由处理器401来控制执行,从而实现本申请下述实施例提供的方法。处理器401用于调用并执行存储器403中存储的指令,从而实现本申请下述实施例提供的方法。
可选的,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。
可选地,存储器403可以包括于处理器401中。
在具体实现中,作为一种实施例,处理器401可以包括一个或多个CPU,例如图4中的CPU0和CPU1。
在具体实现中,作为一种实施例,装置400可以包括多个处理器,例如图4中的处理器401和处理器405。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
上述的装置400可以是一个通用设备或者是一个专用设备。在具体实现中,第一网络节点400可以是路由器、支持路由协议的交换设备(交换机)、网桥、网关或有图4中类似结构的设备。本申请实施例不限定装置400的类型。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
为了便于理解,以下结合附图对本申请实施例提供的报文发送的方法进行具体介绍。
如图5所示,本申请实施例提供一种报文发送的方法,包括:
501、第一网络节点确定用于转发报文的第一转发路径不可用。
其中,第一转发路径不可用包括以下至少一种:第一转发路径的最小链路开销大于等于预设阈值;或者,第一转发路径发生故障;或者,第一转发路径发生拥塞。
502、响应于确定第一转发路径不可用,第一网络节点确定用于转发报文的第二转发路径。
示例性的,假设第一转发路径包括第一网络节点与第六网络节点之间的直连链路,当第一网络设备确定第一网络节点与第六网络节点之间的直连链路发生故障后,可以进行故障收敛(简称为收敛)。收敛是指第一网络节点发现链路故障后,根据相关算法(例如,Dijkstra算法)更新自身的路由表或最短路径树(short path tree,SPT),以排除故障链路对后续流量转发过程的影响。收敛后的第一网络节点可以为待转发至第六网络节点的报文重新确定转发路径,即第二转发路径。或者,转发路径也可以称为收敛路径,本申请不做限定。上述待发送至第六网络节点的报文可以是第一网络节点从其他网络节点接收到的报文,也可以是第一网络节点生成的报文,本申请不做限定。
示例性的,如图6所示,假设网络中设置有7个路由器(图6中的R1至R7),每个路由器为一个网络节点,以第一网络节点为RT1,第六网络节点为RT7为例,当RT1确定RT1与RT7之间的直连链路发生故障后,可以重新为待转发至RT7的报文(报文)确定转发路径,即第二转发路径。也就是放弃RT1与RT7之间的直连链路,通过其他网络节点将报文转发至RT7。示例性的,RT1确定的第二转发路径可以为RT1->RT2->RT3->RT4->RT5->RT6->RT7。
另外,第一网络节点确定自身的直连链路以外的链路发生故障后,也可以进行故障收敛,并为第一网络节点上原本需要经过故障链路的报文确定第二转发路径。示例性的,如图6所示,以第一网络节点为RT2,第六网络节点为RT7,故障链路为RT1与RT7之间的链路为例,当RT2确定RT1与RT7之间的直连链路发生故障后,可以重新为待转发至RT7的报文确定转发路径(第二转发路径)。示例性的,第二转发路径可以为RT2->RT3->RT4->RT5->RT6->RT7。
503、第一网络节点在报文中添加对应第二转发路径的标签栈。
其中,标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的节点。
在一种可能的设计中,第二网络节点是M个网络节点中与第一网络节点相隔最远的网络节点,M个网络节点分别位于第二转发路径上,且第一网络节点分别到M个网络节点中的每个网络节点之间的最短路径都不包括第一转发路径,M为大于或等于1的整数。
由于第一网络节点分别与M个网络节点之间的最短路径不包括第一转发路径,因此该M个网络节点是不受不可用的第一转发路径影响的网络节点。第二网络节点是M个网络节点中与第一网络节点距离最远的网络节点,即第二网络节点是M个网络节点中与第一网络节点相隔网络节点跳数最多的网络节点。
示例性的,仍如图6所示,以第一网络节点为RT1,第六网络节点为RT7,第一转发路径包括RT1与RT7之间的直连链路为例,M个网络节点可以包括RT2、RT3和RT4。这是由于对于RT2来说,无论RT1到RT7的直连链路是否故障,RT1到RT2的最短路径都不受影响,为RT1->RT2。对于RT3来说,无论RT1到RT7的直连链路是否故障,RT1到RT3的最短路径都不受影响,为RT1->RT2->RT3。对于RT4来说,无论RT1到RT7的直连链路是否故障,RT1到RT4的最短路径都不受影响,为RT1->RT2->RT3->RT4。在RT2、RT3和RT4中,RT4距离RT1最远,即RT4与RT1相隔的网络节点跳数最多,为两跳,因此第二网络节点可以是RT4。
或者,也可以认为M个网络节点包括第一网络节点收敛前的最短路径树中不包括故障链路的边上的全部网络节点,第二网络节点是上述不包括故障链路的边的叶子网络节点。示例性的,如图7所示,为RT1在故障收敛前对应的最短路径树,该最短路径树包括两条边,两条边的根网络节点都为RT1,两条边的叶子网络节点分别为RT4和RT5,由于叶子网络节点为RT4的边不包括故障链路,因此RT1可以确定M个网络节点包括RT2、RT3和RT4,第二网络节点是RT4。
第一网络节点确定第二网络节点之后,可以将第二网络节点的节点标签添加至(即压入)标签栈。这样,可以根据第二网络节点的节点标签将报文转发至第二网络节点,而无需在标签栈中压入第一网络节点与第二网络节点之间的一个或多个链路标签或节点标签,从而可以达到缩短标签栈的目的。
进一步的,若第二转发路径在第二网络节点之后还包括其他网络节点,第一网络节点可以从第二网络节点开始逐跳探测,确定标签栈是否需要包括其他链路标签或节点标签。
可选的,若第二转发路径包括第三网络节点,第三网络节点是第二转发路径中第二网络节点的下一跳网络节点,第一网络节点可以确定第二网络节点与第三网络节点之间的最小链路开销是否小于第一网络节点与第三网络节点之间的最小链路开销以及第一网络节点与第二网络节点之间的最小链路开销的和。其中,第二网络节点与第三网络节点之间的最小链路开销是指第二网络节点与第三网络节点之间的直连链路的最小开销,第一网络节点与第三网络节点之间的最小链路开销是指第一网络节点与第三网络节点之间的最短路径所包括的全部链路的开销,第一网络节点与第二网络节点之间的最小链路开销是指第一网络节点与第二网络节点之间的最短路径所包括的全部链路的开销。
由于第一网络节点与第二网络节点之间的最小链路开销大于0,因此,第二网络节点与第三网络节点之间的最小链路开销是否小于第一网络节点与第三网络节点之间的最小链路开销以及第一网络节点与第二网络节点之间的最小链路开销的和,可以简化为第二网络节点与第三网络节点之间的最小链路开销是否小于等于第一网络节点与第三网络节点之间的最小链路开销。这样,第一网络节点可以确定第二网络节点与第三网络节点之间的最小链路开销是否小于等于第一网络节点与第三网络节点之间的最小链路开销(或者第一网络节点可以确定第二网络节点与第三网络节点之间的最小链路开销是否大于第一网络节点与第三网络节点之间的最小链路开销),简化了运算过程,节省运算开销。
当第二网络节点与第三网络节点之间的最小链路开销小于等于第一网络节点与第三网络节点之间的最小链路开销时,标签栈不包括第二网络节点与第三网络节点之间的链路标签。这是由于当第二网络节点与第三网络节点之间的最小链路开销小于等于第一网络节点与第三网络节点之间的最小链路开销时,第二网络节点与第三网络节点之间的直连链路是第二网络节点与第三网络节点之间的最短路径,第二网络节点可以自主(即根据自身的路径规划)将报文发送至第三网络节点,因此无需在标签栈中添加第二网络节点与第三网络节点之间的链路标签。
当第二网络节点与第三网络节点之间的最小链路开销大于第一网络节点与第三网络节点之间的最小链路开销时,标签栈还包括第二网络节点与第三网络节点之间的链路标签。这是由于当第二网络节点与第三网络节点之间的最小链路开销大于第一网络节点与第三网络节点之间的最小链路开销时,第二网络节点与第三网络节点之间的直连链路并非第二网络节点与第三网络节点之间的最短路径,由于第二网络节点可能还未收敛或还未获知网络中的链路发生了故障,因此第二网络节点自主确定的第二网络节点与第三网络节点之间的最短路径可能包括故障链路,导致环路问题。因此需要在标签栈中添加第二网络节点与第三网络节点之间的链路标签,这样,第二网络节点可以根据第二网络节点与第三网络节点之间的链路标签将报文发送至第三网络节点,避免环路问题。
示例性的,如图8所示,以第一网络节点为RT1,第二网络节点为RT4,第三网络节点为RT5为例,若RT4与RT5之间的直连链路的链路开销为1000,而RT1与RT5之间的最小链路开销为30(网络收敛前,RT1与RT5之间的最短路径可以是RT1->RT7->RT6->RT5),此时RT4与RT5之间的直连链路并非RT4与RT5之间的最短路径,当报文转发到RT4时,由于RT4可能还未收敛或者还未获知RT1与RT7之间的链路发生故障,因此RT4可能通过RT4->RT3->RT2->RT1->RT7(该转发路径的最小链路开销小于1000)转发报文,这样,在RT3与RT4之间会造成环路,即RT3将报文转发至RT4后,RT4又会将报文转发给RT3。因此需要在标签栈中添加RT4与RT5之间的链路标签,这样,RT4可以根据RT4与RT5之间的链路标签将报文发送至RT5,避免环路问题。
可选的,若第二转发路径还包括第四网络节点,第四网络节点是第二转发路径中第三网络节点的下一跳网络节点,第一网络节点确定第三网络节点与第四网络节点之间的最小链路开销是否大于第一网络节点与第四网络节点之间的最小链路开销(或者第一网络节点确定第三网络节点与第四网络节点之间的最小链路开销是否小于等于第一网络节点与第四网络节点之间的最小链路开销)。其中,第三网络节点与第四网络节点之间的最小链路开销是指第三网络节点与第四网络节点之间的直连链路的最小开销,第一网络节点与第四网络节点之间的最小链路开销是指第一网络节点与第四网络节点之间的最短路径所包括的全部链路的开销。
当第三网络节点与第四网络节点之间的最小链路开销小于等于第一网络节点与第四网络节点之间的最小链路开销时,标签栈不包括第三网络节点与第四网络节点之间的链路标签。当第三网络节点与第四网络节点之间的最小链路开销大于第一网络节点与第四网络节点之间的最小链路开销时,标签栈还包括第三网络节点与第四网络节点之间的链路标签。
可选的,若标签栈不包括第二网络节点与第三网络节点之间的节点标签,但包括第三网络节点与第四网络节点之间的链路标签,标签栈还可以包括第三网络节点的节点标签。这是由于第二网络节点可能无法识别第三网络节点与第四网络节点之间的链路标签,当报文转发至第二网络节点时,第二网络节点无法根据第三网络节点与第四网络节点之间的链路标签确定如何发送报文。因此需要在标签栈中添加第三网络节点的节点标签,以便第二网络节点将报文发送给第三网络节点,由第三网络节点根据第三网络节点与第四网络节点之间的链路标签将报文转发给第四网络节点。
可选的,若存在第五网络节点,第五网络节点是第二转发路径中第四网络节点的下一跳网络节点,可以确定标签栈是否包括第四网络节点与第五网络节点之间的链路标签,以此类推,直到探测到第二转发路径中的最后一跳网络节点(例如,第六网络节点)为止。具体过程可以参考上文中的相关描述,在此不做赘述。
下面结合具体场景对标签栈的生成过程进行说明。
在一些实施例中,如图6所示,以第一网络节点为RT1为例,RT1确定第二网络节点为RT4,并可以将RT4的节点标签压入标签栈。而后RT1可以从RT4开始逐跳探测,确定RT4与RT5之间的最小链路开销是否满足公式(1):
RT4->RT5(cost)<RT4->RT1(cost) RT1->RT5(cost)(1)
其中,RT4->RT5(cost)表示RT4与RT5之间的最小链路开销,即RT4与RT5之间的直连链路的最小开销,该直连链路的最小链路开销可以是RT1基于收敛前的路由信息确定的;RT4->RT1(cost)表示RT4与RT1之间的最小链路开销,即RT4与RT1之间的最短路径包括的链路的开销,且RT4与RT1之间的最小链路开销是RT1基于收敛前的路由信息确定的;RT1->RT5(cost)表示RT1与RT5之间的最小链路开销,即RT1与RT5之间的最短路径包括的链路的开销;且该RT1与RT5之间的最小链路开销是RT1基于收敛前的路由信息确定的。
由于公式(1)中RT4->RT1(cost)大于0,因此公式(1)可以简化公式(2):
RT4->RT5(cost)<=RT1->RT5(cost) (2)
若满足公式(2),标签栈中不压入RT4与RT5之间的链路标签。若不满足公式(2),标签栈中压入RT4与RT5之间的链路标签。
如图6所示,RT4与RT5之间的最小链路开销是10,RT1根据收敛前的路径信息确定RT1到RT5之间的最短路径是RT1->RT7->RT6->RT5,即RT1到RT5之间的最小链路开销包括RT1与RT7之间的直连链路的最小开销、RT7与RT6之间的直连链路的最小开销以及RT6与RT5之间的直连链路的最小开销,即RT1到RT5之间的最小链路开销是10 10 10=30,10<=30,满足公式(2),因此RT4与RT5之间的链路标签可以不压入标签栈。
而后,RT1可以继续探测RT5到RT6,确定是否满足RT5->RT6(cost)<=RT1->RT6(cost),由于10<=20,因此标签栈中可以不压入RT5与RT6之间的链路标签。RT1继续探测RT6到RT7,确定是否满足RT6->RT7(cost)<=RT1->RT7(cost),由于10<=10,因此标签栈中不压入RT6与RT7之间的链路标签。最终,标签栈中只需要压入RT4的节点标签,相比现有技术,标签中需要包括{1001,1002,1003,1004,1005}等五层链路标签,本申请实施例中,标签栈中仅需要一层节点标签,大大缩短了标签栈的长度。
如图8所示,以第一网络节点为RT1为例,RT1确定第二网络节点为RT4,并可以将RT4的节点标签压入标签栈。而后RT1可以探测RT4到RT5,确定是否满足RT4->RT5(cost)<=RT1->RT5(cost);由于RT4->RT5(cost)是1000,RT1->RT5(cost)是30,不满足RT4->RT5(cost)<=RT1->RT5(cost);因此标签栈中压入RT4与RT5之间的链路标签。而后,RT1可以继续探测RT5到RT6,确定是否满足RT5->RT6(cost)<=RT1->RT6(cost),由于10<=20,因此标签栈中不压入RT5与RT6之间的链路标签。继续探测RT6到RT7,确定是否满足RT6->RT7(cost)<=RT1->RT7(cost),由于10<=10,因此标签栈中不压入RT6与RT7之间的链路标签。最终,标签栈中需要压入RT4的节点标签以及RT4与RT5之间的链路标签,相比现有技术,标签中需要包括{1001,1002,1003,1004,1005}等五层链路标签,本申请实施例中,标签栈中仅需要两层标签(一层节点标签和一层链路标签),缩短了标签栈的长度。
在另一种可能的设计中,如图9所示,以第一网络节点为RT1为例,RT1可以先生成第二转发路径的完整标签栈,该完整标签栈包括第二转发路径中每条链路的链路标签。例如,该完整标签栈可以包括{1001,1002,1003,1004,1005};其中,1001是RT2和RT3之间的链路标签,1002是RT3和RT4之间的链路标签,1003是RT4和RT5之间的链路标签,1004是RT5和RT6之间的链路标签,1005是RT6和RT7之间的链路标签。
RT1确定第二网络节点为RT4后,可以将RT1至RT4之间的链路标签替换为RT4的节点标签。例如,可以将标签栈中的1001和1002替换为4000,其中,4000是RT4的节点标签。
相比现有技术的标签栈需要包括转发路径中每个链路的链路标签,本申请通过采用节点标签替代链路标签的方式来压缩标签栈,使得标签栈尽可能短,在网络设备的标签栈能力不变的情况下,可以支持更多的场景(例如可以支持较长的转发路径的场景)。
而后RT1可以探测RT4到RT5,确定是否满足RT4->RT5(cost)<=RT1->RT5(cost);由于10<=30,因此可以从标签栈中删除RT4与RT5之间的链路标签。而后,RT1可以继续探测RT5到RT6,确定是否满足RT5->RT6(cost)<=RT1->RT6(cost),由于10<=20,因此可以从标签栈中删除RT5与RT6之间的链路标签。继续探测RT6到RT7,确定是否满足RT6->RT7(cost)<=RT1->RT7(cost),由于10<=10,因此可以从标签栈中删除RT6与RT7之间的链路标签。最终标签栈只包括RT4的节点标签,相比现有技术,标签中需要包括{1001,1002,1003,1004,1005}等五层链路标签,本申请实施例中,标签栈中仅需要一层节点标签,大大缩短了标签栈的长度。
504、第一网络节点发送添加了标签栈的报文。
第一网络节点向第二转发路径中第一网络节点的下一跳网络节点发送报文。该报文携带标签栈,该标签栈即第二转发路径对应的标签栈。
示例性的,如图6所示,以第一网络节点为RT1为例,RT1可以向第二转发路径中RT1的下一跳网络节点(即RT2)发送报文,报文携带标签栈{4000},4000是第二网络节点(RT4)的节点标签。
RT2接收到报文后,根据标签栈中的节点标签4000确定需要将报文转发至节点标签4000对应的网络节点(即RT4),根据自身的最短路径树,或者通过查找路由表,RT2可以确定下一跳网络节点为RT3,然后向RT3发送报文。
类似的,RT3接收到报文后,根据标签栈中的节点标签4000确定需要将报文转发至节点标签4000对应的网络节点(即RT4),根据自身的最短路径树,RT3可以确定下一跳网络节点为RT4,然后向RT4发送报文。
RT4接收到报文后,删除(弹出)节点标签4000,并识别出报文的目的地址(第六网络节点,即RT7),RT4可以根据自身的最短路径树,确定下一跳网络节点为RT5,然后向RT5发送报文。可选的,报文的目的地址可以封装在网络协议(Internet Protocol,IP)层,标签栈可以封装在多协议标签交换(multiprotocol label switching,MPLS)层,当删除MPLS层中的节点标签后,IP层中的目的地址会露出,从而RT4可以识别出报文的目的地址。
RT5接收到报文后,识别出报文的目的地址(RT7),根据自身的最短路径树,RT5可以确定下一跳网络节点为RT6,然后向RT6发送报文。
RT6接收到报文后,识别出报文的目的地址(RT7),根据自身的最短路径树,RT6可以确定下一跳网络节点为RT7,然后向RT7发送报文,从而RT7可以接收到报文。
基于本申请实施例提供的方法,第一网络节点确定用于转发报文的第一转发路径不可用时,可以重新确定用于转发报文的第二转发路径;第一网络节点在报文中添加对应第二转发路径的标签栈,标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的节点;第一网络节点发送添加了标签栈的报文。这样一来,可以根据标签栈中第二网络节点的节点标签将报文转发至第二网络节点,无需在标签栈中添加第一网络节点至第二网络节点之间的一个或多个链路标签或节点标签,可以缩短标签栈的长度,在网络设备的标签栈能力不变的情况下,可以支持更多的场景(例如可以支持较长的转发路径的场景)。
上述本申请提供的实施例中,从第一网络节点,以及第一网络节点与其他网络节点之间交互的角度对本申请实施例提供的方法进行了介绍。为了实现上述本申请实施例提供的方法中的各功能,第一网络节点可以包括硬件结构和/或软件模块,以硬件结构、软件模块、或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。
在采用对应各个功能划分各个功能模块的情况下,图10示出了上述实施例中所涉及的装置的一种可能的结构示意图,该装置可以为第一网络节点10,第一网络节点10包括:确定单元1001、处理单元1002和发送单元1003。在本申请实施例中,确定单元1001,用于确定用于转发报文的第一转发路径不可用;确定单元1001,还用于响应于确定第一转发路径不可用,确定用于转发报文的第二转发路径;处理单元1002,用于在报文中添加对应第二转发路径的标签栈,标签栈包括第二网络节点的节点标签,且标签栈不包括第一网络节点与第二网络节点之间的链路的链路标签,或标签栈不包括第一网络节点与第二网络节点之间的网络节点的节点标签,第一网络节点与第二网络节点之间的最短路径不包括第一转发路径,第二网络节点为第二转发路径上的网络节点;发送单元1003,用于发送添加了标签栈的报文。
在图5所示的方法实施例中,确定单元1001可以用于支持第一网络节点执行图5中的过程501和502。处理单元1002用于支持第一网络节点执行图5中的过程503。发送单元1003用于支持第一网络节点执行图5中的过程504。
其中,确定单元1001和处理单元1002可以是图4中的处理器401和/或处理器405。发送单元1003可以是图4中的通信接口404。
本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。示例性地,在本申请实施例中,接收单元和发送单元可以集成至收发单元中。
本申请实施例提供的方法中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机可以存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD))、或者半导体介质(例如,固态硬盘(solid state drives,SSD))等。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。