互联网控制信息协议是IP协议的一个重要组成部分。ICMPv6向源节点报告关于目的地址传输IPv6包的错误和信息,具有差错报告、网络诊断、邻节点发现和多播实现等功能。在IPv6中,ICMPv6实现IPv4中ICMP、ARP和IGMP的功能。 ICMPv6的基本功能
IANA(因特网地址授权委员会)定义ICMPv6的协议号为58。
ND和NI协议也是基于ICMPv6。
通告网络错误。比如,某台主机或整个网络由于某些故障不可达。如果有指向某个端口号的TCP或UDP包没有指明接受端,这也由ICMP报告。
通告网络拥塞。当路由器缓存太多包,由于传输速度无法达到它们的接收速度,将会生成“ ICMP 源结束”信息。对于发送者,这些信息将会导致传输速度降低。当然,更多的 ICMP 源结束信息的生成也将引起更多的网络拥塞,所以使用起来较为保守。
协助解决故障。ICMP支持Echo功能,即在两个主机间一个往返路径上发送一个包。Ping是一种基于这种特性的通用网络管理工具,它将传输一系列的包,测量平均往返次数并计算丢失百分比。
通告超时。如果一个IP包的TTL降低到零,路由器就会丢弃此包,这时会生成一个 ICMP 包通告这一事实。TraceRoute是一个工具,它通过发送小TTL值的包及监视ICMP超时通告可以显示网络路由。
ICMPv6报文封装在IPv6中。 ICMPv6报文的封装
ICMPv6报文总体上被分为两种类型:差错报文和信息报文。差错报文的识别是通过在消息类型字段值的高比特位中设置0。因此,差错报文的报文类型从0到127;信息报文的类型从128到255。[1]
类型:标识ICMPv6报文类型,它的值根据报文的内容来确定。
代码:用于确定ICMPv6进一步的信息,对同一类型的报文进行了更详细的分类。
校验和:用于检测ICMPv6的报文是否正确传送。
报文体:用于返回出错的参数和记录出错报文的片段,帮助源节点判断错误的原因或是其它参数。
一个送出ICMPv6报文的节点在计算校验和以前要在IPv6首部中决定源地址和目标IPv6地址。如果节点有多于一个的单目地址,它必须按以下的原则选定源地址:
如果报文是对发往该节点的某一单目地址进行响应的,那应答报文的源地址必须是这个单目地址。
如果报文是对发往该节点为组员的多播组或任意播组的报文进行响应的,那么应答报文的源地址必须是一个属于接收到多播或任意播包接口的单目地址。
如果报文是对发往一个并不属于该节点地址的报文进行响应的,那么源地址必须是属于该节点且最有利于诊断错误的那个单目地址。比如,如果报文是对一个不能正常转发包的行为进行响应的,源地址就是那个属于转发包失败的接口的单目地址。
另外,在转发报文到目的地时,必须使用节点的路由表来决定由哪个接口转发报文。[1]