ARP缓存表更新条件

经过多次的失败,得出的一点点总结,有需要的朋友可作个参考,也欢迎指正本人的错误。(每个结论都已经验证过!)

收到ARP请求后,更新ARP缓存表和应答的条件:

1,收到一个请求包,若目的mac是硬件广播地址,且目的IP是本机IP,即请求本机mac,则查看ARP缓存表是否有源主机IP与源主机mac
地址的对应条目,若有且与收到的不一致则更新,若无,则添加,最后构造一个针对请求主机的ARP单播应答包。
2, 收到一个请求包,若目的mac是硬件广播地址,但目的IP不是本机IP,即不是请求本机mac,那么忽略该请求。
(注:实验表明:目的mac是本机网卡mac,且目的IP是本机IP,主机也会作出应答。分析:收到的这个请求包可能发生了错误,因为既然知道了目的主机mac就无需再请求了,但也不排除是其他协议在检测网络状态)。
(结论:只有目的MAC是硬件广播地址,且目的IP是本机IP,才对条目进行添加或者更新,并回复应答包。)

收到ARP应答后,更新缓存表的条件:

1,接收到一个应答包,若目的mac是自己,且目的IP也是自己,若缓存表中已经存在对应的项,则更新该项。若缓存中没有,则忽略。
2,接收到一个应答包,若目的mac是自己,但目的IP不是自己,若缓存表中已经存在对应的项,则更新该项。若缓存中没有,则忽略。
3,接收到一个应到包,若目的mac为广播地址,无论IP是不是自己,处理方式与(1,2)相同。
4,接收到一个应答包,若目的mac不是本机mac也不是硬件广播地址,则ARP协议软件忽略该包。

(结论,若收到的应答包,目的mac地址是硬件广播地址或是者本机网卡地址,无论目的IP是不是本机网卡IP,只要缓存表中已经存在对应的ARP条目,且与收到的应答条目不一致,那么就要更新该条目。若缓存表中没有存在该条目,那么则忽略该应答。

    推荐阅读