ICMP协议

发布时间:2024年01月18日

目录

一、概述

二、ICMP报文格式

三、ICMP协议应用

3.1 ping 命令

3.2?目标不可达,源抑制和超时报文

3.3?时间戳请求与应答


一、概述

????????ICMP是 Internet Control Message Protocol 的缩写,即因特网控制消息协议。它是互联网协议族的核心协议之一,位于网络层。它用于 TCP/IP 网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使网络管理者可以对所发生的问题作出诊断,然后采取适当的措施解决问题。例如在判断网络是否连通的时候,我们大家使用最多的ping命令,traceroute ,这就是基于ICMP实现的。

? ? ? ? ICMP通常被认为是IP协议的一部分,但是从体系结构上来说,它位于IP之上,因为ICMP报文是承载在IP分组中的。这就是说,ICMP报文是作为IP有效载荷承载的,就像TCP、UDP报文段作为IP有效载荷被承载一样。ICMP是基于IP协议工作的,但是它并不具备传输层的功能,因此在划分的时候我们还是划分到了网络层。还要注意的是,ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6。在 IP 数据包中如果协议类型字段的值是 1 的话,就表示 IP 数据是 ICMP 报文。IP 数据包就是靠这个协议类型字段来区分不同的数据包的。?

二、ICMP报文格式

????????ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。

????????当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示

????????ICMP报文均有“类型,代码和校验和”三个字段,后面还有4个字节是根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。但是ICMP始终有8个字节的头部长度。

各字段说明:

  • 类型:占一字节,标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。
  • 代码:占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型。
  • 校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与IP报头中的校验和计算方法是一样的。

三、ICMP协议应用

3.1 ping 命令

????????我们日常进行的Ping操作中就包括了回显请求(类型字段值为8)和应答(类型字段值为0)ICMP报文。一台主机向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。

????????需要注意的是请求和回应的ICMP报文使用到了ICMP头部的后4个字节,分为两个字段,即标识和序列号。

  • 标识:占两字节,用于标识本ICMP进程,但仅适用于回显请求和应答ICMP报文,对于目标不可达ICMP报文和超时ICMP报文等,该字段的值为0。
  • 序列号:请求方每发送一个回显请求报文便增加 1

3.2?目标不可达,源抑制和超时报文

????????这三种报文的格式是一样的。目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。

????????源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报回丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。

3.3?时间戳请求与应答

????????时间戳的请求的类型字段为13,应答为14,只有一个代码0。它的头部与请求与回应的ICMP报文一致,但是数据部分它使用了12个字节,每4个字节记录一段时间信息,总共有三段,分别是“发送时间戳 ,接收时间戳,回送时间戳”,发送时间戳的信息由时间戳请求者记录,后面两个字段由回送者记录。字段里面记录的是有关当前时间的毫秒数的表示,发送者只要根据回送者发送的时间信息就可以很容易的求出往返时长。

文章来源:https://blog.csdn.net/apple_53311083/article/details/135661490
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。