什么是ARP

我们知道,交换机只通过MAC地址来寻找目标主机。可是MAC地址仅在局域网内有效,当出了局域网后将失去作用。因此我们引入了IP,用来标记不同的局域网。

如何通过IP地址来寻找MAC地址呢?这就是我们的ARP地址解析协议

ARP缓存

与MAC地址表类似,在我们的计算机中同样存在着一张ARP缓存表。这张表中清楚的记录了主机IP与MAC地址的映射关系,以便于二层网络设备通过MAC地址寻找主机。

如果还并不了解交换机工作原理,请先看以下章节

交换机基础工作原理

ARP工作流程

设想现有两台计算机PC1、PC2分别接在交换机SW1的F0/1、F0/2两个端口上。

拓补图

PC1向PC2发送信息

接下来PC1对PC2进行PING测试,也就是ICMP协议。此时计算机会查找ARP缓存表,若未找到,则会暂停ICMP数据包的发送进程,重新封包一份用来询问目标MAC地址的数据包。也就是说必须先完成ARP查找才能发送数据

SW1接收到信息

此时交换机接收到来自F0/1口发来的数据包。交换机拆包后,找到了源(PC1)MAC地址IP地址目的(PC2)IP地址。还有一个非常重要的信息便是目的MAC地址。因为必须要有目的MAC地址交换机才能发送数据。

那么问题来了,我不知道PC2的MAC地址,ARP怎么才能问到目标MAC?

没错,广播。

当MAC地址全为F时,便是广播地址(即FFFF:FFFF:FFFF)。

也就是说,PC1封装ARP数据包时自动带上了目的MAC地址,也就是广播地址,让这个数据包发送到此交换机所连接的所有设备,以此来询问目标主机的MAC地址

PC2接收到ARP询问

当其他PC接收到来自交换机转发的ARP询问时,拆包后发现目的IP地址并不是自己的IP地址便会丢弃这个包。如果是,就接收此数据包,并记录在自己的ARP缓存中。那么此时PC2接收到从F0/2口广播来的ARP数据包,拆包后发现目的IP地址是自己,便会接收此包并记录在ARP缓存中,这样在数据传回PC1告诉自己MAC地址的时候就不需要发送广播,而是根据PC1给的IP地址和MAC地址单播回应即可。

PC2回应ARP

现在PC2查找到了刚刚记录的ARP缓存,将源(PC2)IP地址MAC地址目标(PC1)IP地址MAC地址封装在包内,通过F0/2口回送给交换机。交换机接收到数据包后拆包,发现目的MAC地址与IP地址后,查找自己的MAC地址表,将信息单播回送到F0/1端口

PC1接收ARP

PC1接收到了问来的目标(PC2)MAC地址,并记录在自己的ARP缓存中。现在可以将完整的地址信息封装在ICMP的包内了。

这样,我们就完成了ARP问询流程。

本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。PC2的MAC地址一旦确定,PC1就能向PC2发送IP通信了。

跨网段ARP

因为ARP协议本身工作机制就是只能解析跟自己的网卡在同一个网段的IP地址它所对应的MAC地址,它不能够跨网段去做解析,也是因为它是一个二层协议。
如果遇到跨网段的IP,那么就需要将数据交给网关去做三层的路由转发。所以跨网段的通信只需要通过ARP去解析到网关的MAC地址就可以了。


图文实验

拓补结构

拓补图

发送PING命令

此时计算机查找arp发现为空。

实验-1

停止ICMP的发送,先完成ARP。

实验-1-1

在这里我们发现,数据包中的源MAC地址是PC1本机的0000.0000.1111,目的MAC地址则是全为F的广播地址(在这里属于二层广播),以达到询问MAC地址的目的。

交换机接收ARP

实验-2

左侧为入端口信息,右侧为出端口信息。

交换机拆包后发现目的MAC为广播地址,则将此包发送给所有端口。此处只有F0/2有设备,因此只转发给了F0/2端口。

PC2接收ARP

实验-3

PC2接收到数据包后发现是自己的IP地址,接收数据包并记录PC1的ARP缓存。

实验-3-1

左侧为入端口信息,右侧为出端口信息。

可以在右侧看到,现在PC2将此数据包的目的MAC地址和IP地址改为了0000.0000.1111,192.168.1.1。也就是PC1的MAC地址和IP地址。现在PC2就可以用单播的形式回包给PC1来告诉自己的MAC地址了。

PC1接收回包

实验-4

PC1接收到回包,并将其记录在ARP缓存中。

实验-4-1

PC1发送ICMP包

实验-5

重新封装ICMP包,将目的MAC地址写入后发送。

至此,ARP工作完成。