您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

当 Ping 命令后,背后发生了什么?

时间:2019-08-07 09:45:11  来源:  作者:
当 Ping 命令后,背后发生了什么?

作者 | 木木匠

链接 | my.oschina.net/luozhou/blog/2992137

01 概览

对于 ping命令,想必只要是程序员都知道吧?当我们检查网络情况的时候,最先使用的命令肯定是ping命令吧?一般我们用ping查看网络情况,主要是检查两个指标:

  • 第一个是看看是不是超时

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

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

那么对于 ping命令的原理,ping是如何检查网络的?大家之前有了解吗?接下来我们来跟着ping命令走一圈,看看ping是如何工作的。

02 环境准备和抓包

  • 环境准备

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

  1. A电脑(IP地址: 192.168.2.135/ mac地址:98:22:EF:E8:A8:87

  2. B电脑(IP地址: 192.168.2.179/ MAC地址:90:A4:DE:C2:DF:FE

  • 抓包操作

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

当 Ping 命令后,背后发生了什么?

抓包情况如下:

当 Ping 命令后,背后发生了什么?

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

  • NO: 编号

  • Time: 包的时间戳

  • Source: 源地址

  • Destination: 目标地址

  • Protocol: 协议

  • Length: 包长度

  • Info: 数据包附加信息

03 深入解析

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

  • ICMP协议的产生背景

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

  • ICMP协议的数据格式

当 Ping 命令后,背后发生了什么?

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

当 Ping 命令后,背后发生了什么?

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

  • ARP协议

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

  • Ping过程解析

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

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

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

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

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

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

当 Ping 命令后,背后发生了什么?

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

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

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

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

当 Ping 命令后,背后发生了什么?

我们看看第二次 ping的抓包

当 Ping 命令后,背后发生了什么?

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

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

当 Ping 命令后,背后发生了什么?

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

当 Ping 命令后,背后发生了什么?

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

04 总结

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



Tags:Ping命令   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  Tags: Ping命令  点击:(7)  评论:(0)  加入收藏
一、ping基本使用详解在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:1、用来检测网络的连通情况和分析网络速度2、根据域名得到服务器IP3、根据ping返回的TTL值来...【详细内容】
2020-06-07  Tags: Ping命令  点击:(88)  评论:(0)  加入收藏
一、ping基本使用详解在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为: 用来检测网络的连通情况和分析网络速度 根据域名得到服务器IP 根据ping返回的TTL值来判断对...【详细内容】
2020-04-07  Tags: Ping命令  点击:(87)  评论:(0)  加入收藏
有朋友反映,能不能讲下ping命令的使用,TTL值、time值是什么意思?如何批量ping ip地址?其实对于命令的使用我们之前提到过一些,不断的有朋友问起,ping命令在项目中使用的频率最高,一...【详细内容】
2020-01-02  Tags: Ping命令  点击:(100)  评论:(0)  加入收藏
现在不管安防工程还是弱电工程,与网络的联系也越来越密切了,网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下P...【详细内容】
2019-12-19  Tags: Ping命令  点击:(72)  评论:(0)  加入收藏
还是我之前的观点,越基础的东西有时越难于解释。今天我们说说网工常用的PING.任何靠 IT 行业讨饭吃的人,无论在哪个范畴工作,都一定懂得 Ping 这个指令。差不多任何作业系统都...【详细内容】
2019-12-19  Tags: Ping命令  点击:(148)  评论:(0)  加入收藏
1. ping命令使用详解在网络中ping是一个相当强壮的TCP/IP工具。它的作用重点为:(1)用来检测网络的连通情况与解析网络速率;(2)按照域名得到服务器IP;(3)凭据ping返回的TTL值来判定对...【详细内容】
2019-09-25  Tags: Ping命令  点击:(216)  评论:(0)  加入收藏
作者 | 木木匠链接 | my.oschina.net/luozhou/blog/299213701 概览对于 ping命令,想必只要是程序员都知道吧?当我们检查网络情况的时候,最先使用的命令肯定是ping命令吧?一般我...【详细内容】
2019-08-07  Tags: Ping命令  点击:(268)  评论:(0)  加入收藏
有很多朋友多次问到,如何检测网络故障和对网络进行基础的操作,这个我们很多朋友也多次讨论,所以我们整理了网络中常见的一些命令的用法,方便大家日常工作对网络的管理。前段时间...【详细内容】
2019-07-16  Tags: Ping命令  点击:(285)  评论:(0)  加入收藏
在弱电项目中设备安装结束后,需要是使用ping命令来测试网络的承载能力和连通性,下面我来做个简单的分享!1、准备工作在进行ping测试网络时,需要先把自己的电脑的IP地址和目标端...【详细内容】
2019-07-16  Tags: Ping命令  点击:(401)  评论:(0)  加入收藏
▌简易百科推荐
以京训钉开发平台接口文档为例,使用HttpClient类请求调用其接口,对数据进行增删改查等操作。 文档地址: https://www.yuque.com/bjjnts/jxd/bo1oszusing System;using System.C...【详细内容】
2021-12-28  Wednes    Tags:HttpClient   点击:(1)  评论:(0)  加入收藏
阿里云与爱快路由安装组网教程一、开通好阿里云轻量服务器之后在服务器运维-远程连接处进行远程 二、进入控制台后在root权限下根据需要安装的固件位数复制下面命令。32位:wg...【详细内容】
2021-12-28  ikuai    Tags:组网   点击:(1)  评论:(0)  加入收藏
HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应...【详细内容】
2021-12-27  程序员蛋蛋    Tags:HTTP 报文   点击:(5)  评论:(0)  加入收藏
一 网络概念:1.带宽: 标识网卡的最大传输速率,单位为 b/s,比如 1Gbps,10Gbps,相当于马路多宽2.吞吐量: 单位时间内传输数据量大小单位为 b/s 或 B/s ,吞吐量/带宽,就是网络的使用率...【详细内容】
2021-12-27  码农世界    Tags:网络   点击:(3)  评论:(0)  加入收藏
1.TCP/IP 网络模型有几层?分别有什么用? TCP/IP网络模型总共有五层 1.应用层:我们能接触到的就是应用层了,手机,电脑这些这些设备都属于应用层。 2.传输层:就是为应用层提供网络...【详细内容】
2021-12-22  憨猪哥08    Tags:TCP/IP   点击:(35)  评论:(0)  加入收藏
TCP握手的时候维护的队列 半连接队列(SYN队列) 全连接队列(accepted队列)半连接队列是什么?服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报...【详细内容】
2021-12-21  DifferentJava    Tags:TCP   点击:(10)  评论:(0)  加入收藏
你好,这里是科技前哨。 随着“元宇宙”概念的爆火,下一代互联网即将到来,也成了互联网前沿热议的话题,12月9日美国众议院的听证会上,共和党议员Patrick McHenry甚至宣称,要调整现...【详细内容】
2021-12-17  王煜全    Tags:Web3   点击:(14)  评论:(0)  加入收藏
一、demopublic static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3);...【详细内容】
2021-12-15  程序员阿龙    Tags:Curator   点击:(22)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  一口Linux    Tags:网络知识   点击:(31)  评论:(0)  加入收藏
无论是在外面还是在家里,许多人都习惯了用手机连接 WiFi 进行上网。不知道大家有没有遇到过这样一种情况, 明明已经显示成功连接 WiFi,却仍然提示“网络不可用”或“不可上网”...【详细内容】
2021-12-14  UGREEN绿联    Tags:WiFi   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条