文档章节

对于Ping的过程,你真的了解吗?

木木匠
 木木匠
发布于 2018/12/23 17:15
字数 1782
阅读 1293
收藏 25

一、概览

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

图a

抓包情况如下:

图b

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

图c

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

图d

简单介绍完了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地址进行响应了。

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

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

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

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

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

我们看看第二次ping的抓包

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

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

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

上图的响应报文,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

六、推荐阅读

设计模式:

Java设计模式之代理模式

Java设计模式之模板方法模式和建造者模式

Java设计模式之单例模式

Java设计模式之开篇

Java集合:

带你走进Java集合之ConcurrentHashMap

带你走进Java集合之HashMap

带你走进Java集合之ArrayList

NIO:

JAVA NIO编程入门(一)

JAVA NIO编程入门(二)

JAVA NIO 编程入门(三)

Java锁:

ava锁之ReentrantReadWriteLock

Java锁之ReentrantLock(一)

Java锁之ReentrantLock(二)

© 著作权归作者所有

木木匠

木木匠

粉丝 161
博文 32
码字总数 71470
作品 0
广州
高级程序员
私信 提问
加载中

评论(4)

j
jakclove

引用来自“gm100861”的评论

ARP请求确定和 ping有关系么??? 那我如果 ping一个外网地址,怎么ARP ?

引用来自“SVD”的评论

arp请求和ping有关系,因为ping通对端的前提是获取到对端设备的mac地址,需要通过发出arp请求才获取对端设备的mac地址;对于外网的地址,则终端首先需要获取网关的mac地址,则首先需要向网关发出arp请求,获取到网关的mac地址,之后所有的流量数据都通过网关转发出去。
香港互联网人才行业在列,去香港工作稀缺,一边工作一边拿香港身份,香港优才计划测评:(http://www.galaxy-immi.com/obscure/assessment/1.html?pla=sq&spreadword=kyzg)
SVD
SVD

引用来自“gm100861”的评论

ARP请求确定和 ping有关系么??? 那我如果 ping一个外网地址,怎么ARP ?
arp请求和ping有关系,因为ping通对端的前提是获取到对端设备的mac地址,需要通过发出arp请求才获取对端设备的mac地址;对于外网的地址,则终端首先需要获取网关的mac地址,则首先需要向网关发出arp请求,获取到网关的mac地址,之后所有的流量数据都通过网关转发出去。
木木匠
木木匠 博主

引用来自“gm100861”的评论

ARP请求确定和 ping有关系么??? 那我如果 ping一个外网地址,怎么ARP ?

@gm100861 会转发到网关,对于网关地址会有一个ARP
g
gm100861
ARP请求确定和 ping有关系么??? 那我如果 ping一个外网地址,怎么ARP ?
这个情人节,工程师用阿里云来试着表达不一样的爱意

年轻的时候谈的恋爱就像TCP链接,恋爱时三次握手即可,可分手时却分了四次。而常常久久的爱情,更像是icmp协议,无论对方身在何处,无论是否是可靠连接,无论你何时去ping她/他,她/他都默默...

阿里云云栖社区
02/18
0
0
超级 Ping 监测工具——为您的网络状态保驾护航

关于 Ping Ping 是一个网络命令,主要是用于确定本地主机是否能与另一台主机交换(发送与接收)数据。根据返回的信息,就可以推断 TCP/IP 参数是否设置得正确以及运行是否正常。正常情况下,...

OneAPM蓝海讯通
2015/12/29
128
0
聊聊SWIM Protocol

序 本文主要研究一下SWIM Protocol SWIM Protocol SWIM的全称是Scalable, Weakly-Consistent, Infection-Style, Processes Group Membership Protocol heartbeats 传统的诸如heartbeats这种m......

go4it
05/02
15
0
真机与虚拟机通过路由实现互通(GNS3)

真机与虚拟机通过路由实现互通(GNS3) 看图 首先,将路由与c1的接线口选择为电脑的vmnet1,给电脑vmnet1配置ip地址为192.168.2.3,网关为192.168.2.1 给r1路由接口0/0配网关192.168.2.1 255...

阁楼的小羊
2014/04/21
0
0
Linux篇:shell脚本监控主机状态的3种方式

01 前言 shell的基础语法学习告了一段路,现在开始实际操作练习,今天记录的是shell脚本的经典题目 监控主机或IP的状态,并给出提示,如以下背景: 编写脚本判断以下4个主机的状态 181.137....

walker86
08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lopatkin俄大神Windows精简版系统 安装教程 简单版

1.制作U盘启动盘 或 安装pe到电脑 下载微pe工具箱.(为什么用这个呢,因为这个无毒,无广告,无后门.其它pe在安装完系统会安装一堆木马,垃圾软件,后门什么的) pe制作工具下载http://www.wepe.com...

xiaogg
26分钟前
3
0
【0917】Linux shell基础知识2

【0917】Linux shell基础知识2 8.7/8.8 shell变量 8.9 环境变量配置文件 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号 一、shell变量 1、使用...

飞翔的竹蜻蜓
28分钟前
3
0
管理角色认知-新晋管理常常犯的错

背景 管理是一门实践科学,从知道到做到,需要长时间的刻意练习,提前知道那些坑,可以提前规避。 坑1:被动执行 现象: 不主动找活干,等上级派活; 上级有了安排,指望上级替他决定实现方案...

春天spring
30分钟前
4
0
MongoDB4.0.2集群搭建

MongoDB4.0.2集群搭建 2019.02.01 01:02 619浏览 MongoDB4.0.2集群搭建 根据对象存储平台Django+MongoDB+Ceph的需求,现搭建部署一个十节点的MongoDB集群,主要以下关键点: 根据最新版本Mon...

linjin200
33分钟前
5
0
面试官问你B树和B+树,就把这篇文章丢给他

原文链接:面试官问你B树和B+树,就把这篇文章丢给他 1 B树 在介绍B+树之前, 先简单的介绍一下B树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区...

欧阳思海
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部