首页 理论教育 了解网际控制报文协议(ICMP)的作用

了解网际控制报文协议(ICMP)的作用

时间:2023-07-01 理论教育 版权反馈
【摘要】:为了提高IP数据报交付成功的机会,在网际层使用了网际控制报文协议ICMP。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是因特网的标准协议。表6-1类型字段的值与ICMP报文的类型的关系ICMP报文的代码字段是为了进一步区分某种类型中的几种不同的情况。检验和字段用来检验整个ICMP报文。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。收到此报文的机器必须给源主机发送ICMP回送回答报文。

了解网际控制报文协议(ICMP)的作用

为了提高IP数据报交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是因特网的标准协议。但ICMP不是高层协议,而是IP层的协议。ICMP报文作为IP层数据报的数据,加上数剧报的首部,组成数据报发送出去。

ICMP报文格式如图6-5所示。

图6-5 ICMP报文的格式

ICMP报文的前4个字节是统一的格式,共有3个字段:即类型、代码和校验和。接着的4个字节的内容与ICMP的类型有关。再后面是数据字段,其长度取决于ICMP的类型。ICMP报文的类型字段的值与ICMP报文类型的对应关系如表6-1所示。

表6-1 类型字段的值与ICMP报文的类型的关系

ICMP报文的代码字段是为了进一步区分某种类型中的几种不同的情况。检验和字段用来检验整个ICMP报文。由于IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。

ICMP差错报告报文共有5种,即:

(1)终点不可达。分为网络不可达、主机不可达、协议不可达、端口不可达、需要分片但DF比特已置为1,以及源路由失败等6种情况,其代码字段分别置为0~5。当出现以上6种情况时就向源站发送终点不可达报文。

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

(3)时间超过。当路由器收到生存时间为0的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。

(4)参数问题。当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。

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

下面对改变路由报文进行简短的解释。在因特网中各路由器之间要经常交换路由信息,以便动态更新各自的路由表。但在因特网中主机的数量远大于路由器的数量。主机如果也像路由器那样经常交换路由信息,就会产生很大的附加通信量,因而大大浪费了网络资源。所以,出于效率的考虑,连接在网络上的主机的路由表一般都采用人工配置,并且主机不和连接在网络上的路由器定期交换路由信息。在主机刚开始工作时,一般都在路由表中设置一个默认路由器的IP地址。不管数据报要发送到哪个目的地址,都一律先将数据报传送给网络上的这个默认路由器,而这个默认路由器知道到每一个目的网络的最佳路由。如果默认路由器发现主机发往某个目的地址的数据报的最佳路由不应当经过默认路由器而是应当经过网络上的另一个路由器R时,就用改变路由报文将此情况告诉主机。于是,该主机就在其路由表中增加一个项目:到某日的地址应经过路由器R(而不是默认路由器)。

所有的ICMP差错报告报文的数据字段都具有同样的格式。将收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。这些信息对源站通知高层协议是有用的。整个ICMP报文作为IP数据报的数据。

不应发送ICMP差错报告报文的情况有以下几种:

(1)对ICMP差错报告报文不再发送ICMP差错报告报文。

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

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

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

ICMP询问报文有4种,即回送请求和回答、时间戳请求和回答、掩码地址请求回答,以及路由器询问和通告。(www.xing528.com)

ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的机器必须给源主机发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解共有关状态。

ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间歇回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。时间戳请求与回答可用来进行时钟同步和测量时间。

主机使用ICMP地址掩码请求报文可向子网掩码服务器得到某个接口的地址掩码。主机使用ICMP路由器询问和通告报文可了解连接在本网络上的路由器是否正常工作。主机将路由器询问报文进行广播(或多播)。收到询问报文的一个或几个路由器就使用路由器通告报文广播其路由选择信息。

应用层有一个很常用的服务叫做PING(Packet Internet Groper),用来测试两个主机之间的连通性。PING使用了ICMP回送请求与回送回答报文,如图6-6所示。

图6-6 用PING产生回音及应答

PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。具体操作过程如下:进入开始>程序>附件>命令提示符。在命令提示符后输入命令“ping.exe”,会显示PING的各种用法说明,如图6-7所示。

PING的最常用的功能是测试从一个主机到另一个主机之间是否存在一条可到达的通道,其目标可以是一个IP地址,或者是一个网络地址。PING以工会进行4次连通的测试,如果可到达的通道存在,就会报告字节数、返回时间等信息,如图6-8所示,如果可到达的通道不存在,就会报告超时(Request Time Out),如图6-9所示。

通过向回送地址127.0.0.1发送PING指令,可以测试本地网卡工作状态是否正常,参见6.4.3节“回送地址”。

在默认情况下,PING只发送4个数据包,不过通过下面的命令选项可以自己定义发送的个数:

—n count Number of echo requests to send(发送count指定的Echo数据包数)

该选项对衡量网络速度很有帮助,比如想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知

C:>ping—n 50202.103.96.68       

Pinging 202.103.96.68 with 32 bytes of data:

图6-7 PING的用法说明

图6-8 PING一个IP地址

图6-9 PING一个网络地址

从以上信息就可以知道在给202.103.96.68发送50个数据包的过程当中,返回了48个,其中有2个由于未知原因丢失,这48个数据包当中返回速度最快为40ms,最慢为51ms,平均速度为46ms。

在默认的情况下windows的PING发送的数据包大小为32字节,我们也可以自己定义它的大小,但有一个大小的限制,就是最大只能发送65500字节,之所以要限制到65500字节,是因为Windows系列的操作系统都有一个安全漏洞,就是当向对方一次发送的数据包达到或超过65532字节时,对方就很有可能死机,所以微软公司为了解决这一安全漏洞于是限制了PING的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危害依然非常强大,这里不作介绍了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈