平时我们在做网络ping连通性测试时候发现第一个包都会被丢弃那么今天我们就来分析一下是什么原因导致的首包超时。
拓扑示意图如下:
在初始状态时,PC1、PC2和AR路由器的ARP表项都为空。
PC1 ping PC2时首包超时
AR的GE0/0/0接口抓包结果:
AR的GE0/0/1接口抓包结果:
分析:PC1先通过ARP请求网关的MAC地址,通过ARP响应得到网关的MAC后封装ping请求报文(时间点是10:17:44.741)。报文到达网关后,网关依据目的IP查找路由,发现是自己GE0/0/1接口的直连网段,但还没有PC2(2.2.2.2)对应的ARP表项,将报文丢弃,并通过ARP请求目的IP的MAC地址(时间点是10:17:44:756)。也就是说,第1个ping请求报文相当于用作触发ARP解析了。
在网关上查看ARP表项结果如下:
此时假如将AR路由器上动态学习到的ARP表项全部清除后再让PC1 Ping PC2会出现什么现象呢?
ARP表项情况:PC1和PC2都还会有之前学习到的网关的ARP表项,而AR路由器动态学习到的ARP表项为空。
PC1 ping PC2时前2个包超时
AR的GE0/0/0接口抓包结果:
AR的GE0/0/1接口抓包结果:
分析:PC1的第1个ping请求报文(时间点12:17:39.569)使AR触发了对PC2(2.2.2.2)的ARP解析(时间点12:17:39.585),当收到ARP响应报文后AR上生成了PC2的ARP表项。对于PC1的第2个ping请求报文(时间点12:17:41.566),AR转发给PC2后,PC2发送的ping响应报文(时间点12:17:41.582)到达AR时,触发了对PC1(1.1.1.2)的ARP解析(时间点12:17:41.582),这时AR上生成了PC1的ARP表项。也就是说,整个过程一共让中间设备触发了两次ARP解析,因此导致前2个ping请求报文超时。
总结:当报文到达最后一跳设备时,如果设备上没有目的IP对应的ARP表项,报文会直接被丢弃,并触发设备的ARP解析过程。
另外,再介绍一下ARP代理的场景,原理类似,不再赘述。
PC1 ping PC2时前2个包超时
AR的GE0/0/0接口抓包结果:
AR的GE0/0/1接口抓包结果:
说明:由于PC1发送的第1个ARP请求报文目的IP为172.16.1.10,而不是自己接口的IP,所以AR并不会建立PC1对应的ARP表项,因此也就有了后面的由第2个ping请求报文触发学习PC1的ARP表项的过程。