ICMP协议
简介
ICMP–INTERNET CONTROL MESSAGE PROTOCOL 网络控制信息协议
ICMP负责传递IP协议或更高层协议的差错报文以及其他需要注意的信息,正式规范在RFC792
ICMP报文在IP数据报内部被传输
ICMP报文格式与类型
类型字段有15个不同的值,描述不同类型的ICMP报文,同一个类型下用代码字段描述不同报文
检验和是整个ICMP报文的检验和,不只是针对头部
下面是ICMP报文的类型
最后两列描述了ICMP报文是查询报文还是差错报文,下面重点讲述差错报文
ICMP差错报文
ICMP差错报文格式
发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前八个字节
举个例子,UDP端口不可达时返回的ICMP差错报文如下
根据产生差错的数据报IP首部可以让接收ICMP差错报文的主机知道IP的上层协议是什么,例子中就是UDP协议,然后就可以知道后面8个字节是UDP首部,从UDP首部中主机可以知道UDP的源端口号和目的端口号,进而把数据传输给端口对应的进程程序。
ICMP差错报文产生条件
下面的情况不会导致产生ICMP差错报文
- ICMP差错报文不会导致ICMP差错报文,单ICMP查询报文可以
- 目的地址是广播地址或者多播地址的IP数据报
- 作为链路层广播的数据报
- 不是IP分片的第一片
- 源地址不是单个主机的数据报
这是为了防止ICMP差错报文对广播分组响应导致的广播风暴