ICMP报文种类有两种:ICMP差错报告报文和ICMP询问报文
ICMP差错报告报文共有5中:
1.终点不可达——当路由器或主机不能交付数据报时就向原点发送终点不可达报文。
2.源点抑制——当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速度放慢
3.时间超过——当路由器收到生存时间为0的数据报时,丢弃数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部报片时,就把已收到的数据片都丢弃,并向源点发送时间超过报文。
4.参数问题——当路由器或目的主机收到的数据的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
5.改变路由(重定向)——路由器吧改变路由报文发送给主机,让主机知道下次应该将数据报发送给另外的路由器(可通过更好的路由)。
ICMP差错报告报文——将受到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文
ICMP询问报文有两种
1.回送请求和回答——ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的主机是否可达以及了解其有关状态。
2.时间戳请求和回答——ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表1900年1.1起到当前时刻经过的秒数。时间戳请求与回答可用来进行时钟同步和测量时间。
下面说说一个ICMP的例子:PING命令
PING(Packet InterNet Groper)分组网间探测——用来测试两个主机之间的连通性。从上面的介绍可以看出ping命令使用了ICMP的回送请求与回送回答报文。Ping是经过应用层直接使用网络层ICMP的一个例子,他没有通过运输层的TCP或UDP。
发出的四个ICMP回送请求报文,由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间。最后显示的结果:发送到哪个机IP地址,发送的/收到的和丢失的分组数。往返时间的最小值、最大值和平均值。
还有一个很好的例子就是:traceroute(Unix系统中的名字)
traceroute用来跟踪一个分组从源点到终点的路径.Windows中这个命令是tracert
工作原理:
traceroute从源主机向目标主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报.第一个数据报P1的生存时间TTL的值设置为1.当P1到达路径上的第一个路由器R1时,路由器R1先收下它,接着把TTL的值减1.由于TTL等于0了,R1就把P1丢弃了,并向原主机发送一个ICMP时间超过差错报告报文.
源主机接着发送第二个数据报P2,并把TTL置2.P2先到达路由器R1,R1手下后将TTL减1再转发给路由器R2.R2收到P2时TTL为1,但减1后TTl变为0了。R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文。这样一直下去。当最后一个数据报刚刚到达目的主机时,数据报的TTL是1.主机不转发数据报,也不把TTL减1,但因IP数据报中封装的是无法交付的运输层的UDP用户数据报,因此目的主机向源主机发送ICMP终点不可达差错报告报文.
阅读(2106) | 评论(1) | 转发(0) |