Skip to content

ICMP 协议

ICMP(Internet Control Message Protocol,网际控制报文协议)是 TCP/IP 网络层(OSI 第三层) 的协议,IP 协议号 1。它不传输用户业务数据,而是用于在 IP 主机、路由器之间传递控制与差错信息,是「网络自我诊断」的工具。

注意:ICMP 不是传输层协议,它和 TCP/UDP 是「同层邻居」——都基于 IP,但职责不同。我们平时用的 pingtraceroute 就是建立在 ICMP 之上的。


一、ICMP 的作用

  1. 差错报告:当 IP 包无法送达或处理异常时,由路由器/主机回送差错报文。
    • 目的不可达(网络/主机/端口/协议不可达)
    • 超时(TTL 减到 0,或分片重组超时)
    • 参数问题(首部字段错误)
  2. 查询/诊断(典型就是 ping / traceroute):
    • 回送请求 / 回送应答(Echo):ping 的原理。
    • 时间戳请求 / 应答:测量往返时间。
    • 地址掩码请求 / 应答:获取子网掩码(现已少用)。

二、报文格式

ICMP 报文封装在 IP 数据报中(IP 首部 protocol=1,后面跟 ICMP 报文):

 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  类型 Type  |  代码 Code  |           校验和 Checksum         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              根据不同的 Type/Code 携带的附加信息            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          数据 ...                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 类型(Type):区分报文种类(如 0=回送应答,8=回送请求,3=目的不可达,11=超时)。
  • 代码(Code):在同一类型下细分(如目的不可达的 网络/主机/端口 不可达)。
  • 校验和:覆盖整个 ICMP 报文。

常见类型速查:

Type含义典型用途
0 / 8回送应答 / 回送请求ping
3目的不可达路由/端口不可达报错
11超时(TTL=0 / 重组超时)traceroute
5重定向通知更优路由

三、典型应用

ping

发送 ICMP Echo Request(Type 8),对端回 Echo Reply(Type 0)。通过统计往返时间(RTT)和丢包率判断连通性与网络质量。

traceroute(Windows: tracert)

利用 TTL 机制:逐跳把 IP 包的 TTL 设为 1, 2, 3…,每经过一跳路由器 TTL 减 1,减到 0 时路由器丢弃该包并返回 ICMP 超时报文(Type 11),从而暴露每一跳的地址,画出路径。


四、与 TCP/UDP 的区别

维度ICMPTCP / UDP
所属层网络层(L3)传输层(L4)
是否传用户数据否(仅控制/诊断)
是否有端口号
典型应用ping / traceroute / 差错报告网页、文件、音视频等

五、注意事项

  • ICMP 常被防火墙限制或丢弃(尤其 Echo 类型),所以 ping 不通 不代表服务不可达(TCP 端口可能仍开放)。
  • 不要滥用 ICMP(如大量 Echo 请求构成 ping flood 攻击);生产环境常对 ICMP 速率做限制。
  • ICMP 本身不可靠,差错报文也可能丢失,不应作为唯一的可靠性依据。
最近更新