ICMP协议的简介
ICMP协议是IP协议的补充,用于IP层的差错报告、拥塞控制、路径控制以及路由器或主机信息的获取。ICMP与IP协议位于同一个层次(IP层),但ICMP报文是封装在IP数据报的数据部分进行传输的。
ICMP数据报的格式
ICMP数据报各个字段的含义
类型
定义了ICMP报文的类型。ICMP报文的类型答题可以分为两类:差错报文和查询报文,具体的消息类型如下:
代码
标识发送特定报文的原因,从上图可以看到有的ICMP报文类型字段相同,需要code来区分具体的原因。
校验和
提供ICMP整个报文的校验和。
首部其余部分
由报文类型确定内容,大部分差错报文未使用该字段。
数据部分
提供ICMP差错和状态报告信息,内容因报文类型而异。
ICMP差错报文
目的站不可到达报文
当路由器不能找到正确的路由器或者主机完成IP数据报的转发时,则会丢弃该报文,并且路由器会向源主机发出ICMP目的站不可达报文。此报文的类型字段的值为3,其他字段的内容如下:
源站的抑制报文
当路由器或主机因为拥塞而丢弃IP数据报时,就向报文的发送站发送源站抑制报文。此报文的类型字段的值为4,其他字段的内容如下:
路由重定向报文
路由器转发分组过程中,要将最有效的路由信息告知源主机,更新源主机路由表。该路由信息是路由器通过向源主机发送路由定向报文。此报文的类型字段的值为5,其他字段的内容如下:
超时报文
如果路由器遇到一个IP数据报中的生存期字段(TTL)为0的报文,则会将它丢弃,并且向其发送源发送一个ICMP超时报文。此报文的类型字段的值为11,其他字段的内容如下:
参数出错报文
当IP分组头中任何一项接收出错时,路由器是无法处理,只能将该分组丢弃。并向发送端发送ICMP参数出错报文。此报文的类型字段的值为12,其他字段的内容如下:
ICMP查询报文
ICMP查询报文的目的是实现对网络故障进行诊断和控制。在ICMP查询报文是双向的,成对出现,而ICMP差错控制报文只是单向的。
回应请求与应答
测试能否到达目的主机/路由器(网络连通性)由主机发出请求,检查另一个主机能否可达(ping命令)。其中类型的值为8的为ICMP回应请求报文,类型为0的是ICMP回应应答报文。其报文具体内容如下:
除此之外,还有其他几种查询报文,可以自行查阅资料,这里就只介绍了常用的查询报文。
ICMP报文封装图
ICMP报文作为IP分组数据转发(被封装在IP分组的数据段中),包含ICMP报文的IP分组头的协议类型字段值设为:1,其封装过程如下:
总结
ICMP协议是封装到IP分组的数据中进行传输,它是对IP协议的一个补充。它包含两大类报文:ICMP差错报文、ICMP查询报文