Skip to content

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):

类型代码含义
30-15目的不可达(网络不可达、主机不可达、协议不可达、端口不可达等)
110-1时间超过(TTL超时、分片重组超时)
120-2参数问题(首部字段有误)
50-3重定向(对特定网络/主机的路由重定向)
40源站抑制(已废弃)

查询报文(Query Messages):

类型含义
8/0回送请求/回送应答(ping命令)
13/14时间戳请求/时间戳应答
9/10路由器询问/路由器通告

2.3 ICMP差错报告报文的规则

以下情况不发送ICMP差错报文:

  1. 对ICMP差错报文本身不再发送ICMP差错报文(防止无限循环)
  2. 对第一个分片之后的所有分片不发送ICMP差错报文
  3. 对多播地址不发送ICMP差错报文
  4. 对特殊地址(如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端口不可达(因为选择了不太可能使用的端口号)

三、记忆与理解辅助

  1. 口诀:"ICMP网络层帮手,差错查询两大类;3不可达11超时,8/0回送ping通了;traceroute用TTL,逐跳探测显路径。"
  2. ICMP报文类型速记
    • 类型3 = 目的不可达(Destination Unreachable)
    • 类型5 = 重定向(Redirect)
    • 类型8 = 回送请求(Echo Request)
    • 类型0 = 回送应答(Echo Reply)
    • 类型11 = 时间超过(Time Exceeded)
  3. 不发送ICMP差错的四种情况:记为"ICMP不打ICMP、不打首片后续片、不打多播、不打特殊"

四、例题与精解

例题1(基础巩固)

题目:以下关于ICMP协议的描述中,正确的是( ) A. ICMP是传输层协议 B. ping命令使用ICMP回送请求和回送应答报文 C. ICMP差错报文会针对每个分片分别发送 D. ICMP报文不封装在IP分组中

命题意图:考查ICMP的基本概念和报文类型。

精解

  1. 审题分析:选出正确的描述。
  2. 解题思路:逐项分析。
  3. 完整步骤
    • A错误:ICMP是网络层协议,不是传输层。虽然它封装在IP分组中,但在TCP/IP模型中属于网络层。
    • B正确:ping使用类型8(回送请求)和类型0(回送应答)。
    • C错误:ICMP差错报文只针对第一个分片发送,后续分片不发送。
    • D错误:ICMP报文封装在IP分组的数据部分中。
  4. 方法反思:记住ICMP是网络层协议,封装在IP分组中,协议号为1。

例题2(中等提升)

题目:主机A向目的主机D发送IP分组,路径经过路由器R1和R2。假设R1的TTL值被设为1。请描述该分组从A出发到最终结果的完整过程,包括涉及的ICMP报文。

命题意图:考查ICMP超时报文的产生机制和traceroute的工作原理。

精解

  1. 审题分析:分组TTL=1,经过R1时TTL减为0,需要分析后续过程。
  2. 解题思路:逐跳分析TTL变化和ICMP报文的产生。
  3. 完整步骤

①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超时报文,从而发现完整路径。

  1. 方法反思:ICMP超时报文由路由器产生,报文中包含导致超时的原始分组信息。traceroute正是利用这一机制逐跳探测路径。

五、考情分析

  • 考查频次:近5年出现4-5次
  • 常见题型:选择题考查ICMP报文类型和功能;综合题考查ICMP与IP协议的关系
  • 分值占比:选择题2分
  • 命题趋势:ICMP报文类型的辨析是稳定考点,近年增加了对ping和traceroute工作原理的考查

六、易错点提醒

  1. 错误表现:将ICMP归类为传输层协议

    • 错误原因:ICMP封装在IP分组中,看起来像是传输层
    • 正确理解:ICMP是网络层协议。在TCP/IP模型中,网络层包括IP、ICMP、ARP、IGMP等协议
  2. 错误表现:认为ICMP差错报文会针对每个IP分片发送

    • 错误原因:忽略了ICMP的限制规则
    • 正确理解:ICMP差错报文只针对第一个分片发送。如果一个分组被分片后第一个分片丢失导致目的不可达,只发送一份ICMP差错报文
  3. 错误表现:认为ping命令使用TCP或UDP

    • 错误原因:ping看起来像是一个应用层工具
    • 正确理解:ping直接使用ICMP(网络层),不经过TCP/UDP(传输层)。ping的ICMP报文封装在IP分组中
  4. 错误表现:认为traceroute使用ICMP回送请求

    • 错误原因:混淆了ping和traceroute的ICMP报文类型
    • 正确理解:ping使用回送请求/应答(类型8/0),traceroute使用时间超过(类型11)和目的不可达(类型3)

七、来源标注

  • 依据2026考研统考大纲
  • 依据《计算机网络(第8版)》谢希仁版
  • 依据RFC 792(Internet Control Message Protocol)

考研全科复习资料 - 基于2026考研统考大纲