📄 ipv6协议.htm
字号:
<P align=justify>分片首部</FONT></P></TD></TR>
<TR>
<TD vAlign=top><FONT face=宋体 size=3>
<P align=justify>认证首部 (注 2)</FONT></P></TD></TR>
<TR>
<TD vAlign=top><FONT face=宋体 size=3>
<P align=justify>封装安全有效数据首部 (注 2)</FONT></P></TD></TR>
<TR>
<TD vAlign=top><FONT face=宋体 size=3>
<P align=justify>目的地址选项首部 (注 3)</FONT></P></TD></TR>
<TR>
<TD vAlign=top><FONT face=宋体 size=3>
<P
align=justify>上层协议首部</FONT></P></TD></TR></TBODY></TABLE></CENTER></DIV><FONT
face=宋体 size=3>
<P align=justify>注 1: 由IPv6目的地址字段及路由首部列出的后续地址中第一个出现的目的地址处理的选项。<BR>注 2:
关于认证首部和封装安全有效数据首部的相关顺序的附加建议参见其它文献。<BR>注 3: 只由包的最终目的地址处理的选项。</P>
<P align=justify>除了目的地址选项首部最多出现两次
(一次在路由首部前,一次在上层协议首部前)以外,每个扩展首部应当只出现一次。如果上层协议首部是另一个IPv6首部
(在使用通道技术或封装在IPv6中的情况下),它后面可以有自己的扩展首部.
这些扩展首部以同样的建议顺序独立排列。如果定义了其他的扩展首部,与上面列出的扩展首部相关的次序限制必须加以说明。除了 Hop-by-Hop
选项首部必须紧跟在IPv6首部后面以外,IPv6节点必须接受并且尽量处理任意顺序的,以及在同一个包内出现任意多次的扩展首部。尽管如此,建议IPv6包的源节点遵守上面的建议顺序,除非后续的协议规范修改这一顺序。</P>
<P align=justify>4.2 选项</P>
<P align=justify>当前已定义的扩展首部中的两个:Hop-by-Hop
选项首部和目的地址选项首部,携带不定数量的,以类型-长度-值(TLV)格式进行编码的选项,其格式如下:</P>
<P align=center><IMG height=52 alt=选项格式 src="IPv6协议.files/IPv6-3.gif"
width=363></P></FONT>
<TABLE cellSpacing=1 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="47%"><FONT face=宋体 size=3>
<P align=justify>选项类型</FONT></P></TD>
<TD vAlign=top width="153%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位标识符,标识选项的类型。</FONT></P></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="47%"><FONT face=宋体 size=3>
<P align=justify>选项数据长度</FONT></P></TD>
<TD vAlign=top width="153%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8
位无符号整数。以八位组为单位的选项数据字段的长度。</P></FONT></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="47%"><FONT face=宋体 size=3>
<P align=justify>选项数据</FONT></P></TD>
<TD vAlign=top width="153%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P
align=justify>可变长度字段。依选项类型而不同的数据。</FONT></P></BLOCKQUOTE></TD></TR></TBODY></TABLE><FONT
face=宋体 size=3>
<P
align=justify>首部中的选项必须严格按照它们在首部中出现的次序来处理;这样,接收方就不能搜索整个首部来寻找某个特定类型的选项,并且在处理所有前面的选项之前处理它。选项类型标识符以如下规则编码:
其最高两位指定了当IPv6节点无法识别这一选项类型时所必须的反应:</FONT></P>
<TABLE cellSpacing=1 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="24%"><FONT face=宋体 size=3>
<P align=justify>00</FONT></P></TD>
<TD vAlign=top width="176%"><FONT face=宋体 size=3>
<P align=justify>跳过这一选项,继续处理首部。</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="24%"><FONT face=宋体 size=3>
<P align=justify>01</FONT></P></TD>
<TD vAlign=top width="176%"><FONT face=宋体 size=3>
<P align=justify>抛弃这个包</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="24%"><FONT face=宋体 size=3>
<P align=justify>10</FONT></P></TD>
<TD vAlign=top width="176%"><FONT face=宋体 size=3>
<P align=justify>抛弃这个包,并且不管包的目的地址是不是组播地址,都给包的源地址发送一个 ICMP
"参数存在问题",编码 2 的报文,指针指向无法识别的选项类型。</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="24%"><FONT face=宋体 size=3>
<P align=justify>11</FONT></P></TD>
<TD vAlign=top width="176%"><FONT face=宋体 size=3>
<P align=justify>抛弃这个包,并且只有当包的目的地址不是组播地址时,才给包的源地址发送一个 ICMP
"参数存在问题",编码 2 的报文,指针指向无法识别的选项类型。</FONT></P></TD></TR></TBODY></TABLE><FONT
face=宋体 size=3>
<P
align=justify>选项类型标识符的第三位指明了选项数据是否可以改变到最终目的地址的选路。若存在认证首部,在包计算或校验认证值时,可改变选路的选项的整个数据字段都必须当作全零的八位组来处理。</P>
<P align=justify>0 - 选项数据不会改变选路<BR>1 - 选项数据可能改变选路</P>
<P align=justify>上述的前三位应作为选项类型的一部分,而不能独立于选项类型之外。这就是说,某一特定的选项是由全部 8
位的选项类型标识符标识的,而并不只是选项类型中的后面 5 位。Hop-by-Hop
选项首部和目的地址选项首部使用相同的选项类型编码空间。尽管如此,某一特定类型的选项的规范可以限制其只用于两者之一。有些选项可能具有明确的对齐要求,以保证选项数据字段中的多八位组值能够落在其自然边界上。选项的对齐要求用符号
xn+y 来说明,表示选项类型必须出现在从首部开始位置处 x 个八位组的整数倍加上 y 个八位组的位置上。例如: 2n表示从首部开始处 2
个八位组的整数倍的偏移量。8n+2 表示从首部开始处 8 个八位组的整数倍加上 2
个八位组的偏移量。有两种填充选项,用来在需要时对齐后续的选项,以及把整个首部填充成 8
个八位组的整数倍长。所有的IPv6实现都必须能够识别这些填充选项。</P>
<P align=justify>填充1 选项 (对齐要求: 无)</P>
<P align=center><IMG height=52 src="IPv6协议.files/IPv6-4.gif"
width=128></P>
<P align=justify>填充1 选项是一种特殊情况 -- 它没有长度字段和数值字段。填充1
选项用于在首部的选项区填充一个八位组。如果需要填充多于一个的八位组,那么就应该使用下面要介绍的填充N 选项,而不是多个填充1 选项。</P>
<P align=justify>填充N 选项 (对齐要求: 无)</P>
<P align=center><IMG height=48 src="IPv6协议.files/IPv6-5.gif"
width=357></P>
<P align=justify>填充N 选项用于在首部的选项区填充两个或两个以上的八位组。对于 N 个八位组的填充,选项数据长度字段应包含值
N-2,选项数据由 N-2 个零值八位组组成。</P>
<P align=justify>4.3 Hop-by-Hop 选项首部</P>
<P align=justify>Hop-by-Hop 选项首部用于传送必须由包的传送路径中的每个节点检测的可选信息。Hop-by-Hop
选项首部由IPv6首部中"下一个首部"字段值为 0 来标识,并且具有如下的格式:</P>
<P align=center><IMG height=126 alt=Hop-by-Hop选项首部
src="IPv6协议.files/IPv6-6.gif" width=467></P></FONT>
<TABLE cellSpacing=1 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="52%"><FONT face=宋体 size=3>
<P align=justify>下一个首部</FONT></P></TD>
<TD vAlign=top width="148%">
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位选择器。标识紧跟在Hop-by-Hop 选项首部后面的首部的类型。使用与 IPv4
协议字段 相同的数值。</FONT></P></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="52%"><FONT face=宋体 size=3>
<P align=justify>首部扩展长度</FONT></P></TD>
<TD vAlign=top width="148%">
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位无符号整数。以 8 个八位组为单位的 Hop-by-Hop选项首部的长度,不包括开始的
8 个八位组。</P></FONT></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="52%"><FONT face=宋体 size=3>
<P align=justify>选项</FONT></P></TD>
<TD vAlign=top width="148%">
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>可变长度字段,其长度须使整个 Hop-by-Hop 选项首部的长度为 8
个八位组的整数倍。包含一个或多个 TLV 编码的选项,如第 4.2
章中所述。</P></FONT></BLOCKQUOTE></BLOCKQUOTE></TD></TR></TBODY></TABLE><FONT
face=宋体 size=3>
<P align=justify>在本文中定义的仅有的 Hop-by-Hop 选项是填充1 及填充N 选项。</P>
<P align=justify>4.4 路由首部</P>
<P align=justify>路由首部用于IPv6源节点列出到包的目的节点的路径中所应"访问"的一个或多个中间节点。这一功能十分类似于 IPv4
的松散源地址和路由记录选项。前面的首部中"下一个首部"字段中的值为 43 表示下一个首部为路由首部。路由首部具有如下的格式:</P>
<P align=center><IMG height=124 alt=路由首部 src="IPv6协议.files/IPv6-7.gif"
width=463></P></FONT>
<TABLE cellSpacing=1 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="38%"><FONT face=宋体 size=3>
<P align=justify>下一个首部</FONT></P></TD>
<TD vAlign=top width="162%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位选择器。标识紧跟在路由首部后面的首部的类型。使用与 IPv4
协议字段相同的数值。</FONT></P></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="38%"><FONT face=宋体 size=3>
<P align=justify>首部扩展长度</FONT></P></TD>
<TD vAlign=top width="162%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位无符号整数。以 8 个八位组为单位的路由首部的长度,不包括开始的 8
个八位组。</P></FONT></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="38%"><FONT face=宋体 size=3>
<P align=justify>路由类型</FONT></P></TD>
<TD vAlign=top width="162%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位的某种特定路由首部变量的标识符。</FONT></P></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="38%"><FONT face=宋体 size=3>
<P align=justify>分段剩余</FONT></P></TD>
<TD vAlign=top width="162%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8
位无符号整数。剩余的路由分段的数量。也就是在到达最终的目的节点之前仍然应当访问的,明确列出的中间节点的数量。</P></FONT></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="38%"><FONT face=宋体 size=3>
<P align=justify>特定类型的数据</FONT></P></TD>
<TD vAlign=top width="162%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>可变长度字段。其格式由路由类型决定,其长度须使整个路由首部的长度为 8
个八位组的整数倍。</P></FONT></BLOCKQUOTE></TD></TR></TBODY></TABLE><FONT face=宋体
size=3>
<P
align=justify>如果节点在处理收到的包的过程中遇到了含有无法识别的路由类型值的路由首部,节点应根据分段剩余字段中的值进行处理,如下所述:如果分段剩余值是零,节点必须忽略路由首部,继续处理包中的下一个首部,其类型由路由首部中的"下一个首部"字段中的值来标识。如果分段剩余值非零,节点必须抛弃这个包,并且给包的源地址发送一个
ICMP"参数存在问题",编码 0 的报文,指针指向无法识别的路由类型。如果中间节点在处理路由首部之后,确定应将包传送到一个链路 MTU
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -