随笔 - 487,  文章 - 0,  评论 - 12,  阅读 - 51万

1.理论分析

  之前就有关于为什么我们ping包的时候第一个包总是显示逗点,也就是超时的困惑。很多人的解答就是因为ARP啊,然后就没有下文了。

  继续追问那么为什么ARP就要是逗点呢?然后就又有一些人说因为要ARP解析,所以时间太长了,超过了时延就显示超时不通,然后就是逗点了。总结来说就是因为ARP解析超时了所以就显示ping包的第一个包不通了。

  ping包的第一个包并不是因为超时所以显示不通,因为当我使用扩展ping(-w timeout     等待每次回复的超时时间(毫秒))将数据包的延时设置位50秒的时候,第一个包还是不通。所以绝对不是因为延时。

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

  那么为什么第一个包没有发出去呢?因为第一个包还没有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才会得到响应。

2.实验测试

  

  PC1发现PC与自己不在同一网段,故发送ARP请求,请求PC2的MAC地址。源IP为自己的IP,目的IP为PC2的IP,源mac为自己的mac,目的mac为广播地址

   

   

  R收到PC1发来的ARP请求后,将自己的e0/0接口作为源MAC地址、PC1请求的IP地址作为源IP地址,发送ARP应答报文回给PC1。R将PC1的mac和IP信息记录到自己的MAC表项中。

    

     

  PC1也记录R的e0/0接口的MAC和对应的PC2的IP到其ARP表项中。

  然后R并发送ARP请求PC2的MAC地址,PC2的ARP应答则将R的e0/1的MAC地址作为目的地址。R将PC2的MAC记录到其ARP表项中。

   

       

  而第一个ICMP回显应答报文则由于PC2并未存有R的ARP表项而无法发送,所以PC1收不到回显应答报文。

   

   

  此时PC2发送ARP请求报文请求PC1的MAC地址,而R的ARP表项中已经存有相应的信息,将e0/1的MAC地址作为源地址,发送ARP应答报文到PC2。PC2将R的e0/1接口和PC1的IP地址对应存储到其ARP表项中。

   

        

   

  R的ARP表项如图所示。

  

 

posted on   星痕1216  阅读(3222)  评论(1编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示