网络工具-arp更新

Posted by 周思进 on November 28, 2019

前面文章网络工具-arp作用有谈到免费arp,下面来说说arp更新问题。

如果环境中存在两个IP冲突的设备,PC访问这个IP的话,那arp缓存是会缓存哪个设备的mac地址呢?

因为arp查询是广播包,所以两台设备都会收到该arp查询包,目标IP也都是自己设备IP,所以都会进行arp应答,此时发送方会分别接收到两台设备的arp应答,但发送方只会将先接收到的arp应答对应的目标mac地址记录到缓存,随后跟这台主机进行通信,而后收到的arp应答主机就忽略了。

(该机制也就存在arp欺骗行为,如果想防止arp欺骗,可以通过前面文章网络工具-arp常用命令谈到的方法规避下)

上面过程主动发起请求方和应答方都会记录下对方主机的IP和MAC地址映射关系。

但如果抢先回答的主机并不是实际要通信的主机,那在已记录缓存的情况下,该如何更新缓存了呢?

因为已有缓存,所以并不会再发arp请求,此状态下,只有两种情况会更新arp缓存。
1、对端发起arp请求,对端arp请求查询某个IP的mac地址,无论该IP是否是本机,因为是广播包,设备都会接收到,收到这类请求包的同时,会将其mac和IP地址记录到本地缓存,如果已有记录,则会进行更新
(也就是只要是请求包,接收方就会更新,但如果是应答,就只会记录优先接收到的)

2、对端发送免费arp,该arp查询,不同上面查询其他主机mac,免费arp其查询的目标主机就是发送者自己的IP地址,如果通过抓包查看,可以看到有多出一个字段isgratuitous置为1

免费arp包可以通过 arping命令来模拟发送,如下:
arp -U -I interface_name IP
interface_name就是网卡接口名,IP就是自己网卡IP

免费arp包的特性也可以用来检测环境里是否有和自己IP冲突的设备。