ICMP 报文类型详解

ICMP 报文类型详解

ICMP 报文类型详解

一、ICMP协议概述

ICMP(Internet Control Message Protocol)是TCP/IP协议族的核心协议之一,工作在网络层(OSI第3层),主要用于传递网络状态信息和错误报告。

关键结论:ICMP是IP协议的辅助协议,虽然独立于传输层协议(TCP/UDP),但ICMP报文是作为IP数据报的有效载荷进行传输的。

go专栏:https://duoke360.com/tutorial/path/golang

二、ICMP报文通用格式

所有ICMP报文共享相同的头部结构:

0 1 2 3

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Type | Code | Checksum |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Rest of Header |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Data |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type(1字节):报文主类型Code(1字节):报文子类型Checksum(2字节):校验和Rest of Header(4字节):类型特定字段Data(可变长度):附加信息

三、主要ICMP报文类型详解

3.1 错误报告报文(Type 0-10)

3.1.1 目的不可达(Type=3)

当路由器或主机无法交付数据报时发送,包含6种常见子类型:

Code说明0网络不可达1主机不可达2协议不可达3端口不可达4需要分片但DF位已设置5源路由失败

典型场景:当发送UDP包到未监听端口时,会收到Type=3, Code=3的ICMP报文。

3.1.2 超时报文(Type=11)

包含两种子类型:

Code=0:TTL超时(路由器发现TTL=0时发送)Code=1:分片重组超时(主机在规定时间内未收到全部分片)

3.1.3 参数问题(Type=12)

当IP头部字段有问题时发送,Code=0表示具体错误位置指针。

3.2 查询报文(Type 8,0,13,14,17,18)

3.2.1 回显请求/应答(Type=8/0)

即ping命令使用的报文:

Type=8:请求(Echo Request)Type=0:应答(Echo Reply)

报文格式额外包含:

Identifier(2字节):进程IDSequence Number(2字节):序列号

3.2.2 时间戳请求/应答(Type=13/14)

用于时钟同步,包含三个时间戳字段:

原始时间戳(发送时间)接收时间戳传输时间戳

3.2.3 地址掩码请求/应答(Type=17/18)

用于获取子网掩码(现已被DHCP取代)

四、高级ICMP应用

4.1 路径MTU发现

通过Type=3, Code=4(需要分片)报文实现:

发送方设置DF位发送大包中间路由器返回ICMP错误发送方逐步减小MTU

4.2 Traceroute原理

利用TTL超时机制:

发送TTL=1的UDP包第一跳路由器返回Type=11, Code=0逐步增加TTL值获取路径

五、安全相关ICMP报文

5.1 重定向报文(Type=5)

路由器通知主机更优路由路径,包含4种子类型:

Code=0:网络重定向Code=1:主机重定向Code=2:TOS网络重定向Code=3:TOS主机重定向

安全警告:ICMP重定向可能被用于中间人攻击,现代系统通常忽略这类报文。

5.2 路由器通告/请求(Type=9/10)

用于无状态地址自动配置(SLAAC):

Type=9:路由器通告(包含前缀信息)Type=10:路由器请求

六、企业面试常见问题

ping不通的可能原因有哪些?

防火墙拦截ICMP中间设备丢弃报文目标主机禁用ICMP响应网络路由问题

traceroute如何同时使用UDP和ICMP?

原始实现使用UDP(Unix)Windows默认使用ICMP Echo请求两种方式都依赖TTL超时机制

为什么ICMP需要单独协议而不是使用TCP/UDP?

需要网络层级的错误报告TCP/UDP可能不可用(如端口不可达时)避免依赖高层协议实现

七、Wireshark抓包分析示例

Frame 1: 74 bytes on wire

Internet Protocol Version 4

Internet Control Message Protocol

Type: 8 (Echo (ping) request)

Code: 0

Checksum: 0x4865 [correct]

Identifier: 0x0001

Sequence Number: 1

Data (56 bytes)

建议面试者实际使用Wireshark分析各类ICMP报文,理解字段含义。

相关任务

365bet取款 车贷app下载

车贷app下载

📅 07-16 👁️ 4929
www.bet3365.com want you是什么意思

want you是什么意思

📅 09-27 👁️ 8195