Ipv6 针对因特网协议第六版的( 二 )


一个送出ICMPv6报文的节点在计算校验和以前要在IPv6首部中决定源地址和目标
IPv6地址 。假如节点有多于一个的单目地址,它必须按以下的原则选定源地址:
(a) 假如报文是对发往该节点的某一单目地址进行响应的,那应答报文的源地址必须是这
个单目地址 。
(b)假如报文是对发往该节点为组员的多播组或任意播组的报文进行响应的,那麽应答报

的源地址必须是一个属于接收到多播或任意播包接口的单目地址 。
(c)假如报文是对发往一个并不属于该节点地址的报文进行响应的,那麽源地址必须是属

该节点且最有利于诊断错误的那个单目地址 。比如,假如报文是对一个不能正常转发

的行为进行响应的,源地址就是那个属于转发包失败的接口的单目地址 。
(d)另外,在转发报文到目的地时,必须使用节点的路由表来决定由哪个接口转发报文 。

于那个接口的单目地址作为报文的源地址 。
2.3报文校验和的计算
校验和是整个ICMPv6报文的一个16位字的补数和 。校验和的计算起始于ICMPv6的类型
字段并被加上一个IPv6的伪首部(在IPv68.1节中有介绍) 。在伪首部中下一首部字段的
值为58 。(注重:在ICMPv6的校验和计算中加上伪首部是从IPv4变化而来的;想了解改变
的原理请查看IPv6 。)
为了计算校验和,校验和字段被设置为0 。
2.4报文处理规则
在处理ICMPv6报文时,应用程序必须遵守以下的规则:(来自RFC-1122)
(a) 假如收到了一个不知道类型的ICMPv6差错报文,它必须被送往上层协议 。
(b) 假如收到了一个不知道类型的ICMPv6信息报文,它必须被静静的丢弃 。
(c) 每一个ICMPv6差错报文(类型<128)在不超过最小IPv6最大传输单元的情况
下,包括尽可能大的引起出错的包 。
(d) 在以上的情况中,网络层协议把ICMPv6差错报文传送到上层协议的进程 。原包中
的上层协议字段(在ICMPv6差错报文的报文体中)被取出,用来选择合适的上一
层进程来处理错误 。
假如原包含有一个很大的扩展首部,那麽有可能上层协议类型并没有包含在
ICMPv6差错报文中 。原因是为了满足最小IPv6最大传输单元的限制,原包被切断
了 。在这种情况下,差错报文在任何IPv6层处理后被静静的丢弃 。
(e) 假如接收到的情况为下列之一,则ICMPv6差错报文必须不被发出 。
(e.1)一个ICMPv6差错报文,或者
(e.2)一个预定发往IPv6多目地址的包(这种情况有两个例外:(1)包过大报文
——3.2节——为了答应路径MTU发现为IPv6多播工作(2)参数出错报
文,代码值为2——3.4节——通过将选项类型的最高两比特位设置为10

告一个不熟悉的IPv6选项),或者
(e.3)一个作为链路层多播的包,(e.2中指出的两条例外情况也适用于这
里),
或者
(e.4)一个作为链路层广播的包,(e.2中指出的两条例外情况也适用于这
里),
或者
(e.5)一个源地址并不是指明的一个唯一的节点的包,比如:IPv6未指明地址,
IPv6多目地址,或一个ICMPv6报文发送者知道的IPv6任意播地址
(f) 最后,为了限制由于发送ICMPv6差错报文引起的带宽和转发的代价,一个IPv6

点必须限制它发送的ICMPv6差错报文的比率 。当源站发送一串错误的包,并且没

注重到由此产生的ICMPv6差错报文的时候,这种情况就可能发生 。有一系列的实

限制比率的方法,比如:

推荐阅读