0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于完整的 ping请求过程

lhl545545 来源:杰哥IT之旅 作者:杰哥IT之旅 2022-09-19 09:14 次阅读

一般来说,用 ping查看网络情况,主要是检查两个指标:

第一个是看看是不是超时

第二个看看是不是延迟太高

如果超时那么肯定是网络有问题(禁 ping情况除外),如果延迟太高,网络情况肯定也是很糟糕的。

ping是如何检查网络的?

ping背后的原理到底是啥样的?

这篇文章就带着你,来跟着 ping命令走一圈,看看 ping是如何工作的

环境准备和抓包

环境准备

抓包工具:Wireshark 准备两台电脑,进行互 ping操作:

A电脑(IP地址:192.168.2.135 / MAC地址:98EFA8:87)

B电脑(IP地址:192.168.2.179 / MAC地址:90DEDF:FE)

抓包操作

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

f85a6986-37aa-11ed-ba43-dac502259ad0.png

抓包情况如下:

f86b9f3a-37aa-11ed-ba43-dac502259ad0.jpg

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

NO: 编号

Time: 包的时间戳

Source: 源地址

Destination: 目标地址

Protocol: 协议

Length: 包长度

Info: 数据包附加信息

深入解析

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

ICMP协议的产生背景

[RFC792]中说明了 ICMP产生的原因:

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

ICMP协议的数据格式

f89662ba-37aa-11ed-ba43-dac502259ad0.jpg

根据上图,你会知道 ICMP协议头包含 4个字节,头部主要用来说明类型和校验 ICMP报文。

下图是对应的类型和代码释义列表,后面分析抓包的时候会用到。

f8a48e4e-37aa-11ed-ba43-dac502259ad0.jpg

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

ARP协议

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

Ping过程解析

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

A 电脑( 192.168.2.135)发起 ping请求, ping192.168.2.179

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

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

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

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

f8b565c0-37aa-11ed-ba43-dac502259ad0.jpg

观察仔细的朋友,可能已经发现,Ping 4次请求和响应结束后,还有一次 B电脑对 A电脑的 ARP请求,这是为什么?

这里我猜测应该是有 2个原因:

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

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

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

f8eee476-37aa-11ed-ba43-dac502259ad0.jpg

看看第二次 ping的抓包:

f903cd00-37aa-11ed-ba43-dac502259ad0.jpg

可以看到,上图中在真正 ping之前并没有进行一次 ARP请求。

这也就是说,直接拿了缓存中的 ARP来执行了,另外当 B计算机进行响应之前还是进行了一次 ARP请求,它还是要确认下之前的 ARP缓存是否为正确的。

结束ping操作之后,同样再发一次 ARP请求,更新下自己的 ARP缓存,这里和我们的猜想基本一致。

弄懂了ping的流程之后我们来解析下之前解释的 ICMP数据结果是否和抓包的一致。

我们来点击一个 ping request看看 ICMP协议详情:

f9373a6e-37aa-11ed-ba43-dac502259ad0.jpg

图中红框内就行 ICMP协议的详情了,这里的 Type=8,code=0, 校验是正确,且这是一个请求报文。

我们再点击Responseframe:57,这里说明响应报文在序号 57。详情如下:

f948ec1e-37aa-11ed-ba43-dac502259ad0.jpg

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

总结

你看,上面的文章其实是分析了一次完整的 ping请求过程。

ping命令是依托于 ICMP协议的, ICMP协议的存在就是为了更高效的转发 IP数据报和提高交付成功的机会。

ping命令除了依托于 ICMP,在局域网下还要借助于 ARP协议, ARP协议能根据 IP地址反查出计算机的 MAC地址。

另外 ARP是有缓存的,为了保证 ARP的准确性,计算机会更新ARP缓存。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 互联网
    +关注

    关注

    54

    文章

    11092

    浏览量

    102901
  • 网络
    +关注

    关注

    14

    文章

    7511

    浏览量

    88605
  • Ping
    +关注

    关注

    0

    文章

    69

    浏览量

    15950

原文标题:当黑客在用 Ping 时,Ping 在偷摸做啥事儿?

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一次完整Ping过程会涉及哪些协议?

    一次完整的网络Ping过程
    发表于 03-31 06:19

    请问CH32V307 ping正常但是http请求少部分正常大部分请求超时是为什么?

    请问 CH32V307ping正常 但是 http请求少部分正常大部分请求超时 ,用的是netlib,这个会是什么原因引起的?
    发表于 09-15 07:32

    三种不同的“防 Ping”技巧

    三种不同的“防 Ping”技巧 浅析三种不同的“防 Ping”方法   众所周知,Ping命令是一个非常有用的网络命令,大家常用它
    发表于 04-14 13:53 1121次阅读

    icmp和ping的区别

    ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP
    发表于 11-03 09:41 6w次阅读
    icmp和<b class='flag-5'>ping</b>的区别

    ping命令的使用方法及功能

    ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式:
    发表于 11-23 15:22 7.2w次阅读
    <b class='flag-5'>ping</b>命令的使用方法及功能

    ping命令的使用大全(Windows下ping命令的使用)

    ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,下面就给大家讲一些ping命令的运用。
    的头像 发表于 02-24 10:29 1.4w次阅读

    ping原理及应用介绍

    Ping程序的实质是利用了ICMP请求回显和回显应答报文,但ARP请求和应答报文也在其中起了非常重要的作用。 Ping的逻辑过程以从PC1
    发表于 10-06 14:25 8287次阅读

    ping值和网速有关系吗?ping值多少算正常

    PING值--代表你的电脑跟服务器的连接速度,即:客户端数据传送至服务器后再将命令反馈到客户端所需的时长,单位为毫秒(ms),PING值越小速度越快。 主要还要看是用“光纤宽带”还是“普通宽带
    发表于 10-06 15:27 11.8w次阅读

    ping是什么?ping背后的逻辑是什么样的?是如何实现的?

    我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?
    的头像 发表于 10-03 12:25 8641次阅读

    说说PING命令涉及端到端的理论

    任何靠 IT 行业讨饭吃的人,无论在哪个范畴工作,都一定懂得 Ping 这个指令。差不多任何作业系统都具备 Ping 这命令,用来做简单的 Troubleshooting。但究竟 Ping 在背后帮我们做了些什麽呢?本篇文章就从
    的头像 发表于 01-01 17:26 3119次阅读

    Ping命令的7个基础用法

    IT行业中ping命令经常被用到,今天整理了一下关于网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下Ping命令的7个基
    的头像 发表于 10-12 09:16 3847次阅读

    PING命令还能这么用?

    今天和你聊聊PING命令。 一般来说,网工们通常会用它来直接ping ip地址,来测试网络的连通情况。 类似这种,ping ip地址或网关,然后ping通后会显示出以上数据。 再通过
    的头像 发表于 05-18 16:43 1077次阅读
    <b class='flag-5'>PING</b>命令还能这么用?

    【笔记】ping不通的原因有那些?

    Ping命令无法成功访问目标主机时,可能存在多种原因。以下是一些常见的导致Ping不通的问题,并对每个问题进行了分析和解释:1.请求超时:当Ping命令发送
    的头像 发表于 05-30 17:24 2.1w次阅读
    【笔记】<b class='flag-5'>ping</b>不通的原因有那些?

    使用Python进行Ping测试

    请求包,然后等待目标主机返回响应包,从而测量网络的延迟和丢包情况。随着Python编程语言的广泛应用,越来越多的网络工程师开始使用Python进行自动化网络测试和管理任务。本篇文章将详细介绍如何使用Python进行Ping测试,适合网工初学者。
    的头像 发表于 08-12 17:56 436次阅读
    使用Python进行<b class='flag-5'>Ping</b>测试

    服务器ping不通但是http能请求成功是什么原因

    平时,我们想要知道,自己的机器到目的机器之间,网络通不通,一般会执行ping命令。
    的头像 发表于 10-23 09:23 319次阅读
    服务器<b class='flag-5'>ping</b>不通但是http能<b class='flag-5'>请求</b>成功是什么原因