ICMPv6基础:

ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。

在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。反正比ICMP更加强大了。

ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58(IPv4中ICMP为1)。ICMPv6的报文格式如图所示:

  1. Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。也就是一部分是报错消息,一部分是功能型报文。
  2. Code:表示此消息类型细分的类型。
  3. Checksum:表示ICMPv6报文的校验和。

ICMPv6差错报文:

  1. 目的不可达错误报文
    当数据包无法被转发到目标节点或上层协议时,路由器或目标节点发送ICMPv6目标不可达差错报文。在目标不可达报文中,类型(Type)字段值为1,代码(Code)字段值为0-4,每一个代码值都定义了具体含义(RFC2463):
    • 0:没有到达目标的路由
    • 1:与目标的通信被管理策略禁止
    • 2:未指定
    • 3:地址不可达
    • 4:端口不可达

  2. 数据包过大错误报文:
    如果由于出口链路的MTU小于IPv6数据包的长度而导致数据包无法转发,路由器就会发送数据包超长报文。该报文被用于IPv6路径MTU发现的处理 。数据包超长报文的类型字段值为2,代码字段值为0。

  3. 时间超时错误报文:
    当路由器收到一个IPv6报头中的跳限制(Hop Limit)字段值为0的数据包时,会丢弃该数据包并向源发送ICMPv6超时报文。在超时报文中,类型字段的值为3,代码字段的值为0或1:
    • 0:在传输中超越了跳限制
    • 1:分片重组超时

  4. 参数错误报文:
    当IPv6报头或者扩展报头出现错误,导致数据包不能进一步处理时,IPv6节点会丢弃该数据包并向源发送此报文,指明问题的位置和类型。参数问题报文中,类型字段值为4,代码字段值为0~2,32位指针字段指出错误发生的位置。其中代码字段是这样定义的:
    • 0:遇到错误的报头字段
    • 1:遇到无法识别的下一个报头(Next Header)类型
    • 2:遇到无法识别的IPv6选项

模拟器上很难制造出来这些报文,所以这里不进行抓包分析。

ICMP消息报文:

1.请求、应答报文:

回送请求报文:
回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。回送请求报文的类型字段值为128,代码字段的值为0。标志符(Identifier)和序列号(Sequence Number)字段有发送方主机设置,用于将即将收到的回送应答报文与发送的回送请求的报文进行匹配,例如我发送的包的报文序列号是1,回复的报文也是1。

回送应答报文:
当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。回送应答报文的类型字段的值为129,代码字段的值为0。标志符(Identifier)和序列号(Sequence Number)字段的值被指为与回送请求报文中的相应字段一样的值。

2.RS消息:
当主机刚刚接入网络并被配置为自动获取地址,主机需要自动获得前缀、前缀长度、默认网关等信息时,就会发送RS消息。源IP是发送接口的Link Local地址或者未指定地址,目的地址是FFO2::1或FFO2::2,路由器收到RS消息后立刻回送RA消息给主机,在RA消息中有主机想要的单播地址的前缀及前缀长度等信息。下图显示了RS消息的详细格式:

  1. Type: 8bit,值为133。
  2. Code: 8bit,值为0。
  3. Checksum: 16bit,ICMPv6校验和,用于验证IPv6报头的完整性。Reserved: 32bit,保留为0。
  4. Options:选项,目前只定义了一个,包含发送者的链路层地址,如果源地址为未扌定地址,则RS消息中不能包含此选项。

3.RA消息:
RA消息由路由器周期性地发送,或者在收到主机发送的RS消息后立刻发送,主要为主机提供编址信息以及其他配置信息。该消息的源IP是发出消息接口的Link Local地址,目的地址是FFO2::1或者为收到的RS消息中的源地址。消息格式如图所示:

  1. Type: 8bit,值为134。Code: 8bit,值为0。
  2. Checksum: 16bit,ICMPv6校验和,用于验证ICMPv6报头。
  3. Cur Hop Limit: 8bit,表示主机跳数限制,路由器建议采用无状态自动配置的主机在IP包的跳数限制在该字段中的值,该值为0时表示路由器不推荐跳数限制值,由主机自己设置各自的跳数限制值。
  4. M位: 1bit,管理地址配置位,该位置О表示使用无状态自动配置;置1表示告诉主机使用DHCPv6服务器来获取配置信息当置1时O位无意义,因为所有参数都可以通过DHCPv6获得。
  5. О位: 1bit,表示其他配置标志位,该位置О表示 DHCPv6服务器没有其他可用信息。该位置1时,其他参数使用DHCPV6服务器获得,包括路由器生存时间、邻居可文达时间、邻居的重传时间、链路的MTU信息和DNS相关信息等。
  6. Reserverd:保留字段,6bit,该字段未使用。
    Router Lifetime: 16bit,与默认路由器关联的生存时间,以秒为单位,最大为65535华为缺省情况下为1800s。该值表示主机把该路由器作为默认网关的有效时间。收到等于0的RA消息时,主机不会将通告该RA消息的源路由器配置为自己的默认网关。主机在每次收到RA消息时,都会刷新此计时器。
  7. Reachable Time: 32bit,以毫秒为单位,表示通告邻居的可达时间,用作邻居不可达检测,为О表示未指定。
  8. Retrans Timer: 32bit,重传计时器,以毫秒为单位,表示主机在重传邻居请求消,息前应该等待的时间,为0表示未指定。该字段一般用作地址解释和邻居不可性检测。
  9. Options:可能包含的选项有发送RA消息的路由器的链路层地址、MTU、前缀信息。


4.NS消息:
当节点不知道目标地址的链路层地址时,将发送NS消息。此时 NS消息的源地址是发送接口的 global地址,目标地址是被访问的地址所对应的被请求节点组播地址。此消息中包含发送端的链路层地址,作用类似于ARP请求,这里的链路层地址一般是指以太网的MAC地址。此外,NS还可以用来检测邻居的可达性和进行地址冲突检测,当节点需要验证邻居的可达性时,将发送单播的NS消息;在DAD(重复地址检测)过程中,源地址为未指定地址。NS的消息格式如图所示:

  1. Type: 8bit,值为135。Code: 8bit,值为0。
  2. Checksum: 16bit,ICMPv6校验和,用来验证ICMPv6报头。Reserved: 32bit,该字段未使用,保留为0。
  3. Target Address: 128bit,请求的目标设备的IPv6地址,该字段不能使用组播地址。
  4. Options:选项,发送者的链路层地址当源IP地址是未指定地址时不能包括此选项。在有IPv6地址的链路层上,以须句含此选项。

5.NA消息:
当节点接受到NS消息后,会快速响应NA 消息,或者当节点需要快速传播新的作息(非请求)时,也会发送NA消息。对于收到NS后回复的NA消息是以单播的形发送的,源IP是被访问的IP地址,目的IP是NS消息中的源地址;如果收到的NS 息中的源地址是未指定地址,则NA消息的目的地址为所有节点的组播地址,作用类于ARP响应。对于非请求的NA消息,目的地址为所有节点的组播地址。NA的消息式如图所示:

  1. Type: 8bit,值为136。Code: 8bit,值为0。
  2. Checksum: 16bit,ICMPv6校验和,用于验证ICMPv6的报头。
  3. R位:1bit,路由器标记位,置1表示该节点为路由器,在邻居不可达检测中检测路由器是否变成主机。
  4. S位: 1bit,请求标记位,置1表示该NA消息是收到NS消息后的回应。S位在邻居可达性检测时被用作可达性确认。
  5. O位:1bit,替代标记位,置1表示需要替代当前已缓存的IPv6地址的链路层地址,从而更新邻居缓存表项。如果置0,则表示该NA 消息不更新现有的链路层地址,如果没有相应的链路层地址,则添加新的表项。
  6. Reserved:29bit,该字段未使用,保留为0。
  7. Target Address: 128bit,如果用作NS回应的NA消息,此字段应该是收到NS消息中的Target Address字段的值,对于非响应的NA消息,此字段应该是链路层地址发生变化的IPv6地址。
  8. Options:选项,包含此NA消息发送者的链路层地址,对于回应组播NS请求的NA消息必须包含此选项,对于回应单播NS请求的NA消息可以不包含此选项,因为单播NS请求的发送者有正确的链路层地址。


6.重定向信息:

  1. Type: 8bit,值为137。Code: 8bit,值为0。
  2. Checksum: 16bit,ICMPv6校验和,用于验证ICMPv6报头。Reserved:32bit,该字段未使用,保留
    为0。
  3. Target Address:是通知到主机的最优下一跳路由器,必须是该下一跳路由器的 linklocal地址;当目的地是邻居时,Target Address必须是 Destination Address,否则是重定向后的下一跳路由器地址。
  4. Destination Address:需要被重定向的目的地址。
  5. Options:选项,包含目标地址(重定向后使用的下一跳路由器)的链路层地址。路由器可以通过ICMPv6重定向消息通知主机,在去往目的地址的路径上有更优的下一跳,主机发出的数据包能被重定向到更好的下一跳路由器,也可以用于通知目标地址就是邻居。重定向消息只对主机有效,对路由器无效。消息的源地址是发送接口的链路本地地址,目的地址是触发此重定向报文的源地址。

注:RS、RA、NS、NA、重定向报文具体使用参考后面的笔记。

整理资料来源:《HCIE路由交换学习指南》、HCIE培训文档

ICMPv6报文详解相关推荐

  1. OSPF报文详解——LSA概述

    目录 一.OSPF报文详解: (1)---OSPF头部分析: (2)---hello字段分析: 二.LSA报文--链路状态通告 (1)---简介: (2)---头部信息: (3)---数据部分: 一. ...

  2. HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解

    一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...

  3. bgp 建立邻居发送的报文_bgp邻居建立过程及报文详解.doc

    bgp邻居建立过程及报文详解.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 前缀长度和网络号8.当路由失效时,也发送 update ...

  4. http请求报文和相应报文详解

    Http协议的特点 HTTP协议的特点 基于请求/响应模型的协议. 请求和响应必须成对: 先有请求后有响应. 简单快捷 因为发送请求的时候只需要发送请求方式和请求路径即可 HTTP协议默认的端口:80 ...

  5. UDP和TCP的报文详解

    TCP和UDP报文详解 一.先说说端口号 TCP和UDP都是位于传输层的协议,传输层负责将数据从发送端传输到接收端. 端口号(Port)标识了一台主机上正在进行通信的一个具体的应用程序,在TCP/IP ...

  6. 奥迪AUDI DELFOR 交付预测报文详解

    此前的文章奥迪AUDI EDI INVOIC发票报文详解中,我们介绍了供应商给奥迪AUDI发送INVOIC发票报文的详解,本文将从接收角度出发,带大家了解如何接收奥迪AUDI发来的DELFOR交付预测 ...

  7. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...

  8. 网络服务——生成树技术STP的BPDU报文详解

    文章目录 一.STP的简介 1.由来 2.基本概念 二.STP的监测协议-BPDU报文 1.BPDU报文内容 1.1.根ID 1.2.根的路径开销 1.3.端口ID 2.经过BPDU报文之后四个步骤 ...

  9. 安道拓Adient EDI 830物料需求预测报文详解

    安道拓Adient EDI项目,报文标准包括了X12和EDIFACT两种.在安道拓Adient供应商门户网站根据地区选择,如果是跟Adient美洲地区做供应链协同使用X12报文标准:如果是跟安道拓Ad ...

  10. 博世BOSCH DELFOR 交付预测报文详解

    本文将从接收角度出发,带大家了解如何接收博世BOSCH发来的DELFOR交付预测报文,并将其转换为更易理解的XML格式. 在文章如何读懂EDIFACT报文?中,我们对EDIFACT已经做了详细的解读, ...

最新文章

  1. Spring JDBC-自增键和行集RowSet
  2. 31.4. Open Source Development for the D Programming Language
  3. 实例:加载图片并添加文本水印
  4. hdu 5720(贪心)
  5. 【NLP】通俗讲解从Transformer到BERT模型!
  6. 分区变为RAW的解决办法
  7. php 查询sybase 实例,php访问sybase16
  8. emif接口速率问题_OMAPL138 EMIF读取速率问题
  9. Java学习之道:jdk环境变量配置方法
  10. 无标题自用临时文档.C# | python交互
  11. 苹果MacOS系统换壁纸的方法
  12. python分词原理_结巴分词原理
  13. 【开源】浏览器书签层级可视化
  14. c语言数列求和程序137,C语言循环结构 -C语言数列求和(使用while循环)
  15. kaggle员工离职预测案例(1)
  16. realme 真我Q2系列手机及多款AIoT生态新品汇总盘点
  17. vue+elementUI+后端springboot多用户评论、回复、点赞
  18. Mixly 数码管时钟
  19. picpick尺子像素大小精度不够准确_光栅尺精度与分辨率有什么关系吗?
  20. 用百行Python代码写一个关于德州扑克的类

热门文章

  1. 20200317_利用神经网络预测贷款率
  2. 作为程序员,你还在用B站学习?别做梦了
  3. TF2.0—tf.keras.losses.BinaryCrossentropy
  4. 5.1 API : SVC
  5. SpringCloud 配置服务器
  6. 声纹技术:让智能语音助手真正“认得”自己
  7. 每周荐书:MyBatis、并行编程、Ansible(评论送书)
  8. Controller的激活与URL路由
  9. sql语法、特殊符号及正则表达式的使用
  10. ant vue 设置中文_ant design vue导航菜单与路由配置操作