您当前的位置:首页 > 百科摘抄 > 内容

ping和icmp的关系(深入了解Ping命令后的工作原理)

日常工作中,我们经常需要判断网络是否连通,相信大家都会使用ping这个命令,其实ping命令是基于 ICMP 协议来实现的,那么什么是 ICMP 协议呢?ICMP是 Internet Control Message Protocol 的缩写,即互联网控制消息协议。它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使网络管理者可以对所发生的问题作出诊断,然后采取适当的措施解决问题。本文就来介绍一下ICMP协议的工作原理。

ping和icmp的关系(深入了解Ping命令后的工作原理)(1)

ICMP报文格式

从ICMP的报文格式来说,ICMP是IP的上层协议,但是ICMP是分担了IP的一部分功能。所以,ICMP也被认为是与IP同层的协议,工作在网络层,是IP协议的助手。如下图所示,ICMP封装在IP报进行传输,ICMP报文本身被封装在IP数据报的数据区中,而这个IP数据报又被封装在帧数据中。在IP数据报报头中的协议(Protocol)字段设置成1,表示该数据是ICMP报文。关于IP报文格式介绍详见《计算机网络传输中IP数据报文格式详解并结合Wireshark深入分析》。

ping和icmp的关系(深入了解Ping命令后的工作原理)(2)

ICMP报文格式如下图所示,ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关,然后是数据部分,长度也取决于类型。

ping和icmp的关系(深入了解Ping命令后的工作原理)(3)

类型:占8位。类型字段可以有15个不同的值,以描述特定类型的ICMP报文。代码:占8位。ICMP报文的代码字段是为了进一步区分某种类型中的几种不同的情况检验和:占16位。用来检验整个ICMP报文。其计算方法和IP头部检验和的计算方法一样的。ICMP报文类型

ICMP报文主要分为两大类:查询报文和差错报文。所有ICMP 用来交流错误通知和信息询问的报文,都是由类型和代码的组合来表示的。ICMP报文由类型来表达它的大概意义,一共定义了15种类型,需要传递细小的信息时由代码再来进行分类。

ping和icmp的关系(深入了解Ping命令后的工作原理)(4)

ICMP实现之ping命令

通过上面的叙述,我们了解了 ICMP 协议的内容,那么下面我们来看一下ICMP 的具体实现与应用吧。正如前面所说ICMP报文类型其实有好多种,用以反馈网络通信中的各种情形,而我们最最常用的情形是可以通过ping命令可以用来在网络层次上调查与指定机器是否连通。为了实现这个功能,ping命令使用了两个ICMP 报文:ICMP回送请求(类型是8,代码是0)和ICMP回送应答(类型是0,代码是0)。

ping和icmp的关系(深入了解Ping命令后的工作原理)(5)

首先,源主机向目标主机执行ping命令,源主机会构建一个ICMP回送请求消息数据包,在这个回送请求数据包中,相比与原生的ICMP除了类型和代码字段,还被追加了标识符和序号字段。标识符和序号字段分别是16位的字段,比如将进程号PID填写在标识符里,用以区分是哪个应用程序发ICMP包。对于序号,每送出一个数据包数值就增加1。另外该ICMP报文的选项数据部分还会存放发送请求的时间值,来计算往返时间。

我们在IP地址为192.168.0.102主机上执行ping 192.168.0.1的命令,并通过 WireShark 抓包可以看出,源主机会构建一个ICMP回送请求消息数据包如下图所示。可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo(ping) request——ping回送请求,后面还有检验和(Checksum)等字段,检验ICMP报文结构。

ping和icmp的关系(深入了解Ping命令后的工作原理)(6)

当源主机送出的回送请求到达目标主机后,目标主机回答这一请求,发送一个ICMP回送应答数据包。这个ICMP 回送应答报文在IP层来看,与被送来的回送请求报文基本上一样。不同的只是,源和目标IP 地址字段被交换了,类型字段里填入了表示回送应答的0。

通过 WireShark 抓包如下图所示,可以看到该ICMP报文的类型(Type)为0,对应代码(Code)为0,表示Echo(ping) Reply——ping回显应答。

ping和icmp的关系(深入了解Ping命令后的工作原理)(7)

如果目的主机可以接收到回送应答数据包,那我们就认为目标主机是正常工作着的。进一步,记住发送回送请求数据包的时间,与接收到回送应答数据包的时间差,就能计算出数据包一去一回所需要的时间。但是,收到的回送应答报文里写的只是类型和代码的话,发送方主机将无法判断它是否是自己发出去请求的回答。因此,前面说到的标识符和序号字段就有它的意义了。将这两个值与回送应答报文中的相同字段值一比较,送行方主机就能够简单地检测回送应答是否正确了。执行ping 命令而调查的结果没什么问题的话,就将目标主机的IP 地址,数据大小,往复花费的时间打印到屏幕上。

ping和icmp的关系(深入了解Ping命令后的工作原理)(8)


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 美鼻夹怎么缩小鼻翼(美鼻夹瘦脸绷带)

下一篇: 瑞幸倒下前出路(风暴中的瑞幸总部)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号