一、概览

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

如果超时那么肯定是网络有问题啦(禁ping情况除外),如果延迟太高,网络情况肯定也是很糟糕的。那么对于ping命令的原理,ping是如何检查网络的?大家之前有了解吗?接下来我们来跟着ping命令走一圈,看看ping是如何工作的。

二、环境准备和抓包

2.1 环境准备

1.抓包工具。我这里使用Wireshark。2.我准备了两台电脑,进行ping的操作。

ip地址分别为:

  • A电脑:192.168.2.135mac地址:98:22:EF:E8:A8:87

  • B电脑:192.168.2.179MAC:90:A4:DE:C2:DF:FE

2.2 抓包操作

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

抓包情况如下:

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

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

简单介绍完了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

作者:木木匠

关于 Ping 的过程,你真的了解吗?相关推荐

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

    作者: 木木匠 链接:https://juejin.im/post/5c15ec0f6fb9a049ec6af8b2 一.概览 对于ping命令,想必只要是程序员都知道吧?当我们检查网络情况的时候,最 ...

  2. 简单的局域网内PING的过程+几种PING不通的情况

    简单的局域网内PING的过程+几种PING不通的情况 一.一个常规的局域网内主机相互PING的过程描述 首先,假设局域网下有三台主机A.B.C,B的ip是192.168.1.12,C的ip是192.1 ...

  3. SqlServer2012卸载并重新安装成功完整过程!真的超级激动...

    前言: 安装过sqlserver2012或者其他版本的读者可能都接触过,安装sqlserver中途失败或者装好了卸载重装,大概率是会重新安装失败的!网上好的教程推荐的就是终极解决办法--重装系统. 之 ...

  4. 基于ping的过程学习二、三层转发之三(ARP表、FDB表、路由表详解)

    六.交换机的MAC表(FDB表) 交换机的MAC地址表存有交换机端口与MAC地址的映射,同样分有动态和静态两部分, 当某个端口收到来自于某个MAC地址处发来的帧数据时,会将该MAC地址与端口的映射关系 ...

  5. CRC的计算过程你真的搞明白了吗??

    在网上搜索CRC的相关资料,一下搜出一大堆,但是基本上都是讲的比较笼统,几乎都是千篇一律,但是按着网上搜的例程算了一遍自己要计算的数据,但是结果与用CRC软件算出来的结果不一致,是不是自己算错了呢?? ...

  6. 干货来袭!初步理解类加载运行机制和类加载过程,真的太香了!

    开头 被面试人是我的一位粉丝近期刚刚结束了蚂蚁金服的三轮技术面试,面完之后他跟我说很累,直言不想再体验了. 他的面试经历我仔细看了看,一面重点在基础知识的考查,二面重点在项目以及对框架的使用与理解上, ...

  7. ping回显请求超时time out故障解决过程

    一天,一个新同事找来,说要跨网段调测一个sip注册语音设备,测试网络互通性发现不行,现象是公司局域网的205网段192.168.205.0/24的pc去ping209网段192.168.209.0/2 ...

  8. 单向能ping通,反向不通故障解决过程

    一天,有同事反馈,她的测试机房的pc192.168.206.221无法ping通楼下办公区域的pc192.168.207.54,跨网段,回显time out,但楼下的207.54能ping通206.2 ...

  9. ping回显无法访问目的主机问题解决过程

    类似问题见:  网络驱动器无法访问,提示找不到网络路径故障处理过程_wj31932的博客-CSDN博客 有同事反馈他的pc192.168.205.201无法访问svn资源192.168.193.10, ...

  10. 详细Ping过程描述(二、三层转发)

    ※ 首先要了解 ①    源主机在发起通信之前,将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号),那么源主机发送arp请求广播报,请求目的主机的mac地址 ...

最新文章

  1. centos6 64位服务器的基本初始化
  2. python异常类型(Exception只是常规错误的基类)
  3. mysql explain中key_len值的说明
  4. Linux 系统服务管理和控制程序(初始化系统/Init System) -- systemd 介绍
  5. 开发工程师的维护意识存在不?
  6. linux 内存 virt,Linux 内存 virt res shr data swap 意义
  7. java执行内存_java运行时内存
  8. python微信小程序自动化测试,微信小程序的自动化测试框架
  9. 无法import的原因(ImportError: No module named *****)
  10. 计算机科学技术名家讲座许进,论高校计算机科学与技术课程中存在的问题与改革方向.pdf...
  11. 北京联通IPTV机顶盒管理密码
  12. python实现自动开机_python自动循环定时开关机(非重启)测试
  13. 方舟手游服务器设置文件翻译,方舟生存进化单机模式设置中英文对照翻译一览...
  14. 安卓126邮箱服务器怎么填,安卓126邮箱设置.doc
  15. 编译内核使tilera支持网桥和netfilter功能
  16. 通过网页免费下载音乐(F12)
  17. 海岛奇兵服务器维护中怎么办,海岛奇兵无法更新解决方法介绍
  18. 甲骨文中国良心裁员:首批900人,赔偿N+6
  19. 如何实现移动端点击下拉箭头显示全部文字
  20. 安卓系统管理软件_BlackBerry为部署车载安卓系统保驾护航

热门文章

  1. 外网不能访问图片的问题
  2. internet缓存Temp中的tmp文件
  3. 苹果mac专业文献管理软件:endnote x9
  4. 如何使用“查找”App 定位丢失的设备或物品?
  5. 如何使用Movavi Slideshow Maker进行幻灯片制作?
  6. MWeb建立静态网站/博客的基础教程
  7. 使用localStorage存储表单数据
  8. javap -c命令详解
  9. www请求用到的Unescape
  10. create user 'root'@'localhost' identified by 。。。