ICMPv6及应用

ICMPv6报文的基本格式

字段含义
类型ICMPv6报文的类型标识号,它的值确定了报文的内容。
代码用于确定ICMPv6进一步的信息,对同一类型的报文进行更详细的分类。
校验和用于检测ICMPv6报文的正确性。
报文体用于返回出错的参数和记录出错报文的片段,帮助源结点判断错误原因。

ICMPv6报文类型

差错报告报文

1:目的不可达:网络不可达、主机不可达、端口不可达等等,当路由器不能给IP分组找到路由,或者主机不能交付IP分组时,丢弃这个IP分组,然后给源主机发送该报文

2:分组过大

3:超时:生存时间字段减为0且没到达目的,就会源点发送该报文

4:参数错误:IP分组首部某个字段不正确,向源站发送该报文

信息报文

128:回声请求:测试网络目前的工作状态

129:回声应答:测试网络目前的工作状态

130:组成员查询(多播)

131:组成员报告(多播)

132:组成员退出(多播)

133:路由器请求(无状态地址自动配置)

134:路由器通告(无状态地址自动配置)

135:邻结点请求(邻结点探测)

136:邻结点通告(路径MTU探测)

137:重定向(地址的重新配置)


封装ICMPv6报文的IPv6分组的源地址

能够帮助发送原IPv6分组的源结点判断原IPv6分组是在何处出错。在ICMPv6标准中给出了4种选取源地址的规则

  1. 若ICMPv6报文对应于发往该结点(发送此ICMPv6报文的结点)的某个单播地址,封装该ICMPv6报文的IPv6分组的源地址,应该设置为原IPv6分组中的目的地址。

  2. 若ICMPv6报文对应于发往包含该结点在内的一个多播地址或任播地址,则必须将收到该多播或任播IPv6分组的接口的IP地址作为源地址。

  3. 在许多情况下,生成差错报告报文的结点,并非是出差错的IPv6分组中最后的目的地址标识的结点。因此差错报告报文不能将原IPv6分组中的目的地址作为ICMP差错报告报文的源地址使用,而是应该将报告出错信息的结点地址作为源地址。

  4. 主动发送的ICMP报文,以及不适用上述3个规则的ICMPv6报文应该遵循第4个规则。这时,发送ICMPv6报文的结点必须查看自己的路由表,以便判断哪一个网络接口将被用于发送ICMPv6报文,对应该接口的一个单播地址就将作为该ICMPv6数据报的源地址。


ICMPv6报文的处理规则

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

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

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

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

  • 以下几种情况不能产生ICMPv6差错报告报文的发送

    • 一个ICMPv6差错报告报文

    • 一个发往多播地址的IPv6分组,有两个例外情况可以发送:MTU探测,可以发送“报文过长”差错报告报文;另一个是允许参数错误报文。

    • 链路层的多播报文(同上)

    • 链路层的广播报文(同上)

  • 一个IPv6结点必须限制其发送ICMPv6差错报告报文的速率(用来限制ICMPv6差错报告报文对网络带宽和转发处理的消耗)

    • 基于计时器的方法:每段时间内只发送一个差错报告报文

    • 基于带宽的方法:限制带宽


IPv6路径MTU发现过程


邻结点探测协议定义的ICMPv6报文

邻结点请求报文和邻结点通告报文

同一网络上,这对报文可以完成ARP的功能,还可以用来测试目的主机的连通性。

完成ARP的功能:邻结点请求报文一般以多播的形式发送,网络上主机一旦收到邻结点请求报文,将报文中的IPv6地址和自己的主机地址比对,若恰好是自己的,主机把自己的数据链路层地址封装在一条邻结点通告报文中,以应答邻结点请求报文的发送者。(代替ARP)

测试目的主机的连通性:邻结点请求报文以普通IPv6分组的形式发送。如果发送者收到了应答的邻结点通告报文,它认为目的地址是可达的;否则认为目的主机不可达。

邻结点请求:

邻结点通告:

路由器请求报文和路由器通告报文

在许多情况下主机必须和远程网络上的系统进行通信。

  1. 主机必须找到路由器

  2. 当需要发送一个IPv6分组到其他主机时,它必须了解每条链路上路由器的有关信息

  3. 路由器每5min发送一个路由器通告报文

  4. 结点根据路由器通告报文,更新系统中有关路由器的信息

  5. 主机可以主动向路由器发送一条路由器请求报文,路由器应答请求时,可直接向提出请求的结点发送路由器通告报文,这种通告报文不需要使用多播地址。

路由器请求报文寻找路由器:

路由器通告报文通告自己的存在:


假设结点A和B在同一条以太网链路上,都支持IPv6协议机制。结点A的本地站点地址为FEC0::2:0:0:2:A,链路层地址为00-50-3E-E4-4C-00;结点B的本地站点地址为FEC0::2:0:0:2:B,链路层地址为00-50-3E-E4-4B-01。请描述结点A解析结点B的MAC地址的工作过程。

目的链路层地址是该IPv6分组的目的IPv6地址(FF02::1:FF02:B,多播地址)的多播映射地址(33-33-FF-02-00-0B)。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值