1.之前就有关于为什么我们ping包的时候第一个包总是显示逗点,也就是超时的困惑。很多人的解答就是因为ARP啊,然后就没有下文了。继续追问那么为什么ARP就要是逗点呢?然后就又有一些人说因为要ARP解析,所以时间太长了,超过了时延就显示超时不通,然后就是逗点了。总结来说就是因为ARP解析超时了所以就显示ping包的第一个包不通了。

  不过今天晚上看了视频得到了启发,ping包的第一个包并不是因为超时所以显示不通,因为当我使用扩展ping将数据包的延时设置位50秒的时候,第一个包还是不通。所以绝对不是因为延时。

  那么是为什么呢?

  是因为第一个包根本就没有发出去,做实验抓包的时候只能够抓到ping包的后面四个echo,reply。

3. 那么为什么第一个包没有发出去呢?

  因为第一个包还没有ARP解析,也就是没有对应的目的mac地址,在尚无mac地址的情况下,系统内核是不会发包的,路由器在一段链路中是使用mac地址的。无目的mac地址的数据包根本就不会发出去,所以不知道目的mac地址,首先先发ARP解析mac地址,同时第一个包还没有发出去就被自己kill了。后续的包因为有了对应的mac地址就顺利的发出去了。

  通过ARP解析之后才能通信.并不是ARP解析造成丢包.

  Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“x.x.x.x”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“x.x.x.x”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并想办法得到x.x.x.x的MAC地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的,以便交给数据链路层构建一个数据帧。关键就在这里,IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的MAC,如果以前两机有过通信,在A机的ARP缓存表应该有B机IP与其MAC的映射关系,如果没有,就发一个ARP请求广播,得到B机的MAC,一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。PING命令是针对的IP,ARP解析是为了建立MAC和IP之间的映射关系,自然要先有了映射关系,ICMP包才能送达, PING才会得到响应。

最新文章

  1. IOS7中自动计算label的宽度和高度的方法
  2. 面向服务的体系结构(SOA)——(4)对于服务的理解
  3. Android中通过导入静态数据库来提高应用第一次的启动速度
  4. How do I list all tables/indices contained in an SQLite database
  5. [wikioi]过河卒
  6. JMeter对Oracle数据库进行压力测试
  7. WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)
  8. 一张图看懂AR至GL数据流
  9. 《Office 365开发入门指南》上市说明和读者服务
  10. SQLite相关异常
  11. day 05JVM和深入理解java虚拟机
  12. Centos Java环境(转)
  13. Codeforces807 A. Is it rated? 2017-05-08 23:03 177人阅读 评论(0) 收藏
  14. 2017 Summary
  15. KVM创建虚拟机
  16. 校验IPv4和IPv6地址和URL地址
  17. 工作流JBPM_day01:3-使用JBPM的API添加与执行流程
  18. 第4章 scrapy爬取知名技术文章网站(2)
  19. Python+Django+SAE系列教程13-----MySQL记录的添\删\改
  20. NET设计规范(二) 命名规范

热门文章

  1. PHP设计模式之代理模式
  2. 单细胞分析实录(8): 展示marker基因的4种图形(一)
  3. Solon rpc 之 SocketD 协议 - 消息加密模式
  4. ORACLE的还原表空间UNDO写满磁盘空间,解决该问题的具体步骤
  5. 【Azure Redis 缓存】Azure Redis功能性讨论
  6. requests +httprunne r
  7. 跨站脚本漏洞(XSS)基础
  8. 【Web】CSS实现鼠标悬停实现显示与隐藏 特效
  9. a[i][j] 和 a[j][i] 有什么区别?
  10. kubernets与API服务器进行交互