Wireshark抓包深入分析一下Ping的过程

摘要:
接下来,让我们遵循ping命令,看看ping是如何工作的。在这里,提前缓存最新的ARP结果可以节省下一次ping的ARP时间。3379.764ms-3376.890ms=2.874ms。第四,我们分析了一个完整的ping请求过程。ping命令基于ICMP协议。ICMP协议的存在是为了更有效地转发IP数据报并提高传递成功的机会。

一、概览

对于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

Wireshark抓包深入分析一下Ping的过程第1张

抓包情况如下:

Wireshark抓包深入分析一下Ping的过程第2张

这里先简单的介绍下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协议的数据格式

Wireshark抓包深入分析一下Ping的过程第3张

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

Wireshark抓包深入分析一下Ping的过程第4张

简单介绍完了ICMP,那么抓包过程中出现的ARP协议是什么呢?我们同样来简单解释下:

3.3 ARP协议

我们知道,在一个局域网中,计算机通信实际上是依赖于MAC地址进行通信的,那么ARP(Address Resolution Protocol)的作用就是根据IP地址查找出对应ip地址的MAC地址。

3.4 Ping过程解析

了解了上面的基础概念后,我们来分析下抓包的数据。图b的流程如下:

  • A电脑(192.168.2.135)发起ping请求,ping 192.168.2.179

  • A电脑广播发起ARP请求,查询 192.168.2.179的MAC地址。

  • B电脑应答ARP请求,向A电脑发起单向应答,告诉A电脑自己的MAC地址为90:A4:DE:C2:DF:FE

  • 知道了MAC地址后,开始进行真正的ping请求,由于B电脑可以根据A电脑发送的请求知道源MAC地址,所有就可以根据源MAC地址进行响应了。

上面的请求过程我画成流程图比较直观一点:

Wireshark抓包深入分析一下Ping的过程第5张

观察仔细的朋友可能已经发现,Ping4次请求和响应结束后,还有一次B电脑对A电脑的ARP请求,这是为什么呢?这里我猜测应该是有2个原因:

1、由于ARP有缓存机制,为了防止ARP过期,结束后重新更新下ARP缓存,保证下次请求能去往正确的路径,如果ARP过期就会导致出现一次错误,从而影响测试准确性。

2、由于ping命令的响应时间是根据请求包和响应包的时间戳计算出来的,所以一次ARP过程也是会消耗时间。这里提前缓存最新的ARP结果就是节省了下次ping的arp时间。

为了验证我们的猜测,我再进行一次ping操作,抓包看看是不是和我们猜测的一样。此时,计算机里面已经有了ARP的缓存,我们执行ARP -a 看看缓存的arp列表:

Wireshark抓包深入分析一下Ping的过程第6张

我们看看第二次ping的抓包

Wireshark抓包深入分析一下Ping的过程第7张

我们看到上图中在真正ping之前并没有进行一次ARP请求,这也就是说,直接拿了缓存中的arp来执行了,另外当B计算机进行响应之前还是进行了一次ARP请求,它还是要确认下之前的ARP缓存是否为正确的。然后结束ping操作之后,同样在发一次ARP请求,更新下自己的ARP缓存。这里和我们的猜想基本一致。

弄懂了ping的流程之后我们来解析下之前解释的ICMP数据结果是否和抓包的一致。 我们来点击一个ping request看看ICMP协议详情

Wireshark抓包深入分析一下Ping的过程第8张

图中红框内就行ICMP协议的详情了,这里的Type=8,code=0,校验是正确。我们对比图d,就知道了这是一个请求报文。我们再点击Response frame:57,这里说明响应报文在序号57。详情如下:

Wireshark抓包深入分析一下Ping的过程第9张

上图的响应报文,Type=0,code=0。这里知道就是响应报文了,然后最后就是根据请求和响应的时间戳计算出来的响应延迟。3379.764 ms-3376.890 ms=2.874 ms.

四、总结

我们分析了一次完整的ping请求过程,ping命令是依托于ICMP协议的,ICMP协议的存在就是为了更高效的转发IP数据报和提高交付成功的机会。ping命令除了依托于ICMP,在局域网下还要借助于ARP协议,ARP协议能根据IP地址查出计算机MAC地址。ARP是有缓存的,为了保证ARP的准确性,计算机会更新ARP缓存。

五、参考

《计算机网络》TCP/IP协议之ICMP

免责声明:文章转载自《Wireshark抓包深入分析一下Ping的过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇雷达信号的旁瓣对消和旁瓣匿影GoLand无法找到go mod方式安装的依赖包<无法使用pkg/mod下的包>(GoLand2019.3.3)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

开发板Ping不通虚拟机和主机

Ubuntu 16.04  win7  笔记本连接学校的无线网 开发板S3c2440与笔记本仅通过COM连接 问题描述: 设置了桥接,主机与虚拟机IP在同一网段后,主机与虚拟机可以Ping,但是开发板无法Ping主机与虚拟机 设置如下 步骤: 1.确定网卡A 2.VMWare选择网卡A作为桥接网卡 3.设置三者IP在同一网段 a.Windows网卡A的IP...

用Python给Github的README.md做一个访客统计功能

README.md 是每一个 Github 项目必不可少的文件,用户打开你的项目链接第一眼看到的就是它。如果可以给这个文件添加一个访客统计功能,那么不就知道每天有多少个用户或者一共有多少个用户打开过你的项目了吗? 答案是肯定的,但是因为普通的访客统计系统都需要在 HTML 页面中用 <script> 标签引入一个 js 文件, 而 Githu...

Android抓包方法(转)

Android抓包方法(转) 作者:Findyou 地址:http://www.cnblogs.com/findyou/p/3491014.html 前言: 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等。 不管是之前做HTML5手机项目测试,还是现在的企邮app测试,经常需要抓包,做前端开...

MSN在Win7下80072f0d错误解决

近期电脑(笔记本联想K41A)显卡出了点问题(该显卡一周前刚换的新的,竟然不到一周又出问题了,联想的质量真的。。。),在xp下电脑根本进不了操作系统,不断重新启动(可能驱动、系统垃圾太多有关),于是一怒之下,把xp格式化了,安装了win7 旗舰版。 想不到还真有惊喜,电脑竟然能够正常进入win7操作系统,除了显卡没驱上,屏幕反应有点慢之外,其他一切都正...

【Ubuntu】无法挂载磁盘

我的电脑分了三个分区,A,B,C,其中A和B是Windows盘,C是ubuntu系统盘 某日发现A ,B盘没法进入了,在文件管理器中点一下,没有反应。于是右击盘符,点击挂载,跳出错误信息: (划重点) 于是输入: sudo ntfsfix /dev/nvme0n1p3   然后可以访问了。 于是同样方法对于装Windows的系统盘,但是不成功! 上网查了...

Win10系统如何利用蓝牙设置动态锁?

很多小伙伴都会有这样的经历,出门之后没走多远,却已然忘记是否锁门,有强迫症的人就会重新返回查看,以确保门是否反锁。 我们在使用电脑时也是这样,遇到事情要临时离开,却忘记是否锁屏,再返回来就耽误时间了。好在Win10系统为我们解决了这个后顾之忧,我们可以通过Win10系统的动态锁屏功能来实现。Win10动态锁屏功能有什么用平常我们锁屏是通过“WIN+L”的快...