抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

一、概览

对于 ping 命令,想必只要是程序员都知道吧?当我们检查网络情况的时候,最先使用的命令肯定是 ping 命令吧?一般我们用 ping 查看网络情况,主要是检查两个指标,第一个是看看是不是超时,第二个看看是不是延迟太高。如果超时那么肯定是网络有问题啦(禁 ping 情况除外),如果延迟太高,网络情况肯定也是很糟糕的。那么对于 ping 命令的原理,ping 是如何检查网络的?大家之前有了解吗?接下来我们来跟着 ping 命令走一圈,看看 ping 是如何工作的。

二、环境准备和抓包

2.1 环境准备

1.抓包工具。我这里使用 Wireshark。

2.我准备了两台电脑,进行 ping 的操作。ip 地址分别为:

A 电脑:192.168.2.135

MAC 地址:98:22:EF:E8:A8:87

B 电脑:192.168.2.179

MAC 地址:90:A4:DE:C2:DF:FE

2.2 抓包操作

打开 Wireshark,选取指定的网卡进行抓包,进行 ping 操作,在 A 电脑上 ping B 电脑的 ip。

img

抓包情况如下:

img

这里先简单的介绍下 Wireshark 的控制面板,这个面板包含 7 个字段,分别是:

  • NO:编号
  • Time:包的时间戳
  • Source:源地址
  • Destination:目标地址
  • Protocol:协议
  • Length:包长度
  • Info:数据包附加信息

三、深入解析

上图中抓包编号 54-132 显示的就是整个 ping 命令的过程,我们知道 ping 命令不是依托于 TCP 或者 UDP 这种传输层协议的,而是依托于 ICMP 协议实现的,那么什么是 ICMP 协议呢?这里简单介绍下:

3.1 ICMP 协议的产生背景

[RFC792] 中说明了 ICMP 产生的原因:由于互联网之间通讯会涉及很多网关和主机,为了能够报告数据错误,所以产生了 ICMP 协议。也就是说 ICMP 协议就是为了更高效的转发 IP 数据报和提高交付成功的机会。

3.2 ICMP 协议的数据格式

img

根据上图我们知道了 ICMP 协议头包含 4 个字节,头部主要用来说明类型和校验 ICMP 报文。下图是对应的类型和代码释义列表,我们后面分析抓包的时候会用到。