第一次ping直连对端IP的时候大家应该很习惯出现“.!!!!”这个现象了,

众所周知这是因为在发出ICMP报文的时候由于没有对端目的MAC,

需要先进行ARP查询,而ICMP的timeout超时时间是2秒,

大家都以为是对端没有在2秒内回复ARP查询,

我之前也是这么认为的,正好有人问了这个问题,

引发了我深入的思考:

为什么对端没有在2秒内回复ARP?真的是没有在2秒内回复才导致的这个问题吗?

关于ping直连为什么第一个包会丢失的深入探讨_封装

于是就有了下面的这一波测试:

测试环境很简单,两台设备互联,内置直连IP,并no shutdown接口

然后ping对端接口出现“.!!!!”,同时进行抓包和debug分析

关于ping直连为什么第一个包会丢失的深入探讨_请求报文_02

R1 e0/0 IP地址:12.1.1.1

R2 e0/0 IP地址:12.1.1.2


关于ping直连为什么第一个包会丢失的深入探讨_mac地址_03

关于ping直连为什么第一个包会丢失的深入探讨_抓包_04

此时R2已经有了12.1.1.1的mac地址,先清掉ARP条目


关于ping直连为什么第一个包会丢失的深入探讨_ip地址_05

关于ping直连为什么第一个包会丢失的深入探讨_ip地址_06

关于ping直连为什么第一个包会丢失的深入探讨_请求报文_07

然后开启ARP和ICMP的debug,同时开启抓包



关于ping直连为什么第一个包会丢失的深入探讨_mac地址_08

根据debug消息可以清楚的看到ping的动作是在06:19:20.853之后执行的,

而ARP请求报文是在06:19:28.749发出的,

在发出ARP请求报文前,R2还为12.1.1.1创建了一个incomplete entry的ARP条目,

而R1的ARP回复是在06:19:28.750收到的,期间也就间隔了1微秒,

可以说是瞬间回复了,这就回答了之前的两个问题,

对端不是没有在2秒内回复,而是在2秒内就回复,

既然在2秒内回复了,那么R2应该就有了R1的MAC地址,

讲道理会发出ping包,这时我们看抓包结果


关于ping直连为什么第一个包会丢失的深入探讨_封装_09

发现只有4组(8个)报文,也就是说R2第一个不通的报文根本就没有发出给R1,

为什么?

R2为什么没有发出ICMP报文给R1?不是已经学到R1的MAC地址吗?

对于这一现象,我和陈老师的讨论结果是:

R2尝试给R1发出第一个ICMP报文时,由于没有R1的MAC地址,这第一个报文其实并没有封装完成,卡在数据链路层就没了,所以第一个报文其实已经“胎死腹中”,而同时会发出ARP报文去获取R1的MAC地址,后续的4个报文由于收到ARP回应已经有了R1的MAC地址,可以直接封装发出,于是就通了! 

关于ping直连为什么第一个包会丢失的深入探讨_mac地址_10

关于ping直连为什么第一个包会丢失的深入探讨_mac地址_11


加群交流在后台回复“加群”,添加小编微信,小编拉你进去

猜您喜欢往期精选▼Cisco私有协议—热备份路由协议HSRP详解
Cisco——HSRP实验案例一
Cisco——VRRP基础实验
Cisco策略路由PBR小案例
Cisco—DMVPN 案例配置及原理分析
思科、华为网络设备破解密码
干货分享:Cisco CCNP视频教程
cisco—RIPv1协议详解
Cisco—静态路由小实验
Cisco-路由器配置DHCP小实验
CISCO--telne小实验
Cisco-VLAN间路由:SVI+单臂路由(子接口)
思科CISCO常用命令汇总


END
更多资源尽在星球,后台回复“星球”获取优惠