📄 ipv6协议.htm
字号:
小于此包的大小的链路中去,那么中间节点必须抛弃此包,并且给包的源地址发送一个 ICMP"包太大"的报文。</P>
<P align=justify>类型 0 的路由首部具有如下格式:</P>
<P align=center><IMG height=362 alt=类型0 src="IPv6协议.files/IPv6-8.gif"
width=466></P></FONT>
<TABLE cellSpacing=1 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="30%"><FONT face=宋体 size=3>
<P align=justify>下一个首部</FONT></P></TD>
<TD vAlign=top width="170%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位选择器。标识紧跟在路由首部后面的首部的类型。使用与 IPv4
协议字段相同的数值。</P></FONT></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="30%"><FONT face=宋体 size=3>
<P align=justify>首部扩展长度</FONT></P></TD>
<TD vAlign=top width="70%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8 位无符号整数。以 8 个八位组为单位的路由首部的长度,不包括开始的 8 个八位组。对于类型 0
的路由首部,首部扩展长度等于首部中地址数量的两倍。</P></FONT></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="30%"><FONT face=宋体 size=3>
<P align=justify>路由类型</FONT></P></TD>
<TD vAlign=top width="170%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>0</FONT></P></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="30%"><FONT face=宋体 size=3>
<P align=justify>分段剩余</FONT></P></TD>
<TD vAlign=top width="170%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>8
位无符号整数。剩余的路由分段的数量。也就是在到达最终的目的节点之前仍然应当访问的,明确列出的中间节点的数量。</P></FONT></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="30%"><FONT face=宋体 size=3>
<P align=justify>保留</FONT></P></TD>
<TD vAlign=top width="170%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>32
位保留字段。传输时初始化为零;接收时忽略。</FONT></P></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width="30%"><FONT face=宋体 size=3>
<P align=justify>地址[1..n]</FONT></P></TD>
<TD vAlign=top width="170%">
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>128 位地址向量,从 1 到 n
编号。</FONT></P></BLOCKQUOTE></TD></TR></TBODY></TABLE><FONT face=宋体 size=3>
<P align=justify>不允许组播地址出现在类型 0 的路由首部中,也不允许出现在携带类型 0
路由首部的包中的IPv6目的地址字段中。直到包到达IPv6首部中的目的地址字段所标识的那个节点才对路由首部进行检测和处理。在这个节点调用路由首部处理模块,并且对于路由类型
0,执行下面的算法:</P>
<P align=justify> </P><PRE> if 分段剩余 = 0 {
继续处理包中的下一个首部,其类型由路由首部中"下一个首部"字段所标识
}
else if 首部扩展长度为奇数 {
给源地址发送一个 ICMP "参数存在问题",编码 0 的报文,指针指向首部扩展长度字段,并且抛弃此包
}
else {
计算出n,也就是路由首部中的地址数量。方法是首部扩展长度除以 2
if 分段剩余比 n 大 {
给源地址发送一个 ICMP "参数存在问题",编码 0 的报文,指针指向分段剩余字段,并且抛弃此包
}
else {
分段剩余减一;
计算 i,也就是地址向量(地址列表)中要"访问"的下一个地址,方法是 n 减分段剩余
if 地址[i] 或者IPv6目的地址是组播地址 {
抛弃此包
}
else {
交换IPv6目的地址和地址[i]
ifIPv6跳数限制小于等于 1 {
给源地址发送一个 ICMP "超时 - 传输超过跳数限制" 的报文,并且抛弃此包
}
else {
跳数限制减一;
向IPv6模块重新提交此包,传给新的目的节点
}
}
}
}</PRE>
<P align=justify>作为上述算法的一个例子,考虑这样一种情况: 源节点 S 给目的节点 D
发送一个包,用路由首部来使这个包经过中间节点 I1,I2 和 I3。在传送路径的每段中,
IPv6首部中的相关字段值以及路由首部字段值应为如下所述:</FONT></P>
<TABLE cellSpacing=1 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width=967 bgColor=#000080 colSpan=2><FONT face=宋体
size=3>
<P align=justify><FONT color=#ffffff>当包从 S 传到
I1:</FONT></FONT></P></TD></TR>
<TR>
<TD vAlign=top width=386 rowSpan=5><FONT face=宋体 size=3>
<P align=justify>源地址 = S</P>
<P align=justify>目的地址 = I1</FONT></P></TD>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>首部扩展长度 =
6</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>分段剩余 =
3</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>地址[1] =
I2</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>地址[2] =
I3</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>地址[3] =
D</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=967 bgColor=#000080 colSpan=2><FONT face=宋体
size=3>
<P align=justify><FONT color=#ffffff>当包从 I1 传到
I2:</FONT></FONT></P></TD></TR>
<TR>
<TD vAlign=top width=386 rowSpan=5><FONT face=宋体 size=3>
<P align=justify>源地址 = S</P>
<P align=justify>目的地址 = I2</FONT></P></TD>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>首部扩展长度 =
6</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>分段剩余 =
2</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><FONT face=宋体 size=3>
<P align=justify>地址[1] =
I1</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></TD></TR>
<TR>
<TD vAlign=top width=575>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -