2.8ICMP
1.ICMP概述
ICMP工作在TCP/IP协议簇的网际层,用于传输在TCP/IP通信中产生的错误报告、通信控制信息和请求应答信息。IP网络本身是不可靠的,在网络传输过程中可能会发生许多突发事件导致数据传输失败。网际层的IP协议是一个无连接的协议,它不会处理网际层传输中的故障;而位于网际层的ICMP协议却恰好弥补了IP协议的缺陷,它使用IP协议进行信息传递,向数据包中的源端节点提交目标不可到达的错误信息反馈。
2.ICMP的特点
ICMP是网际层的一个协议,但它的报文差错报告并不直接传送给数据链路层,而是封装在IP数据报的数据部分,再传送给数据链路层。从这一点上看,ICMP在层次上高于IP协议。但从协议体系的功能和作用来看,ICMP的差错和控制信息传输是要解决IP协议的不可靠回应请求应答题,它不能独立于IP协议而存在,所以应把它看成是IP协议的一个补充,而归于网际层协议。
ICMP差错报告和控制报文的共同特点是单向的报文传输。但ICMP差错报告只有一对一通信模式;而ICMP控制报文不但有一对一通信模式,还有一对多的通信模式。ICMP的请求应答报文提供了双向报文传输。
3.ICMP的协议结构
ICMP的报文长度可变,其固定部分长4字节,结构如图2.13所示。

图2.13 ICMP报文结构
(1)类型。标识ICMP报文的类型。ICMP报文类型主要有3类:差错报告报文、控制报文和请求应答报文。各种ICMP报文类型如图2.14所示。
①差错报告报文。主要包括目标不可到达(Destination Unreachable)报文、超时(Time Exceeded)报文和参数出错(Parameter Problem)报文。
②控制报文。主要包括源抑制(Source Quench)报文和重定向(Redirect)报文。
③请求应答报文。主要包括回应请求应答(Echo Request或Echo Reply)报文、路由器请求通告(Router Solicitations或Router Advertisement)报文、时间戳请求应答(Timestamp Request或Timestamp Reply)报文和地址掩码请求或应答(Address Mask Request或Address Mask Reply)报文。
(2)代码。对报文类型进一步说明。例如,目标不可到达报文有16种,导致目标不可到达的代码。
(3)校验和。以16位为单位计算出来的ICMP报文的校验和值。

图2.14 ICMP报文的分类
(4)数据区。不同类型和代码有不同的数据区,包含不同的内容,可用于对LCMP报文进行分析和处理。