D.2 ARP工作原理
每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
当源主机需要将一个数据包要发送到目标主机时,会首先检查自己ARP列表中是否存在与该IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目标主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址,以及目标主机的IP地址。
网络中所有的主机收到这个ARP请求后,会检查数据包中的目标IP地址是否和自己的IP地址一致。如果不同就忽略此数据包,如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址。
源主机收到这个ARP响应数据包后,将得到的目标主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
图D-1中所示第一个数据包Wireshark描述为"Who has 192.168.0.1?Tell 192.168.0.114",表示源主机发送的ARP请求广播包。第二个数据包WireShark描述为"192.168.0.1 is at00:13:46:0b:22:ba",表示目标主机的ARP响应报文。
图 D-1 ARP请求与响应的过程
ARP在正常情况下的通信模式应该是:请求→应答,也就是一问一答的模式。