首页/计算机网络/04-network/ICMP协议 🔗 在 Obsidian 中打开
计算机网络 · 04-network

ICMP协议

难度 ★★★重要度 ★★★★★ 考查频率 低题型 选择 / 简答 ICMP差错报告PingTraceroute
速查
ICMP(互联网控制报文协议)是 IP 的辅助协议,工作在网络层,封装在 IP 分组中(Protocol=1)。用于差错报告与网络探测;Ping 用回送请求/回答,Traceroute 用逐步增大的 $TTL$ 触发 ICMP 超时报文。

核心概念

ICMP 概述

  • Internet 控制报文协议:在 IP 主机、路由器间传递控制消息和差错报告。
  • 是 IP 协议的辅助协议,封装在 IP 分组中。
  • 不是传输层协议,工作在网络层

ICMP 报文封装

IP头(Protocol=1)
  └─ ICMP报文
      ┌──────────┬──────────┬──────────────┐
      │ 类型(1B) │ 代码(1B) │ 校验和(2B)   │
      ├──────────┴──────────┴──────────────┤
      │          数据部分                    │
      └────────────────────────────────────┘

ICMP 报文类型

差错报告报文

类型名称说明
3目的不可达路由器或主机无法交付分组
11超时TTL 减为 0 或重组超时
12参数问题IP 头字段有误
5改变路由建议使用更优路由

询问报文

类型名称说明
8 / 0回送请求 / 回答Ping 使用
13 / 14时间戳请求 / 回答查询时间

目的不可达(类型 3)细分

代码0: 网络不可达(路由表中无匹配网络)
代码1: 主机不可达(网络可达但主机不可达)
代码2: 协议不可达(IP头的协议字段无对应协议)
代码3: 端口不可达(UDP端口无进程监听)
代码4: 需要分片但 DF=1
代码5: 源路由失败

超时(类型 11)细分

代码0: TTL超时(路由器将TTL减为0)
代码1: 分片重组超时(目的端重组时超时)

不发送 ICMP 差错报文的情况

1. ICMP差错报文本身出错(防止无限循环)
2. 分片中非第一个分片
3. 多播/广播分组
4. 特殊地址(如127.0.0.0)的分组
原因主要是防止 ICMP 差错报文自身的无限循环与广播风暴

ICMP 应用

Ping

原理:发送ICMP回送请求(类型8),接收ICMP回送回答(类型0)
1. 发送方发送 ICMP Echo Request
2. 接收方收到后返回 ICMP Echo Reply
3. 发送方计算往返时间(RTT)
特点直接封装在 IP 分组中(不经 TCP/UDP),可检测连通性和测 RTT。

Traceroute

原理:逐步增大 TTL,获取路径上每个路由器的信息
1. 发送 TTL=1 的分组 → 第1个路由器返回 ICMP 超时
2. 发送 TTL=2 的分组 → 第2个路由器返回 ICMP 超时
3. ...直到到达目的主机
最终目的主机返回 ICMP 端口不可达(发送到不存在的UDP端口)

常见考法

题型分布报文类型分类、Ping/Traceroute 原理、不发送 ICMP 的情况、封装(Protocol=1)是高频点。
考点说明
ICMP 报文类型差错报告和询问报文的分类
ICMP 的应用Ping 和 Traceroute 的原理
不发送 ICMP 的情况防止 ICMP 差错报文的无限循环
ICMP 封装封装在 IP 分组中,$Protocol=1$

易错点

必记
  • ICMP 工作在网络层,不是传输层。
  • ICMP 差错报文是发给源主机的,不是中间路由器。
  • Ping 用的是 ICMP,不是 TCP 或 UDP。
  • Traceroute 用逐步增大 TTL,不是一次发送。
  • ICMP 差错报文中含导致错误的原始 IP 头和数据前 8 字节。

核心结论

  1. ICMP 是 IP 的辅助协议,用于差错报告与网络探测。
  2. Ping 使用 ICMP 回送请求/回答。
  3. Traceroute 用 ICMP 超时报文逐步发现路径。
  4. ICMP 报文封装在 IP 分组中($Protocol=1$)。

记忆卡片

ICMP 工作在哪一层?
网络层(不是传输层)。
Ping 使用 ICMP 的什么报文?
回送请求(类型 8)和回送回答(类型 0)。
Traceroute 的原理?
逐步增大 TTL,利用 ICMP 超时报文发现路径上的路由器。
ICMP 协议字段值?
$Protocol=1$(封装在 IP 分组中)。

交互动画 · Traceroute 原理

发送方 R1跳1 R2跳2 R3跳3 目的主机
点击不同 TTL,观察对应路由器因 TTL 减为 0 而返回 ICMP 超时报文
TTL=1→R1 超时;TTL=2→R2 超时;TTL=3→R3 超时;到达目的→端口不可达

相关知识点

ipv4-packet-format arp-protocol ipv4-address-classification

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。