模块 13:ICMP
第五次课
一、ICMP 协议基础概述¶
-
协议定义
ICMP 即 Internet 控制消息协议,其核心作用是在 IP 网络中为设备提供
IP 数据包传输问题的反馈,是保障网络通信可靠性的关键网络层协议。
-
协议版本
- ICMPv4:适配 IPv4 网络的消息协议,仅支持 IPv4 环境下的消息交互;
- ICMPv6:适配 IPv6 网络的消息协议,不仅包含 ICMPv4 的基础功能,还新增了邻居发现等专属特性,功能更完善。
-
核心关联命令 ping 和 traceroute(Windows 系统为 tracert)两大网络测试命令,均基于 ICMP 消息实现,是 ICMP 协议最典型的应用。
二、ICMPv4 与 ICMPv6 通用消息类型¶
ICMPv4 和 ICMPv6 存在三类通用消息,分别用于解决不同的网络通信问题:
-
主机连通性消息(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 可达。
-
-
目的或服务不可达消息
-
(1)核心作用
当数据包无法送达目标时,由路径中的路由器向源主机发送该类消息,告知传输失败的具体原因。
-
(2)具体错误代码(分版本)
协议版本 错误代码 代码含义 ICMPv4 0 网络不可达(目标网段无路由) ICMPv4 1 主机不可达(目标网段存在但主机无响应) ICMPv4 2 协议不可达(目标主机不支持数据包的上层协议) ICMPv4 3 端口不可达(目标主机对应端口未开放或无监听服务) ICMPv6 0 无通往目的的路由(无匹配路由条目) ICMPv6 1 管理上禁止通信(如防火墙策略拦截) ICMPv6 2 超出源地址的范围(源地址网段与目标网段不兼容) ICMPv6 3 地址无法访问(目标地址失效或未分配) ICMPv6 4 端口不可达(同 ICMPv4 的 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 地址自动配置,具体如下:
-
路由器请求(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 地址配置。
-
-
邻居请求(NS)与邻居通告(NA)消息(地址解析与重复检测)
-
(1)重复地址检测(DAD)
- 触发场景:IPv6 设备分配到全局单播地址或本地链路地址后,需先确认地址唯一性;
- 交互流程:设备发送 NS 消息,将自身 IPv6 地址作为目标地址;若网络中存在相同地址的设备,该设备会回复 NA 消息,告知源设备地址已被占用。
-
(2)MAC 地址解析(替代 IPv4 的 ARP 协议)
- 触发场景:源设备已知目标设备的 IPv6 地址,需获取其 MAC 地址以完成二层封装;
- 交互流程:源设备向目标 IPv6 地址发送 NS 消息,询问对应的 MAC 地址;目标设备收到后通过 NA 消息返回自身 MAC 地址,实现 IPv6 地址到 MAC 地址的映射。
-
四、ICMP 协议的特殊注意事项¶
-
ICMP 消息可能被拦截
出于网络安全考虑,防火墙等设备可能会禁止 ICMP 消息的传输。此时会出现特殊现象:ping 或 traceroute 测试显示不通,但仍可正常访问目标主机的应用层服务(如 Web 网站、FTP 站点)。
-
协议层级差异导致拦截不影响应用层
ICMP 属于网络层(三层) 协议,容易被防火墙针对性拦截;而 Web、FTP 等服务属于应用层(七层)协议,防火墙默认不会拦截,因此会出现 “测试不通但服务可用” 的情况,关闭防火墙或开启 ICMP 消息放行策略即可恢复 ping/traceroute 连通性。