第八章ICMPv4和ICMPv6 Internet控制报文协议

  • 引言:
    • ICMP负责传递可能需要主义的差错和控制报文
    • 鉴于ICMP能够影响重要的系统功能操作和获取配置信息,黑客们已经在大量攻击中使用ICMP报文,由于担心这种攻击,网络管理员经常会用防火墙封阻ICMP报文,会导致大量的诊断程序将无法正常工作
    • ICMPv6不仅可以用于错误报告,还可以用于邻居发现ND,与ARP有相同的作用,还能配置主机和管理组播地址的路由器发现RD功能
  • 在IPv4和IPv6内的封装
    • IPv4
      • | IPv4头部 | ICMP头部 | ICMP数据 |
    • IPv6
      • | IPv6头部 | IPv6扩展头部(下一个头部ICMP头部:58) | ICMP头部 | ICMP数据 |
    • ICMP头部结构
      • | 类型 | 代码 | 校验和 |
      • | 依赖于类型和代码(可变) |
      • 所有的ICMp头部的前4个字节结构是相同的(类型,代码,校验和),其余部分根据报文类型和代码不同有着不同的结构
  • ICMP报文
    • ICMP报文分为差错报文,查询报文和信息报文
  • ICMPv4报文

类型

代码

正式名称

用途注释

0

0

回显应答

回显应答,返回数据

3

1

主机不可达

已知但不可达的主机

3

3

端口不可达

未知的/不用的端口

3

4

需要进行分片但设置了不分片位

需要设置分片但被DF禁止了

5

1

主机重定向数据报

指示了一个可选的路由器

8

0

回显

回显请求

11

0

在传输期间生存时间超时

跳数限制/TTL超时

12

0

指针指示差错

字节偏移量指示第一个问题字段

  • ICMPv6报文
  • ICMPv6,类型从0到127都是差错报文,从128到255都是信息类报文

类型

代码

正式名称

用途注释

1

0

目的不可达

不可达的主机端口协议

1

1

管理禁止

策略(如防火墙)禁止

1

2

超出源地址范围

目的范围超出源地址的范围

1

3

地址不可达

当代码0~2并不是合适时使用

1

4

端口不可达

没有传输层实体在端口监听

1

5

源地址失败策略

违反进/出策略

1

6

拒绝到目的地的路由

特定的拒绝到目的地路由

2

0

数据报太大(PTB)

需要分片

3

0

超时

跳数用尽或者重组超时

3

1

重组时间超时

在有限的时间内无法重组

4

0

参数问题

畸形数据报或者头部

4

1

无法识别的下一个头部

未知的下一个头部字段值

4

2

无法识别的IPv6选项

未知的逐跳或者目的地选项

100,101

0

为私人实验保留

为实验保留

127

0

为ICMPv6差错报文扩充保留

为更多的差错报文保留

128

0

回显请求

ping请求

129

0

回显应答

ping应答

130

0

组播侦听查询

查询组播订阅者

131

0

组播侦听报告

组播订阅者报告

132

0

组播侦听完成

组播取消订阅报文

133

0

路由器请求(RS)

IPv6RS和移动IPv6选项

134

0

路由器通告(RA)

IPv6RA和移动IPv6选项

135

0

邻居请求(NS)

IPv6邻居发现(请求)

136

0

邻居通告(NA)

IPv6邻居发现(通告)

137

0

重定向报文

使用另一个下一跳路由器

141

0

反向邻居发现请求报文

反向邻居发现请求,请求给定的链路层地址的IPv6地址

142

0

反向邻居发现通告报文

反向邻居发现应答,报告给定的链路层地址的IPv6地址

143

0

组播侦听报告版本2

组播侦听报告(v2)

144

0

本地代理地址发现请求报文

请求移动IPv6HA地址,由移动节点发送

145

0

本地代理地址发现应答报文

包含MIPv6HA地址,在本地网络中由合个的HA发送

146

0

移动前缀请求

当离开时请求本地前缀

147

0

移动前缀通告

提供从HA到移动节点的前缀

148

0

证书路径请求报文

一条证书路径的保护邻居发现(SEND)请求

149

0

证书路径通告报文

响应一个证书路径请求的SEND

151

0

组播路由器通告

提供组播路由器的地址

152

0

组播路由器请求

请求组播路由器的地址

153

0

组播路由器终止

组播路由器使用结束

154

0

FMIPv6报文

MIPv6快速切换报文

200,201

0

为私人实验保留

为实验保留

255

0

为ICMPv6信息类报文扩充保留

为更多的信息类报文保留

  • 处理ICMP报文
    • 一般来说传入的信息类报文会被操作系统自动处理,而差错类报文传递给用户进程或传输层协议
    • 传入的ICMpv6报文将应用以下规则:
      • 未知的ICMPv6差错报文必须传递给上层产生差错报文的进程
      • 未知的ICMPv6信息类报文将被丢弃
      • ICMPv6差错报文将会尽可能多地包含导致差错的原始IPv6报文,当然最终的差错报文大小不能超过最小的IPv6MTU(1280字节)
      • 在处理ICMPv6差错报文时,需要提取原始或者违规数据包中的上层协议类型,用于选择适当的上层进程,如果这是不可能的,在任何IPv6层处理完后将无声地丢弃差错报文
      • 存在处理差错的特殊规则
      • IPv6节点必须限制它发送ICMPv6差错报文的速率,有多重方法可以用来实现限速功能
  • ICMP差错报文
    • 为了限制产生广播风暴,一下情况不会响应产生ICMPv4差错报文:
      • ICMPv4差错报文
      • 目的地是IPv4广播地址或者IPv4组播地址的数据报
      • 作为链路层广播的数据报
      • 不是第一个分片的其他分片
      • 源地址不是单个主机的数据报.这就是说源地址不能为零地址,环回地址,广播地址或组播地址
    • 以下情况不会产升ICMPv6差错报文
      • ICMPv6差错报文
      • ICMPv6重定向报文
      • 目的地址是IPv6组播地址的数据报,除了数据包过大(PTB)的报文;参数问题报文;
      • 作为链路层组播的数据包
      • 作为链路城广播的数据包
      • 源地址不是唯一识别的单个节点的数据包
  • lPv6中的邻居发现
    • IPv6中的邻居发现协议是将路由器发现和由ARP提供的带有地址映射功能的ICMPv4重定向机制结合砸第一期
    • 被指定用于支持移动IPv6
    • 与ARP和IPv4普遍使用广播地址不同,ICMpv6广泛使用组播地址,在网络层和链路层中都适用
  • ICMPv4和ICMPv6转换
    • [RFC6145]描述了从ICMPv4转换到ICMPv6的方法,以及相反方向的转换方法,当转换ICMp时,IP和ICMp头部都要被转换,出资之外,包换了一个内部违规书包头部及数据的ICMP差错报文,也会转换内部数据报的头部.除了映射适当的类型和代码号之外,还有需要额外考虑的分片,MTU大小以及校验和计算
  • 与ICMP相关的攻击
    • 主要分3类
      • 泛洪(flood)
      • 炸弹(bomb)
      • 信息泄露(information disclosure)


版权声明:本文为qq_22478401原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。