网际协议IP(3)之网际控制报文协议ICMP(Internet Control Message Protocol)

ICMP协议

为了更有效的转发IP数据报和提高交付成功的机会,在网络层使用了网际控制报文协议ICMP。因为ICMP报文是装在IP数据报中,作为其中的数据部分,因此它是IP层的协议。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。其报文格式如下所示:


如上图所示,校验和字段用来检验整个ICMP报文。而IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错

ICMP报文的种类:

ICMP报文有两种:即ICMP差错报告报文和ICMP询问报文。下面是几种常见的ICMP报文类型。


ICMP差错报告报文共有五种,即

(1)    终点不可达:当路由器或者主机不能交付数据报时就向源点发送终点不可达报文

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

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

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

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

在因特网的主机中也要有一个路由表,当主机要发送数据报时,首先是查找主机自己的路由表,看应该从哪一个接口把数据报发送出去。在因特网中主机的数量要远大于路由器的数量,出于效率的考虑,这些主机不和连接在网络上的。

 

ICMP的应用举例

ICMP的一个重要应用就是分组网间测试PING,用来测试两个主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP。

其工作原理是:例如:从某地的一台PC机到邮件服务器mail.sina.com.cn的连通性的测试结果。PC一连发出四个ICMP回送请求报文,如果邮件服务器正常工作而且相应这个ICMP回送请求报文,那么它就发回ICMP回送回答报文。由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间。往返时间的最小值、最大值和平均值等都会显示出。

         另一个非常有用的应用是traceroute(这是UNIX操作系统中名字),它用来跟踪一个分组从源点到终点的路径。在Windows操作系统中这个命令是tracert。

其工作原理是:traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。第一个数据报P1的生存时间TTL设置为1。当P1到达路径上的第一个路由器R1时,R1先收下它,接着把TTL的值减1.由于TTL等于零了,R1就把P1丢掉了,并向源主机发送一个ICMP时间超过差错报告报文。

源主机接着发送第二个数据报P2,并把TTL设置为2。P2先到达路由器R1,R1收下后把TTL减1再转发给路由器R2。R2收到P2时TTL为1,但减1后TTL变为零了,R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文。这样一直继续下去。当最后一个数据报刚刚到达目的主机时,数据报的TTL是1。主机不转发数据报,也不把TTL值减1。但因IP数据报中封装的是无法交付的运输层的UDP用户数据报,因此目的主机要向源主机发送ICMP终点不可达差错报告报文

这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的ICMP报文正好给出了源主机想知道的路由信息----到达目的主机所经过的路由器的IP地址,以及到达其中每一个路由器的往返时间。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值