ICMP(Internet Control Message Protocol)协议。ICMP是网络层协议之一,它是IP协议的一个补充。主要在网络中传递控制消息和错误消息,以便对网络进行诊断、故障排除和管理,并且通知相关设备发生了网络错误或异常情况。
ICMP常见的消息类型
- Echo Request(回显请求)/ Echo Reply(回显应答):用于测试主机之间的可达性和往返延迟(网络拥堵状态)。
ping
,tracert
命令通常使用这两个消息类型。 - Timestamp Request(时间戳请求)和 Timestamp Reply(时间戳应答):允许主机请求其他主机的时间戳,并接收时间戳应答。这有助于同步网络中的时间。
- Address Mask Request(地址掩码请求)和 Address Mask Reply(地址掩码应答):用于获取目标主机的子网掩码信息。
- 目标不可达(Destination Unreachable): 当数据包无法到达目标地址时,目标主机或路由器会生成ICMP目标不可达消息,通知源主机或源路由器。相关的 Code 字段可以指明具体的不可达原因,如网络不可达、主机不可达、协议不可达等。
- 生存时间超时(Time Exceeded): 表示数据包在网络中被丢弃原因是生存时间(TTL)超时。有两种类型:生存时间超时(TTL为0)和片段重组超时。
- 重定向(Redirect):用于通知主机将其数据包发送到另一个更合适的路由器,以优化网络的路由路径。
- 路由请求和路由应答:ICMP还包括用于发送和接收路由信息的消息类型。路由请求和路由应答是主要用于IPv6协议的一种机制。
ICMP常见的命令行工具
- ping:用于测试与目标主机网络连通性。ping发送
Echo Request
数据包到目标主机,并等待目标主机的Echo Reply
消息。示例:ping www.example.com
- tracert(Windows)/traceroute(Unix/Linux):用于跟踪数据包从源主机到目标主机的路径。通过逐渐增加
TTL
,观察Time Exceeded
消息,以确定路径。例如tracert www.example.com
,traceroute www.example.com
。 - fping(Unix/Linux):ping的升级版本,支持同时对多个目标主机进行测试。它发送
Echo Request
数据包并显示每个目标的响应时间。 - arping:主要用于ARP协议,测试局域网内的主机连通性。通常使用ICMP的
Echo Request
来触发目标主机产生ARP响应,验证局域网内的主机是否可达。