一种数据传输方法、相关设备及计算机存储介质转让专利

申请号 : CN202110865850.8

文献号 : CN115701054A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵科强李呈陈新隽

申请人 : 华为技术有限公司

摘要 :

本申请公开了一种数据传输方法、相关设备及计算机存储介质,该数据传输方法通过在源节点处生成TLV字段并封装在第一报文的SRH头,在转发路径上的中间转发节点检测到转发路径上下一跳SR节点出现故障或者到下一跳SR节点的路径故障时,该TLV字段能够用于指示该中间转发节点获取第一报文转发路径上的下一跳SR节点以后的多个节点中的任意一个节点的段标识,将获取的段标识更新在报文的目的地址,按照该段标识的指令进行转发,从而绕过故障节点或者故障路径,完成数据传输。

权利要求 :

1.一种数据传输方法,其特征在于,所述方法包括:

第一节点接收第一报文,所述第一报文包括段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中的一个节点或所述转发路径中的一个链路;

当确定所述第一节点到第二节点的路径故障时,所述第一节点根据所述第一报文中的一个或多个类型‑长度‑值TLV获得第三节点的段标识,所述第二节点是所述转发路径中所述第一节点的下一跳分段路由SR节点,所述第三节点是所述转发路径中在所述第二节点之后的节点中的任意一个节点,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息;

所述第一节点根据所述第一报文获得第二报文;

所述第一节点发送所述第二报文,所述第二报文的目的地址包括所述第三节点的段标识。

2.根据权利要求1所述的方法,其特征在于,所述第一节点根据所述第一报文中的一个或多个类型‑长度‑值TLV获得所述第三节点的段标识,包括:根据所述一个或多个类型‑长度‑值TLV和段剩余SL的第一值获得所述第三节点段标识,所述SL的第一值指示第一元素在所述段列表中的位置,所述第一元素包括所述第三节点的标识。

3.根据权利要求2所述的方法,其特征在于,根据所述一个或多个类型‑长度‑值TLV和段剩余SL的第一值获得所述第三节点段标识,包括:根据所述SL的第一值获取第一TLV,所述第一TLV是所述一个或多个TLV中的一个TLV;

根据所述SL的第一值和所述第一TLV的指示信息获取所述第三节点段标识。

4.根据权利要求2或3所述的方法,其特征在于,根据所述SL的第一值获取第一TLV,包括:获取所述SL的第二值,所述SL的第二值是指所述第一节点接收到所述第一报文时SL的值,所述SL的第二值用于指示第二元素在所述段列表中的位置,所述第二元素包括所述第一节点的标识;

根据所述SL的第二值确定所述SL的第一值;

根据所述SL的第一值获取第一TLV。

5.根据权利要求4所述的方法,其特征在于,根据所述SL的第二值确定所述SL的第一值,包括:如果根据所述第一节点的标识确定所述第二节点的标识为非压缩段标识,将所述SL的第二值减2得到所述SL的第一值。

6.根据权利要求5所述的方法,其特征在于,第一标记用于指示所述第二节点的标记为压缩段标识,所述根据所述第一节点的标识确定所述第二节点的标识为非压缩段标识,包括:根据所述第一报文的目的地址获得所述第一节点的标识;

如果所述第一节点的标识中不包括所述第一标记,确定所述第二节点的标识为非压缩段标识。

7.根据权利要求4所述的方法,其特征在于,所述根据所述SL的第二值确定所述SL的第一值,包括:如果根据所述第一节点的标识确定所述第二节点的标识为压缩段标识,并且根据压缩段标识剩余CL的值确定所述第一元素和所述第二元素相同,所述SL的第一值为所述SL的第二值;或如果根据所述第一节点的标识确定所述第二节点的标识为压缩段标识,并且根据CL的值确定所述第二节点的标识位于第三元素最后一个标识的位置,所述第三元素包括所述第二节点的标识,将所述SL的第二值减1得到所述SL的第一值。

8.根据权利要求7所述的方法,其特征在于,第二标记用于指示所述第二节点的标记为压缩段标识,所述根据所述第一节点的标识确定所述第二节点的标识为压缩段标识,包括:根据所述第一报文的目的地址获得所述第一节点的标识;

如果所述第一节点的标识中包括所述第二标记,确定所述第二节点的标识为压缩段标识。

9.根据权利要求4所述的方法,其特征在于,所述段列表中的一个或多个元素和所述一个或多个TLV是一一对应的关系,对应根据所述SL的第一值获取第一TLV,包括:根据所述SL的第一值确定所述第一元素在所述段列表中对应的序号;

根据所述第一元素在所述段列表中对应的序号,在所述一个或多个TLV中获取所述第一TLV。

10.根据权利要求3所述的方法,其特征在于,所述根据所述SL的第一值和所述第一TLV的指示信息获取所述第三节点段标识,包括:根据所述SL的第一值和所述第一TLV的第一指示信息获取所述第三节点段标识,其中,所述第一TLV的指示信息包括第一指示信息,所述第一指示信息用于指示所述第三节点的段标识的前缀的长度。

11.根据权利要求10所述的方法,其特征在于,所述根据所述SL的第一值和所述第一TLV的第一指示信息获取所述第三节点段标识,包括:如果所述第一TLV的第一指示信息为第一预设值,确定所述第三节点的段标识为非压缩段标识;

根据所述SL的第一值确定所述第三节点的段标识。

12.根据权利要求10所述的方法,其特征在于,所述根据所述SL的第一值和所述第一TLV的第一指示信息获取所述第三节点段标识,包括:如果所述第一TLV的第一指示信息为第二预设值,确定所述第三节点的段标识为压缩段标识;

根据所述SL的第一值确定所述第一元素在所述段列表中的位置;

根据所述CL的值确定所述第三节点的标识所在的所述第一元素中的位置;

获取所述第三节点的标识;

根据所述第三节点的标识,所述第一TLV的第一指示信息和所述第一TLV的第二指示信息获取所述第三节点的段标识,其中,所述第二指示信息用于指示所述第三节点的段标识的前缀的位置。

13.根据权利要求1至12中任一项所述的方法,其特征在于,所述段列表位于所述第一报文的SRv6路由头SRH中,所述第一TLV位于所述第一报文的SRH中。

14.根据权利要求1至13中任一项所述的方法,其特征在于,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素的长度为128bits比特。

15.一种数据传输方法,其特征在于,所述方法包括:

获取第一报文的段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中多个节点中的一个节点或所述转发路径中的一个链路;

发送所述第一报文,所述第一报文包括一个或多个TLV,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息。

16.根据权利要求15所述的方法,其特征在于,所述发送所述第一报文之前,包括:根据所述段列表,生成一个或多个类型‑长度‑值TLV。

17.根据权利要求16所述的方法,所述根据所述段列表,生成一个或多个类型‑长度‑值TLV,包括:获取所述段列表中的第四元素,所述第四元素是所述一个或多个元素中的任意一个;

根据所述第四元素中包括的一个或多个标识,生成第二TLV,所述第二TLV是所述一个或多个TLV中的一个。

18.根据权利要求17所述的方法,其特征在于,所述第二TLV的指示信息包括第一指示信息,所述第一指示信息用于指示所述第四元素包括的标识的前缀的长度;

所述根据所述第四元素中包括的标识信息,生成第二TLV,包括:根据所述第四元素中包括的标识的前缀的长度,生成所述第二TLV的第一指示信息。

19.根据权利要求18所述的方法,其特征在于,所述根据所述第四元素中包括的标识的长度,生成第二TLV的第一指示信息,包括:在所述第四元素中包括的标识为非压缩段标识时,所述第二TLV的第一指示信息为所述第一预设值;或者,在所述第四元素中包括的标识为压缩段标识时,且所述第四元素中包括的标识的前缀的长度为第二预设值时,所述第二TLV的第一指示信息为所第二预设值。

20.根据权利要求17‑19任一项所述的方法,其特征在于,所述第二TLV的指示信息包括第二指示信息,所述第二指示信息用于指示所述第三节点的段标识对应的前缀的位置;

所述根据所述第四元素中包括的标识信息,生成第二TLV,包括:根据所述第四元素中包括的标识对应的SID的前缀的位置,生成第二TLV的第二指示信息。

21.根据权利要求20所述的方法,其特征在于,所述根据所述第四元素中包括的标识对应的前缀的位置,生成第二TLV的第二指示信息,包括:在所述第四元素中包括的标识对应的前缀在所述第一报文的段列表中,所述第二指示信息为第三预设值;

在所述第四元素中包括的标识对应的前缀在所述第一报文的目的地址中,所述第二指示信息为第四预设值。

22.根据权利要求15至21任一项所述的方法,其特征在于,所述第二TLV还包括第三指示信息,所述第三指示信息用于指示所述第四元素在所述段列表中的位置;

根据所述第四元素在所述段列表中的位置,生成所述第三指示信息。

23.根据权利要求15‑22中任一项所述的方法,其特征在于,所述一个或多个TLV与所述一个或多个元素呈一一对应关系。

24.根据权利要求15‑23中任一项所述的方法,其特征在于,所述段列表位于所述第一报文的SRv6段扩展路由头SRH中,所述第二TLV位于所述第一报文的SRH中。

25.根据权利要求15至24中任一项所述的方法,其特征在于,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素的长度为128bits比特。

26.一种网络设备,其特征在于,包括执行如权利要求1至14任一项所述的方法的单元。

27.一种网络设备,其特征在于,包括执行如权利要求15至25任一项所述的方法的单元。

28.一种网络设备,其特征在于,包括处理器、收发器以及存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,所述收发器用于在所述处理器的控制下与其他设备进行通信;其中,所述处理器执行所述指令时执行如上权利要求1至14任一项所述的方法。

29.一种网络设备,其特征在于,包括处理器、收发器以及存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,所述收发器用于在所述处理器的控制下与其他设备进行通信;其中,所述处理器执行所述指令时执行如上权利要求15至25任一项所述的方法。

30.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求1至14中任一项所述的方法。

31.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求15至25中任一项所述的方法。

说明书 :

一种数据传输方法、相关设备及计算机存储介质

技术领域

[0001] 本申请涉及计算机技术领域,尤其涉及一种数据传输方法、相关设备及计算机存储介质。

背景技术

[0002] 基于转发平面的段路由(segment routing for IPv6,SRv6)是基于源路由理念而设计的在网络上转发IPv6报文的一种协议。SRv6在报文转发路径的源节点为报文添加一个IPv6的段路由报头(segment routing header,SRH),该SRH包含用于标识转发路径的段列表(segment list)。该段列表包含报文转发路径上的网络节点的IPv6地址。通用SRv6(generalized SRv6,G‑SRv6)是一种为了节省报文开销而提出的新的SRv6技术。在G‑SRv6中,G‑SRv6在数据封装上不改变原生段列表的格式和语义,支持将128比特的普通段标识和32/16比特的压缩段标识混合编程在段列表中。
[0003] 但是在G‑SRv6报文转发方案中,转发路径上的中间节点在检测到下一跳(segment routing,SR)节点的路径故障时,该中间节点无法根据段列表完成报文转发。因此,在转发路径上的中间节点在检测到下一跳SR节点的路径出现故障时,如何实现报文的转发是一个亟待解决的技术问题。

发明内容

[0004] 本申请公开了一种数据传输方法、相关设备及计算机存储介质,在报文转发路径上的中间节点在检测到下一跳节点的路径故障时,能够按照段列表进行转发报文,完成数据传输。
[0005] 第一方面,本申请实施例公开提供了数据传输方法,该方法包括:第一节点接收第一报文,所述第一报文包括段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中的一个节点或所述转发路径中的一个链路;
[0006] 当确定所述第一节点到第二节点的路径故障时,所述第一节点根据所述第一报文中的一个或多个类型‑长度‑值TLV获得第三节点的段标识,所述第二节点是所述转发路径中所述第一节点的下一跳分段路由SR节点,所述第三节点是所述转发路径中在所述第二节点之后的节点中的任意一个节点,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息;
[0007] 所述第一节点根据所述第一报文获得第二报文;
[0008] 所述第一节点发送所述第二报文,所述第二报文的目的地址包括所述第三节点的段标识。
[0009] 本申请实施例中,通过在源节点处生成TLV字段并封装在第一报文的SRH头,在转发路径上的中间转发节点检测到转发路径上下一跳SR节点出现故障或者到下一跳SR节点的路径故障时,该TLV字段能够用于指示该中间转发节点获取第一报文转发路径上的下一跳SR节点以后的多个节点中的任意一个节点的段标识,将获取的段标识更新在报文的目的地址,按照该段标识的指令进行转发,从而绕过故障节或者故障路径,完成数据传输。
[0010] 在一可能的实施例中,所述第一节点根据所述第一报文中的第一类型‑长度‑值TLV,获得所述第三节点的段标识,包括:根据所述一个或多个类型‑长度‑值TLV和段剩余SL的第一值获得所述第三节点段标识,所述SL的第一值指示第一元素在所述段列表中的位置,所述第一元素包括所述第三节点的标识。
[0011] 在一可能的实施例中,上述根据所述一个或多个类型‑长度‑值TLV和段剩余SL的第一值获得所述第三节点段标识,包括:根据所述SL的第一值获取第一TLV,所述第一TLV是所述一个或多个TLV中的一个TLV;根据所述SL的第一值和所述第一TLV的指示信息获取所述第三节点段标识。
[0012] 在一可能的实施例中,上述根据所述SL的第一值获取第一TLV,包括:获取所述SL的第二值,所述SL的第二值是指所述第一节点接收到所述第一报文时SL的值,所述SL的第二值用于指示第二元素在所述段列表中的位置,所述第二元素包括所述第一节点的标识;根据所述SL的第二值确定所述SL的第一值;根据所述SL的第一值获取第一TLV。
[0013] 在一可能的实施例中,上述根据所述SL的第二值确定所述SL的第一值,包括:如果根据所述第一节点的标识确定所述第二节点的标识为非压缩段标识,将所述SL的第二值减2得到所述SL的第一值。
[0014] 在一可能的实施例中,上第一标记用于指示所述第二节点的标记为压缩段标识,[0015] 所述根据所述第一节点的标识确定所述第二节点的标识为非压缩段标识,包括:根据所述第一报文的目的地址获得所述第一节点的标识;
[0016] 如果所述第一节点的标识中不包括所述第一标记,确定所述第二节点的标识为非压缩段标识。
[0017] 在一可能的实施例中,上述根据所述SL的第二值确定所述SL的第一值,包括:如果根据所述第一节点的标识确定所述第二节点的标识为压缩段标识,并且根据压缩段标识剩余CL的值确定所述第一元素和所述第二元素相同,所述SL的第一值为所述SL的第二值;或[0018] 如果根据所述第一节点的标识确定所述第二节点的标识为压缩段标识,并且根据CL的值确定所述第二节点的标识位于第三元素最后一个标识的位置,所述第三元素包括所述第二节点的标识,将所述SL的第二值减1得到所述SL的第一值。
[0019] 在一可能的实施例中,上述第二标记用于指示所述第二节点的标记为压缩段标识,所述根据所述第一节点的标识确定所述第二节点的标识为压缩段标识,包括:根据所述第一报文的目的地址获得所述第一节点的标识;如果所述第一节点的标识中包括所述第二标记,确定所述第二节点的标识为压缩段标识。
[0020] 在一可能的实施例中,上述段列表中的一个或多个元素和所述一个或多个TLV是一一对应的关系,对应根据所述SL的第一值获取第一TLV,包括:根据所述SL的第一值确定所述第一元素在所述段列表中对应的序号;根据所述第一元素在所述段列表中对应的序号,在所述一个或多个TLV中获取所述第一TLV。
[0021] 在一可能的实施例中,上述根据所述SL的第一值和所述第一TLV的指示信息获取所述第三节点段标识,包括:根据所述SL的第一值和所述第一TLV的第一指示信息获取所述第三节点段标识,其中,所述第一TLV的指示信息包括第一指示信息,所述第一指示信息用于指示所述第三节点的段标识的前缀的长度。
[0022] 在一可能的实施例中,上述根据所述SL的第一值和所述第一TLV的第一指示信息获取所述第三节点段标识,包括:如果所述第一TLV的第一指示信息为第一预设值,确定所述第三节点的段标识为非压缩段标识;根据所述SL的第一值确定所述第三节点的段标识。
[0023] 在一可能的实施例中,上述根据所述SL的第一值和所述第一TLV的第一指示信息获取所述第三节点段标识,包括:如果所述第一TLV的第一指示信息为第二预设值,确定所述第三节点的段标识为压缩段标识;
[0024] 根据所述SL的第一值确定所述第一元素在所述段列表中的位置;根据所述CL的值确定所述第三节点的标识所在的所述第一元素中的位置;
[0025] 获取所述第三节点的标识;根据所述第三节点的标识,所述第一TLV的第一指示信息和所述第一TLV的第二指示信息获取所述第三节点的段标识,其中,所述第二指示信息用于指示所述第三节点的段标识的前缀的位置。
[0026] 在一可能的实施例中,所述段列表位于所述第一报文的段扩展路由头SRH中,所述第一TLV位于所述第一报文的SRH中。
[0027] 在一可能的实施例中,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素的长度为128bits比特。
[0028] 第二方面,本申请实施例提供一种数据传送方法,包括:
[0029] 获取第一报文的段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中多个节点中的一个节点或所述转发路径中的一个链路;
[0030] 发送所述第一报文,所述第一报文包括一个或多个TLV,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息。
[0031] 在一可能的实施例中,所述发送所述第一报文之前,包括:根据所述段列表,生成一个或多个类型‑长度‑值TLV。
[0032] 在一可能的实施例中,上述根据所述段列表,生成一个或多个类型‑长度‑值TLV,包括:
[0033] 获取所述段列表中的第四元素,所述第四元素是所述一个或多个元素中的任意一个;
[0034] 根据所述第四元素中包括的一个或多个标识,生成第二TLV,所述第二TLV是所述一个或多个TLV中的一个。
[0035] 在一可能的实施例中,所述第二TLV的指示信息包括第一指示信息,所述第一指示信息用于指示所述第四元素包括的标识的前缀的长度;
[0036] 所述根据所述第四元素中包括的标识信息,生成第二TLV,包括:根据所述第四元素中包括的标识的前缀的长度,生成所述第二TLV的第一指示信息。
[0037] 在一可能的实施例中,所述根据所述第四元素中包括的标识的长度,生成第二TLV的第一指示信息,包括:在所述第四元素中包括的标识为非压缩段标识时,所述第二TLV的第一指示信息为所述第一预设值;或者,在所述第四元素中包括的标识为压缩段标识时,且所述第四元素中包括的标识的前缀的长度为第二预设值时,所述第二TLV的第一指示信息为所第二预设值。
[0038] 在一可能的实施例中,所述第二TLV的指示信息包括第二指示信息,所述第二指示信息用于指示所述第三节点的段标识对应的前缀的位置;
[0039] 在一可能的实施例中,所述根据所述第四元素中包括的标识信息,生成第二TLV,包括:
[0040] 根据所述第四元素中包括的标识对应的SID的前缀的位置,生成第二TLV的第二指示信息。
[0041] 所述根据所述第四元素中包括的标识对应的前缀的位置,生成第二TLV的第二指示信息,包括:在所述第四元素中包括的标识对应的前缀在所述第一报文的段列表中,所述第二指示信息为第三预设值;
[0042] 在所述第四元素中包括的标识对应的前缀在所述第一报文的目的地址中,所述第二指示信息为第四预设值。
[0043] 在一可能的实施例中,所述第二TLV还包括第三指示信息,所述第三指示信息用于指示所述第四元素在所述段列表中的位置;根据所述第四元素在所述段列表中的位置,生成所述第三指示信息。
[0044] 在一可能的实施例中,所述一个或多个TLV与所述一个或多个元素呈一一对应关系。
[0045] 在一可能的实施例中,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素的长度为128bits比特。
[0046] 在一可能的实施例中,所述段列表位于所述第一报文的SRv6段扩展路由头SRH中,所述第一TLV位于所述第一报文的SRH中。
[0047] 第三方面,本申请实施例提供一种网络设备,包括执行如第一方面所述的方法的单元。
[0048] 第四方面,本申请实施例还提供一种网络设备,包括执行如第二方面所述的方法的单元。
[0049] 第五方面,本申请实施例提供一种网络设备,包括处理器、收发器以及存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,所述收发器用于在所述处理器的控制下与其他设备进行通信;其中,所述处理器执行所述指令时执行如第一方面所述的方法。
[0050] 第六方面,本申请实施例还提供一种网络设备,包括处理器、收发器以及存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,所述收发器用于在所述处理器的控制下与其他设备进行通信;其中,所述处理器执行所述指令时执行如第二方面所述的方法。
[0051] 第七方面,本申请实施例提供一种网络系统,包括第一网络设备和第二网络设备,所述第一网络设备包括第三方面所述的网络设备,所述第二网络设备包第四方面所述的网络设备。
[0052] 第八方面,本申请实施例提供一种计算机存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如第一方面所述的方法。
[0053] 第九方面,本申请实施例还提供一种计算机存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如第二方面所述的方法。
[0054] 本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。

附图说明

[0055] 为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0056] 图1为本申请实施例提供的一种报文格式的示意图;
[0057] 图2为本申请实施例提供的另一种报文格式的示意图;
[0058] 图3为本申请实施例提供的一种报文转发过程示意图;
[0059] 图4为本申请实施例提供的一种报文传输的方法流程图;
[0060] 图5为本申请实施例提供的一种G‑SRv6网络的示意图;
[0061] 图6a‑图6b为本申请实施例提供的另一种G‑SRv6网络的示意图;
[0062] 图7为本申请实施例提供的一种报文传输的方法流程图;
[0063] 图8a‑图8b为本申请实施例提供的另一种G‑SRv6网络的示意图;
[0064] 图9a‑图9b为本申请实施例提供的另一种G‑SRv6网络的示意图;
[0065] 图10a‑图10b为本申请实施例提供的另一种G‑SRv6网络的示意图;
[0066] 图11a‑图11b为本申请实施例提供的另一种G‑SRv6网络的示意图;
[0067] 图12为本申请实施例提供的一种网络设备的结构示意图;
[0068] 图13为本申请实施例提供的一种网络设备的结构示意图;
[0069] 图14为本申请实施例提供的一种网络设备的结构示意图;
[0070] 图15为本申请实施例提供的一种网络设备的结构示意图;
[0071] 图16为本申请实施例提供的一种网络系统的可能的示意图。

具体实施方式

[0072] 下面结合附图对本申请所提供的数据传输方法进行详细的阐述。
[0073] 基于IPv6转发平面的段路由(segment routing for IPv6,SRv6)是基于源路由理念而设计的在网络上转发IPv6报文的一种协议。SRv6流量工程(traffic engineering,TE)是SRv6技术的一种实现方式(模式),在SRv6 TE场景中,需要严格约束数据报文在网络中的转发路径。SRv6在报文转发路径的源节点为报文添加一个IPv6的段路由报头(segment routing header,SRH),该SRH包含用于标识转发路径的段列表(segment list)。该段列表包含报文转发路径上的节点的IPv6地址。在SRv6技术中段列表中的节点的IPv6地址也可以称为节点的段标识(segment identifier,SID)。段列表中段标识对应的节点称为Endpoint节点,Endpoint节点为报文转发路径中接收SRv6报文并处理SRv6报文的节点。Endpoint节点也称为分段路由(segment routing,SR)节点。应理解,本申请实施例后续的描述中,段列表中段标识对应的节点均为SR节点。
[0074] 如图1所示,图1示出了一种SRv6网络中报文格式的示意图,在图1中,该报文的报文头包括IPv6报文头和SRH。IPv6报文头包括目的地址(destination address,DA)字段,用于指示节点根据DA字段中的段标识进行转发。SRH包括下一个报头(next header)、报头扩展长度(hdr ext len)、路由类型(routing type)、段剩余(segments left,SL)、段列表以及选项字段(options)等。其中,段列表包括依次排列的多个SID,即报文在传输过程中需要经过的每一个节点的IPv6地址,选项字段包含一个或者多个类型‑长度‑值(type‑length‑value,TLV)字段。SL也称为SL指针,用于指示剩余待处理的SID的数量,也可以理解为指向的当前待处理的SID在段列表中的位置。例如,SL指针的值为3,则表示剩余待处理的SID的数量为4个,也可以理解为SL指针指向当前待处理的SID,SL指针的值为0,则表示剩余待处理的段的数量为1个,也可以理解为SL指针指向当前待处理的SID。
[0075] SRv6网络在报文转发过程中,通过每个节点更新目的地址来完成逐跳转发。即节点根据SL指针的值确定当前待处理的SID以后,获取到段列表中的当前待处理的SID,将该SID复制至IPv6报文头中的DA字段,根据DA字段中的内容转发报文。
[0076] 在SRv6中,SID包含两个部分:位置(locator)和功能(function)。其中locator被用于将报文路由到SID对应的节点;function用于指示SID对应的节点执行相应的功能。Function还可以分出一个可选的参数段(Arguments),此时SRv6 SID的格式变为Locator、Function和Arguments,Arguments占据IPv6地址的低比特位,通过Arguments字段可以定义一些报文的流和服务等信息。举例来说,当节点接收到报文,判断报文的目的地址为节点的IPv6地址,也就是节点的段标识,则网络中的节点根据该段标识中的function执行相应的功能。位置字段包括前缀(prefix)部分和序号(node ID)部分。在一个SRv6网络域(domain)内,每个节点的SID都是从一个地址空间中分配,因此每个节点的位置字段的前缀部分是相同的;每个节点的SID的序号部分是不同的,每个序号部分用于唯一确定该域内的一个节点。因此,在一个SRv6网络域的多个节点的SID可以共用一个前缀,将序号部分和功能字段,作为压缩段标识(compressed SID,C‑SID),即C‑SID。C‑SID加上前缀可以组成一个完整的SID,即节点的IPv6地址。
[0077] 为了节省SRH开销,提出新的SRv6头压缩技术通用SRv6(Generalized SRv6,G‑SRv6),该方案可以兼容标准SRv6,在数据封装上不改变原生SRH的格式和语义,但支持将128比特SRv6 SID和32比特C‑SID混合编程在SRH中。将这种支持128比特SRv6 SID和32/16比特C‑SID混合编排SID的SRH称为通用分段路由扩展头(generalized SRH,G‑SRH)。
[0078] 如图2所示,图2示出了一种G‑SRv6报文的示意图。该G‑SRv6报文包括IPv6报文头和G‑SRH,在G‑SRH中,段列表包括多个元素,即元素G‑SID[0]‑G‑SID[n],每个元素的长度为128比特,每个元素中包括标识。其中,当一个元素中包括的标识为128比特的SID时,该元素为一个完整的SID,当一个元素中包括的标识为压缩的SID时,该元素中可包括多个C‑SID。
如图2所示,元素G‑SID[0]中包含的标识的长度为128比特,元素G‑SID[0]中只包含一个完整的SID,元素G‑SID[2]中包含的标识的长度为32比特,元素G‑SID[2]中包含4个C‑SID,分别是C‑SID1、C‑SID2、C‑SID3、C‑SID4。因为G‑SRH中段列表插入C‑SID,因此需要更新段列表的访问逻辑。IPv6报文头还包括压缩段标识剩余(C‑SID Left,CL)指针,与SRH中的SL指针构成二维指针,共同指示当前待处理的标识在段列表中的位置。具体地,SL指针用于指示当前待处理标识所在的元素在段列表中的位置,CL指针用于指示待处理的标识在该元素中的位置。如图2所示,如果当前待处理的标识为C‑SID1,C‑SID1在段列表中的第一个元素的第一个C‑SID中。段列表中包括3个元素,即元素G‑SID[0]‑G‑SID[2],SL指针的包括3个值,例如0、1、2。如果SL指针的初始值为2,指示元素G‑SID[2]在段列表中的第一个元素中。元素G‑SID[2]包括4个C‑SID,C‑SID1、C‑SID2、C‑SID3、C‑SID4,CL指针的值包括四个值,例如0、1、
2、3。如果CL指针的初始值为3,指示C‑SID1在元素G‑SID[2]中的第一个C‑SID。则在每次更新时,将CL指针的值减1,即CL指针的值依次更新为2、1和0,依次用于指示元素G‑SID[2]中C‑SID2、C‑SID3和C‑SID4。则可以根据SL指针的值为2和CL指针的值为3,得到C‑SID1在段列表中的第一个元素G‑SID[2]中的第一个C‑SID。同时为了加入对完整SID和C‑SID边界识别方法,需要增加COC(continual of compression)Flavor标识,携带该COC Flavor标识的SID,指示该SID之后的SID是压缩的32比特的C‑SID。例如,如图2中,元素G‑SID[2]中的C‑SID1携带COC标识,则元素G‑SID[2]中的C‑SID1之后的一个标识为C‑SID,即为C‑SID2。
[0079] 因为G‑SRH中段列表可以插入C‑SID,所述需要更新段列表的访问复制逻辑和DA的替换逻辑。因此,SRv6报文在转发过程中,转发节点根据SL和CL指针确定当前要处理的SID以后,将SID复制至IPv6报文头中的DA字段,根据DA字段转发报文。例如,当前要处理的SID为C‑SID,将当前处理的C‑SID复制至DA字段中。DA字段中的前缀部分和当前待处理的C‑SID构成当前待处理的完整SID,从而,节点仍然可以根据DA字段的内容转发报文。例如,图3示例性示出了SRv6报文转发过程,以报文在一个SRv6网络域中转发为例,图3中,包括节点A至节点F。节点A‑节点F的地址分别为A:1:1::、A:2:1::、A:3:1::、A:4:1::、A:5:1::、A:6:1::,节点A‑节点F对应的段标识SID的前缀为A:。节点A将前缀A:添加到报文1的DA字段中,将段列表中第一个C‑SID 2:1复制至DA字段中,DA字段中的前缀A:与2:1构成完整的SID为A:2:1,从而节点A按照DA字段中A:2:1查询转发表项,根据查询结果转发报文1给节点B。节点B接收节点A发送的报文1,B获取上述报文1,根据上述报文1的SRH获取上述报文1的下一跳节点的SID,即节点C的SID。报文1中SL指针的值为1,指示元素G‑SID[1]在段列表中的位置,CL指针的初始值为3,指示第一个C‑SID在元素G‑SID[1]中的位置,通过SL指针和CL指针可以得到节点B对应的标识在段列表中的具体位置。节点B更新CL指针的值,将其更新为2,指示第二个C‑SID在元素G‑SID[1]中的位置,节点B根据SL指针和CL指针的指示,定位到第一个元素的第二个C‑SID,即3:1,获得第一个元素中第二个C‑SID为3:1,基于报文1将3:1复制到报文的DA中,代替DA字段中原有的2:1。此时,DA字段中包括前缀部分A:和C‑SID部分3:1的组合,即A:3:1,也就是节点C的SID。节点B根据DA字段中的节点C的SID查询转发表项,根据查询结果向节点C发送所述报文2。当节点E接收节点D转发的报文3,节点E获取SL指针的值为
1,CL指针的值为0,说明当前DA字段中的C‑SID为元素G‑SID[1]中的最后一个C‑SID,节点E需要更新SL指针,执行SL‑‑,将SL指针的值更新为0,指示G‑SID[0]在段列表中的位置。根据SL指针的值为0,定位到第二个元素G‑SID[0],G‑SID[0]包含的段标识A:6:1::为非压缩段标识,节点E将A:6:1::复制至DA字段,节点E根据A:6:1::进行转发。上述报文转发过程中,转发路径上接收到报文的节点能够获取到下一跳SR节点的段标识,但是在检测到下一跳SR节点出现故障或者与下一跳SR节点之间的链路出现故障时,无法获取转发路径上故障节点之后的多个节点中的一个节点的段标识。因此,在转发路径上中间转发节点检测到下一跳SR节点故障或者与下一跳SR节点之间的链路出现故障时,无法根据段列表进行转发。
[0080] 例如,图3中当在节点D到节点E的路径故障时,即节点E故障或节点D到节点E之间的链路故障,导致节点D无法根据转发路径通过节点E进行数据报文转发,那么节点D需要由转发路径上的节点E的下一跳节点,即节点F。节点D将数据报文直接发送到节点F,使得数据报文还可以按照原转发路径上的节点E后的转发路径继续转发上述数据报文。例如,节点D检测到节点E路径发生故障后,节点D需要获取到节点E的下一跳节点F的SID。但是节点D因为无法准确根据G‑SRH中的段列表获取到节点F的SID,进而无法对数据报文进行转发或数据报文保护。
[0081] 本申请提出一种数据传输方法,应用于包括源节点和转发路径上的中间转发节点的G‑SRv6网络。如图4所示,图4示出了本申请提供的一种数据传输方法,该数据传输方法通过在源节点处生成TLV字段并封装在第一报文的SRH头,在转发路径上的中间转发节点检测到转发路径上下一跳SR节点出现路径故障时,该TLV字段能够用于指示该中间转发节点获取第一报文转发路径上的下一跳SR节点以后的多个节点中的任意一个节点的SID,将获取的SID更新在报文的目的地址,按照该SID的指令进行转发,从而绕过故障节点或故障路径,完成数据传输。
[0082] 本申请实施例中,该数据传输方法包括可分为两个阶段,第一阶段,主要包括源节点生成TLV字段,将该TLV字段封装到第一报文的SRH的过程;第二阶段,主要包括转发路径上的中间转发节点按照TLV字段获得转发路径上下一跳SR节点以后的多个节点中的任意一个节点的SID,根据该SID进行转发报文。
[0083] (一)第一阶段包括如下S101至S104,
[0084] S101:源节点获得包括段列表的第一报文。
[0085] 其中,段列表对应于第一报文的转发路径,段列表中包括一个或多个元素,一个或多个元素中的每个元素包括一个或多个标识,一个或多个标识中的每个标识分别对应于所述转发路径中一个节点或者转发路径中的一个链路。例如,图5中报文的SRH中的段列表包含了5个元素,这里的元素对应G‑SID,可见每个G‑SID包括一个或多个标识,标识包括SID或C‑SID。例如,元素G‑SID[4]包括了3个C‑SID,这3个C‑SID对应了转发路径中节点N2、N3和N4,N2、N3和N4属于一个网络域1,网络域1中的节点对SID进行压缩处理,并使用了同样的压缩前缀A:。元素G‑SID[3]包括1个SID,对应了转发路径中网络域2中的节点N5,节点N5为不支持SRv6头压缩的节点。
[0086] 源节点为G‑SRv6网络的源节点,源节点在第一报文的报文头中插入SRH,或者,在第一报文外加上报文头并插入SRH。SRH包括段列表,段列表可以由控制器生成。例如,控制器计算报文的转发路径,生成对应于该转发路径的段列表,段列表包括C‑SID,并且控制器将所述段列表发送至源节点。
[0087] 在一种可选的实施例中,段列表可以由源节点生成。例如,源节点计算报文的转发路径,并生成对应于该转发路径的段列表,段列表包括C‑SID。或者,段列表可以由源节点和控制器共同生成。例如,控制器计算报文的转发路径,生成对应于该转发路径的段列表,段列表包括非压缩段标识而不包括C‑SID,控制器将段列表发送至源节点,源节点根据接收到的段列表生成新的段列表,新的段列表包括C‑SID。
[0088] 转发路径中还包括第一节点、第二节点以及第三节点,第二节点是转发路径中第一节点的下一跳SR节点,第三节点是转发路径中第二节点的下一跳节点。
[0089] 本申请实施例中的节点为网络设备,例如路由器、交换机或者是能够支持G‑SRv6的任意网络设备。
[0090] S102:源节点根据第一报文的段列表,生成TLV字段。
[0091] 其中,TLV字段的个数与段列表中元素的个数一致,且每个元素与TLV字段呈一一对应关系。每个TLV字段包括指示信息,上述指示信息用于指示转发路径中的多个节点中的一个节点或上述转发路径中的一个链路的段标识SID对应的前缀信息。上述TLV字段用于表示对应元素中包含的标识是否为C‑SID,以及为C‑SID时,C‑SID对应的前缀的长度和位置。
[0092] 上述每个元素与TLV字段的一一对应关系可以是顺序对应。例如,当第一报文中包括3个元素G‑SID(0)~G‑SID(2),则生成3个TLV的字段,G‑SID(0)与第一个TLV对应,G‑SID(1)与第二个TLV对应,G‑SID(2)与第三个TLV对应,其中,第一个TLV字段表示元素G‑SID(0)中标识是否为C‑SID,当为C‑SID时,第一个TLV字段还能够指示该C‑SID的前缀的位置和长度。上述每个元素与TLV字段的一一对应关系还可以是逆序对应,例如,当第一报文中包括3个元素G‑SID(0)~G‑SID(2),则生成3个TLV的字段,G‑SID(0)与第三个TLV对应,G‑SID(1)与第二个TLV对应,G‑SID(2)与第一个TLV对应。不限于与上述对应关系,每个元素与TLV字段的一一对应关系还可以是其他,本申请对此不作任何限定。
[0093] 在一些具体的实现方式中,每个TLV字段包括第一指示信息和第二指示信息,第一指示信息用于指示TLV字段对应的元素中包含的段标识是否为C‑SID,如果为C‑SID,则第一指示信息还表示TLV字段对应的元素中的段标识的前缀的长度,第二指示信息用于指示TLV字段对应的元素中包含的标识对应的SID的前缀的位置。
[0094] 例如,源节点生成一个元素对应的TLV字段时,源节点获取段列表中第四元素包含的标识信息,根据第四元素中包含的标识对应的前缀的长度和前缀在第一报文中的位置,生成第二TLV字段的第一指示信息和第二指示信息,其中,第一元素是段列表中一个或多个元素中的任意一个元素,第二TLV字段为一个或多个TLV字段中的任意一个TLV字段。
[0095] 在一些具体的实现方式中,源节点获取段列表中的第一元素,当第一元素中包含的标识为非压缩段标识,第一指示信息为第一预设值。第一预设值还可以为一个固定的数值或一个标识,上述数值或标识对应的是元素中包含的标识是非压缩段标识。例如,第一预设值为128这一固定数值,表示第一元素中包含的标识为128比特的非压缩段标识。当第一元素中包含的标识为C‑SID时,即第一元素中可以包括多个标识,可以使用第四元素中包含的标识对应的前缀的长度值作为第一指示信息的数值,即将前缀的长度作为第二预设值时,那么当第一指示信息为第二预设值,指示第元素中包含的标识为C‑SID,并且C‑SID对应的压缩前的SID前缀的长度为第二预设值,例如,第二预设值为64,表示第一元素中包含的C‑SID对应的SID前缀的长度为64比特。
[0096] 根据第一元素中标识对应的SID的前缀在第一报文中的位置,生成第二指示信息。具体地,当第一元素包含的标识对应的前缀在段列表中,第二指示信息为第三预设值,第三预设值为段列表中第四元素包含的标识的前缀所在的元素的序号。例如,第一元素中包含的段标识对应的前缀在元素G‑SID[3]中,元素G‑SID[3]在段列表中的序号为3,则第二指示信息为3。当第一素包含的标识对应的前缀在第一报文的目的地址中,第二指示信息为第四预设值。例如,第四预设值为15,表示第一元素中包含的标识对应的前缀在第一报文的目的地址中。不限于此,上述预设值还可以是其他的数值或者标识,本申请对此不作任何限定。
上述示例性地介绍根据第一元素生成对应的第二TLV字段的过程,对段列表中包含的依次排列的元素,按照上述过程,可依次生成多个TLV字段,在此不再赘述。
[0097] 在一种可选的实施例中,第二TLV字段还可以包括第三指示信息,第三指示信息用于指示第二TLV字段对应的第一元素在段列表中的位置。第三指示信息用于指示TLV字段与段列表中元素的对应关系。例如,段列表中包括n+1个元素G‑SID[0]‑G‑SID[n],第三指示信息为0时,表示该TLV对应于元素G‑SID[0]。当第三指示信息为n时,表示该TLV对应于元素G‑SID[n]。
[0098] 示例性地,如图5所示,图5示出了一种G‑SRv6网络的示意图,该网络中包含节点N1‑N10个节点,节点N1为G‑SRv6网络的源节点。其中,节点N1‑节点N4位于网络域1,节点N2‑节点N4为支持SRv6头压缩的节点,网络域1中的节点N2‑节点N4的SID进行压缩处理,并使用了同样的压缩前缀A:,节点N5位于网络域2,为不支持SRv6头压缩的节点,节点N6‑节点N10位于网络域3,网络域3中的节点N6‑节点N9为支持SRv6头压缩的节点,网络域3中的节点N6‑节点N9的SID进行压缩处理,并使用了同样的压缩前缀A:。节点N10对应的标识为非压缩段标识。如图5所示,第一报文的段列表中包含5个元素:G‑SID[0]、G‑SID[1]、G‑SID[2]、G‑SID[3]、G‑SID[4]。其中,G‑SID[4]、G‑SID[2]、G‑SID[1]中包含的标识为C‑SID,其对应的前缀为A:。G‑SID[3]和G‑SID[0]中包含的标识为SID,非C‑SID。G‑SID[4]包括的标识分别是2:1、3:1、4:1,G‑SID[3]包含的段标识SID为B:5:1::,G‑SID[2]包含的标识为6:1,G‑SID[1]中包含的标识分别为7:1、8:1、9:F,G‑SID[0]包括段标识SID为A:10:D100::。
[0099] 由图6a可知,段列表包含5个元素G‑SID[0]‑G‑SID[4],生成对应的5个TLV字段:
[0100] 1.元素G‑SID[4]包含的标识为C‑SID,元素G‑SID[4]中的3个C‑SID对应的段标识的前缀A:在第一报文的目的地址中,前缀的长度为64比特,因此,G‑SID[4]对应的TLV字段的第一指示信息为64,表示元素G‑SID[4]包含的标识为C‑SID,C‑SID对应的前缀长度为64,第二指示信息为15,表示上述前缀在第一报文的目的地址中,第三指示信息为4,表示TLV字段对应的元素G‑SID[4]在段列表中的位置,因此元素G‑SID[4]对应的TLV字段为[64,15,4];
[0101] 2.元素G‑SID[3]包含的标识为非压缩段标识,因此,元素G‑SID[3]对应的TLV字段的第一指示信息为128,表示元素G‑SID[3]包含的是非压缩的SID,G‑SID[3]对应的TLV字段的第二指示信息为3,表示段标识的前缀在元素G‑SID[3]中,G‑SID[3]对应的TLV字段的第三指示信息为3,表示TLV字段对应的元素G‑SID[3]在段列表中的位置,即元素G‑SID[3]对应的TLV字段为[128,3,3];
[0102] 3.元素G‑SID[2]包含的标识为C‑SID,C‑SID对应的前缀的长度为64比特,且位于元素G‑SID[2]。因此,元素G‑SID[2]对应的TLV字段的对应的第一指示信息为64,表示元素G‑SID[2]包含的标识为C‑SID,C‑SID对应的前缀长度为64,G‑SID[2]对应的TLV字段的第二指示信息为2,表示C‑SID对应的前缀在元素G‑SID[2]中,G‑SID[2]对应的TLV字段的第三指示信息为2,表示表示TLV字段对应的元素G‑SID[2]在段列表中的位置,即元素G‑SID[2]对应的TLV为[64,2,2];
[0103] 4.元素G‑SID[1]包含的标识为C‑SID,C‑SID对应的前缀的长度为64比特,且位于元素G‑SID[2]。因此,G‑SID[1]对应的TLV字段的对应的第一指示信息为64,表示元素G‑SID[1]包含的标识为C‑SID,C‑SID对应的前缀长度为64,G‑SID[1]对应的TLV字段的第二指示信息为2,表示C‑SID对应的前缀在元素G‑SID[2]中,G‑SID[1]对应的TLV字段的第三指示信息为1,表示表示TLV字段对应的元素G‑SID[1]在段列表中的位置,即元素G‑SID[1]对应的TLV字段为[64,2,1];
[0104] 5.元素G‑SID[0]包含的标识为非压缩段标识。因此,G‑SID[0]对应的TLV字段的对应的第一指示信息为128,表示表示元素G‑SID[0]包含的是非压缩的SID,G‑SID[0]对应的TLV字段的第二指示信息为0,表示段标识的前缀在元素G‑SID[0]中,G‑SID[0]对应的TLV字段的第三指示信息为0,表示TLV字段对应的元素G‑SID[0]在段列表中的位置,即元素G‑SID[0]对应的TLV字段为[128,0,0]。
[0105] 在一种可选的实施例中,由于在一个SRv6网路域的多个节点的C‑SID对应的同一个前缀,因此,在一个SRv6网络域内的节点的C‑SID对应的前缀的长度相同,以及前缀在段列表中的位置相同,从而,在一个SRv6网路域内进行压缩了的节点的标识对应的TLV字段可以共用一个TLV字段。当段列表中多个元素中包括的标识为C‑SID,且多个元素中包括的标识对应的节点位于同一个SRv6网络域,则多个元素对应一个TLV字段。当段列表中元素中包含的标识为SID,则该元素对应一个TLV字段。
[0106] 示例性地,如图5所示的报文中,可以根据段列表中包括的5个元素G‑SID[0]‑G‑SID[4],节点N1‑节点N4属于网络域1。在网络域1中,节点N1为源节点,节点N2‑节点N4为支持SRv6头压缩的节点,节点N2‑节点N4对应的标识为C‑SID。由图5可知,元素G‑SID[4]中包含的3个C‑SID分别对应于节点N2‑节点N4,也就是说,网络域1中包括的节点对应的C‑SID位于元素G‑SID[4]中。而且G‑SID[4]中C‑SID对应的前缀位于目的地址中,前缀的长度为64比特,因此,元素G‑SID[4]对应的TLV字段为[4,64],表示元素G‑SID[4]中包含的标识为C‑SID,C‑SID对应的前缀的长度为64,C‑SID对应的前缀的位置在元素G‑SID[4]中,又由于元素G‑SID[4]为段列表中第一个元素,因此C‑SID对应的前缀的位置在第一报文的目的地址字段中。
[0107] 节点N5位于网络域2,节点N5为不支持SRv6头压缩的节点,节点N5对应的标识为SID,节点N5对应的SID位于元素G‑SID[3],即元素G‑SID[3]中包括的标识为SID。因此,元素G‑SID[3]对应一个TLV字段。元素G‑SID[3]中节点N5的SID的前缀的长度为128比特,则第一指示信息为128,表示元素G‑SID[3]中包含的标识为SID;元素G‑SID[3]中节点N5的SID的前缀位于元素G‑SID[3],元素G‑SID[3]在段列表中的序号为3,则第二指示信息为3,表示元素G‑SID[3]中包括SID的前缀位于元素G‑SID[3]中。
[0108] 节点N6‑节点N9属于网络域3,节点N6‑节点N9为支持SRv6头压缩的节点。节点N6‑节点N9对应的标识为C‑SID。由图5可知,元素G‑SID[2]和元素G‑SID[1]中包含节点N6‑节点N9对应的C‑SID,也就是说,网络域3中包括的节点对应的C‑SID位于元素G‑SID[1]和元素G‑SID[2]中。而且元素G‑SID[1]和元素G‑SID[2]中包含C‑SID对应的前缀的长度为64,则第一指示信息为64,表示网络域3中包含的节点的标识为C‑SID,且C‑SID对应的前缀长度为64;元素G‑SID[1]和元素G‑SID[2]中包含C‑SID对应的前缀位于元素G‑SID[2]中,元素G‑SID[2]在段列表中的序号为2,则第二指示信息为2,表示网络域3中包含的节点的C‑SID对应的前缀位于元素G‑SID[2]中,即元素G‑SID[1]和元素G‑SID[2]中包含C‑SID对应的前缀位于元素G‑SID[2]中。
[0109] 节点N10位于网络域3,节点N10为不支持SRv6头压缩的节点,节点N10对应的标识为SID,节点N10对应的SID位于元素G‑SID[0],即元素G‑SID[0]中包括的标识为SID。因此,元素G‑SID[0]对应一个TLV字段。元素G‑SID[0]中节点N10的SID的前缀的长度为128比特,则第一指示信息为128,表示元素G‑SID[0]中包含的标识为SID;元素G‑SID[0]中节点N10的SID的前缀位于元素G‑SID[0],元素G‑SID[0]在段列表中的序号为0,则第二指示信息为0,表示元素G‑SID[0]中包括SID的前缀位于元素G‑SID[0]中。
[0110] 由上述可知,如图6b所示,元素G‑SID[4]、元素G‑SID[3]网络、元素G‑SID[2]和元素G‑SID[1]、元素G‑SID[0]可对应生成4个TLV字段为[64,4]、[128,3]、[64,2]、[128,0]。这样可以节约报文的空间。
[0111] 其中,TLV字段中包含的指示信息不限于上述列出的三种指示信息,还可以包括其他形式的指示信息,本申请对此不作任何限定。不限于上述列出的TLV字段格式,在具体实现中,TLV字段格式还可以是其他格式,本申请在此不作任何限定。
[0112] S103:源节点将TLV字段封装到第一报文的SRH中。
[0113] S104:源节点发送第一报文。
[0114] 源节点将段列表中源节点的下一跳节点的段标识复制至IPv6报文头的DA字段中,源节点发送封装有IPv6报文头的第一报文。例如,如图5所示,源节点N1将段列表中源节点的下一跳节点的段标识2:1复制至IPv6报文头的DA字段中。
[0115] 实施本申请实施例,通过在源节点生成一个或多个TLV字段,使得在中间转发节点检测到下一跳SR节点的路径故障时,该中间转发节点可以根据TLV字段获得下一跳SR节点以后的多个节点中的任意一个节点的段标识,将获取的段标识更新在报文的目的地址,按照该段标识的指令进行转发,从而绕过故障节或者故障路径,完成数据传输。
[0116] S105:第一节点接收第一报文。
[0117] 其中,第一节点为第一报文转发路径上的中间转发节点,可以接收第一报文,并根据DA字段中的段标识的指令处理第一报文。
[0118] S106:当确定第一节点到第一节点到第二节点的路径故障,第一节点根据第一报文中的一个或多个TLV字段获取第三节点的段标识。
[0119] 首先,第一节点根据第一报文SRH中的第一指针和第二指针确定第三节点标识对应的元素在段列表的位置,然后根据上述位置信息确定元素对应的TLV字段,然后根据该TLV字段中包含的指示信息获得第三节点段标识。其中,第一指针为SL指针,第二指针为CL指针。SL指针的值用于指示节点标识所在的元素在段列表中的位置,CL指针的值用于指示上述标识在该元素中的位置。第三节点是转发路径上第二节点之后的多个节点中的任意一个节点。例如,第三节点是第二节点的下一跳节点,第二节点为第一报文转发路径上第一节点的下一跳节点。
[0120] 下面结合图7介绍上述第一节点获取第三节点段标识具体包括:
[0121] S1061:第一节点确定第三节点的标识对应的SL指针的第一值。
[0122] 其中,SL指针包括一个或多个值,SL指针的值的个数与段列表中包含的元素的个数一致。SL指针的第一值是一个或多个值中的一个,SL指针的第一值指示第一元素在段列表中的位置,第一元素包括第三节点的标识。
[0123] 在一种实施例中,第一节点获取第一报文中SL指针的第二值和第一报文中的CL指针的第二值。其中,SL指针的第二值是指第一节点接收到第一报文时SL指针的值,指示DA字段中的标识(即第一节点的标识)所在的第二元素在段列表中的位置,即上述SL指针的第二值用于指示第二元素在所述段列表中的位置,第二元素包括所述第一节点的标识。CL指针包括多个值,例如CL指针包括4个值,0、1、2、3,与元素中包含的4个C‑SID一致。其中,CL指针的值与SL指针的值有一定的关联性,例如,当SL指针的值更新后,CL指针的值更新为初始值。例如,如图3所示,在报文转发过程中,当节点E接收到报文,CL指针的值为0,需要更新SL指针的值和CL指针的值,将SL指针的值减1,CL指针的值要更新为3。CL指针的第二值是多个值中的一个,CL指针的第二值是指第一节点接收到第一报文时CL指针的值,指示DA字段中的标识(即第一节点的标识)在第二元素中的位置。
[0124] 第一节点接收到第一报文之后,第一节点根据第一节点的标识判断第二节点的标识是否为压缩段标识C‑SID,如果第二节点的标识为非压缩段标识,即如果第二节点的标识为SID,说明第二节点的SID的长度为128比特,一个元素的长度为128比特,所说第二节点的SID位于一个元素全部的比特位。在第二节点的SID占用一个元素的全部比特位时,将SL指针的第二值减2得到SL指针的第一值。
[0125] 第一节点接收到第一报文之后,第一节点根据第一节点的标识判断第二节点的标识是否为压缩段标识C‑SID,如果第二节点的标识为压缩段标识,即第二节点的标识为C‑SID,并且根据CL指针的值确定第一元素和第二元素相同,即第一元素和第二元素为同一个元素,也就是说,根据CL指针的值确定第二节点和第三节点均在第一元素中,SL的第一值为SL的第二值。其中,第一元素为包括第三节点的标识的元素,第二元素为包括第二节点的标识的元素。
[0126] 第一节点接收到第一报文之后,第一节点根据第一节点的标识判断第二节点的标识是否为压缩段标识C‑SID,如果根据第一节点的标识确定第二节点的标识为压缩段标识,并且根据CL的值确定第二节点的标识位于第二元素最后一个标识的位置,将SL的第二值减1得到SL的第一值。
[0127] 在一种可能的实现方式中,如果第二节点的标识为C‑SID,将CL指针的第二值减1得到CL指针的第三值。CL指针的第三值指示第二节点的标识在第二元素中的位置。第一节点判断CL指针的第三值是不是第五预设值。其中,第五预设值可以为一个固定的数值或一个标识,例如,第五预设值为0这一固定值。在CL指针的第三值不是第五预设值的情况下,说明第二节点的C‑SID不是第二元素中最后一个标识,第三节点的标识还在第二节点的C‑SID第二元素中,因此,将第一指针的第二值作为第一指针的第一值;或者,在第二指针的第三值是第五预设值的情况下,说明第二节点的C‑SID是第二元素中最后一个标识,将第一指针的第二值减1,得到第一指针的第一值。
[0128] 本申请实施例中,第五预设值与CL指针的初始值相关联,如图3所示,段列表中的元素G‑SID[1]包括4个C‑SID,CL指针的初始值可以为3,例如报文1中,指示元素G‑SID[1]中第一个C‑SID,即2:1。例如报文3中,CL指针的值为0时,指示元素G‑SID[1]中最后一个C‑SID,即5:1,则第五预设值为0。如果CL指针的初始值为4,指示元素G‑SID[1]中第一个C‑SID,即2:1,CL指针的值为1时,指示元素G‑SID[1]中最后一个C‑SID,即5:1,则第五预设值为1。
[0129] 在一些可选的实施例中,上述第一节点判断第二节点的标识是否是C‑SID,具体包括:第一节点根据第一报文的DA字段获得第一节点的标识,可通过第一节点判断第一节点的标识是否携带第一标记。其中,第一标记用于指示第二节点的标记为压缩段标识。如果第一节点的标识未携带第一标记,说明第二节点的标识为非压缩段标识。如果第一节点的标识携带第一标记,说明第二节点标识为C‑SID。其中,第一标记为COC Flavor标记。如果DA字段中的标识携带COC Flavor标记,说明段列表中该标识的下一个标识为C‑SID。
[0130] 在一些可选的实施例中,上述第一节点判断第二节点的标识是否是C‑SID,还可以包括:第一节点根据第一报文的DA字段获得第一节点的标识,可通过第一节点判断第一节点的标识中包括的标记。其中,第一节点的标识中包括的标记包括第二标记和第三标记,第二标记用于指示第二节点的标记为压缩段标识,第三标记用于指示第二节点的标识为非压缩段标识。如果第一节点的标识中包括第二标记,确定第二节点的标识为压缩段标识。如果第一节点的标识中包括第三标记,确定第二节点的标识为非压缩段标识。
[0131] S1062:第一节点根据第三节点对应的SL指针的第一值,确定第一TLV字段。
[0132] 根据S102中对根据段列表中的元素生成TLV的方法的描述,段列表中包括依次排列的一个或多个元素,SRH中包括依次排列TLV字段,段列表中的一个或多个元素与一个或多个TLV字段呈一一对应关系。例如,段列表中包含3个元素G‑SID[0]‑G‑SID[2],则有元素G‑SID[0]对应的第一个TLV字段、元素G‑SID[1]对应第二个TLV字段以及元素G‑SID[2]对应第三个TLV字段。而SL指针的值用于指示标识所在的元素在段列表中的位置,例如,当SL指针的值为2,指示标识所在的元素G‑SID[2]。因此,第一节点获取第三节点对应的SL指针的第一值,SL指针的第一值用于指示第三节点的标识所在的第一元素在段列表中的位置,第一节点根据SL指针的第一值,可以确定第三节点的标识所在的第一元素在段列表中对应的序号,进而可以根据第一元素在段列表中对应的序号,从一个或多个TLV字段中获取第一TLV字段。示例性地,当SL指针的第一值为2,指示标识所在的元素G‑SID[2]在段列表中对应的序号为3,根据元素G‑SID[2]在段列表中对应的序号为3,从多个TLV字段中获取第3个TLV字段,则可以确定第三节点的标识对应第3个TLV字段,即第一TLV字段为多个TLV字段中的第3个TLV字段。
[0133] 在一种可选的实施例中,当TLV字段中还包含第三指示信息,第三指示信息用于指示TLV对应的标识对应的元素在段列表中的位置或次序标识。第一节点可以根据SL指针的第一值和第三指示信息确定第一TLV字段。例如,当SL指针的第一值为2时,确定第三指示信息为2的TLV字段为第一TLV字段。
[0134] 在一些可选的实施例中,第一节点获取第三节点对应的SL指针的第一值后,第一节点根据SL指针的第一值以及一个或多个TLV字段中的每个字段的第二指示信息确定第一TLV字段。具体地,当一个或多个TLV字段中的一个TLV字段的第二指示信息与SL指针的第一值相同,则该TLV字段为第一TLV字段。当一个或多个TLV字段中的每个TLV字段的第二指示信息都不与SL指针的第一值相同,则取大于SL指针的第一值的所有第二指示信息中的最小一个第二指示信息对应的TLV字段为第一TLV字段。例如,第一报文包括三个TLV字段[64,3]、[80,2]、[128,0]。当第三节点对应的SL指针的第一值为3,与TLV字段[64,3]中的第二指示信息相同,因此TLV字段[64,3]为第一TLV字段。当第三节点对应的SL指针的第一值为1,三个TLV字段中的第二指示信息为3、2、0,与SL指针的第一值都不相同。因此,取三个TLV字段中的第二指示信息大于1的TLV字段中的第二指示信息最小的TLV字段,三个第二指示信息中大于1的有3和2,3和2中最小的值为2,即第二指示信息为2的TLV字段为第一TLV字段,也就是第一TLV字段为[80,2]。
[0135] S1063:根据第一TLV字段,获取第三节点的段标识。
[0136] 其中,第一TLV字段包括第一指示信息和第二指示信息,第一指示信息用于指示第三节点的标识对应的SID的前缀的长度,第二指示信息用于指示第三节点的标识对应的SID的前缀在第一报文中的位置。
[0137] 具体地,第一节点获取所述第一TLV的第一指示信息,如果所述第一TLV的第一指示信息为第一预设值,例如,第一预设值为128,则确定所述第二节点的标识对应的前缀的长度为128,这种情况下,表示第二节点的标识为非压缩段标识,也就是说第三节点的标识长度为128比特。第一节点可根据SL指针的第一值,确定第三节点标识所在的第一元素在段列表中的位置,将第一元素作为第三节点的段标识。
[0138] 在一种可能的实施例中,如果第一TLV的第一指示信息为第二预设值,例如,第二预设值为小于128的值,确定第三节点的标识为C‑SID。第一节点根据所述SL指针的第一值和CL指针的第一值,获取第三节点的C‑SID。其中,SL指针的第一值指示第三节点的标识所属的第一元素在段列表中的位置,CL指针的第一值指示第三节点的C‑SID在所述第一元素中的位置。第一节点还需获取第三节点的C‑SID对应的SID的前缀,第一节点根据第一TLV的第一指示信息,得到第三节点的C‑SID对应的SID的前缀的长度,根据第一TLV的第二指示信息,得到第三节点的C‑SID对应的SID的前缀在第一报文中的位置。最后,根据第三节点的C‑SID和第三节点的C‑SID对应的SID的前缀,得到所述第三节点的段标识。
[0139] 示例性地,下面以一个或多个TLV字段为顺序排列为例,结合以下三种情况进行说明。
[0140] 第一种:跨网络域场景。
[0141] 图8a和图8b都示例性示出了两个网络域的G‑SRv6网络,如图8a和图8b所示,节点N1‑节点N4为网络域1,在网络域1中的节点N1‑节点N4为支持SRv6头压缩的节点,网络域1中的节点N2‑节点N4的SID进行压缩处理,并使用了同样的压缩前缀A:。节点N5‑节点N10位于网络域2,在网络域2中的节点N5‑节点N9为支持SRv6头压缩的节点,网络域2中的节点N5‑节点N9的SID进行压缩处理,并使用了同样的压缩前缀B:。SRH头使用32比特的C‑SID段列表。在一个网络域内,每个元素中包含4个压缩段标识。当节点N4检测到节点N4到节点N5的路径故障时,需要获取节点N6的段标识或者转发路径上节点N6之后的节点的段标识进行转发。
[0142] 在图8a所示的网络中,节点N4接收第一报文后,获取第一报文中SL指针的值,SL指针的值指示节点N4的标识所在的元素,由图8a可知,SL指针的值为3,表明节点N4的标识在元素G‑SID[3]中,CL指针的值为1,说明节点N4的标识在元素G‑SID[3]中的第三个C‑SID。根据DA字段中包含的N4节点的标识没有携带的COC Flavor标识,在这种情况下,得到节点N5的标识B:5:1::为非压缩段标识,说明节点N5的段标识占用一个元素,更新SL指针的值和CL指针的值,将SL指针减2,SL指针的值为1,指向元素G‑SID[1],将CL指针的值更新为3,指向元素G‑SID[1]中的第一个C‑SID。根据SL指针的值为1,指示节点N6的标识在元素G‑SID[1]中,G‑SID[1]对应第二个TLV字段,则得到节点N6的段标识对应第二个TLV字段[80,2,1]。
[0143] 根据第二个TLV字段[80,2,1]中的第一指示信息为80,得到节点N6的标识为C‑SID,节点N6的C‑SID对应的前缀长度为80比特。根据第二指示信息为2,得到节点N6的C‑SID对应的前缀在元素G‑SID[2]中。根据第一指示信息为80和第二指示信息为2,可以从元素G‑SID[2]中的到节点N6的C‑SID对应的前缀为B:。根据SL指针的值为1和CL指针的值为3,确定节点N6的C‑SID在元素G‑SID[1]的第一个C‑SID,得到节点N6的C‑SID为6:1。因此,节点N6的C‑SID加上C‑SID对应的前缀,可以得到节点N6的段标识为B:6:1::。
[0144] 当节点N4接收在图8b所示的第一报文后,第一报文包括三个TLV字段,分别为[64,3]、[80,2]、[128,0],节点N4获取第一报文中SL指针的值为3,由上述图8a的分析可知,可以获得节点N6对应的SL指针的值为1。三个TLV字段中的第二指示信息都不与SL指针的值相同,将1跟三个TLV字段中的第二指示信息进行比较,取大于1的多个值中的最小一个值,三个TLV字段中的第二指示信息分别是3、2、0,大于1的数为3、2,而3和2中的最小的是2,因此,可以确定节点N6对应的TLV字段为[80,2]。根据TLV字段[80,2]中第一指示信息为80,得到节点N6的标识为C‑SID,节点N6的C‑SID对应的前缀长度为80比特。根据第二指示信息为2,得到节点N6的C‑SID对应的前缀在元素G‑SID[2]中。根据第一指示信息为80和第二指示信息为2,可以从元素G‑SID[2]中的到节点N6的C‑SID对应的前缀为B:。根据SL指针的值为1和CL指针的值为3,确定节点N6的C‑SID在元素G‑SID[1]的第一个C‑SID,得到节点N6的C‑SID为6:1。因此,节点N6的C‑SID加上C‑SID对应的前缀,可以得到节点N6的段标识为B:6:1::。
[0145] 第二种:纯压缩场景。
[0146] 图9a和图9b都示例性示出了一种G‑SRv6网络,如图9a和图9b都所示,该网络包括节点N1‑节点N10,SRH使用32比特的C‑SID编排段列表。当节点N3检测到节点N3到节点N4的路径故障时,需要获取节点N5或者节点N5之后的节点的段标识,按照节点N5或者节点N5之后的节点的段标识进行转发第一报文,绕过故障节点。
[0147] 节点N3获取到如图9a所示的第一报文时,SL指针的值为2,指示N3节点的标识在元素G‑SID[2],CL指针的值为2,说明节点N3的标识在元素G‑SID[2]中的第二个压缩段标识。根据DA字段中N3节点段标识携带COC Flavor标识,得到节点N4的标识为C‑SID,更新CL指针的值,将CL指针的值减1,得到CL指针的值为1,CL指针的值不为0,根据SL指针的值为2和CL指针的值为1,指向元素G‑SID[2]中的第三个C‑SID,说明节点N4的标识不是元素G‑SID[2]中的最后一个C‑SID,节点N5的标识在元素G‑SID[2]中。因此,可以得到节点N5对应的SL指针的值为2。根据SL的值为2,指示节点N5的标识在元素G‑SID[2]中,G‑SID[2]对应第三个TLV字段,则可以确定节点N5的标识对应第三个TLV字段[64,15,2]。
[0148] 然后根据第三个TLV[64,15,2]中的第一指示信息为64,可以的到节点N5标识为C‑SID,节点N5的C‑SID对应的前缀的长度为64比特。第二指示信息为15,可以得到节点N5的C‑SID对应的前缀位于第一报文DA字段中。根据第一指示信息64和第二指示信息15,可以从目的地址获得节点N5的C‑SID对应的前缀A:。根据SL指针的值为2和CL指针的值为1,可以得到节点N4的C‑SID在元素G‑SID[2]中的第三个C‑SID,更新CL指针的值,将CL指针的值减1,得到CL指针的值为0,确定节点N5的C‑SID在元素G‑SID[2]中的第四个C‑SID,得到节点N5的C‑SID为5:1。因此,节点N5的C‑SID 5:1加上C‑SID对应的前缀A:,可以得到节点N5的段标识为A:5:1::。
[0149] 当节点N3接收在图9b所示的第一报文后,第一报文包括两个TLV字段,分别为[64,2]、[128,0],节点N3获取第一报文中SL指针的值为2,由上述图9a的分析可知,可以获得节点N5对应的SL指针的值为2。TLV字段[64,2]中的第二指示信息与SL指针的值相同,因此,可以确定节点N5对应的TLV字段为[64,2]。
[0150] 然后根据TLV[64,2]中的第一指示信息为64,可以的到节点N5标识为C‑SID,节点N5的C‑SID对应的前缀的长度为64比特。第二指示信息为2,可以得到节点N5的C‑SID对应的前缀位于元素G‑SID[2]中。由于第一报文中两个TLV字段的第二指示信息分别为2和0。2是第一报文中第二指示信息中最大的一个值,可以得到元素G‑SID[2]是段列表中的第一个元素,因此,得到节点N5的C‑SID对应的前缀位于第一报文的目的地址字段中。可以从目的地址获得节点N5的C‑SID对应的前缀A:。根据SL指针的值为2和CL指针的值为1,可以得到节点N4的C‑SID在元素G‑SID[2]中的第三个C‑SID,更新CL指针的值,将CL指针的值减1,得到CL指针的值为0,确定节点N5的C‑SID在元素G‑SID[2]中的第四个C‑SID,得到节点N5的C‑SID为5:1。因此,节点N5的C‑SID 5:1加上C‑SID对应的前缀A:,可以得到节点N5的段标识为A:5:1::。
[0151] 在一种可能的实施例中,按照上述过程,在节点N5的基础上还可以获得报文转发路径上节点N5之后节点的段标识,例如,获得节点N6的段标识,在此不再赘述。
[0152] 第三种:压缩和非压缩混合编排场景。
[0153] 图10a和图10b示例性示出了一种G‑SRv6网络,如图10a和图10b所示,节点N1~节点N4在G‑SRv6网络域1中,网络域1中的节点N2~节点N4为支持SRv6头压缩的节点,网络域1中的节点N2~节点N4的SID进行压缩处理,并使用了同样的压缩前缀A:。节点N5位于网络域2,节点N5为标准的SRv6节点,不支持SRv6头压缩,节点N5对应的标识为非压缩段标识。节点N6~节点N10在G‑SRv6网络域3中,网络域3中的节点N6~节点N10为支持SRv6头压缩的节点,网络域3中的节点N6~节点N9的SID进行压缩处理,并使用了同样的压缩前缀A:,节点N10对应的标识为非压缩段标识.SRH头使用32比特的C‑SID和128比特SID混合编排段列表。
当节点N3检测到节点N3到节点N4的路径故障时,需要获取节点N5或者节点N5之后的节点的段标识,按照该节点N5或者转发路径上节点N5之后的节点的段标识进行转发第一报文,绕过故障节点。
[0154] 节点N3获取到如图10a所示的第一报文后,SL指针的值为4,指示节点N3的标识在元素G‑SID[4],CL指针的值为2,指示节点N3的标识在元素G‑SID[4]中的第二个C‑SID。
[0155] 根据DA字段中节点N3的标识携带COC Flavor标识,得到节点N4的标识为C‑SID,更新CL指针的值,将CL指针的值减1,得到CL指针的值为1,不为0,根据SL指针的值为4和CL指针的值为1,得到32比特的N4的C‑SID。当获得的32比特的C‑SID不为0,更新CL指针的值,将CL指针的值减1,得到CL指针的值为0,得到32比特的C‑SID。当获得的32比特的C‑SID为0,说明节点N4的C‑SID是元素G‑SID[4]中最后一个C‑SID。更新SL指针的值,将SL指针的值减1,得到SL指针的值为3。根据SL指针的值为3,根据SL指针的值为3,指示节点N5的标识在元素G‑SID[3]中,元素G‑SID[3]对应第四个TLV字段,则可以确定节点N5的标识对应第四个TLV字段[128,3,3]。
[0156] 根据第四个TLV字段[128,3,3]中的第一指示信息为128可以得到节点N5的标识为非压缩段标识,说明节点N5的段标识为128比特,占用一个元素,即元素G‑SID[3],因此可以的到128比特的段标识B:5:1::,即节点N5的段标识为B:5:1::。
[0157] 节点N3获取到如图10b所示的第一报文后,第一报文包括四个TLV字段,分别为[64,4]、[128,3,]、[64,2]、[128,0]。节点N3获取第一报文中SL指针的值为3,由上述图10a的分析可知,可以获得节点N5对应的SL指针的值为3。TLV字段[128,3,]中的第二指示信息与SL指针的值相同,因此,可以确定节点N5对应的TLV字段为[128,3]。
[0158] 根据TLV字段[128,3]中的第一指示信息为128可以得到节点N5的标识为非压缩段标识,说明节点N5的段标识为128比特,占用一个元素,即元素G‑SID[3],因此可以的到128比特的段标识B:5:1::,即节点N5的段标识为B:5:1::。
[0159] 上述图8a‑图10b所示的G‑SRv6网络中还包括中转节点,图中未示出。中转节点为转发G‑SRv6报文但是不进行G‑SRv6报文处理的节点。
[0160] 值得说明的是,本申请实施例中,转发路径上的中间转发节点可以是中转节点,还可以是SR节点,本申请对此不作任何限定。
[0161] 在一种可能的实施例中,第一节点还可以是中转节点,中转节点为转发G‑SRv6报文但是不进行G‑SRv6报文处理的节点。在中转节点检测到中转节点到下一跳SR节点的路径故障时,使该中转节点成为支持SRv6功能的节点,代替故障节点处理报文,绕过故障节点或者故障路径。例如,获取故障节点下一跳节点段标识,根据该段标识进行转发报文。
[0162] 示例性地,图11a和图11b示出了一种G‑SRv6网络示意图,如图11a和图11b所示,该网络中节点N1‑N10在G‑SRv6网络域中,该网络域中包含节点为支持SRv6头压缩的节点,该网络域中的节点N2‑节点N9的SID进行了压缩处理,并使用了同样的压缩前缀A:。段列表指定了沿途要经过的节点,N3’是中转节点,不在段列表中。SRH头使用32比特的C‑SID编排段列表。当节点N3’检测到下一跳节点N4故障时,使节点N3’成为能够处理G‑SRv6报文处理的节点,获取节点N5的段标识,根据节点N5的段标识的指令进行转发。
[0163] 节点N3’收到如图11a所示的第一报文时,SL指针的值为2,指示节点N4的标识在元素G‑SID[2]中,CL指针的值为1,指示节点N4的标识在元素G‑SID[2]中的第三个C‑SID。根据DA字段中节点N4的标识携带COC Flavor标识,得到节点N5的标识为C‑SID。CL指针的值不为0,说明N4节点的C‑SID不是元素G‑SID[2]中最后一个段标识,更新CL指针的值,将CL指针的值减1,得到CL指针的值为0,说明节点N5的标识在元素G‑SID[2]的最后一个C‑SID。因此,可以得到节点N5对应的SL指针的值为2。根据SL指针的值为2,指示节点N5的标识在元素G‑SID[2],元素G‑SID[2]对应第三个TLV字段,则可以确定节点N5对应第三个TLV字段[64,15,2]。
[0164] 然后根据第三个TLV字段[64,15,2]中第一指示信息为64,可以的到节点N5标识为C‑SID,节点N5的C‑SID对应的前缀的长度为64比特。第二指示信息为15,可以得到节点N5的C‑SID对应的前缀的位置位于第一报文DA字段中。根据第一指示信息为64和第二指示信息15,可以从第一报文的目的地址字段获取64比特的前缀A:。根据SL指针的值为2和CL指针的值为1,得到节点N4的C‑SID,更新CL指针的值,将CL指针的值减1,得到CL指针的值为0,根据SL指针的值为2和CL指针的值为0,确定节点N5的C‑SID在元素G‑SID[2]中的第四个C‑SID,即第四个C‑SID。得到节点N5的C‑SID为5:1。因此,节点N5的C‑SID5:1加上前缀A:,可以得到节点N5的段标识为A:5:1::。
[0165] 当节点N3’接收在图10b所示的第一报文后,第一报文包括两个TLV字段,分别为[64,2]、[128,0]。节点N3’获取第一报文中SL指针的值为2,由上述图9a的分析可知,可以获得节点N5对应的SL指针的值为2。TLV字段[64,2]中的第二指示信息2与SL指针的值2相同,因此,可以确定节点N5对应的TLV字段为[64,2]。
[0166] 根据TLV[64,2]中的第一指示信息为64,可以的到节点N5标识为C‑SID,节点N5的C‑SID对应的前缀的长度为64比特。第二指示信息为2,可以得到节点N5的C‑SID对应的前缀位于元素G‑SID[2]中。由于第一报文中两个TLV字段的第二指示信息分别为2和0。2是第一报文中第二指示信息中最大的一个值,可以得到元素G‑SID[2]是段列表中的第一个元素,因此,得到节点N5的C‑SID对应的前缀位于第一报文的目的地址字段中。可以从目的地址获得节点N5的C‑SID对应的前缀A:。根据SL指针的值为2和CL指针的值为1,可以得到节点N4的C‑SID在元素G‑SID[2]中的第三个C‑SID,更新CL指针的值,将CL指针的值减1,得到CL指针的值为0,确定节点N5的C‑SID在元素G‑SID[2]中的第四个C‑SID,得到节点N5的C‑SID为5:1。因此,节点N5的C‑SID 5:1加上C‑SID对应的前缀A:,可以得到节点N5的段标识为A:5:
1::。
[0167] S107:第一节点基于第一报文将第三节点的段标识复制至第一报文的目的地址中,封装成第二报文,并发送第二报文。
[0168] 第一节点获取第三节点的段标识之后,将第三节点的段标识复制至DA字段,更新SL指针和CL指针,将第一报文封装成第二报文,根据第二报文中DA字段的段标识的指令,进行转发第二报文。
[0169] 实施本申请实施例,通过在第一报文中添加指示信息,转发路径上的中间转发节点检测到下一跳SR节点的路径故障时,该中间转发节点可以获取转发路径上下一跳SR节点之后的多个节点中的任意一个节点的段标识,根据该段标识的功能字段中包含的指令进行转发报文,从而绕过故障节点,使得报文能够继续转发,完成数据传输。
[0170] 可以理解的是,不限于上述封装指示信息,指示信息还可以封装在段标识中。例如,128比特,IPv6地址中的16比特用作指示信息,其余的用作路径信息标识。
[0171] 需要说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必须的。
[0172] 上述详细阐述了本发明实施例的方法,下面为了便于更好地实施本发明实施例的上述方案,相应地,下面还提供用于配合实施上述方案的相关装置。
[0173] 请参见图12,图12为本申请实施例提供的一种网络设备的结构示意图,如图12所示,所述网络设备100至少包括:第一接收单元110、第一处理单元120以及第一发送单元130;其中,
[0174] 第一接收单元110用于获取第一报文的段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中多个节点中的一个节点或所述转发路径中的一个链路;
[0175] 第一处理单元120,用于根据所述段列表,生成一个或多个类型‑长度‑值TLV。
[0176] 第一发送单元130,用于发送所述第一报文,所述第一报文包括一个或多个TLV,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息。
[0177] 本申请实施例中,上述网络设备100对根据第一报文的段列表中第一元素生成第一TLV字段,并对第一报文进行封装以及转发等处理方式对应于上述方法实施例中的源节点对第一报文的处理方式,在此不再赘述。
[0178] 请参见图13,图13为本申请实施例提供的一种网络设备的结构示意图,如图13所示,所述网络设备200至少包括:第二接收单元210、第二处理单元220以及第二发送单元230,其中,
[0179] 第二接收单元210,用于第一节点接收第一报文,所述第一报文包括段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中的一个节点或所述转发路径中的一个链路;
[0180] 第二处理单元220,用于当确定所述第一节点到第二节点的路径故障时,所述第一节点根据所述第一报文中的一个或多个类型‑长度‑值TLV获得第三节点的段标识,所述第二节点是所述转发路径中所述第一节点的下一跳分段路由SR节点,所述第三节点是所述转发路径中在所述第二节点之后的节点中的任意一个节点,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息;
[0181] 所述第一节点根据所述第一报文获得第二报文;
[0182] 第二发送单元230,用于发送所述第二报文,所述第二报文的目的地址包括所述第三节点的段标识。
[0183] 本申请实施例中,上述网络设备100对接收的第一报文的第一TLV字段,获得所述第二节点的段标识以及转发等处理方式对应于上述方法实施例中的第一节点对第一报文的处理方式,在此不再赘述。
[0184] 可以理解的是,上述各设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0185] 本申请实施例可以根据上述方法示例对各设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0186] 请参见图14,图14时本申请实施例提供的一种网络设备的结构示意图,所述网络设备300至少包括处理器310、收发器320以及存储器330,所述处理器310、收发器320以及存储器330通过总线340相互连接,其中,
[0187] 所述处理器310可以是中央处理器(central processing unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application‑specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field‑programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
[0188] 所述收发器320可以包括一个接收器和一个发送器,例如,无线射频模块,以下描述的处理器310接收或者发送某个消息,具体可以理解为该处理器310通过该收发器来接收或者发送。
[0189] 所述存储器330包括但不限于是随机存取存储器(Random Access Memory,RAM)、只读存储器(Read‑Only Memory,ROM)或可擦除可编程只读存储器(Erasable Programmable Read‑Only Memory,EPROM或者快闪存储器),该存储器330用于存储相关指令及数据,并可以将存储的数据传输给处理器310。
[0190] 网络设备300中的处理器310用于读取存储器330中的相关指令执行以下操作:
[0191] 所述处理器310根据获取第一报文的段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中多个节点中的一个节点或所述转发路径中的一个链路;
[0192] 所述收发器320中的发送器发送所述第一报文,所述第一报文包括一个或多个TLV,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID对应的前缀信息。
[0193] 具体地,上述网络设备300执行的各种操作的具体实现可参照上述方法实施例中源节点的具体操作,在此不再赘述。
[0194] 请参见图15,图15时本申请实施例提供的一种网络设备的结构示意图,如图15所示,所述网络设备400至少包括处理器410、收发器420以及存储器430,所述处理器410、收发器420以及存储器430通过总线440相互连接,其中,
[0195] 所述处理器410可以是中央处理器(central processing unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application‑specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field‑programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
[0196] 所述收发器420可以包括一个接收器和一个发送器,例如,无线射频模块,以下描述的处理器410接收或者发送某个消息,具体可以理解为该处理器410通过该收发器来接收或者发送。
[0197] 所述存储器430包括但不限于是随机存取存储器(Random Access Memory,RAM)、只读存储器(Read‑Only Memory,ROM)或可擦除可编程只读存储器(Erasable Programmable Read‑Only Memory,EPROM或者快闪存储器),该存储器430用于存储相关指令及数据,并可以将存储的数据传输给处理器410。
[0198] 网络设备400中的处理器410用于读取存储器430中的相关指令执行以下操作:
[0199] 处理器410控制收发器420中的接收器接收第一报文,所述第一报文包括段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中的一个节点或所述转发路径中的一个链路;
[0200] 所述处理器410确定所述第一节点到第二节点的路径故障时,所述第一节点根据所述第一报文中的一个或多个类型‑长度‑值TLV获得第三节点的段标识,所述第二节点是所述转发路径中所述第一节点的下一跳分段路由SR节点,所述第三节点是所述转发路径中在所述第二节点之后的节点中的任意一个节点,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID的前缀信息;
[0201] 所述处理器410根据所述第一报文获得第二报文;
[0202] 所述收发器420中的发送器发送第二报文,所述第二报文的目的地址包括所述第二节点的段标识。
[0203] 具体地,上述网络设备400执行的各种操作的具体实现可参照上述方法实施例中第一节点的具体操作,在此不再赘述。
[0204] 参阅图16所示,图16示出了本申请实施例提供的一种网络系统的可能的示意图。网络系统600包括第一网络设备610和第二网络设备620。网络系统中的第一网络设备610可以执行图4实施例中源节点的处理步骤,所述网络系统中的第二网络设备620可以执行图4所示实施例中第一节点的处理步骤。相应的,所述网络系统中的第一网络设备610可以为图
12所示实施例的网络设备100,所述第二网络设备620可以为图13所示实施例的网络设备
200,或者相应的,所述网络系统中的第一网络设备610可以为图14所示实施例的网络设备
300,所述第二网络设备620可以为图15所示实施例的网络设备400。
[0205] 具体的,所述第一网络设备,用于获取第一报文的段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述一个或多个元素中的每个元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中多个节点中的一个节点或所述转发路径中的一个链路;发送所述第一报文,所述第一报文包括一个或多个TLV,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID的前缀信息。
[0206] 第二网络设备,用于接收第一报文,所述第一报文包括段列表,所述段列表对应于所述第一报文的转发路径,所述段列表包括一个或多个元素,所述元素包括一个或多个标识,所述一个或多个标识中的每个标识分别对应于所述转发路径中的一个节点或所述转发路径中的一个链路;当确定所述第一节点到第二节点的路径故障时,所述第一节点根据所述第一报文中的一个或多个类型‑长度‑值TLV获得第三节点的段标识,所述第二节点是所述转发路径中所述第一节点的下一跳分段路由SR节点,所述第三节点是所述转发路径中在所述第二节点之后的节点中的任意一个节点,所述一个或多个TLV中的每个TLV包括指示信息,所述指示信息用于指示所述多个节点中的一个节点或所述转发路径中的一个链路的段标识SID的前缀信息;所述第一节点根据所述第一报文获得第二报文;所述第一节点发送所述第二报文,所述第二报文的目的地址包括所述第三节点的段标识。
[0207] 本发明实施例还提供了一种非瞬态存储介质,用于储存前述实施例中所用的软件指令,其包括用于执行前述实施例所示的方法的程序,当其在计算机或网络设备上执行时,使得所示计算机或网络设备执行前述方法实施例中的方法。
[0208] 本发明实施例还提供了一种包括计算机程序指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得网络设备执行前述方法实施例中的方法。
[0209] 在上述实施例中,可以全部或部分地通过软件、硬件、固件、或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0210] 以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。