我正在尝试通过实证检验来验证某个条目在表中停留的时间ARP cache
。
这个时间似乎是由/proc/sys/net/ipv4/neigh/default/gc_stale_time
文件和/proc/sys/net/ipv4/route/gc_timeout
和/proc/sys/net/ipv4/route/gc_interval
文件定义的garbage collector
。
由于这些值分别为 60、300 和 60,因此不应超过 420 秒,对吗?
无论如何,它似乎会停留更长时间(如果我没有错过任何东西的话)。事实上,为了验证这一点,我正在执行以下 bash 命令:
while true; do date; sudo arp -n; sleep 30; done
并且经过 15 分钟以上的时间,该条目仍然在ARP table
。
请注意,正如我所读到的,内核可以根据来自更高级别协议的积极反馈来改变超时值,所以在此期间我没有尝试访问网站。
所以我的问题是:为什么这么长时间后该条目仍在表中引用? 我做错了什么或遗漏了什么?
答案1
我会问自己:
- arp 表条目映射了子网上的哪个 ip 地址的 mac 地址(即该条目指向哪个主机)?
- 是 arp 表项执着的或者不是(即我可以期望它从 arp 表中自动清除)?
- 我是否在测试期间嗅探过通过相关接口的流量(以查找或未找到针对给定 IP 地址的 arp 重映射的证据)?
最后:
- 我如何尝试以受控的方式在 arp 表中生成条目,以期测量其耐用性?
通过前三个问题获得的答案可能会完善通过最后一个问题给出的测试程序。