我没有找到如何检查和更改 Linux 上的默认 arp 缓存超时。我使用的是内核为 3.x 的 debian(但我认为旧内核也一样)
答案1
60 秒
你可以使用以下方法检查:
cat /proc/sys/net/ipv4/neigh/ethX/gc_stale_time
并将其更改为
echo timeout > /proc/sys/net/ipv4/neigh/ethX/gc_stale_time
超时是新值
答案2
我承认,在我写这篇文章的时候,这是一个三年前的问题。但我在研究同一主题时偶然发现了这个问题,并在证实沃奇曼斯基的答案的过程中(https://serverfault.com/a/684381/188907),我对情况有了更多的了解,至少是现在的情况。
根据https://linux.die.net/man/7/arp, 那个设定
gc_stale_time
影响检查 ARP 缓存中陈旧条目的频率。(或者垃圾收集,因此设置名称开头为“gc_”。)
同时,价值
base_reachable_time_ms
实际上控制 ARP 缓存条目的有效时间,默认值为 30000 毫秒。但实际上每个新的 ARP 缓存条目都会收到一个随机设置在base_reachable_time_ms / 2 and 3*base_reachable_time_ms / 2
* 之间的生存时间值。
这意味着每个新的缓存 ARP 条目的起始超时时间在 15 到 45 秒之间,除非值base_reachable_time_ms
发生变化。
这假设缓存的 ARP 条目的当前超时值在使用前已经过验证,并且垃圾收集率不会影响缓存条目的有效有效性。
(*通过阅读以下代码确认https://elixir.bootlin.com/linux/v4.17.11/source/net/core/neighbour.c#L115)