5.4 ICMP
5.4.1 辅助 IP的ICMP
**ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。**
在IP通信中如果某个IP包因为某种原因未能到达目标地址,那么这个具体原因将由ICMP负责通知。
如下图,主机A向主机B发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这时,路由器2就会向主机A发送一个ICMP包,说明发往主机B的包未能成功。
ICMP的这种通知消息会使用IP进行发送(在ICMP中,包以明文的形式像TCP/UDP一样通过IP进行传输。然而,ICMP所承担的功能并非传输层的补充,而应该把它考虑为IP的一部分)。因此,从路由器2返回的ICMP包会按照往常的路由控制先经过路由器1再转发给主机A。收到该ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生问题的原因。
ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息
,另一类是用于诊断的查询消息
。
ICMP消息类型
5.4.2 主要的ICMP消息
- ICMP 目标不可达消息(类型3)
IP 路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息,并在这个消息中显示不可达的具体原因。
-
ICMP 重定向消息(类型5)
如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个 ICMP 重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下,路由器会通过这个 ICMP 重定向消息给发送端主机一个更合适的发送路由。
不过,多数情况下由于这种重定向消息成为引发问题的原因,所以往往不进行这种设置。
-
ICMP 超时消息(类型11)
IP 数据包中有一个字段
TTL
(Time to live,生存周期),它的值随着每经过一个路由器就会减 1,直到减到 0 时该 IP 数据包被丢弃。此时,IP 路由器将发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。设置IP包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免IP包无休止地在网络上被转发。(这个也在之前提到过)
ICMP时间超过消息
- ICMP 回送消息(类型0,8)
用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。网络上最常用的ping
命令就是利用这个消息实现的。
ICMP回送消息
5.4.3 其他 ICMP 消息
- ICMP 原点抑制消息(类型4)
在使用低速广域线路的情况下,连接WAN的路由器会遇到网络拥堵的问题。ICMP原点抑制消息的目的就是为了缓和这种拥堵情况。当路由器向低速线路发送数据时,其发送队列的残存变为零而无法发送出去时,可以向IP包的源地址发送一个ICMP原点抑制消息。了解整个线路的某一处发生拥堵。
- ICMP 路由探索消息(类型9,10)
主要用于发现与自己相连网络中的路由器。当一台主机发出ICMP路由器请求(类型10)时,路由器则返回ICMP路由器公告消息(类型9)给主机。 - ICMP 地址掩码消息(类型17,18)
主要用于主机或者路由器想要了解子网掩码的情况。17(请求)18(应答)。
5.4.4 ICMPv6
- ICMPv6 的作用
IPv4中ICMP仅作为一个辅助作用支持IPv4.也就是说,在IPv4时期,即使没有ICMP,仍然可以实现IP通信。然而,在IPv6中ICMP的作用被扩大,如果没有ICMPv6,IPv6就无法进行正常通信。
尤其在IPv6中,从IP地址定位MAC地址的协议从ARP转为ICMP的邻居探索消息。这种邻居探索消息融合了IPv4的ARP、ICMP重定向以及ICMP路由器选择消息等功能于一体,甚至还提供自动设置IP地址的功能。
ICMPv6 中将ICMP分为:错误消息(0-127)和信息消息(128-255)
错误消息:
信息消息:
- 邻居探索
ICMPv6中从类型133至类型137的消息叫做邻居探索消息。邻居探索消息用于查询IPv6的地址与MAC地址的对应关系,并由邻居宣告消息得知MAC地址,利用多播地址实现。
IPv6 中查询MAC地址:
IP 地址的自动设置: