icmp是什么协议( icmp的数据链路层协议是什么)

无线路由器-网关-dtu

我们之前的文章中了解过TCP/IP协议,我那时候码了一句

无线路由器-网关-dtu

下面我们就来真正认识一下ICMP协议

什么是ICMP

ICMP的全称是InternetControlMessageProtocol(互联网控制协议),它是一种互联网套件,它用于IP协议中发送控制消息。也就是说,ICMP是依靠IP协议来完成信息发送的,它是IP的主要部分,但是从体系结构上来讲,它位于IP之上,因为ICMP报文是承载在IP分组中的,就和TCP与UDP报文段作为IP有效载荷被承载那样。这也就是说,当主机收到一个指明上层协议为ICMP的IP数据报时,它会分解出该数据报的内容给ICMP,就像分解数据报的内容给TCP和UDP一样。

ICMP协议和TCP、UDP等协议不同,它不用于传输数据,只是用来发送消息。因为IP协议现在有两类版本:IPv4和IPv6,所以ICMP也有两个版本:ICMPv4和ICMPv6

ICMP的主要功能

对于ICMP的功能,主要分为两个

ICMP的第一个功能是确认IP包是否能够成功到达目标地址,当两个设备通过互联网相连时,任意一个设备发送给另一个设备的IP包如果没有到达,就会生成ICMP数据包发送给设备共享。

ICMP的第二个功能是进行网络诊断,经常使用ICMP数据包的两个终端程序是ping和traceroute,traceroute程序用于显示两台互联网设备之间可能的路径并测量数据包在IP网络上的时延。ping程序是traceroute的简化版本,我们经常使用ping命令来测试两台设备之间是否互联,ping通常用来测试两台主机之间的连接速度,并准确报告数据包到达目的地并返回后所花费的时间。

现在我们知道了,如果在IP通信过程中由于某个IP包由于某种原因未能到达目标主机,那么这个具体的原因将由ICMP进行通知,下面是一个ICMP的通知示意图

无线路由器-网关-dtu

上面我们只是画出了路由器2给主机A发送了一个ICMP数据包,而没有画出具体的通知类型,但实际情况是,上面发送的是目标不可达类型(Destinationunreachable),ICMP也是具有不同的通知类型的,下面我们汇总了ICMP数据包的具体通知类型。

 

通知类型(十进制数) 具体内容
0 回送应答(EchoReply)
3 目标不可达(DestinationUnreachable)
4 原点抑制(SourceQuench)
5 重定向或改变路由(Redirect)
8 回送请求(EchoRequest)
9 路由器公告(RouterAdvertisement)
10 路由器请求(RouterSolicitation)
11 ICMP超时(TimeExceeded)
17 地址子网请求(AddressMaskRequest)
18 地址子网应答(AddressMaskReply)

 

上表显示的ICMP通知类型主要分为两类:有关IP数据报传递的ICMP报文,这类报文也叫做差错报文(errormessage),以及有关信息采集和配置的ICMP报文,这类报文也被称为查询query或者信息类报文。

信息类报文包括回送请求和回送应答(类型8和类型0),路由器公告和路由器请求(类型9和类型0)。最常见的差错报文类型包括目标不可达(类型3)、重定向(类型5)、超时(类型11)。

ICMP在IPv4和IPv6的封装

我们知道,ICMP是承载在IP内部的,而且IPv4和IPv6的封装位置不同:

ICMP在IPv4协议中的封装

无线路由器-网关-dtu

ICMP在IPv6协议中的封装

无线路由器-网关-dtu

上面两张图显示了ICMPV4和ICMPv6的报文格式。开头的4个字节在所有的报文中都是一样的。但是其余部分在不同的报文中却不一样。

ICMP头部包含了整个ICMP数据段的校验和,具体格式如下

无线路由器-网关-dtu

所有的ICMP报文都以8位的类型(Type)和代码(Code)字段开始,其后的16位校验和涵盖了整个报文,ICMPv4和ICMPv6种的类型和代码字段是不同的。