ARP用于实现从IP地址到MAC地址的映射,即询问目标IP地址对应的MAC地址,以广播的方式发送数据包,获取目标主机的MAC地址。我们通过一个案例来说明其具体通信原理,假设主机IP地址都已知。
● 主机A的IP地址为10.1.20.64,MAC地址为00:08:ca:xx:xx:xx;
● 主机B的IP地址为10.1.20.109,MAC地址为44:6d:57:xx:xx:xx。
当主机A要与主机B通信时,ARP可以将主机B的IP地址(10.1.20.109)解析成主机B的MAC地址,以下为工作流程。
第一步:通过IP地址和子网掩码计算出自己所处的子网,得出如下表所示的结果。
第二步:分析主机A和B是否处于同一网络,如果不是同一网络,那么下表中目标IP地址为10.1.20.109(访问路由器的路由表),通过ARP获取的是网关的MAC地址。
第三步:根据主机A上的路由表内容,确定用于访问主机B的转发IP地址是10.1.20.109。然后主机A在自己的本地ARP缓存中检查主机B的匹配MAC地址。
第四步:如果主机A在ARP缓存中没有找到映射,它将询问10.1.20.64的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第五步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第六步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
第七步:当主机A接收到从主机B发来的ARP回复消息时,会用主机B的IP地址和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP地址了。
为了让大家更好地理解ARP以及广播和单播的概念,我们可以利用网络抓包工具Wireshark来看一下抓取到的真实网络中的ARP过程,通过数据包的方式来呈现,部分MAC地址隐藏部分用xx代替。
假如,主机A↔主机B通信:
● 主机A:IP地址为10.1.20.64,MAC地址为00:08:ca:xx:xx:xx。
● 主机B:IP地址为10.1.20.109,MAC地址为44:6d:57:xx:xx:xx。
ARP请求数据包的内容如下。
上面请求数据的含义是,我是主机A,IP地址为10.1.20.64,MAC地址为00:08:ca:xx:xx:xx。
请问主机B,IP地址为10.1.20.109,你的MAC地址是多少?
00:00:00_00:00:00是置空位(留坑),表示询问者不知道,等待接收方回应(填坑)。
ARP回应数据包的内容如下。

上面请求数据的含义是,我是主机B,IP地址为10.1.20.109,MAC地址为44:6d:57:xx:xx:xx。
你好,主机A,IP地址为10.1.20.64,MAC地址为00:08:ca:xx:xx:xx。
下表是ARP中每个属性的具体含义详解。
