Appearance
408 > 计算机网络 > ICMP协议
一、定位信息
- 所属圈层:核心层
- 前置知识:需了解IPv4分组格式(CN-04-04),特别是协议字段和TTL字段的含义
- 知识网络位置:ICMP是网络层的"差错报告员",为IP协议提供差错报告和网络探测功能。它是理解ping和traceroute工具的基础,也是网络层不可缺少的辅助协议
- 考点热度等级:H级(高频重点) — ICMP报文类型和差错报告机制是408常考知识点
二、知识点讲解
2.1 ICMP的基本概念
ICMP(Internet Control Message Protocol,互联网控制报文协议) 是IP协议的辅助协议,用于在IP主机和路由器之间传递差错报文和查询报文。ICMP报文封装在IP分组中(协议号=1)。
ICMP虽然封装在IP分组中,但它是网络层协议,不是传输层协议。
2.2 ICMP报文的分类
ICMP报文分为两大类:
差错报告报文(Error Messages):
| 类型 | 代码 | 含义 |
|---|---|---|
| 3 | 0-15 | 目的不可达(网络不可达、主机不可达、协议不可达、端口不可达等) |
| 11 | 0-1 | 时间超过(TTL超时、分片重组超时) |
| 12 | 0-2 | 参数问题(首部字段有误) |
| 5 | 0-3 | 重定向(对特定网络/主机的路由重定向) |
| 4 | 0 | 源站抑制(已废弃) |
查询报文(Query Messages):
| 类型 | 含义 |
|---|---|
| 8/0 | 回送请求/回送应答(ping命令) |
| 13/14 | 时间戳请求/时间戳应答 |
| 9/10 | 路由器询问/路由器通告 |
2.3 ICMP差错报告报文的规则
以下情况不发送ICMP差错报文:
- 对ICMP差错报文本身不再发送ICMP差错报文(防止无限循环)
- 对第一个分片之后的所有分片不发送ICMP差错报文
- 对多播地址不发送ICMP差错报文
- 对特殊地址(如127.0.0.0、0.0.0.0)不发送ICMP差错报文
2.4 ICMP差错报告报文的内容
ICMP差错报文包含:
- ICMP首部(类型、代码、校验和)
- 引发出差错的原始IP分组的首部 + 原始数据的前8字节
这前8字节通常包含TCP或UDP的源端口和目的端口,使得源主机能够知道是哪个应用出了问题。
2.5 ICMP的应用
ping命令:
- 使用ICMP回送请求(类型8)和回送应答(类型0)
- 测试目的主机是否可达以及往返时间(RTT)
- 工作在网络层,不使用TCP/UDP
traceroute命令:
- 使用ICMP时间超过(类型11)和目的不可达(类型3)
- 工作原理:依次发送TTL=1,2,3...的IP分组,每经过一个路由器TTL减1后为0,路由器丢弃分组并返回ICMP超时报文,从而获知路径上每个路由器的IP地址
- 最终目的主机收到分组后返回ICMP端口不可达(因为选择了不太可能使用的端口号)
三、记忆与理解辅助
- 口诀:"ICMP网络层帮手,差错查询两大类;3不可达11超时,8/0回送ping通了;traceroute用TTL,逐跳探测显路径。"
- ICMP报文类型速记:
- 类型3 = 目的不可达(Destination Unreachable)
- 类型5 = 重定向(Redirect)
- 类型8 = 回送请求(Echo Request)
- 类型0 = 回送应答(Echo Reply)
- 类型11 = 时间超过(Time Exceeded)
- 不发送ICMP差错的四种情况:记为"ICMP不打ICMP、不打首片后续片、不打多播、不打特殊"
四、例题与精解
例题1(基础巩固)
题目:以下关于ICMP协议的描述中,正确的是( ) A. ICMP是传输层协议 B. ping命令使用ICMP回送请求和回送应答报文 C. ICMP差错报文会针对每个分片分别发送 D. ICMP报文不封装在IP分组中
命题意图:考查ICMP的基本概念和报文类型。
精解:
- 审题分析:选出正确的描述。
- 解题思路:逐项分析。
- 完整步骤:
- A错误:ICMP是网络层协议,不是传输层。虽然它封装在IP分组中,但在TCP/IP模型中属于网络层。
- B正确:ping使用类型8(回送请求)和类型0(回送应答)。
- C错误:ICMP差错报文只针对第一个分片发送,后续分片不发送。
- D错误:ICMP报文封装在IP分组的数据部分中。
- 方法反思:记住ICMP是网络层协议,封装在IP分组中,协议号为1。
例题2(中等提升)
题目:主机A向目的主机D发送IP分组,路径经过路由器R1和R2。假设R1的TTL值被设为1。请描述该分组从A出发到最终结果的完整过程,包括涉及的ICMP报文。
命题意图:考查ICMP超时报文的产生机制和traceroute的工作原理。
精解:
- 审题分析:分组TTL=1,经过R1时TTL减为0,需要分析后续过程。
- 解题思路:逐跳分析TTL变化和ICMP报文的产生。
- 完整步骤:
①A发出分组:
- 源IP=A,目的IP=D,TTL=1
②R1收到分组:
- R1将TTL减1 → TTL=0
- R1丢弃分组(TTL超时)
- R1向A发送ICMP时间超过报文(类型11,代码0=TTL超时)
- ICMP报文内容:包含被丢弃分组的IP首部和前8字节数据
③A收到ICMP超时报文:
- A知道分组在R1处因TTL超时被丢弃
- A可以选择增大TTL重新发送,或者报告目的不可达
这就是traceroute的基本原理:通过逐步增大TTL(1, 2, 3...),依次触发路径上每个路由器发送ICMP超时报文,从而发现完整路径。
- 方法反思:ICMP超时报文由路由器产生,报文中包含导致超时的原始分组信息。traceroute正是利用这一机制逐跳探测路径。
五、考情分析
- 考查频次:近5年出现4-5次
- 常见题型:选择题考查ICMP报文类型和功能;综合题考查ICMP与IP协议的关系
- 分值占比:选择题2分
- 命题趋势:ICMP报文类型的辨析是稳定考点,近年增加了对ping和traceroute工作原理的考查
六、易错点提醒
错误表现:将ICMP归类为传输层协议
- 错误原因:ICMP封装在IP分组中,看起来像是传输层
- 正确理解:ICMP是网络层协议。在TCP/IP模型中,网络层包括IP、ICMP、ARP、IGMP等协议
错误表现:认为ICMP差错报文会针对每个IP分片发送
- 错误原因:忽略了ICMP的限制规则
- 正确理解:ICMP差错报文只针对第一个分片发送。如果一个分组被分片后第一个分片丢失导致目的不可达,只发送一份ICMP差错报文
错误表现:认为ping命令使用TCP或UDP
- 错误原因:ping看起来像是一个应用层工具
- 正确理解:ping直接使用ICMP(网络层),不经过TCP/UDP(传输层)。ping的ICMP报文封装在IP分组中
错误表现:认为traceroute使用ICMP回送请求
- 错误原因:混淆了ping和traceroute的ICMP报文类型
- 正确理解:ping使用回送请求/应答(类型8/0),traceroute使用时间超过(类型11)和目的不可达(类型3)
七、来源标注
- 依据2026考研统考大纲
- 依据《计算机网络(第8版)》谢希仁版
- 依据RFC 792(Internet Control Message Protocol)