IP 协议中报文分组通过路由器经过路由选择一步一步地送到目的主机。但如果一个数据报到达某个路由器后,该路由器不能为它选择路由(如路由表故障),或者不能递交数据报(如目的节点没有开机),或者该路由器检测到某种不正常状态(如网关超负荷,到达的数据报太多来不及处理),那么它就有必要将这些信息通知主机,让主机采取措施避免或者纠正这类问题。由于IP 是无连接的,且不进行差错检验,当网络上发生错误时不能检测错误。网际控制报文协议(Internet Control Message Protocol,ICMP)作为IP 协议的补充,为IP 协议提供差错报告,运行于IP 协议之上。它通常被认为是IP 协议的一部分,用于传送这方面的控制信息或差错信息。因为这些信息可能需要穿过几个物理网络才能到达它们的最终报宿,只靠物理层传递是不能实现的,所以需要将它们封装在IP 数据报中才能进行传递。这时被封装在IP数据报中的ICMP 报文不能看作是高层协议,而只是IP 需要的一部分。显然载有ICMP 报文的IP 数据报也有可能产生错误。为此规定:载送ICMP 报文的数据报若出现差错,不产生ICMP报文,否则就要引起递归了。
ICMP 能够报告的一些普通错误类型有:目标无法到达、阻塞、回波请求、回波应答等。ICMP 报文大体可以分为两种类型,即差错报文和查询报文,如表5-9所示。
表5-9 ICMP 报文分类
续表
ICMP 报文格式如图5-15所示。
图5-15 ICMP 报文的格式
类型字段的长度是1 字节,用于定义报文类型。
代码字段的长度是1 字节,标识发送这个特定报文类型的原因。
校验和字段的长度是2 字节,用于数据报传输过程中的差错控制。(www.xing528.com)
其余部分因不同报文类型而不同。
数据字段因不同报文类型而不同,提供了ICMP 差错和状态报告信息。
各种ICMP 报文的前32 bit 都一样,它们是:
(1)8 bit 类型字段和8 bit 代码字段,两者一起决定了ICMP 报文的类型。常见的有:
① 类型8、代码0:回声请求;
② 类型0、代码0:回声应答;
③ 类型11、代码0:超时。
(2)16 bit 校验和字段:包括数据在内的整个ICMP 数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
ICMP 最典型的一个应用就是分组网间探测PING(Packet InterNet Groper)。许多操作系统都提供了PING 命令,用来检查路由是否能够到达某站点,也用来测试一帧数据从一台主机传输到另一台主机所需的时间,从而判断网络和主机的响应时间。PING 命令就是利用ICMP回声请求报文和回声应答报文来测试目标系统是否可达。
ICMP 回声请求和ICMP 回声应答报文是配合工作的。当源主机向目的主机发送了 ICMP回声请求数据包后,它期待着目的主机的回答。目的主机在收到一个ICMP 回声请求数据包后,会交换源、目的主机的地址,然后将收到的ICMP 回声请求数据包中的数据部分原封不动地封装在自己的ICMP 回声应答数据包中,再发回给发送ICMP 回声请求的一方。如果校验正确,发送者便认为目的主机的回声服务正常,即物理连接畅通。
ICMP 协议对于网络安全具有极其重要的意义。ICMP 协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。