### 1、ICMP主要功能

- 错误通知
- 诊断查询

### 2、ICMP报文格式

![image-20230709165939976](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709165939976.png)

### 3、ICMP通知主机不可达流程

- 包通过IP协议原路返回到发送方

![image-20230709165145074](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709165145074.png)

### 4、ICMP报文类型

![image-20230709165228961](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709165228961.png)

### 5、目标不可达消息

- 类型 3，携带不可达具体原因
- 不可达原因与具体错误号
- 4代表MTU路径发现，分片大小超限

![image-20230709165756565](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709165756565.png)

### 6、重定向消息

- 类型 5
- 路由器发现发送端主机使用了次优的路径发送数据，会返回一个重定向消息
- 消息中包含最合适的路由信息和源数据

![image-20230709170456622](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709170456622.png)

### 7、超时消息

- 类型 11
- IP包中TTL字段值每经过一次路由就会减一，直到减到0时包就会被丢弃，此时IP路由器将会发送一个ICMP的超时消息给发送端主机

![image-20230709170710061](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709170710061.png)

### 8、回送消息

- 类型 0或8
- 用于进行通信的主机或路由器之间，判断所发送的数据包是否已经成功到达对端
- 可以相对端主机发送会送请求的消息（ICMP Echo Request Message 类型 8），也可以接受对端主机发回来的回送应答消息（ICMP Echo Reply Mesage 类型 0）

- ping 命令就是利用ICMP实现的 TODO

![image-20230709171124972](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709171124972.png)

### 9、ICMPv6

- 没有ICMPv6，IPv6网络就无法通信
- 整合了ARP和ICMP重定向以及ICMP路由器选择消息等功能于一体，甚至还提供自动设置IP地址的功能
- 一类是错误消息，另一类是信息消息
  - 错误消息 0-127
  - 信息消息 128-255

![image-20230709171625663](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709171625663.png)

![image-20230709171636369](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709171636369.png)

### 10、ICMPv6 探索消息

- 类型133-127
- 用于查询IPv6的地址与MAC地址对应关系，并由邻居宣告消息得知MAC地址
- 利用IPv6多播地址实现传输

![image-20230709172007397](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/note/image-20230709172007397.png)