protocol

ICMP 协议原理

·4 分钟阅读·1356 字

Internet控制报文协议——网络层附属协议,差错报告与网络探测

📋 目录

ICMP 协议原理(Internet控制报文协议,网络层附属协议)

一、基础定位

ICMP 依附IP协议(协议号1),属于网络层不独立封装链路头,报文封装在IP数据报的数据部分。

作用:差错报告 + 网络探测 + 控制通知,IP本身无差错纠错、报错能力,靠ICMP补全。

二、报文结构

IP首部 | ICMP首部(1B类型 + 1B代码 + 2B校验和 + 可变字段) | 原始IP报文前8字节
  • 类型(Type):报文大类(差错/查询)
  • 代码(Code):细分原因
  • 校验和:校验整个ICMP报文
  • 数据区:出错时携带原IP首部+原TCP/UDP头部前8字节(方便上层定位端口、进程)

三、两大分类:差错报文 / 查询报文

1. ICMP差错报告报文(被动触发,出错才发)

差错报文不会为ICMP报文、广播报文产生回复,防止风暴

  1. 目的不可达(Type=3)
  • Code0:网络不可达;Code1:主机不可达;Code3:端口不可达
    场景:目标主机关机、端口没开、路由无条目,路由器/目标主机回包。
  1. 源站抑制(Type=4)
    路由器缓冲区满、拥塞,通知源主机降速发包(现在基本弃用,由TCP拥塞控制实现)。
  2. 重定向(Type=5)
    网关告知主机:存在更优路由,让主机更新本地路由表。
  3. 超时(Type=11)
  • TTL耗尽(traceroute原理);分片重组超时。

2. ICMP查询报文(主动收发,一问一答)

  1. 回显请求/应答(Type8请求 / Type0应答)→ ping核心
  • ping发ICMP Echo Request,目标回Echo Reply,用来连通性+时延探测。
  1. 时间戳请求/应答(Type13/14):早期主机时钟同步,现已淘汰。

四、两个经典应用原理

1)ping 原理

  1. 源主机构造 ICMP Type8请求,封装IP发出;
  2. 目标收到后,构造 ICMP Type0应答原路返回;
  3. 源计算往返RTT、丢包率。

Linux/Windows ping 底层全靠ICMP。

2)traceroute(路由追踪)原理(TTL+ICMP超时)

  1. 第1跳:IP包TTL=1,经过第一个路由器TTL-1=0 → 丢弃,返回ICMP Type11超时报文,拿到一跳IP;
  2. 第2跳:TTL=2,第二台路由TTL变0返回超时;
  3. 持续递增TTL,直到抵达目标主机,目标返回端口不可达/echo应答,追踪结束。

五、关键特性

  1. ICMP基于IP,不可靠:ICMP报文出错不会再发ICMP报错,避免死循环;
  2. 防火墙常封禁入站ICMP:外部无法ping通内网主机(安全策略);
  3. 端口不可达(Type3-Code3):UDP收包无对应监听端口时回复,TCP不会(TCP自带RST报文)。

六、简易数据流示例

PC ping 192.168.1.1
PC(用户态程序)→构造ICMP请求→封装IP→网关收到→网关回ICMP应答→PC解析输出时延。

关联文档

  • 网络面试题 — 网络协议面试题
  • ../technology/eBPF 技术原理 — 网络观测与 eBPF