服务至上
网际控制报文协议ICMP
发布日期:2023-11-13 来源: 浏览次数: 作者:NIC


为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP

主机或路由器使用ICMP来发送差错报告报文和询问报文

ICMP报文被封装在IP数据报中发送

1-网际控制报文协议ICMP.jpg

1)差错报告报文类型

ICMP差错报告报文共有以下五种:

1.终点不可达

当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络位置、目的主机未知等13种错误。

2-网际控制报文协议ICMP.jpg

2.源点抑制

当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报发送速率放慢。

3-网际控制报文协议ICMP.gif

3.时间超过

当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段值减1。若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。

当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。

4-网际控制报文协议ICMP.jpg

4.参数问题

当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。

5-网际控制报文协议ICMP.jpg

5.改变路由(重定向)

路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

如主机1的默认路由是R1,信息经过R1时,R1发现最佳路由不是自己,而是R2,所以通过ICMP告知主机1

6-网际控制报文协议ICMP.jpg

2)询问报文类型

1.回送请求和回答

ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。

收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。

这种询问报文用来测试目的站是否可达及了解其有关状态。

2.时间戳请求和回答

ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。

ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从190011日起到当前时刻一共有多少秒。

这种询问报文用来进行时钟同步和测量时间。

3.不发送ICMP的情况

ICMP差错报告报文不再发送ICMP差错报告报文。

对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。

对具有多播地址的数据报都不发送ICMP差错报告报文。

对具有特殊地址(如127.0.0.00.0.0.0)的数据报不发送ICMP差错报告报文。

4ICMP应用举例

分组网间探测PINGPacket InterNet Groper.

用来测试主机或路由器间的连通性(如ping www.baidu.com)。

应用层直接使用网际层的ICMP(没有通过运输层的TCPUDP)。

使用ICMP回送请求和回答报文。

跟踪路由tracerouce

用来测试IP数据报从源主机到达目的主机要经过哪些路由器。

Windows版本

tracert命令

应用层直接使用网际层ICMP

使用了ICMP回送请求和回答报文以及差错报告报文

Unix版本

traceroute命令

在运输层使用UDP协议

仅使用ICMP差错报告报文

实现方法

由主机发送出去的数据包中的生存时间字段TTL1开始逐渐增加,每个路由器都会返回一个时间超过报文,由此达到跟踪路由器的目的。