跳转至

模块 13:ICMP

第五次课

一、ICMP 协议基础概述

  1. 协议定义

    ICMP 即 Internet 控制消息协议,其核心作用是在 IP 网络中为设备提供

    IP 数据包传输问题的反馈,是保障网络通信可靠性的关键网络层协议。

  2. 协议版本

    • ICMPv4:适配 IPv4 网络的消息协议,仅支持 IPv4 环境下的消息交互;
    • ICMPv6:适配 IPv6 网络的消息协议,不仅包含 ICMPv4 的基础功能,还新增了邻居发现等专属特性,功能更完善。
  3. 核心关联命令 ping 和 traceroute(Windows 系统为 tracert)两大网络测试命令,均基于 ICMP 消息实现,是 ICMP 协议最典型的应用。

二、ICMPv4 与 ICMPv6 通用消息类型

ICMPv4 和 ICMPv6 存在三类通用消息,分别用于解决不同的网络通信问题:

  1. 主机连通性消息(ping 命令核心依赖)

    • (1)工作原理

      通过ICMP Echo(回应)消息实现主机间连通性检测,包含两种核心报文:

      • Echo Request(回应请求):由源主机向目标主机发送,用于询问目标是否可达;
      • Echo Reply(回应应答):若目标主机可达且无策略拦截,会向源主机返回该报文,确认自身在线。
    • (2)交互示例

      源主机 H1(192.168.10.1/24)向目标主机 H2(192.168.30.1/24)发送 Echo Request,H2 收到后回复 Echo Reply,H1 据此判定 H2 可达。

  2. 目的或服务不可达消息

    • (1)核心作用

      当数据包无法送达目标时,由路径中的路由器向源主机发送该类消息,告知传输失败的具体原因。

    • (2)具体错误代码(分版本)

      协议版本 错误代码 代码含义
      ICMPv4 0 网络不可达(目标网段无路由)
      ICMPv4 1 主机不可达(目标网段存在但主机无响应)
      ICMPv4 2 协议不可达(目标主机不支持数据包的上层协议)
      ICMPv4 3 端口不可达(目标主机对应端口未开放或无监听服务)
      ICMPv6 0 无通往目的的路由(无匹配路由条目)
      ICMPv6 1 管理上禁止通信(如防火墙策略拦截)
      ICMPv6 2 超出源地址的范围(源地址网段与目标网段不兼容)
      ICMPv6 3 地址无法访问(目标地址失效或未分配)
      ICMPv6 4 端口不可达(同 ICMPv4 的 3 号代码)
  3. 超时消息(traceroute 命令核心依赖)

    • (1)触发机制(分版本)

      • ICMPv4:IPv4 数据包头部的 TTL(生存时间) 字段,每经过一台路由器就会递减 1,当 TTL 值变为 0 时,该路由器会向源主机发送 ICMPv4 超时消息,告知数据包过期;
      • ICMPv6:不使用 TTL 字段,而是通过IPv6 跳数限制字段判断数据包是否过期,当跳数限制递减至 0 时,触发 ICMPv6 超时消息。
    • (2)典型现象

      执行 traceroute 命令时,若出现 “TTL expired in transit” 提示,即表示数据包在某一跳路由器因 TTL 耗尽触发了 ICMP 超时消息;若 ping 目标地址出现 “请求超时”,则可能是数据包在传输中 TTL 耗尽或目标未响应。

三、ICMPv6 专属特性:邻居发现协议(NDP/ND)

ICMPv6 新增了邻居发现协议,包含 4 类专属消息,替代了 IPv4 中的 ARP 协议,同时实现 IPv6 地址自动配置,具体如下:

  1. 路由器请求(RS)与路由器通告(RA)消息(地址自动配置)

    • (1)路由器通告(RA)消息

      • 发送频率:启用 IPv6 的路由器每200 秒主动发送一次 RA 消息;
      • 消息内容:包含 IPv6 地址前缀(如 2001:db8:acad:1::/64)、前缀长度、DNS 服务器地址、默认网关(路由器本地链路地址,如 fe80::1)等;
      • 核心作用:为 IPv6 主机提供 无状态地址自动配置(SLAAC) 的依据,主机可基于前缀生成全局单播地址。
    • (2)路由器请求(RS)消息

      • 触发场景:IPv6 主机刚启动时,若未获取到地址信息,会主动发送 RS 消息;
      • 交互流程:主机发送 RS 消息查询网络中的 IPv6 路由器,路由器收到后通过 RA 消息回复地址配置信息,主机据此完成 IPv6 地址配置。
  2. 邻居请求(NS)与邻居通告(NA)消息(地址解析与重复检测)

    • (1)重复地址检测(DAD)

      • 触发场景:IPv6 设备分配到全局单播地址或本地链路地址后,需先确认地址唯一性;
      • 交互流程:设备发送 NS 消息,将自身 IPv6 地址作为目标地址;若网络中存在相同地址的设备,该设备会回复 NA 消息,告知源设备地址已被占用。
    • (2)MAC 地址解析(替代 IPv4 的 ARP 协议)

      • 触发场景:源设备已知目标设备的 IPv6 地址,需获取其 MAC 地址以完成二层封装;
      • 交互流程:源设备向目标 IPv6 地址发送 NS 消息,询问对应的 MAC 地址;目标设备收到后通过 NA 消息返回自身 MAC 地址,实现 IPv6 地址到 MAC 地址的映射。

四、ICMP 协议的特殊注意事项

  1. ICMP 消息可能被拦截

    出于网络安全考虑,防火墙等设备可能会禁止 ICMP 消息的传输。此时会出现特殊现象:ping 或 traceroute 测试显示不通,但仍可正常访问目标主机的应用层服务(如 Web 网站、FTP 站点)。

  2. 协议层级差异导致拦截不影响应用层

    ICMP 属于网络层(三层) 协议,容易被防火墙针对性拦截;而 Web、FTP 等服务属于应用层(七层)协议,防火墙默认不会拦截,因此会出现 “测试不通但服务可用” 的情况,关闭防火墙或开启 ICMP 消息放行策略即可恢复 ping/traceroute 连通性。