在上一节中,我们有一张图纵观整个网络架构中的重要协议。其中在网络层中,IP协议的右上方有一个ICMP协议。根据下层协议服务上层协议的原则,ICMP协议便是基于IP协议,完成主机、路由器间的控制信息传递。控制信息包括:网络是否连通、主机是否可达、路由是否可用等。这些信息虽不是用户需要传递的数据本身,但对保证数据能够正常传递十分重要。
一、ICMP报文结构
1.类型:ICMP报文分为差错报告报文与询问报文两种,分别对应不同的类型值
2.代码:精确描述该ICMP报文的对应种类
3.检验和:检验ICMP报文在传输过程中是否发生了错误
ICMP报文基于ICMP协议,运行于IP协议之上,所以其内容可放在IP数据报的数据部分中,通过IP协议进行传输。
二、ICMP差错报告报文
ICMP差错报告报文会对多种网络差错进行报告:
1)终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
2)时间超过:报文TTL减至0,报文仍未达到目的地址,则路由器丢弃该报文,并向源主机发送差错报告报文。
3)参数问题:当路由器或主机的数据报首部被检验出错误时,就丢弃该数据报,并向源点发送参数问题报文。
4)改变路由:路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器
为避免ICMP差错报告报文的泛滥或是循环发送,以下情况不再发送ICMP差错报告报文:
1)对ICMP差错报告报文不再发送ICMP差错报告报文
2)对第一个分片的数据报片的后续数据报片都不发送ICMP差错报告报文
3)对具有组播地址的数据报不发送ICMP差错报告报文
4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
三、ICMP询问报文
ICMP询问报文主要有以下两种:
1)回答请求和回答报文:主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态。
2)时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
四、ICMP应用
1.ping
ping使用了ICMP回送请求和回答报文。
可在cmd中敲下
ping IP地址
来测试,某IP地址是否可通达。
ping IP地址 -t
可不停向某个IP地址发送ping请求,可通过ctrl+c停止发送
ping IP 地址 -l 字节数
通过-l 字节数的方式,可指定发送ICMP探寻报文的大小(0~65500,默认值为32字节)
2.tracert
tracert是在windows下的命令,其在linux中又称tracerout。
tracert IP地址
认值为32字节)
2.tracert
tracert是在windows下的命令,其在linux中又称tracerout。
tracert IP地址
该命令可以利用ICMP时间超过差错报文,逐一探寻出到达目的IP地址所经过的所有路由器