一、ICMP 是什么
ICMP(Internet Control Message Protocol,互联网控制报文协议),网络层协议,封装在IP数据包里。
注意:ICMP不是传输层协议,没有端口号,它是IP的配套辅助协议。
作用:传递网络控制信息、差错报告、探测网络连通性。
常见工具:ping、traceroute 底层基于ICMP。
二、ICMP报文封装结构
IP首部 + ICMP报文
ICMP报文通用头部:
- 类型(Type):报文种类
- 代码(Code):同类型下细分原因
- 校验和:校验ICMP数据完整性
- 后续:对应类型的数据
三、两大类ICMP报文
1. 差错报告报文
用来通知主机发生网络错误:
- 目的不可达(Type=3)
Code细分:网络不可达、主机不可达、端口不可达、协议不可达等。 ping一个不存在IP会返回主机不可达;UDP访问不存在端口返回端口不可达。 - 源站抑制(Type=4):网络拥塞,通知发送方降低发包速率(现在基本弃用)
- 重定向(Type=5):网关告知主机,有更优路由
- 超时(Type=11):TTL减到0,数据包丢弃,返回超时。traceroute原理依赖这个报文
- 参数问题(Type=12):IP首部参数错误
2. 查询报文(信息请求,双向交互)
- 回显请求(Type=8):ping发送的探测包
- 回显应答(Type=0):目标主机回复ping应答
ping流程:主机A发送ICMP Type8回显请求;目标主机收到,返回Type0回显应答。
四、ping 和 traceroute原理
- ping
发送ICMP回显请求,等待回显应答,统计丢包、往返时延,判断连通性。
注意:ping不通 ≠ 服务不可用。很多服务器防火墙拦截ICMP,但TCP服务正常。
- traceroute(tracert)
利用ICMP超时报文。
- 先发TTL=1的IP包,第一个路由器TTL变成0,返回ICMP超时;拿到第一跳路由。
- 逐步递增TTL,依次拿到沿途每一跳路由器回复,直到到达目标IP。
五、重要规则(考点)
✅ ICMP差错报文不会再产生ICMP差错报文,防止网络风暴。
- 分片后的IP包,只有第一个分片出错时才会产生ICMP差错报文;其他分片出错不生成ICMP。
- 目的地址是广播/多播的数据包出错,不发送ICMP差错报文。
六、常见安全问题
- ICMP洪水(Ping Flood):大量ping包打向目标,占用带宽,DoS攻击。
- Smurf攻击:向广播地址发送ICMP请求,大量主机同时应答,放大流量。
- ICMP隧道:把其他数据封装在ICMP报文中穿透防火墙,用于内网渗透。
防护:防火墙可以按需限制ICMP,禁止外网ICMP入站。
七、ICMP和IP的关系
ICMP报文作为IP的数据部分封装,IP协议号是1。
ICMP用于IP层的控制与差错通知;不能传输用户业务数据。
八、小结
- ICMP网络层协议,封装在IP包内,无端口号;
- 分为差错报告报文 + 查询报文;ping使用Type0/8;traceroute依靠Type11超时报文;
- 作用:差错通知、路由重定向、网络探测;
- 规则:差错报文不会再触发ICMP差错报文,防止循环风暴;
- 防火墙可拦截ICMP,ping不通不代表TCP服务一定不可访问。
思考题:为什么很多服务器防火墙会禁止外部的ICMP回显请求?
0 条笔记