2024年6月14日发(作者:)

1 ICMP简介

ICMP全称Internet Control Message Protocol(Intemet控制报文协议),该协议是

TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制报

文。控制报文是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。当遇到

IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时会自动发送

ICMP报文。我们可以通过Ping命令发送ICMP回应请求报文(ICMP Echo-Request)

并记录收到ICMP回应回复报文(ICMP Echo-Reply)。通过这些报文来对网络或主机的

故障提供参考依据。ICMP是用IP封装和发送的,用来向IP和高层协议通报有关网络层的

差错和流量控制情况,所有的路由器和主机都支持此协议。

1.1 ICMP报文

0:回应应答 3:目的不可达

4:源抑制 5:路由重定向

8:回应请求

11:分组超时 14:时间戳应答

17:地址掩码请求

18:地址掩码应答

ICMP报文的封装:封装在IP数据报中,如下图:

1.2 ICMP回应请求和应答

ICMP的请求、应答报文是一种双向信息查询报文,用于获取某些有用信息,以便进

行故障诊断的网络控制。请求、应答报文共有3对。

①回应请求/应答报文(类型8/0):检测目的站点的可达性与状态。信源机向目的机传

送一个回应请求报文,其中包含一个任选的数据区。目的机接收到请求报文后,向信源机

发送相应的回应应答报文,其中包含了请求报文中的任选数据区的拷贝。如果成功地接收

到正确的应答报文,则说明网络的分组转发和路由选择功能是正常的。在Unix等许多操作

系统中,Ping命令的实现就是利用该报文实现的。

②时间戳请求与应答报文(类型13/14):在网络中实现时间同步和分组传送时间的估

计。利用该报文可以估计两个结点之间的机器时间差,以便进行同步。但是,由于TCP/IP

网络分组传送的随机性。用这种方式进行测量和同步是很不准确的。

③地址掩码请求与应答报文(类型17/18):用于获取目的主机所在网络的子网掩码,

用于无盘系统在引导过程中获取自己的子网掩码。

1.3 ICMP差错报告

差错报告是单方向的:由路由器向信源主机报告(如图1)。对ICMP差错报文进行响

应时,不会生成另一份ICMP差错报文,否则会永远循环下去。

差错报告类型:

①目的地不可达报告:网络不可达、主机不可达、协议和端口不可达等(见图4)