默认 arp 缓存超时

Pol*_*len 11 linux debian arp

我没有找到如何检查和更改 Linux 上的默认 arp 缓存超时。我在内核 3.x 中使用 debian(但我认为它与旧内核相同)

小智 12

我承认,在我写这篇文章时,这是一个三年前的问题。但是我在研究同一主题时遇到了这个问题,并且在证实 watchmansky 的回答(https://serverfault.com/a/684381/188907)的过程中,我对这种情况有了更多了解,至少在它存在时今天。

根据https://linux.die.net/man/7/arp,设置

gc_stale_time
Run Code Online (Sandbox Code Playgroud)

影响检查 ARP 缓存是否存在陈旧条目的频率。(或垃圾收集,因此设置名称开头的“gc_”。)

同时,价值

base_reachable_time_ms
Run Code Online (Sandbox Code Playgroud)

实际上控制 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/邻居.c#L115 上的代码确认)


wat*_*sky 9

60 秒

你可以检查它:

cat /proc/sys/net/ipv4/neigh/ethX/gc_stale_time
Run Code Online (Sandbox Code Playgroud)

并改变它

echo timeout > /proc/sys/net/ipv4/neigh/ethX/gc_stale_time
Run Code Online (Sandbox Code Playgroud)

超时是新值