2024年6月14日发(作者:)
ICMP是Internet Control Message Protocol 的缩写,即Internet控制报文协议。它
运行在IP协议之上,通常认为它是IP协议的一部分。
那么这个ICMP协议的产生有什么作用呢? Next
我们知道,IP协议提供的是一种尽力而为的服务,它提供了无连接和不可靠的数据服务。
并且它没有差错控制和查询机制。那么在发送数据报时,这个数据报是否到达了目的主机,
在传输过程中是否产生了错误,源主机都是不知道的。这就必须需要有一个差错报告与查询
控制机制来了解数据报的相关传输的信息,并决定下一步如何处理。
而ICMP协议提供了这样一种差错控制与查询机制,它对于保证TCP/IP协议的可靠运行
至关重要。
ICMP是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽
然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
我们在网络中经常会使用到ICMP协议。比如我们经常使用的用于检查网络通不通的Ping命
令,这个“Ping"的过程实际上就是ICMP协议工作的过程。在我们发送一个ping请求时,实
际上是向目的主机发送了一个ICMP回送请求报文,若网络是通的,那么目的主机在收到ICMP
回送请求报文时会返回一个ICMP回送应答数据报,这就实现了网络检查的功能。还有其他
的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
从技术角度来说,ICMP就是一个“错误侦测与回报机制",其目的就是让我们能够检测网路的
连线状况﹐也能确保连线的准确性。
ICMP主要通过不同的类别(Type)与代码(Code)让机器来识别不同的连线状况。
下面我们来看ICMP的报文是如何封装的。
ICMP报文以IP数据报的形式传送。报文本身被封装在IP数据报的数据区中,而这个IP数
据报又被封装在帧数据中。在IP数据报报头中的协议(Protocol)字段设置成1,表示该
数据是ICMP报文。Next
ICMP报文包括8个字节的报头和长度可变的数据部分。对于不同的报文类型,报头的格式
一般是不相同的,但是前3个字段对所有的ICMP报文都是一样的。
长度是1字节的类型(Type)字段,用于定义报文类型。
长度是1字节的代码(Code)字段,表示发送这个特定报文类型的原因。
长度是2字节的校验和(Checksum)字段,用于数据报传输过程中的差错控制。Next
ICMP报文有两大类:差错报告报文和查询报文。
差错报告报文分为5类:目的站不可到达,源站抑制,超时,参数问题和路由重定向。
查询报文为4类:回送请求和应答,时间戳请求和应答,地址掩码请求和应答,路由器询问
和通告。
下面我们来详细看一下各种报文的应用。
1. 目的不可达报文,其类型值Type=3,供路由器和目的主机使用。当路由器不能给数据报
找到路由器或主机无法交付数据报时,就丢弃数据报,然后路由器向源主机发送ICMP
数据报。代码(Code)字段的值表示该数据报出错的原因 。
2. 源站抑制报文,当大量数据报同时涌向一个主机或路由器时,由于缓冲区的空间不足,
就会产生拥塞现象。这时就要丢弃某些数据报,同时向发送数据报的源站发出ICMP源
站抑制报文,源主机收到报文就会减缓其向某一主机发送数据报的速率。目的主机接收
到源抑制报文将减缓发送速率,并在拥塞解除后恢复速率。
3. 超时报文。超时报文在如下两种情况时会发出:1.路由器转发数据时,如果其生存时间
减1后为0,则丢弃数据报,同时向源发出ICMP超时报文。2.组成一个数据报的所有分
片未能在限定时间内到达目的站,目的站会丢弃数据报并向源站发出超时报文。代码
(Code)字段的值表示超时的原因。
4. 参数问题报文。数据报在传输中报头出现错误或报头选项出现错误时向源站发送参数问
题报文。代码(Code)字段的值反映了丢弃该数据报的原因,指针(Pointer)字段的
值指明了出现错误的位置 。
5. 路由重定向。这个报文使主机从路由器获得正确的寻址信息并刷新主机的路由表。代码
(Code)字段的值给出了四种不同类型的重定向服务。那么主机路由表是如何刷新呢?
这里主机A打算向主机B发送数据,路由器2是最有效的路径选择,但主机A并没有选
择路由2而是将数据发给了路由1,路由1通过查表得知数据应发送给路由器2,那么
路由器1就将该分组发送给路由器2,同时向主机A发送ICMP路由重定向报文,这样主
机A的路由表就被更新了,那么它在下一次发送数据时将直接发送给路由器2。
下面介绍ICMP查询报文。 那么ICMP的差错控制报文是单向的,而查询报文都是双向的,
成对出现。即由一个节点发送信息请求报文,目的节点进行应答。
1. 回送请求和应答。用来确定主机和路由是否可以彼此通信。回送请求报文和回送应答报
文还可以用来测试某个主机是否可达,通常是调用PING命令来实现。PING命令使用的
就是回送请求和回送应答的ICMP报文。
2. 时间戳请求和时间戳应答。用于确定IP数据报在源端和目的端之间往返所需要的时间,
也可用作源端和目的端机器的时钟同步。利用这个报文,我们可以知道发送延迟时间,
接收延迟时间和往返延迟时间。
3. 地址掩码请求和地址掩码应答。用于获得一个主机所在网络的子网掩码。由主机向路由
发送地址掩码请求报文,路由器收到报文后作出相应,将地址掩码回送给主机。
4. 路由器询问和通告。主机想知道本网中路由器的IP地址及路由是否工作正常时,会发
出路由询问报文。收到路由器询问报文的路由器,会创建一个路由器通告报文,并在网
络上广播。
如上就是ICMP的各种报文应用及报文格式。
最后再提一下ICMPv6协议。
ICMPv6的主要功能同样是进行错误报告和网络诊断。ICMP6具备了V4的所有基本功能,不
同之处主要两点:一是它删除了一些不再使用的报文类型,定义了新的报文类型与功能;二
是v6合并了ICMP、IGMP与ARP等多个协议的功能。


发布评论