虽然 IP 并非可靠的协议,TCP/IP 协议簇却会在发生某些错误时提供发送消息。 这些消息通过 ICMP 服务发送。 其用途是就特定情况下处理 IP 数据包的相关问题提供反馈,而并非是使 IP 可靠。 ICMP 消息并非必需的,而且在网络内通常出于安全原因而被禁止。

ICMP 可用于 IPv4 和 IPv6。 ICMPv4 是用于 IPv4 的消息传送协议。 ICMPv6 为 IPv6 提供相同的服务,此外,还包括其他功能。 在本课程中,涉及 ICMPv4 和 ICMPv6 时均会使用术语 ICMP。

ICMP 消息的类型及其发送原因非常多。 我们将介绍其中比较常见的一些消息。

ICMPv4 和 ICMPv6 通用的 ICMP 消息包括:

主机确认

ICMP 回应消息可用于确定主机是否运行正常。 本地主机向一台主机发送 ICMP 回应请求。 如果主机可用,目的主机会回应以响应应答。 在图中,请单击“播放”按钮观看动画 ICMP 响应请求/响应应答。 如此使用 ICMP 回应消息是 ping 实用程序的基础。

目标或服务不可达

当主机或网关收到无法传送的数据包时,它会使用 ICMP 目的地无法到达消息通知源目标或服务无法到达。 消息包括指示数据包为何无法传送的代码。

ICMPv4 的目的地无法到达代码示例有:

注意:ICMPv6 的目的地不可达消息代码与此类似,但是也稍有不同。

超时

路由器使用 ICMPv4 超时消息指示因为数据包的生存时间 (TTL) 字段递减到 0 而不能转发数据包。 如果路由器接收数据包并且将 IPv4 数据包的 TTL 字段的值递减为零,则它会丢弃数据包并向源主机发送超时消息。

如果路由器因数据包过期而无法转发 IPv6 数据包,ICMPv6 也会发送超时消息。 IPv6 没有 TTL 字段;它使用跳数限制字段来确定数据包是否过期。

路由重定向

路由器可使用 ICMP 重定向消息来通知网络中的主机有更佳路由可用于特定目的地址。 只有当源主机与两个网关都位于同一个物理网络中时才会使用此消息。

ICMPv4 和 ICMPv6 均使用路由重定向消息。