ICMPv6

百度百科

      本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。

      ICMPv6(Internet Control Message Protocol version 6),即互联网控制信息协议版本六。ICMPv6为了与IPv6配套使用而开发的互联网控制信息协议。与IPv4一样,IPv6也需要使用ICMP,旧版本的ICMP不能满足IPv6全部要求,因此开发了新版本的ICMP,称为ICMPv6。

目录

  1.       1基本功能
  2.       2报文
  3.       ▪封装
  1.       ▪格式
  2.       ▪报文源地址的测定
  3.       ▪校验和的计算
  4.       ▪报文处理规则
  1.       3相关协议

基本功能

播报

      编辑

      ICMPv6的基本功能

互联网控制信息协议是IP协议的一个重要组成部分。ICMPv6向源节点报告关于目的地址传输IPv6包的错误和信息,具有差错报告、网络诊断、邻节点发现和多播实现等功能。在IPv6中,ICMPv6实现IPv4ICMPARPIGMP的功能。

      IANA(因特网地址授权委员会)定义ICMPv6的协议号为58。

      ND和NI协议也是基于ICMPv6。

  1.       1.

          通告网络错误。比如,某台主机或整个网络由于某些故障不可达。如果有指向某个端口号的TCP或UDP包没有指明接受端,这也由ICMP报告。

  2.       2.

          通告网络拥塞。当路由器缓存太多包,由于传输速度无法达到它们的接收速度,将会生成“ ICMP 源结束”信息。对于发送者,这些信息将会导致传输速度降低。当然,更多的 ICMP 源结束信息的生成也将引起更多的网络拥塞,所以使用起来较为保守。

  3.       3.

          协助解决故障。ICMP支持Echo功能,即在两个主机间一个往返路径上发送一个包。Ping是一种基于这种特性的通用网络管理工具,它将传输一系列的包,测量平均往返次数并计算丢失百分比。

  4.       4.

          通告超时。如果一个IP包的TTL降低到零,路由器就会丢弃此包,这时会生成一个 ICMP 包通告这一事实。TraceRoute是一个工具,它通过发送小TTL值的包及监视ICMP超时通告可以显示网络路由

报文

播报

      编辑

      封装

ICMPv6报文的封装ICMPv6报文封装在IPv6中。

      格式

      ICMPv6报文总体上被分为两种类型:差错报文和信息报文。差错报文的识别是通过在消息类型字段值的高比特位中设置0。因此,差错报文的报文类型从0到127;信息报文的类型从128到255。 [1]

      ICMPv6报文的基本格式

      类型(1字节)

      代码(1字节)

      校验和(2字节)

      ICMP报文体(可变长)

  •       类型:标识ICMPv6报文类型,它的值根据报文的内容来确定。

  •       代码:用于确定ICMPv6进一步的信息,对同一类型的报文进行了更详细的分类。

  •       校验和:用于检测ICMPv6的报文是否正确传送。

  •       报文体:用于返回出错的参数和记录出错报文的片段,帮助源节点判断错误的原因或是其它参数。

      报文源地址的测定

      一个送出ICMPv6报文的节点在计算校验和以前要在IPv6首部中决定源地址和目标IPv6地址。如果节点有多于一个的单目地址,它必须按以下的原则选定源地址:

  1.       1.

          如果报文是对发往该节点的某一单目地址进行响应的,那应答报文的源地址必须是这个单目地址。

  2.       2.

          如果报文是对发往该节点为组员的多播组或任意播组的报文进行响应的,那么应答报文的源地址必须是一个属于接收到多播或任意播包接口的单目地址。

  3.       3.

          如果报文是对发往一个并不属于该节点地址的报文进行响应的,那么源地址必须是属于该节点且最有利于诊断错误的那个单目地址。比如,如果报文是对一个不能正常转发包的行为进行响应的,源地址就是那个属于转发包失败的接口的单目地址。

  4.       4.

          另外,在转发报文到目的地时,必须使用节点的路由表来决定由哪个接口转发报文。 [1]

      校验和的计算

      校验和16bit,计算范围包括两部分。

  •       ICMPv6报文。

  •       IPv6伪首部(伪首部中下一首部字段的值为58)。

      IPv6的伪首部

      源地址(16字节)

      目的地址(16字节)

      有效载荷长度(4字节)

      0(3字节)

      下一首部(=58,1字节)

      计算方法:

  •       校验和字段被设置为0。

  •       ICMPv6对校验范围内的数据以16bit为单位,做1的补码的加法运算。

  •       在ICMPv6首部校验和字段中,置入此16bit的和。

      报文处理规则

  1.       1.

          当接收到ICMPv6差错报告报文时,如果无法识别具体的类型,必须将它交给上层协议模块进行处理。

  2.       2.

          当接收到ICMPv6信息报文时,如果无法识别具体的类型,必须将它丢弃。

  3.       3.

          所有的ICMPv6差错报告报文,都应该在IPv6所要求的最小MTU允许范围内,尽可能多地包括引发该ICMPv6差错报文的IPv6分组片段,以便给IPv6分组的源节点提供尽可能多的诊断信息。

  4.       4.

          在需要将ICMPv6报文上传给其上层协议模块处理的情况下,上层协议的具体类型,应该从封装该ICMPv6报文的IPv6分组的下一首部字段中获取。但是,如果该IPv6分组携带有很多扩展首部,则可能会导致有关上层协议类型的信息没有被包含在ICMPv6报文中。这时,只能将该差错报告报文在IP层处理完后丢弃掉。

  5.       5.

          不能产生ICMPv6差错报告报文的发送情况:1、一个ICMPv6差错报告报文。这主要是为了避免无休止地产生ICMPv6报文而引起网络拥塞。2、一个发往多播地址的IPv6分组。但有两个例外:当使用IPv6多播地址进行路径MTU探测时,可以发送“报文过长”差错报告报文;允许使用参数错误报文报告:存在不可识别的TLV可选项。3、链路层的多播报文。对这类报文也具有与上面第二类情况相同的例外。4、链路层的广播报文。对这类报文也具有与上面第二类情况相同的例外。5、IPv6分组的源地址无法唯一确定一个单独节点时,这种情况也不能够引起ICMPv6差错报告报文的发送。例如,IPv6不明确地址等。

  6.       6.

          最后,为了限制在发送ICMPv6差错报告报文时对网络带宽和转发处理的消耗,一个IPv6节点必须限制其发送ICMPv6差错报告报文的速率。但是,这样可能会导致一个差错报告报文的源节点因为没有及时收到报文出错的报告而不断地重发该错误报文。目前有几种提供限制ICMPv6速率的方法,例如:1、基于计时器的方法。将发往某个源节点或所有源节点的ICMPv6差错报告报文的速率,限制在每T时间段内只发送一个差错报告报文之内。2、基于带宽的方法。将某个网络接口发送的ICMPv6差错报告报文所占用的带宽限制在这个接口所在链路带宽的某个比例F上。 [1]

相关协议

播报

      编辑

      ICMPv6出了具备IPv4 ICMP的基本功能外,还包含以下两个功能: [2]

      (1)组播收听发现协议(MLD,Multicast Listener Discovery)

      该协议完成子网内的组播成员管理。MLD协议定义了3条ICMPv6消息:

      组播收听查询消息:组播路由器向子网内的组播收听者发送此消息,以获取组播收听者的状态。

      组播收听者报告消息:组播收听者向组播路由器汇报当前状态,包括离开某个组播组。

      组播收听者

      (2)邻居发现协议(Neighbor Discovery)

      邻居发现协议实现了IPv6种的地址解析协议(ARP)、ICMPv6路由器发现协议以及ICMPv6重定向消息的功能,用来管理同一链路上结点间的通信。

      该协议定义五条ICMPv6消息:

      路由器通告消息:该路由器以组播方式向所在链路发送,宣告其可用性及其相关的挽留过配置参数。该消息发送有两种方式,一种是非请求、周期性的路由器通告;另一种是请求的路由器通告,即收到主机发出的路由器请求后作为应答发出。

      路由器请求消息:该消息由主机向本地路由器发出,要求其立即发送路由器通告消息。

      邻居请求消息:结点发送邻居请求消息来请求邻居的链路层地址,以验证它先前所获得并保存在缓存中的邻居链路层地址的可达性,或者验证自己的地址在本地链路上是否唯一。

      邻居通告消息:结点在收到邻居请求消息或链路层地址改变时,发送邻居通告消息,向邻结点通告自己的链路地址信息。

      重定向消息:路由器发送重定向消息告诉主机重新定向它发送分组到目的结点的路径。