其他 ICMP 消息
ICMP 原点抑制消息(类型 4)
在使用低速率网络的情况下,网络通信可能会遇到网络拥堵的情况下,ICMP 的原点抑制就是为了应对这种情况的。当路由器向低速线路发送数据时,其发送队列的残存数据报变为 0 从而无法发送时,可以向 IP 数据报的源地址发送一个 ICMP 原点抑制(ICMP Source Quench Message)
消息,收到这个消息的主机了解到线路某处发生了拥堵,从而抑制 IP 数据报的发送。
不过这个 ICMP 消息可能会引起不公平的网络通信,一般不被使用。
ICMP 路由器探索消息(类型 9、10)
ICMP 路由器探索消息主要用于路由器发现(Router Discovery, RD)
,它主要分为两种,路由器请求(Router Solicitation, 类型 10)
和路由器响应(Router Advertisement, 类型 9)
。主机会在任意路由连接组播的网络上发送一个 RS 消息,想要选择一个路由器进行学习,以此来作为默认路由,而相对应的该路由会发送一个 RA 消息来作为默认路由的响应。
ICMP 地址掩码消息(类型 17、18)
主要用于主机或者路由器想要了解子网掩码的情况。可以向那些目标主机或路由器发送 ICMP 地址掩码请求消息(ICMP Address Mask Request, 类型 17)
和 ICMP 地址掩码应答消息(ICMP Address Mask Reply, 类型 18)
获取子网掩码信息。
ICMPv6
ICMPv6 的作用
IPv4 中 ICMP 仅仅作为一个辅助作用支持 IPv4。也就是说,在 IPv4 时期,即使没有 ICMP,也能进行正常的 IP 数据包的发送和接收,也就是 IP 通信。但是在 IPv6 中,ICMP 的作用被放大了,如果没有 ICMP,则不能进行正常的 IP 通信。
尤其在 IPv6 中,从 IP 定位 MAC 地址的协议从 ARP 转为 ICMP 的邻居探索消息(Neighbor Discovery)
。这种邻居探索消息融合了 IPv4 的 ARP、ICMP 重定向以及 ICMP 的路由选择等功能于一体。甚至还提供了自动设置 IP 的功能。
在 IPv6 中,ICMP 消息主要分为两类:一类是错误消息
,一类是信息消息
。0 - 127 属于错误消息;128 - 255 属于信息消息。
RFC 2463 中描述了以下消息类型:
类型 | 描述 |
1 | 目标不可达 Destination Unreachable |
2 | 数据包太大 Packet Too Big |
3 | 超时 Time Exceeded |
4 | 参数问题 Parameter Problem |
128 | 回送请求消息 Echo Request |
129 | 回送应答消息 Echo Reply |
130 | 多播监听查询 Multicast Listener Query |
131 | 多播监听报告 Multicast Listener Report |
132 | 多播监听结束 Multicast Listener Done |
133 | 路由器请求消息 Router Solicitation |
134 | 路由器公告消息 Router Advertisement |
135 | 邻居请求消息 Neighbor Solicitation |
136 | 邻居宣告消息 Neighbor Advertisement |
137 | 重定向消息 Redirect Message |
138 | 路由器重编号 Router Renumbering |
139 | 信息查询 ICMP Node Information Query |
140 | 信息应答 ICMP Node Information Response |
141 | 反邻居探索请求消息 Inverse Neighbor Discovery Solicitation |
142 | 反邻居探索宣告消息 Inverse Neighbor Discovery Advertisement |
ICMPv6 除了包含 ICMPv4 的所有功能外,还有两个额外的功能。
ICMPv6 邻居探索
邻居探索是 ICMPv6 非常重要的功能,主要表示的类型是 133 - 137 之间的消息叫做邻居探索消息
。这种邻居探索消息对于 IPv6 通信起到举足轻重的作用。邻居请求消息用于查询 IPv6 地址于 MAC 地址的对应关系。邻居请求消息利用 IPv6 的多播地址实现传输。
此外,由于 IPv6 实现了即插即用的功能,所以在没有 DHCP
服务器的环境下也能实现 IP 地址的自动获取。如果是一个没有路由器的网络,就使用 MAC 地址作为链路本地单播地址。如果在一个有路由器的网络环境中,可以从路由器获得 IPv6 地址的前面部分,后面部分使用 MAC 地址进行设置。此时可以利用路由器请求消息和路由器公告消息进行设置。
ICMPv6 的组播收听发现协议
组播收听发现协议(MLD,Multicast Listener Discovery)
由子网内的组播成员管理。MLD 协议定义了3条ICMPv6 消息:
- 组播收听查询消息:组播路由器向子网内的组播收听者发送此消息,以获取组播收听者的状态。
- 组播收听者报告消息:组播收听者向组播路由器汇报当前状态,包括离开某个组播组。
- 组播收听者。
与 ICMP 有关的攻击
涉及 ICMP 攻击主要分为 3 类:泛洪(flood)、炸弹(bomb) 和信息泄露(information disclsure)。
- 泛洪将会产生大量流量,导致针对一台或者多台计算机的有效 Dos 攻击。
- 炸弹指的是发送经过特殊构造的报文,这类报文能够导致 IP 或者 ICMP 的处理失效或者崩溃。
- 信息泄露本身不会造成危害,但是能够帮助辅助其他攻击。
针对 TCP 的 ICMP 攻击已经记录在了 RFC5927 中。