ipv6报文封装linux,IPv6报文的路由头封装方法及装置与流程
技术特征:
1.一种ipv6报文的路由头封装方法,其特征在于,包括:
头节点对ipv6报文进行路由头的封装,并将封装后的所述ipv6报文发送至srv6域的下一节点,其中,所述路由头包括如下字段:
nextheader:占8比特,表示在所述路由头之后的内层头类型;
hdrextlen:占8比特,表示所述路由头的字节开销;
routingtype:占8比特,表示所述路由头的类型;
segmentsleft:占8比特,表示所述路由头所包含的段列表中剩余待访问的段的数量;
listlen:表示所述路由头所包含的段列表的字节开销;
offset:为占12比特的无符号整数,表示当前访问的segment在段列表中的位置;
reserved:占12比特,保留字段;
多个,每个为所述段列表中的一个元素,其中,st:占4比特,表示压缩后的段的类型;cmprl:占4比特,表示公共前缀的长度;segment:表示压缩后的段内容,其长度由st确定;
padding:可选的填充字段。
2.根据权利要求1所述的方法,其特征在于,所述ipv6报文的路由头还包括可选的类型长度值tlv字段。
3.根据权利要求1所述的方法,其特征在于,所述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字节的mplslabel索引,通过该mplslabel索引可查询映射表获得完整ipv6地址;
类型10:表示相应的segment为4字节的sr-mplssid索引,通过该sr-mplssid索引可查询映射表获得完整ipv6地址;
类型11:表示相应的segment为4字节的bierbfr-id索引,通过该bfr-id索引可查询映射表获得完整ipv6地址。
4.根据权利要求3所述的方法,其特征在于,其中,当st为类型0时,cmprl表示segment字段的实际长度;当st为类型1-8时,cmprl表示相应segment所属的公共前缀的长度;当st为类型9-11时,cmprl的值无意义。
5.根据权利要求1所述的方法,其特征在于,其中,所述路由头中的段列表采用正序存放方式。
6.根据权利要求1所述的方法,其特征在于,其中,当srv6域的所有节点的srv6sid均具有相同的公共前缀,则将所述公共前缀存放在ipv6header的da中,将各节点的srv6sid的差异部分作为压缩后的信息存放在所述路由头的段列表中。
7.根据权利要求1所述的方法,其特征在于,其中,所述头节点在为所述ipv6报文封装所述路由头时,对于段列表,将s1拷贝至ipv6header的da字段,如果s1被保存在所述路由头中,则offset设置为指向所述路由头中的段列表中的第二个元素,segmentleft=n-1,表示段列表中还剩下有n-1个段元素待处理,其中n为正整数。
8.根据权利要求1所述的方法,其特征在于,所述头节点在为所述ipv6报文封装所述路由头时,对于段列表,将s1拷贝至ipv6header的da字段,如果s1未存放在所述路由头中,则offset设置为指向所述路由头中的段列表中的第一个元素,segmentleft=n-1,表示段列表中还剩下有n-1个段元素待处理,其中n为正整数。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述srv6域的中间节点或尾节点接收到所述ipv6报文时,如果ipv6header中的da与本地的ip地址匹配,并且ipv6header的nextheader字段提示下一层头是所述路由头,则继续处理所述ipv6报文。
10.根据权利要求9所述的方法,其特征在于,其中,继续处理所述ipv6报文包括:
如果segmentsleft等于0,则继续处理内层载荷,所述内层载荷的类型根据所述路由头的nextheader字段确定;
如果segmentsleft不等于0,则将segmentsleft减1,读取下一个segment,offset的当前值指向的就是下一个的首地址,根据st的类型值,读取相应长度的segment,并结合cmprl的信息,将segment转换为完整的新ipv6address;
使offset指向下下一个的首地址;
如果offset大于listlen*8,则丢弃所述ipv6报文,并向ipv6header的sourceaddress发送差错报文;
如果ipv6header的ipv6hoplimit值小于或等于1,则丢弃所述ipv6报文,并向ipv6header的sourceaddress发送icmptimeexceeded-hoplimitexceededintransit报文;如果ipv6header的ipv6hoplimit值大于1,则将所述hoplimit值减1;
将转换得到的所述新ipv6address拷贝到ipv6header的da,并根据新的da查ipv6路由表转发所述ipv6报文。
11.一种ipv6报文的路由头封装装置,位于头节点中,其特征在于,包括:
封装模块,用于对ipv6报文进行路由头的封装;
发送模块,用于将封装后的所述ipv6报文发送至srv6域的下一节点,其中,所述路由头包括如下字段:
nextheader:占8比特,表示在所述路由头之后的内层头类型;
hdrextlen:占8比特,表示所述路由头的字节开销;
routingtype:占8比特,表示所述路由头的类型;
segmentsleft:占8比特,表示所述路由头所包含的段列表中剩余待访问的段的数量;
listlen:表示所述路由头所包含的段列表的字节开销;
offset:为占12比特的无符号整数,表示当前访问的segment在段列表中的位置;
reserved:占12比特,保留字段;
多个,每个为所述段列表中的一个元素,其中,st:占4比特,表示压缩后的段的类型;cmprl:占4比特,表示公共前缀的长度;segment:表示压缩后的段内容,其长度由st确定;
padding:可选的填充字段。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至10任一项中所述的方法的步骤。
13.一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至10任一项中所述的方法的步骤。