WO2022078509A1 - IPv6报文的扩展头封装方法及装置 - Google Patents

IPv6报文的扩展头封装方法及装置 Download PDF

Info

Publication number
WO2022078509A1
WO2022078509A1 PCT/CN2021/124163 CN2021124163W WO2022078509A1 WO 2022078509 A1 WO2022078509 A1 WO 2022078509A1 CN 2021124163 W CN2021124163 W CN 2021124163W WO 2022078509 A1 WO2022078509 A1 WO 2022078509A1
Authority
WO
WIPO (PCT)
Prior art keywords
segment
ipv6
header
type
node
Prior art date
Application number
PCT/CN2021/124163
Other languages
English (en)
French (fr)
Inventor
彭少富
Original Assignee
中兴通讯股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 中兴通讯股份有限公司 filed Critical 中兴通讯股份有限公司
Publication of WO2022078509A1 publication Critical patent/WO2022078509A1/zh

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/34Source routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2212/00Encapsulation of packets

Abstract

本发明实施例提供了一种IPv6报文的扩展头封装方法及装置,该方法包括:头节点对IPv6报文进行扩展头的封装,并将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述扩展头至少包括以下信息:段列表:所述段列表中包含一个或多个段元素,其中,每个段元素包括:段标识,表示对应访问路径上每个节点的标识,所述段标识可转换成对应节点上的IPv6地址;段类型信息,表示本段的类型;剩余段个数信息:表示所述扩展头所包含的段列表中剩余待访问的段的数量。

Description

IPv6报文的扩展头封装方法及装置
相关申请的交叉引用
本申请基于2020年10月15日提交的发明名称为“IPv6报文的路由头封装方法及装置”的中国专利申请CN202011105906.1,并且要求该专利申请的优先权,通过引用将其所公开的内容全部并入本申请。
技术领域
本发明实施例涉及通信领域,具体而言,涉及一种IPv6报文的扩展头封装方法及装置。
背景技术
RFC8200(Internet Protocol,Version 6(IPv6)Specification)制定了IPv6规范,其中定义了Routing Header,发送的IPv6报文的源节点可以在Routing Header中包含一些中间节点信息,以控制报文在到达最终目的节点前访问这些中间节点。Routing Header中的Routing Type字段是可扩展的,可以设置不同的值,以定义不同的路由头,满足不同的场景。
RFC6554(An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks)针对低功耗和有损网络场景,定义了一种基于压缩后的IPv6地址信息进行源路由转发的路由头(由于Routing Type字段的值为3,简称为RH3)。在低功耗和有损网络中,假设所有节点的IPv6地址都处于同一个前缀(prefix)内,那么在使用RH3做源路由转发时,RH3中包含的段列表中的每个元素只需存放它相比其它元素的差异部分,而所有元素的公共前缀被存放IPv6 Header的Destination Address字段中。这样达到了节约RH3的字节开销的目的。RH3的适用场景非常有限,不支持在RH3中混编多种类型的具有多种差异部分长度的segment。
RFC8754(IPv6 Segment Routing Header)针对分段路由(Segment Routing)应用于IPv6网络的场景,简称SRv6,也定义了一种基于经典IPv6地址进行源路由转发的路由头(由于Routing Type字段的值为4,简称为RH4)。RH4包含的段标识列表(SID List)中,每个元素都是占用16字节的IPv6地址,当指令列表很长时,会导致很长的报文头,严重的降低了报文的载荷效率。目前业界正在考虑在SRv6网络中引入针对SRv6段标识(SID)的压缩能力,以减少RH4的字节开销。由于SRv6网络中支持的业务类型丰富,流量工程能力更强,所以不能简单的在SRv6网络中套用上述RH3。
发明内容
本发明实施例提供了一种IPv6报文的扩展头封装方法及装置,以至少解决相关技术中SRv6 SRH中包含的段标识列表很长时,导致报文封装效率低,甚至超过设备的报文处理能力,在实际网络中的应用非常受限的问题。
根据本发明的一个实施例,提供了一种IPv6报文的扩展头封装方法,包括:
头节点对IPv6报文进行扩展头的封装,并将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述扩展头至少包括以下信息:段列表:所述段列表中包含一个或多个段元素,其中,每个段元素包括:段标识,表示对应访问路径上每个节点的标识,所述段标识可转换成对应节点上的IPv6地址;段类型信息,表示本段的类型;剩余段个数信息:表示所述扩展头所包含的段列表中剩余待访问的段的数量。
根据本发明的另一个实施例,提供了一种IPv6报文的扩展头封装装置,位于头节点中,该装置包括:封装模块,设置为对IPv6报文进行扩展头的封装;发送模块,设置为将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述扩展头至少包括以下信息:段列表:所述段列表中包含一个或多个段元素,其中,每个段元素包括:段标识,表示对应访问路径上每个节点的标识,该段标识可转换成对应节点上的IPv6地址;段类型信息,表示本段的类型;剩余段个数信息:表示所述扩展头所包含的段列表中剩余待访问的段的数量。
根据本发明的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
附图说明
图1是根据本发明实施例的计算机终端的硬件结构框图。
图2是根据本发明实施例的IPv6报文的路由头封装方法的流程图;
图3是根据本发明实施例的扩展SRH-MST的封装格式图;
图4是根据本发明实施例一的网络拓扑图;
图5是根据本发明实施例的SRH-MST中所有Segment为2字节IPv6地址片段的封装格式图;
图6是根据本发明实施例的SRH-MST中各Segment为不同长度的IPv6地址片段的封装格式图;
图7根据本发明实施例的是SRH-MST中所有Segment为3字节MPLS Label的封装格式图;
图8是根据本发明实施例的IPv6报文的路由头封装装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明的实施例。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的方法所运行的计算机终端的硬件结构框图。如图1所示,该计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输 出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至其他终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106设置为经由一个网络接收或者发送数据。上述的网络具体实例可包括通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于网络架构的IPv6报文的路由头封装方法,图2是根据本发明实施例的方法流程图,如图1所示,该流程包括如下步骤:
步骤S102,头节点对IPv6报文进行路由头的封装;
步骤S104,将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述路由头包括如下字段:
Next Header:占8比特,表示在所述路由头之后的内层头类型;
Hdr Ext Len:占8比特,表示所述路由头的字节开销;
Routing Type:占8比特,表示所述路由头的类型;
Segments Left:占8比特,表示所述路由头所包含的段列表中,剩余待访问和处理的段的数量;
List Len:表示所述路由头所包含的段列表的字节开销;
Offset:为占12比特的无符号整数,表示当前访问的Segment在段列表中的位置;
Reserved:占12比特,保留字段;
多个<ST,CmprL,Segment>,每个<ST,CmprL,Segment>为所述段列表中的一个元素,其中,ST:占4比特,表示压缩后的段的类型;CmprL:占4比特,表示公共前缀的长度;Segment:表示压缩后的段内容,其长度由ST确定;
Padding:可选的填充字段。
在本实施例中,所述IPv6报文的路由头还包括可选的TLV字段。
在本实施例中,所述ST包括以下类型之一:
类型0:表示相应的Segment为完整的IPv6地址;
类型1:表示相应的Segment为1字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型2:表示相应的Segment为2字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型3:表示相应的Segment为3字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型4:表示相应的Segment为4字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型5:表示相应的Segment为5字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型6:表示相应的Segment为6字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型7:表示相应的Segment为7字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型8:表示相应的Segment为8字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
类型9:表示相应的Segment为3字节的MPLS Label索引,通过该MPLS Label索引可查询映射表获得完整IPv6地址;
类型10:表示相应的Segment为4字节的SR-MPLS SID索引,通过该SR-MPLS SID索引可查询映射表获得完整IPv6地址;
类型11:表示相应的Segment为4字节的BIER BFR-ID索引,通过该BFR-ID索引可查询映射表获得完整IPv6地址。
在本实施例中,当ST为类型0时,CmprL表示Segment字段的实际长度;当ST为类型1-8时,CmprL表示相应Segment所属的公共前缀的长度;当ST为类型9-11时,CmprL的值无意义。
在本实施例中,所述路由头中的段列表采用正序存放方式。
在本实施例中,当SRv6域的所有节点的SRv6 SID均具有相同的公共前缀,则将所述公共前缀存放在IPv6 Header的DA中,将各节点的SRv6 SID的差异部分作为压缩后的信息存放在所述路由头的段列表中。
在本实施例中,所述头节点在对所述IPv6报文封装所述路由头时,对于段列表<S1,S2,S3,...,Sn>,将S1拷贝至IPv6 Header的DA字段,如果S1被保存在所述路由头中,则Offset设置为指向所述路由头中的段列表中的第二个元素,Segment Left=n-1,表示段列表中还剩下有n-1个段元素待处理。
在本实施例中,所述头节点在为所述IPv6报文封装所述路由头时,对于段列表<S1,S2,S3,...,Sn>,将S1拷贝至IPv6 Header的DA字段,如果S1未存放在所述路由头中,则Offset设置为指向所述路由头中的段列表中的第一个元素,Segment Left=n-1,表示段列表中还剩下有n-1个段元素待处理。
在本实施例中,所述方法还包括:所述SRv6域的中间节点或尾节点接收到所述IPv6报文时,如果IPv6 Header中的DA与本地的IP地址匹配,并且IPv6 Header的Next Header字段提示下一层头是所述路由头,则继续处理所述IPv6报文。
在本实施例中,继续处理所述IPv6报文包括:如果Segments Left等于0,则继续处理内层载荷,所述内层载荷的类型根据所述路由头的Next Header字段确定;如果Segments Left不等于0,则将Segments Left减1,读取下一个Segment,Offset的当前值指向的就 是下一个<ST,CmprL,Segment>的首地址,根据ST的类型值,读取相应长度的Segment,并结合CmprL的信息,将Segment转换为完整的新IPv6 address;使Offset指向下一个<ST,CmprL,Segment>的首地址;如果Offset大于List Len*8,则丢弃所述IPv6报文,并向IPv6 Header的Source Address发送差错报文;如果IPv6 Header的IPv6 Hop Limit值小于或等于1,则丢弃所述IPv6报文,并向IPv6 Header的Source Address发送ICMP Time Exceeded-Hop Limit Exceeded in Transit报文;如果IPv6 Header的IPv6 Hop Limit大于1,则将Hop Limit减1;将转换得到的所述新IPv6 address拷贝到IPv6 Header的DA,并根据新的DA查IPv6路由表转发所述IPv6报文。
在本发明的上述实施例,提供了一种更灵活的支持多种段类型的分段路由扩展头,提供多种压缩方式,支持任意长度的SID的混编,能更好的在IPv6网络中部署分段路由功能。
为了便于对本发明实施例所提供的技术方案的理解,下面将结合具体应用场景的实施例进行描述。
考虑到SRv6网络的以下实际需求,在本发明实施例中提出一种新的路由头以满足如下的一些需求。
需求1:SRv6网络中的所有节点的IPv6地址规划可能很规整(即这些节点的IPv6地址都具有相同的公共前缀),或者很杂乱,这两种情况均需要有相应的机制压缩报文中的SRv6SID List。
需求2:SRv6 SID List所表示的路径可能会穿越多个具有不同IPv6地址规划的域,因此压缩后的SRv6 SID List中需要支持多种类型的压缩后段标识,不同类型的压缩后段标识具有不同的压缩后长度,比如有的压缩后段标识的长度为4字节,有的为2字节。
需求3:IPv6报文在根据SRv6 SID List转发时,不能丢失IPv6 Header中多个字段(如Traffic Class、Flow label)保存的有用信息。
需求4:IPv6报文中的SRv6 SID List在压缩后,必须能够仅仅根据报文自身所携带的信息还原出原始的未压缩的SRv6 SID List信息,而不能依赖网络中各节点上的一些控制信息或者转发表项中给出的转发信息,因为这些信息可能发生震荡变化,与头节点已经发出的IPv6报文之间存在不匹配的时序问题。这个需求非常有利于第三方离线工具解析报文。
需求5:支持与已经部署RH4的网络进行互通。
需求6:报文在逐段转发时,必须有指针信息去真实和准确的反应还有多少剩余段待处理。
现有的SRv6 SRH(即RH4)中包含的段标识列表(SID List)中,每个SID是128比特的IPv6地址,当SID List很长时,报文封装效率很低,甚至超过设备的报文处理能力,在实际网络中的应用非常受限。本实施例针对此问题引入一种新的路由头及其使用方法。
本实施例采用以下技术方案:在RFC8200定义的Routing Header的基础上,引入一种新的路由头,其中的段列表中可支持多种段类型,我们将这种新的路由头称之为SRH-MST(Segment Routing Header with Multiple Segment Type)。假设建议向IANA(Internet Assigned Numbers Author ity互联网数字分配机构)申请的Routing Type字段的值为5。
图3是SRH-MST的格式,其中各字段描述如下:
Next Header:占8比特,表示紧跟在SRH-MST之后的内层头类型。其定义与取值可参考RFC8200。
Hdr Ext Len:占8比特,表示SRH-MST的字节开销,即SRH-MST中包含有多少个8字节,不考虑第一个8字节在内。其定义与取值可参考RFC8200。注意本专利所述的SRH-MST中所包含的段列表中,每个段可能是一个压缩后的值,即每个段并不一定是16字节,所以Hdr Ext Len的值并不一定是段列表中段数目的两倍。
Routing Type:占8比特,该字段的取值待IANA(Internet Assigned Numbers Authority互联网数字分配机构)分配,表明本路由头是SRH-MST。
Segments Left:占8比特,表示SRH-MST中所包含的段列表中,还剩下有多少个段待访问和处理。其定义与取值可参考RFC8200。
List Len:SRH-MST中所包含的段列表的字节开销,即整个段列表包含有多少个8字节。注意整个段列表的长度必须按照8字节对齐,即是8字节的整数倍。为了这个目的,可能需要在最后一个Segment(即Segment N)之后填充无意义的0。List Len必须要小于Hdr Ext Len。
Offset:占12比特的无符号整数,它的作用是当将SRH-MST中所包含的段列表看成是一个以字节为单位的数组(假设记为Segment List[])时,当前访问的Segment在Segment List[]中的下标。根据Offset访问段列表中的元素时,其访问范围必须不能超过List Len*8所表示的范围。
Reserved:占12比特,保留字段,未定义。
以下每一个<ST,CmprL,Segment>都描述了段列表中的一个元素。
ST:占4比特,Segment Type,段类型,表示压缩后的段的类型。当前定义以下类型:
0:表示相应的Segment为完整的IPv6地址,注意相应的Segment字段并不一定占16个字节,其长度由CmprL给出,这是因为许多IPv6地址的低位部分为0,不必真的需要将整个16字节存放至Segment字段中;
1:表示相应的Segment为1字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
2:表示相应的Segment为2字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
3:表示相应的Segment为3字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
4:表示相应的Segment为4字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
5:表示相应的Segment为5字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
6:表示相应的Segment为6字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
7:表示相应的Segment为7字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
8:表示相应的Segment为8字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
9:表示相应的Segment为3字节的MPLS Label,通过该MPLS Label可查询映射表获得 完整IPv6地址;
10:表示相应的Segment为4字节的SR-MPLS SID(索引),通过该SR-MPLS SID可查询映射表获得完整IPv6地址;
11:表示相应的Segment为4字节的BIER BFR-ID,通过该BFR-ID可查询映射表获得完整IPv6地址;
需要说明的是,在本实施例中,除了上述类型外,还可以对ST的其它类型值进行定义。
CmprL:占4比特,Common Prefix Length,公共前缀的长度(以字节为单位)。当ST为0时,CmprL表示了Segment字段的实际长度;当ST为1~8所表示的地址片段类型时,CmprL表示了相应Segment所属的公共前缀的长度;当ST为MPLS Label、SR-MPLS SID、BIER BFR-ID等映射索引时,CmprL的值没有意义,可设置为0。
Segment:压缩后的段内容,其长度由ST决定,如前所述。
Padding:可选的填充字段,其内容也属于段列表,必须填0,以保证整个段列表按照8字节对齐,即List Len为8的整数倍。如果段列表本来已经满足8字节对齐了,则不需要有Padding字段。
Optional Type Length Value objects:SRH-MST中还可包含可选的TLV,用于其它各种更高级的应用场景。
在本实施例中,SRH-MST中的段列表采用正序存放方式,比如,对于一条逻辑上的Segment List<S1,S2,S3,...,Sn>,其中S1是逻辑上的第一个Segment,Sn是逻辑上的最后一个Segment。如图1所示,Segment 1字段中存放的是S1的压缩后信息,Segment N字段中存放的是Sn的压缩后信息。注意,将SRH-MST中的段列表设计为采用逆序存放方式也是有可行的,正如现有技术中的SRH(Segment Routing Header,参考RFC8754)那样,不过考虑到处理流程的简洁行,在本实施例中选择正序存放方式。
在本实施例中,头节点在为报文封装SRH-MST时:
对于上述Segment List<S1,S2,S3,...,Sn>,S1将被拷贝至IPv6 Header的DA字段,如果S1也被保存在SRH-MST中(即Segment 1字段中存放的是S1的压缩后信息),则Offset需要设置为指向Segment 2字段,即Offset=1+sizeof(Segment 1)。另外,Segment Left=n-1,表示段列表中还剩下有n-1个段元素待处理。
可选的,为了进一步节省SRH-MST的字节开销,对于上述Segment List<S1,S2,S3,...,Sn>,因为S1已经被拷贝至IPv6 Header的DA字段了,所以头节点也可以不将S1存放在SRH-MST中。那么SRH-MST中只需要包含n-1个Segments,此时Segment 1字段中存放的是S2的压缩后信息,Segment N-1字段中存放的是Sn的压缩后信息。Offset需要设置为指向Segment 1字段,即Item Offset=0。另外,Segment Left=n-1,表示段列表中还剩下有n-1个段元素待处理。
在后面的实施例中,将进一步描述在不同场景下SRH-MST的段列表中如何存放压缩后的段信息。
在实施例中,在中间节点或尾节点接收到IPv6报文时,如果IPv6 Header中的DA与本地的IP地址匹配,并且IPv6 Header的Next Header字段提示下一层头是SRH-MST,则继续按照如下的流程处理SRH-MST:
S01.if(Segments Left等于0){
S02.继续处理内层载荷,内层载荷类型根据SRH-MST的Next Header字段确定;
S03.}
S04.else{
S05.Segments Left减1;
S06.读取下一个Segment。Offset的当前值指向的就是下一个<ST,CmprL,Segment>的首地址,则根据ST的类型值,读取相应长度的Segment,并结合CmprL的信息,将Segment转换为最终的完整new IPv6 address,具体如下:
如果ST为0,则根据CmprL获取相应长度的Segment,由于它已经是完整IPv6地址,因此不需要转换。读取的Segment值将作为IPv6地址的高位,低位补零;
如果ST为1至8,则当前IPv6 Header的DA字段所包含的数值中,高位相应CmprL长度的部分为公共前缀,将Segment字段所包含的地址片段数值拼接在该公共前缀之后,低位部分补零,即可得到128比特的完整IPv6地址。注意这里所说的高位和低位,均是指一个数值在算术上的高位和低位,并非该数字在实际硬件存储中的高位和低位。
如果ST为9至11,则本地查询相应的映射表,从映射表项中获取完整IPv6地址;
S07.Offset=Offset+1+sizeof(Segment),使Offset指向下一个<ST,CmprL,Segment>的首地址;
S08.if(Offset大于List Len*8){
S09.丢弃报文,并向IPv6 Header的Source Address发送ICMP Parameter Problem(指向Offset字段),Code 0,的差错报文;
S10.}
S11.if(IPv6 Header的IPv6 Hop Limit值小于或等于1){
S12.丢弃报文,并向IPv6 Header的Source Address发送ICMP
Time Exceeded--Hop Limit Exceeded in Transit报文;
S13.}
S14.else{
S15.Hop Limit减1;
S16.将转换得到的new IPv6 address拷贝到IPv6 Header的DA;
S17.根据新的DA查IPv6路由表转发报文;
S18.}
S19.}
与现有技术相比,本实施例提供了一种更灵活的支持多种段类型的分段路由扩展头,提供多种压缩方式,支持任意长度的SID的混编,能更好的在IPv6网络中部署分段路由功能。
实施例一
本实例描述SRH-MST的段列表中各个段元素均采用16位比特的IPv6地址片段作为压缩后SID内容。如图4所示的网络中,所有节点均分配128比特的经典SRv6 SID,这些SRv6 SID均处于相同的公共前缀(2001:db80::/32)中,例如:
节点S分配用于标识节点的Node SID 2001:db80:0100::;
节点A分配用于标识节点的Node SID 2001:db80:0a00::;
节点B分配用于标识节点的Node SID 2001:db80:0b00::,另外还为三层链路B->C分配 用于标识链路的Adjacency SID 2001:db80:0b01::;
节点C分配用于标识节点的Node SID 2001:db80:0c00::;
节点D分配用于标识节点的Node SID 2001:db80:0d00::;
假设建立一条从头节点S至尾节点D的SRv6-TE路径,其Segment List为<node A,node B,l ink B->C,node D>,这条路径可能有头节点自身计算而得,或者请求控制器计算而得。该Segment List可翻译成SID List<2001:db80:0a00::,2001:db80:0b00::,2001:db80:0b01::,2001:db80:0d00::>。
由于上述标识链路的Adjacency SID 2001:db80:0b01::本身也是可路由的,所以上述SID List可以优化为<2001:db80:0a00::,2001:db80:0b01::,2001:db80:0d00::>。
在头节点S上,将报文沿上述SID List转发时,可以为报文封装IPv6 Header+SRH-MST。由于这些SID均具有相同的公共前缀,因此公共前缀可存放在IPv6 Header的DA中,这些SID的差异部分则作为压缩后的信息存放在SRH-MST的段列表中,如图5所示:
第一个段元素对应的<ST,ComprL,Segment>为<2,4,0a00>,表明Segment 1字段中存放的是2字节的IPv6地址片段,该IPv6地址片段可与相应的4字节长的公共前缀拼接成完整IPv6地址,公共前缀存放在IPv6 Header的DA中。
第二个段元素对应的<ST,ComprL,Segment>为<2,4,0b01>,表明Segment 2字段中存放的也是2字节的IPv6地址片段,该IPv6地址片段可与相应的4字节长的公共前缀拼接成完整IPv6地址,公共前缀存放在IPv6 Header的DA中。
第三个段元素对应的<ST,ComprL,Segment>为<2,4,0d00>,表明Segment 3字段中存放的也是2字节的IPv6地址片段,该IPv6地址片段可与相应的4字节长的公共前缀拼接成完整IPv6地址,公共前缀存放在IPv6 Header的DA中。
为了保证段列表的长度为8字节的整数倍,填充的Padding字段占7个字节。此时List Len设置2,表示整个段列表的字节开销占用2个8字节。
下面将描述报文沿该SR-TE路径的转发过程:
1)报文从头节点S出发向逻辑上第一个Segment Node(即节点A)转发,由于头节点掌握了压缩前的原始SID List,所以可以直接将IPv6 Header的DA设置为SID List的第一个SID(2001:db80:0a00::)。
此例中,由于第一个SID(2001:db80:0a00::)也被压缩后存放至SRH-MST的段列表中,所以报文发出时,SRH-MST的Offset字段要发生偏移,指向第二个段元素,即Offset=sizeof<ST,CmprL,Segment 1>=3。
SRH-MST的Segment Left字段设置为2,表明还剩下2个段元素待处理。
报文将根据IPv6 Header的DA,查找路由表,向节点A转发。
2)报文到达节点A时,根据IPv6 Header的DA等于2001:db80:0a00::,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为1;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=3],先读取第一个字节,得到<ST,ComprL>信息为<2,4>,即可知Segment字段中存放的是2字节的IPv6地址片段,则继续读取2字节,得到0x0b01;
Step3:Offset字段发生偏移,指向第三个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 2>=6。
Step4:将0x0b01转换成完整的16字节的IPv6地址,即,从IPv6 Header的DA的逻辑高位4字节中获取公共前缀(2001:db80::),和0x0b01拼接得到2001:db80:0b01::,然后拷贝到IPv6 Header的DA字段中;
Step5:根据IPv6 Header的DA,查找路由表转发报文,报文将向节点B转发。
3)报文到达节点B时,根据IPv6 Header的DA等于2001:db80:0b01::,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为0;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=6],先读取第一个字节,得到<ST,ComprL>信息为<2,4>,即可知Segment字段中存放的是2字节的IPv6地址片段,则继续读取2字节,得到0x0d00;
Step3:Offset字段发生偏移,指向第四个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 3>=9。注意这里实际上并不存在第四个段元素。
Step4:将0x0d00转换成完整的16字节的IPv6地址,即,从IPv6 Header的DA的逻辑高位4字节中获取公共前缀(2001:db80::),和0x0d00拼接得到2001:db80:0d00::,然后拷贝到IPv6 Header的DA字段中;
Step5:由于上述命中的local SID表项中提示将报文沿链路B-C转发,因此不必根据IPv6 Header的DA查找路由表,直接将报文沿链路B-C转发。
4)报文到达节点C时,IPv6 Header的DA等于2001:db80:0d00::,不是节点C的本地地址,则节点C继续根据IPv6 Header的DA查找路由表,将报文向节点D转发。
5)报文到达节点D时,根据IPv6 Header的DA等于2001:db80:0d00::,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,执行以下代码处理SRH-MST:
Step1:检查发现Segment Left等于0,则移除IPv6 header以及SRH-MST,继续根据SRH-MST的Next Header字段识别和处理内层载荷。
需说明的是,本实施例中虽然是以单纯ST=2来举例描述报文的封装与转发流程,实际上,其它ST(1至8)的处理都是类似的,只不过SRH-MST的段列表中各个段元素<ST,CmprL,Segment>的长度会与本实施例不同而已,另外也会影响SRH-MST中相应的List Len字段以及Offset字段的设置。例如,一个ST=4的段元素<ST,CmprL,Segment>,其长度为5个字节,当从SRH-MST中读取一个这样的段元素时,Offset将累加5。
实施例二
本实施例在实施例一的基础上,考察SRH-MST中混编不同ST类型的段元素。仍然如图4所示,所有节点均分配128比特的经典SRv6 SID,假设节点S、A、B的SRv6 SID均处于相同的公共前缀(2001:db80::/32)中,节点C、D的SRv6 SID均处于相同的公共前缀(2002:db80::/32)中,比如:
节点S分配用于标识节点的Node SID 2001:db80:0100::;
节点A分配用于标识节点的Node SID 2001:db80:0a00::;
节点B分配用于标识节点的Node SID 2001:db80:0b00::,另外还为三层链路B->C分配用于标识链路的Adjacency SID 2001:db80:0b01::;
节点C分配用于标识节点的Node SID 2002:db80:0c00::;
节点D分配用于标识节点的Node SID 2002:db80:0d00::;
同样的,假设建立一条从头节点S至尾节点D的SRv6-TE路径,其Segment List为<node A,node B,link B->C,node D>,该Segment List可翻译成SID List<2001:db80:0a00::,2001:db80:0b01::,2002:db80:0d00::>。
在头节点S上,将报文沿上述SID List转发时,可以为报文封装IPv6 Header+SRH-MST。由于SID List中,第一个SID和第二个SID具有相同的公共前缀,则它们可以共享IPv6 Header中的DA中的公共前缀,仅在SRH-MST的段列表中存放它们的差异部分;由于第三个SID的前缀与相邻上一个SID的前缀不同,所以在SRH-MST中需要存放完整的SID信息。SRH-MST的具体封装如图6所示:
第一个段元素对应的<ST,ComprL,Segment>为<2,4,0a00>,表明Segment 1字段中存放的是2字节的IPv6地址片段,该IPv6地址片段可与相应的4字节长的公共前缀拼接成完整IPv6地址,公共前缀存放在IPv6 Header的DA中。
第二个段元素对应的<ST,ComprL,Segment>为<2,4,0b01>,表明Segment 2字段中存放的也是2字节的IPv6地址片段,该IPv6地址片段可与相应的4字节长的公共前缀拼接成完整IPv6地址,公共前缀存放在IPv6 Header的DA中。
第三个段元素对应的<ST,ComprL,Segment>为<0,6,2002:db80:0d00>,表明Segment3字段中存放的是6字节的完整IPv6地址(作为IPv6地址的高位部分,低位补零)。
为了保证段列表的长度为8字节的整数倍,填充的Padding字段占3个字节。此时List Len设置2,表示整个段列表的字节开销占用2个8字节。
下面将描述报文沿该SR-TE路径的转发过程:
1)报文从头节点S出发向逻辑上第一个Segment Node(即节点A)转发,由于头节点掌握了压缩前的原始SID List,所以可以直接将IPv6 Header的DA设置为SID List的第一个SID(2001:db80:0a00::)。
此例中,由于第一个SID(2001:db80:0a00::)也被压缩后存放至SRH-MST的段列表中,所以报文发出时,SRH-MST的Offset字段要发生偏移,指向第二个段元素,即Offset=sizeof<ST,CmprL,Segment 1>=3。
SRH-MST的Segment Left字段设置为2,表明还剩下2个段元素待处理。
报文将根据IPv6 Header的DA,查找路由表,向节点A转发。
2)报文到达节点A时,根据IPv6 Header的DA等于2001:db80:0a00::,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为1;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=3],先读取第一个字节,得到<ST,ComprL>信息为<2,4>,即可知Segment字段中存放的是2字节的IPv6地址片段,则继续读取2字节,得到0x0b01;
Step3:Offset字段发生偏移,指向第三个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 2>=6。
Step4:将0x0b01转换成完整的16字节的IPv6地址,即,从IPv6 Header的DA的逻辑高位4字节中获取公共前缀(2001:db80::),和0x0b01拼接得到2001:db80:0b01::,然后拷贝到IPv6 Header的DA字段中;
Step5:根据IPv6 Header的DA,查找路由表转发报文,报文将向节点B转发。
3)报文到达节点B时,根据IPv6 Header的DA等于2001:db80:0b01::,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为0;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=6],先读取第一个字节,得到<ST,ComprL>信息为<0,6>,即可知Segment字段中存放的是6字节的完整IPv6地址的高位部分,则继续读取6字节,得到2002:db80:0d00;
Step3:Offset字段发生偏移,指向第四个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 3>=13。注意这里实际上并不存在第四个段元素。
Step4:将2002:db80:0d00::拷贝到IPv6 Header的DA字段中;
Step5:由于上述命中的local SID表项中提示将报文沿链路B-C转发,因此不必根据IPv6 Header的DA查找路由表,直接将报文沿链路B-C转发。
4)报文到达节点C时,IPv6 Header的DA等于2001:db80:0d00::,不是节点C的本地地址,则节点C继续根据IPv6 Header的DA查找路由表,将报文向节点D转发。
5)报文到达节点D时,根据IPv6 Header的DA等于2001:db80:0d00::,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,执行以下代码处理SRH-MST:
Step1:检查发现Segment Left等于0,则移除IPv6 header以及SRH-MST,继续根据SRH-MST的Next Header字段识别和处理内层载荷。
实施例三
前述实施例均是举例地址拼接方式的压缩方案,它们依赖网络中的所有节点或者一部分节点的SID具有相同的公共前缀,不过,在有些IPv6网络中,由于历史上的地址规划原因,很难将网络中的节点(即使是很少量的节点)的SID规划在相同的公共前缀内。为了在这类IPv6网络中部署分段路由,我们需要考虑使用一种短小的索引去映射完整IPv6地址的方案。本实施讨论采用MPLS标签作为短小的索引,其它类型的索引如SR-MPLS的prefix-SID或者BI ER的BFR-ID都是类似的。
仍然如图4所示的网络中,所有节点均分配128比特的经典SRv6 SID,比如:
节点S分配用于标识节点的Node SID 2001:db80::0100;
节点A分配用于标识节点的Node SID 2002:db80::0a00;
节点B分配用于标识节点的Node SID 2003:db80::0b00;
节点C分配用于标识节点的Node SID 2004:db80::0c00;
节点D分配用于标识节点的Node SID 2005:db80::0d00;
这些SID没有公共的前缀。
假设各节点还为自身的SID分配短小的MPLS标签,并将相应的MPLS标签至SID的映射关系通告给网络中的其它节点,其它节点收到后,可以在本地重新分配入标签,创建相应的入标签转发表项,在入标签转发表项中给出映射SID信息。标签的分配与通告有多种方式,如LDP、SR-MPLS等。在MPLS架构中,这里的SID就相当于一种FEC。为了使得描述简洁,我们假设对于一个FEC而言,其入标签与出标签的值恰好相等。比如:
节点S从节点A收到了针对SID 2002:db80::0a00的标签(label-a)通告,节点S也为该SID分配入标签(label-a);
节点A从节点B收到了针对SID 2003:db80::0b00的标签(label-b)通告,节点A也为该SID分配入标签(label-b);
节点B从节点C收到了针对SID 2004:db80::0c00的标签(label-c)通告,节点B也为该SID分配入标签(label-c);
节点C从节点D收到了针对SID 2005:db80::0d00的标签(label-d)通告,节点C也为该SID分配入标签(label-d);
节点D针对SID 2005:db80::0d00分配标签(label-d);
假设建立一条从头节点S至尾节点D的SRv6-TE路径,其Segment List为<node A,node B,node C,node D>,这条路径可能有头节点自身计算而得,或者请求控制器计算而得。虽然该Segment List可翻译成SID List<2002:db80::0a00,2003:db80::0b00,2004:db80::0c00,2005:db80::0d00>,但是在SRH-MST中封装这样的SID List将占用非常大的字节开销。由于头节点或控制器知晓映射至这些SID的短小索引,因此更优的SID List为<label-a,label-b,label-c,label-d>。
在头节点S上,将报文沿上述SID List转发时,可以为报文封装IPv6 Header+SRH-MST。如图7所示:
第一个段元素对应的<ST,ComprL,Segment>为<9,0,label-a>,表明Segment 1字段中存放的是3字节的MPLS Label,该MPLS Label查询入标签映射表项获得完整IPv6地址。
第二个段元素对应的<ST,ComprL,Segment>为<9,0,label-b>,表明Segment 2字段中存放的是3字节的MPLS Label,该MPLS Label查询入标签映射表项获得完整IPv6地址。
第三个段元素对应的<ST,ComprL,Segment>为<9,0,label-c>,表明Segment 3字段中存放的是3字节的MPLS Label,该MPLS Label查询入标签映射表项获得完整IPv6地址。
第四个段元素对应的<ST,ComprL,Segment>为<9,0,label-d>,表明Segment 4字段中存放的是3字节的MPLS Label,该MPLS Label查询入标签映射表项获得完整IPv6地址。
由于段列表的长度已经为8字节的整数倍,因此无需填充Padding。此时List Len设置2,表示整个段列表的字节开销占用2个8字节。
下面将描述报文沿该SR-TE路径的转发过程:
1)报文从头节点S出发向逻辑上第一个Segment Node(即节点A)转发,由于头节点掌握了压缩前的原始SID List<2002:db80::0a00,2003:db80::0b00,2004:db80::0c00,2005:db80::0d00>,所以可以直接将IPv6 Header的DA设置为第一个SID(2002:db80::0a00)。或者,头节点可根据压缩后的SID List<label-a,label-b,label-c,label-d>的第一个SID(即label-a)查询相应的入标签映射表项,获取到SID(2002:db80::0a00)信息,再将 其拷贝到IPv6 Header的DA字段。
此例中,由于第一个SID(label-a)也存放至SRH-MST的段列表中,所以报文发出时,SRH-MST的Offset字段要发生偏移,指向第二个段元素,即Offset=sizeof<ST,CmprL,Segment 1>=4。
SRH-MST的Segment Left字段设置为3,表明还剩下3个段元素待处理。
报文将根据IPv6 Header的DA,查找路由表,向节点A转发。
2)报文到达节点A时,根据IPv6 Header的DA等于2002:db80::0a00,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为2;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=4],先读取第一个字节,得到<ST,ComprL>信息为<9,0>,即可知Segment字段中存放的是3字节的MPLS Label,则继续读取3字节,得到label-b;
Step3:Offset字段发生偏移,指向第三个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 2>=8。
Step4:根据label-b查询相应的入标签映射表项,获取到SID(2003:db80::0b00)信息,再将其拷贝到IPv6 Header的DA字段中;
Step5:根据IPv6 Header的DA,查找路由表转发报文,报文将向节点B转发。
3)报文到达节点B时,根据IPv6 Header的DA等于2003:db80::0b00,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为1;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=4],先读取第一个字节,得到<ST,ComprL>信息为<9,0>,即可知Segment字段中存放的是3字节的MPLS Label,则继续读取3字节,得到label-c;
Step3:Offset字段发生偏移,指向第四个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 2>=12。
Step4:根据label-c查询相应的入标签映射表项,获取到SID(2004:db80::0c00)信息,再将其拷贝到IPv6 Header的DA字段中;
Step5:根据IPv6 Header的DA,查找路由表转发报文,报文将向节点C转发。
4)报文到达节点C时,根据IPv6 Header的DA等于2004:db80::0c00,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,顺序执行以下代码处理SRH-MST:
Step1:检查发现Segment Left大于0,则将Segment Left减1,变为0;
Step2:从段列表中读取下一个Segment元素,即读取Segment List[Offset=4],先读取第一个字节,得到<ST,ComprL>信息为<9,0>,即可知Segment字段中存放的是3字节的MPLS Label,则继续读取3字节,得到label-d;
Step3:Offset字段发生偏移,指向第五个段元素,即Offset=Offset+sizeof<ST,CmprL,Segment 2>=16。注意这里实际上并不存在第五个元素。
Step4:根据label-d查询相应的入标签映射表项,获取到SID(2005:db80::0d00)信息,再将其拷贝到IPv6 Header的DA字段中;
Step5:根据IPv6 Header的DA,查找路由表转发报文,报文将向节点C转发。
5)报文到达节点D时,根据IPv6 Header的DA等于2005:db80::0d00,命中本地的local SID表项,则继续根据IPv6 Header的Next Header识别出内层载荷为路由头,并根据路由头的Routing Type识别出是SRH-MST,执行以下代码处理SRH-MST:
Step1:检查发现Segment Left等于0,则移除IPv6 header以及SRH-MST,继续根据SRH-MST的Next Header字段识别和处理内层载荷。
本实施例中,不直接采用MPLS转发是因为网络并不是一个纯粹的MPLS网络,比如节点S与节点A之间并非直连,它们中间可能还存在其它IPv6-only的节点。本实施例仅仅用到了MPLS的标签映射关系,并不是传统的MPLS报文转发行为。
实施例四
从前述实施例可以轻易的推导出,在SRH-MST的段列表中同时封装ST(0-8)与ST(9-11)类型的段元素也是可能的。这本质上是因为各个段元素的解封装是独立的,相互之间没有依赖关系,比如段列表中,当前段元素所包含的压缩信息完全由它自身的<ST,CmprL,Segment>三元组给出,能据此独立的转换得到完整的IPv6地址,与段列表中前一个段元素或者后一个段元素没有任何关系。
对于这种包含有任意类型的段元素的SRH-MST的报文转发流程,与前述实施例完全类似,具体不再赘述。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种IPv6报文的路由头封装装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图8是根据本发明实施例的IPv6报文的路由头封装装置的结构框图,如图8所示,该装置位于SRv6域的头节点100中,该装置包括封装模块10和发送模块20.
封装模块10设置为对IPv6报文进行路由头的封装。发送模块20设置为将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述路由头包括如下字段:
Next Header:占8比特,表示在所述路由头之后的内层头类型;
Hdr Ext Len:占8比特,表示所述路由头的字节开销;
Routing Type:占8比特,表示所述路由头的类型;
Segments Left:占8比特,表示所述路由头所包含的段列表中剩余待访问的段的数量;
List Len:表示所述路由头所包含的段列表的字节开销;
Offset:为占12比特的无符号整数,表示当前访问的Segment在段列表中的位置;
Reserved:占12比特,保留字段;
多个<ST,CmprL,Segment>,每个<ST,CmprL,Segment>为所述段列表中的一个元素,其中,ST:占4比特,表示压缩后的段的类型;CmprL:占4比特,表示公共前缀的长度;Segment:表示压缩后的段内容,其长度由ST确定;
Padding:可选的填充字段。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (25)

  1. 一种IPv6报文的扩展头封装方法,包括:
    头节点对IPv6报文进行扩展头的封装,并将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述扩展头至少包括以下信息:
    段列表:所述段列表中包含一个或多个段元素,其中,每个段元素包括:段标识,表示对应访问路径上每个节点的标识,所述段标识可转换成对应节点上的IPv6地址;段类型信息,表示本段的类型;
    剩余段个数信息:表示所述扩展头所包含的段列表中剩余待访问的段的数量。
  2. 根据权利要求1所述的方法,其中,所述段类型包括但不限于以下类型之一:
    完整的IPv6地址;特定长度的地址片段,该地址片段可与相应的公共前缀拼接成完整IPv6地址;映射索引,通过索引可查询映射表获得完整的IPv6地址。
  3. 根据权利要求2所述的方法,所述映射索引包括以下之一:MPLS标签索引,通过所述MPLS标签索引可查询映射表获得完整IPv6地址;BIER BFR-ID索引,通过所述BFR-ID索引可查询映射表获得完整IPv6地址。
  4. 根据权利要求1所述的方法,所述每个段元素还包括从段标识恢复IPv6地址的辅助信息。
  5. 根据权利要求4所述的方法,所述辅助信息为所述段标识所属的公共前缀的长度。
  6. 根据权利要求5所述的方法,IPv6域的中间节点或尾节点接收到所述IPv6报文时,根据段类型值,读取相应长度的Segment,并结合所述辅助信息,将Segment转换为完整的新IPv6地址继续转发。
  7. 根据权利要求1所述的方法,所述IPv6报文的扩展头为新定义的类型的扩展头,或IPv6路由头。
  8. 根据权利要求7所述的方法,所述IPv6报文的扩展头还包括偏移量信息,用于定位访问每个段元素的位置。
  9. 根据权利要求8所述的方法,头节点在封装IPv6报文的扩展头时,所述偏移量的值设置指向下一个待处理的段元素。
  10. 根据权利要求8所述的方法,中间节点在处理所述IPv6报文时,根据段类型获取本段标识的长度,在偏移量上增加上段类型长度以及段标识长度,使得偏移量指向下一个段元素的开始。
  11. 根据权利要求1所述的方法,所述扩展头包括如下至少之一字段:
    Next Header:占8比特,表示在所述扩展头之后的内层头类型;
    Hdr Ext Len:占8比特,表示所述扩展头的字节开销;
    Routing Type:占8比特,表示所述扩展头的类型;
    Segments Left:占8比特,表示所述扩展头所包含的段列表中剩余待访问的段的数量;
    List Len:表示所述扩展头所包含的段列表的字节开销;
    Offset:为占12比特的无符号整数,表示当前访问的Segment在段列表中的位置;
    Reserved:占12比特,保留字段;
    多个<ST,CmprL,Segment>,每个<ST,CmprL,Segment>为所述段列表中的一个元素,其中,ST:占4比特,表示压缩后的段的类型;CmprL:占4比特,表示公共前缀的长度;Segment:表示压缩后的段内容,其长度由ST确定;
    Padding:可选的填充字段。
  12. 根据权利要求11所述的方法,其中,所述IPv6报文的扩展头还包括可选的类型长度值TLV字段。
  13. 根据权利要求11所述的方法,其中,所述ST包括以下类型之一:
    类型0:表示相应的Segment为完整的IPv6地址;
    类型1:表示相应的Segment为1字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型2:表示相应的Segment为2字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型3:表示相应的Segment为3字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型4:表示相应的Segment为4字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型5:表示相应的Segment为5字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型6:表示相应的Segment为6字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型7:表示相应的Segment为7字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型8:表示相应的Segment为8字节的IPv6地址片段,该IPv6地址片段可与相应的公共前缀拼接成完整IPv6地址;
    类型9:表示相应的Segment为3字节的MPLS Label索引,通过该MPLS Label索引可 查询映射表获得完整IPv6地址;
    类型10:表示相应的Segment为4字节的SR-MPLS SID索引,通过该SR-MPLS SID索引可查询映射表获得完整IPv6地址;
    类型11:表示相应的Segment为4字节的BIER BFR-ID索引,通过该BFR-ID索引可查询映射表获得完整IPv6地址。
  14. 根据权利要求13所述的方法,其中,当ST为类型0时,CmprL表示Segment字段的实际长度;当ST为类型1-8时,CmprL表示相应Segment所属的公共前缀的长度;当ST为类型9-11时,CmprL的值无意义。
  15. 根据权利要求1所述的方法,其中,所述扩展头中的段列表采用正序存放方式,或采用逆序存放方式。
  16. 根据权利要求1所述的方法,其中,在一条路径列表上,当SRv6域的所有节点的SRv6 SID均具有相同的公共前缀,则将所述公共前缀存放在IPv6 Header的DA中,将各节点的SRv6 SID的差异部分作为压缩后的信息存放在所述扩展头的段列表中。
  17. 根据权利要求1所述的方法,其中,所述头节点在为所述IPv6报文封装所述扩展头时,对于段列表<S1,S2,S3,...,Sn>,将S1拷贝至IPv6 Header的DA字段,如果S1被保存在所述扩展头中,则Offset设置为指向所述扩展头中的段列表中的第二个元素,Segment Left=n-1,表示段列表中还剩下有n-1个段元素待处理,其中n为正整数。
  18. 根据权利要求1所述的方法,其中,所述头节点在为所述IPv6报文封装所述扩展头时,对于段列表<S1,S2,S3,...,Sn>,将S1拷贝至IPv6 Header的DA字段,如果S1未存放在所述扩展头中,则Offset设置为指向所述扩展头中的段列表中的第一个元素,Segment Left=n-1,表示段列表中还剩下有n-1个段元素待处理,其中n为正整数。
  19. 根据权利要求11所述的方法,所述方法还包括:
    所述SRv6域的中间节点或尾节点接收到所述IPv6报文时,如果IPv6 Header中的DA与本地的IP地址匹配,并且IPv6 Header的Next Header字段提示下一层头是所述扩展头,则继续处理所述IPv6报文。
  20. 根据权利要求19所述的方法,其中,继续处理所述IPv6报文包括:
    如果Segments Left等于0,则继续处理内层载荷,所述内层载荷的类型根据所述扩展头的Next Header字段确定;
    如果Segments Left不等于0,则将Segments Left减1,读取下一个Segment,Offset的当前值指向的就是下一个<ST,CmprL,Segment>的首地址,根据ST的类型值,读取相应长度的Segment,并结合CmprL的信息,将Segment转换为完整的新IPv6 address;
    使Offset指向下下一个<ST,CmprL,Segment>的首地址;
    如果Offset大于List Len*8,则丢弃所述IPv6报文,并向IPv6 Header的Source Address发送差错报文;
    如果IPv6 Header的IPv6 Hop Limit值小于或等于1,则丢弃所述IPv6报文,并向IPv6 Header的Source Address发送ICMP Time Exceeded-Hop Limit Exceeded in Transit报文;如果IPv6 Header的IPv6 Hop Limit值大于1,则将所述Hop Limit值减1;
    将转换得到的所述新IPv6 address拷贝到IPv6 Header的DA,并根据新的DA查IPv6路由表转发所述IPv6报文。
  21. 一种IPv6报文的扩展头封装装置,包括:
    封装模块,设置为对IPv6报文进行扩展头的封装;
    发送模块,设置为将封装后的所述IPv6报文发送至SRv6域的下一节点,其中,所述扩展头包括如下信息:
    段列表:所述段列表中包含一个或多个段元素,其中,每个段元素包括:段标识,表示对应访问路径上每个节点的标识,所述段标识可转换成对应节点上的IPv6地址;段类型信息,表示本段的类型;
    剩余段个数信息:表示所述扩展头所包含的段列表中剩余待访问的段的数量。
  22. 根据权利要求21所述的装置,其中,所述IPv6报文的扩展头封装装置位于头节点中、或位于中间节点中、或位于尾节点中。
  23. 根据权利要求21所述的装置,所述扩展头包括如下至少之一字段:
    Next Header:占8比特,表示在所述扩展头之后的内层头类型;
    Hdr Ext Len:占8比特,表示所述扩展头的字节开销;
    Routing Type:占8比特,表示所述扩展头的类型;
    Segments Left:占8比特,表示所述扩展头所包含的段列表中剩余待访问的段的数量;
    List Len:表示所述扩展头所包含的段列表的字节开销;
    Offset:为占12比特的无符号整数,表示当前访问的Segment在段列表中的位置;
    Reserved:占12比特,保留字段;
    多个<ST,CmprL,Segment>,每个<ST,CmprL,Segment>为所述段列表中的一个元素,其中,ST:占4比特,表示压缩后的段的类型;CmprL:占4比特,表示公共前缀的长度;Segment:表示压缩后的段内容,其长度由ST确定;
    Padding:可选的填充字段。
  24. 一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至20任一项中所述的方法的步骤。
  25. 一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现所述权利要求1至20任一项中所述的方法的步骤。
PCT/CN2021/124163 2020-10-15 2021-10-15 IPv6报文的扩展头封装方法及装置 WO2022078509A1 (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202011105906.1 2020-10-15
CN202011105906.1A CN112491708A (zh) 2020-10-15 2020-10-15 IPv6报文的路由头封装方法及装置

Publications (1)

Publication Number Publication Date
WO2022078509A1 true WO2022078509A1 (zh) 2022-04-21

Family

ID=74926652

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2021/124163 WO2022078509A1 (zh) 2020-10-15 2021-10-15 IPv6报文的扩展头封装方法及装置

Country Status (2)

Country Link
CN (1) CN112491708A (zh)
WO (1) WO2022078509A1 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115022415A (zh) * 2022-05-23 2022-09-06 烽火通信科技股份有限公司 一种多层sid报文终结方法及装置
CN115396354A (zh) * 2022-08-24 2022-11-25 苏州盛科通信股份有限公司 SRv6报文SID分段查询的方法及应用
EP4123990A1 (en) * 2021-07-20 2023-01-25 Nokia Solutions and Networks Oy Source route compression
WO2023207147A1 (zh) * 2022-04-25 2023-11-02 中兴通讯股份有限公司 IPv6报文处理方法、节点、存储介质和程序产品
CN117596206A (zh) * 2024-01-19 2024-02-23 明阳产业技术研究院(沈阳)有限公司 SRv6 SID动态压缩编排方法、系统、交换装置、介质及设备
CN117896177A (zh) * 2024-03-12 2024-04-16 明阳产业技术研究院(沈阳)有限公司 一种基于IPv6密码标识的SRv6通信方法及系统
CN117896177B (zh) * 2024-03-12 2024-05-14 明阳产业技术研究院(沈阳)有限公司 一种基于IPv6密码标识的SRv6通信方法及系统

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112491708A (zh) * 2020-10-15 2021-03-12 中兴通讯股份有限公司 IPv6报文的路由头封装方法及装置
CN112804149B (zh) * 2021-04-13 2021-08-31 新华三技术有限公司 一种寻找路径的方法及装置
CN115314150A (zh) * 2021-04-21 2022-11-08 中兴通讯股份有限公司 一种报文处理方法、装置、存储介质及电子装置
CN113347092B (zh) * 2021-05-27 2022-12-20 大连理工大学 一种基于IPv6的SRv6数据处理方法
CN113364677B (zh) * 2021-06-07 2022-06-07 北京工业大学 一种SRv6 Endpoint故障保护方法
CN113242180B (zh) * 2021-07-12 2021-12-14 广东省新一代通信与网络创新研究院 报文转发方法、装置、设备、可读存储介质及程序产品
CN113726654B (zh) * 2021-08-13 2023-05-26 新华三信息安全技术有限公司 Srv6协议的报文转发方法、装置、电子设备及介质
CN113709031B (zh) * 2021-08-30 2022-10-21 烽火通信科技股份有限公司 一种约束路由传输分发的方法和装置
CN113872866B (zh) * 2021-09-28 2023-04-07 中国电信股份有限公司 报文转发方法、系统以及存储介质
CN116566880A (zh) * 2022-01-30 2023-08-08 华为技术有限公司 路由通告的方法、网络设备和系统
CN114448881B (zh) * 2022-02-25 2023-06-09 烽火通信科技股份有限公司 一种跨sr mpls与srv6域互操作通信的方法和系统
CN117240769A (zh) * 2022-06-06 2023-12-15 华为技术有限公司 一种报文控制方法以及相关装置
CN116192968B (zh) * 2023-01-10 2024-02-13 广东云下汇金科技有限公司 一种基于SRv6的IPv6报文数据处理方法和通信方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109379359A (zh) * 2018-10-19 2019-02-22 盛科网络(苏州)有限公司 SRv6数据包的处理方法和装置
CN110912795A (zh) * 2018-09-14 2020-03-24 中兴通讯股份有限公司 一种传输控制方法、节点、网络系统及存储介质
CN111385199A (zh) * 2018-12-28 2020-07-07 瞻博网络公司 经压缩的路由报头
US20200322266A1 (en) * 2019-04-04 2020-10-08 Cisco Technology Inc. Applying Attestation to Segment Routing
CN112491708A (zh) * 2020-10-15 2021-03-12 中兴通讯股份有限公司 IPv6报文的路由头封装方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110912795A (zh) * 2018-09-14 2020-03-24 中兴通讯股份有限公司 一种传输控制方法、节点、网络系统及存储介质
CN109379359A (zh) * 2018-10-19 2019-02-22 盛科网络(苏州)有限公司 SRv6数据包的处理方法和装置
CN111385199A (zh) * 2018-12-28 2020-07-07 瞻博网络公司 经压缩的路由报头
US20200322266A1 (en) * 2019-04-04 2020-10-08 Cisco Technology Inc. Applying Attestation to Segment Routing
CN112491708A (zh) * 2020-10-15 2021-03-12 中兴通讯股份有限公司 IPv6报文的路由头封装方法及装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4123990A1 (en) * 2021-07-20 2023-01-25 Nokia Solutions and Networks Oy Source route compression
WO2023207147A1 (zh) * 2022-04-25 2023-11-02 中兴通讯股份有限公司 IPv6报文处理方法、节点、存储介质和程序产品
CN115022415A (zh) * 2022-05-23 2022-09-06 烽火通信科技股份有限公司 一种多层sid报文终结方法及装置
CN115022415B (zh) * 2022-05-23 2023-08-25 烽火通信科技股份有限公司 一种多层sid报文终结方法及装置
CN115396354A (zh) * 2022-08-24 2022-11-25 苏州盛科通信股份有限公司 SRv6报文SID分段查询的方法及应用
CN115396354B (zh) * 2022-08-24 2023-06-02 苏州盛科通信股份有限公司 SRv6报文SID分段查询的方法及应用
CN117596206A (zh) * 2024-01-19 2024-02-23 明阳产业技术研究院(沈阳)有限公司 SRv6 SID动态压缩编排方法、系统、交换装置、介质及设备
CN117596206B (zh) * 2024-01-19 2024-03-26 明阳产业技术研究院(沈阳)有限公司 SRv6 SID动态压缩编排方法、系统、交换装置、介质及设备
CN117896177A (zh) * 2024-03-12 2024-04-16 明阳产业技术研究院(沈阳)有限公司 一种基于IPv6密码标识的SRv6通信方法及系统
CN117896177B (zh) * 2024-03-12 2024-05-14 明阳产业技术研究院(沈阳)有限公司 一种基于IPv6密码标识的SRv6通信方法及系统

Also Published As

Publication number Publication date
CN112491708A (zh) 2021-03-12

Similar Documents

Publication Publication Date Title
WO2022078509A1 (zh) IPv6报文的扩展头封装方法及装置
CN106059924B (zh) 一种管理信息的方法,装置及系统
US10237130B2 (en) Method for processing VxLAN data units
US20070147421A1 (en) ISATAP router for tunneling packets and method thereof
CN107770073B (zh) 一种信息同步的方法,装置及系统
WO2020156166A1 (zh) 用于处理报文的方法和装置
US10791051B2 (en) System and method to bypass the forwarding information base (FIB) for interest packet forwarding in an information-centric networking (ICN) environment
CN108933756B (zh) 一种数据包的处理方法、接入网设备及计算机可读存储介质
US20090135833A1 (en) Ingress node and egress node with improved packet transfer rate on multi-protocol label switching (MPLS) network, and method of improving packet transfer rate in MPLS network system
WO2012156852A1 (en) Label switched routing to connect low power network domains
EP3813318B1 (en) Packet transmission method, communication device, and system
US20220255772A1 (en) Packet sending method, apparatus, and system
US9467367B2 (en) Universal labels in internetworking
KR20140034951A (ko) 무선 메쉬 네트워크에서 컨텍스트 기반의 IPv6 헤더 압축을 위한 컨텍스트 테이블 관리 방법
KR20220047854A (ko) Sr 네트워크에서의 패킷 포워딩 방법, 장치 및 시스템
WO2022184169A1 (zh) 报文转发方法、系统、存储介质及电子装置
WO2021197141A1 (zh) 业务处理方法、装置、设备及存储介质
US8547998B2 (en) Tunneling IPv6 packet through IPv4 network using a tunnel entry based on IPv6 prefix and tunneling IPv4 packet using a tunnel entry based on IPv4 prefix
WO2017041534A1 (zh) 一种电力线网络通信的方法及装置、计算机存储介质
US20240039846A1 (en) Asymmetric Addressing For Limited Domains and Internet
CN111740908A (zh) 通信方法及相关设备
CN113630316A (zh) 一种数据传输方法及通信装置
WO2023024663A1 (zh) 路由和云资源注册方法及装置、存储介质和电子装置
CN116319553A (zh) 一种表项查找方法以及网络设备
CN113497767A (zh) 传输数据的方法、装置、计算设备及存储介质

Legal Events

Date Code Title Description
NENP Non-entry into the national phase

Ref country code: DE

32PN Ep: public notification in the ep bulletin as address of the adressee cannot be established

Free format text: NOTING OF LOSS OF RIGHTS PURSUANT TO RULE 112(1) EPC (EPO FORM 1205A DATED 08/09/2023)