目录
[CMP 的优缺点](#CMP 的优缺点)
[ICMP 的安全性](#ICMP 的安全性)
ICMP协议
ICMP(Internet Control Message Protocol,互联网控制消息协议)是 TCP/IP 协议族中的一种网络层协议,但IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因,因此ICMP协议就用于在 IP 网络中传递控制消息和错误报告。
- ICMP 主要用于诊断网络问题、检测网络可达性和报告错误条件。
- ICMP 是网络管理和故障排除的重要工具,常见的工具如 ping 和 traceroute 都依赖于 ICMP。
ICMP功能
ICMP主要的功能包括
- 确认IP包是否成功到达目的地址
- 通知再发送过程中IP包被丢包的原因
- ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们依旧把它归结为网络层协议。
- ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6协议。
举个例子
当主机A向主机B发送数据时,但是主机B已经离线或者关机时

当数据包抵达主机B所在局域网的入口路由器时,路由器为了获取主机B的MAC地址,会向其发送ARP请求。然而,由于主机B已离线,路由器在多次尝试且未收到任何响应后,便会向主机A返回一个ICMP Destination Unreachable(目标不可达)报文。此时,主机A即可得知发送至主机B的数据无法送达。
ICMP协议格式
关于报文格式如下:
仅作了解

ICMP 消息分为两大类:
- 错误报告消息 :
- 用于报告网络中的错误条件,如目的地不可达、超时等。
- 查询消息 :
- 用于网络诊断,如回显请求(Echo Request)和回显应答(Echo Reply)。
其中报文中第一个字段类型,填充不同内容,会指定不同的类型,其ICMP包常见类型如下:

ping命令
ping命令就是ICMP的最常应用场景之一,其主要作用便是用于网络连通信测试。
使用 ping 工具检测目标设备是否可达。在此ping以下百度试试

- 注意,此处ping的是百度的域名,该域名会由DNS解析成IP地址
- ping命令不仅能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存时间)。
- ping命令会先发送一个ICMP Echo Request给对端。
- 对端接收到之后,会返回一个ICMP Echo Reply。

一个值得注意的坑
如果问你:telnet是23端口,ssh是22端口,那么ping是什么端口?
答案:ping命令是基于ICMP协议的,ICMP协议在网络层,并非传输层。而端口号是传输层的内容。所以ICMP根本就不关心端口号,所以ping并不在什么端口上。
traceroute命令
除了ping命令,traceroute命令也是ICMP另一个最常应用场景之一,其主要作用是检测数据包的传输路径。
在使用该命令之前,还是要先下载
sudo apt install traceroute
之后,我们可以尝试检测向百度发送数据包的传输路径。

CMP 的优缺点
优点:
- 简单高效:ICMP 消息结构简单,开销小。
- 广泛支持:几乎所有支持 IP 协议的设备都支持 ICMP。
- 诊断功能强大:提供丰富的网络诊断和错误报告功能。
缺点:
- 安全性问题:ICMP 可能被用于网络攻击(如 Ping Flood、Smurf Attack)。
- 不可靠性:ICMP 不提供可靠性保证,消息可能丢失或被忽略。
ICMP 的安全性
为了提高 ICMP 的安全性,可以采取以下措施:
- 防火墙过滤:配置防火墙规则,限制 ICMP 消息的传输。
- 速率限制:限制 ICMP 消息的发送速率,防止网络攻击。
- 禁用不必要的 ICMP 功能:在网络设备上禁用不必要的 ICMP 消息类型。