ping丢包现象——arp广播

前言

在笔者的上一篇博客《适合小白的静态路由实验》中,我们在最后一次ping测试中发现存在丢包现象,然后又马上连通了。

拓扑图如下:

在这里插入图片描述

在这里插入图片描述

在ping完后我们再ping一次。

在这里插入图片描述

可以发现没有再出现丢包现象了,那为什么第一次ping会丢包呢?我们来聊一聊原因。

三层转发

数据包格式如图:

在这里插入图片描述

可以看见,在数据包中存在两个地址:源IP和目的IP。在笔者的《适合小白的静态路由实验》中我们有提到,路由器转发数据的依据就是根据数据包中的源IP和目的IP来查路由器上的路由表,找到对应目的IP的路径(路由表中的路由都是最佳路径)来完成转发。在路由器R1和R2上我们使用了静态路由,分别指向了192.168.2.0/24和192.168.1.0/24,故路由器在路由表中存在路由,PC间ping包能够完成正常的收发。

二层转发

数据帧格式如图:

在这里插入图片描述

我们可以发现数据帧中也存在两个地址——目的mac和源mac。是不是它的转发原理和三层转发差不多呢?答案是有像的地方也有不一样的地方:数据帧中加入目的mac和源mac,接收设备拆开数据帧后查看目的mac与自己网卡的mac地址进行核对,如果是一致的则会继续拆到数据包去查看IP(如果不一致,那说明这个数据帧不是发给自己的,也就没必要继续拆了)。在三层完成路径选择后,设备会查看一个表来重新组帧,这个表叫arp缓存表。

在这里插入图片描述

注:show arp是路由器上的命令,PC上也有arp缓存表,在cmd中输入arp -a。

在arp缓存表中我们可以查到对应接口上对端设备的mac地址(转发出去的数据帧的目的mac地址),把数据帧的目的mac地址换成对端设备的mac地址,再把源mac地址换成发出数据的接口的mac地址,这样数据帧就完成了重新封装。在传输到下一个设备的时候,拆帧查看mac,对应是自己的mac后再查设备的arp表,替换源目mac地址后重新封装数据帧。可以看出,在数据传输过程中,数据帧的源目mac是一直在变的,而数据包中的IP地址是不变的

简述传输过程

我们简述数据传输过程:

PC1发送ping包给PC2,故数据包的源IP为192.168.1.1,目的IP为192.168.2.1(源目IP确定后就不会再变了),需要发到默认网关192.168.1.254,也就是R1上,那么源mac就是PC1的网卡mac,目的mac就是R1e0/0接口上的mac。

R1从e0/0接口收到数据后,先查看目的mac,发现确实是e0/0接口的mac,就会拆到数据包查看目的IP地址,通过路由表来查看三层转发的路径,从e0/1接口发出。再查看arp缓存表,发现e0/1接口所连接的对端设备的mac地址(R2的e0/1接口),于是重新封装数据帧,源mac变成R1的e0/1接口mac,目的mac变成R2的e0/1接口mac,封装完成后从e0/1接口发出。

R2从e0/1接口收到数据后,重复R1的步骤,先查看目的mac,发现是e0/1接口的mac,就会拆到数据包查看目的IP地址,通过路由表来查看三层转发的路径,从e0/0接口发出。再查看arp缓存表,发现e0/0接口所连接的对端设备的mac地址(PC2的接口),于是重新封装数据帧,源mac变成R2的e0/0接口mac,目的mac变成PC2接口mac,封装完成后从e0/0接口发出。

PC2接收到数据后,查看目的mac,与自己的网卡mac进行核对,一致,则继续拆开数据,查看目的IP核对,也是自己,故继续拆数据包读取数据。给PC1回包的时候,就将上述过程反过来,再从接口发到R2->R1->PC1,mac地址也随着设备和链路进行改变。

但到目前为止,我们仍然还未解释ping包的丢包问题。别急,下面慢慢讲哈。

arp缓存表

上面我们有提到两个表,一个是路由表,一个是arp缓存表。这两个表可以通过静态方法增加条目(人工指定),也可以通过动态学习来增加条目。

路由器动态学习路由需要为路由器配置动态路由协议,并不是这里的重点,会在之后的博客中进行介绍。

当一个局域网中新加入一台PC时,这台PC上的arp缓存表是没有关于这个局域网的arp条目的(PC可能存在其他局域网的arp条目,我们这里忽略不考虑),那没有下一跳设备的mac地址,也就没有办法组成帧,怎么办呢?

转发过程中的arp广播

这时候就需要arp广播。比如说PC1访问PC2时,PC1判断PC2的IP地址跟自己不在一个网段,是跨网段通信,所以需要让网关转发,故先请求网关mac。PC1发起arp广播请求网关192.168.1.254的mac地址,因为是广播(目的mac地址为ff-ff-ff-ff-ff-ff),在局域网中的所有设备都能收到,而局域网中IP不为192.168.1.254的设备收到后不会理睬这个请求,只有192.168.1.254在核对过请求的IP地址后会对其进行回应(单播),这样PC1就得到了网关的mac地址,封装好ping的数据后发给网关。

网关收到ping后,查看数据帧中的目的mac地址,核对后拆到数据包查看目的IP地址,发现是192.168.2.1,R1查看路由表,需要从e0/1接口进行转发(三层的路径)。假如路由器R1不知道对端R2的mac地址(R2e0/1接口的mac地址),那么同样R1会从e0/1接口发起arp广播去请求R2e0/1接口的mac地址;于此同时,PC1发给R1的ping包没办法封装成帧(因为R1还没有R2的mac地址),路由器便将这个ping包丢弃,也就丢包了。待R1得到R2的mac地址后,PC1的第二个ping包(不一定是第二个)也发送到了R1上,这时R1就可以重新封装数据帧,从e0/1接口发出去。

到R2的mac地址后,PC1的第二个ping包(不一定是第二个)也发送到了R1上,这时R1就可以重新封装数据帧,从e0/1接口发出去。

后面的过程也大差不差了,R2收到R1的数据,假如R2也不知道192.168.2.1的mac地址,也会发起arp广播去请求(不然没办法成帧)。这个过程中ping会丢多少个包,主要就是看arp的影响了,有时候在实验环境中甚至会ping不通,而再ping一次就通了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值