Linux内核什么时候会删除老化的ARP条目?

问题描述

Linux协议栈实现为ARP缓存维护了一个状态机,如下图所示(图片来源:《Understading Linux Networking Internals》图26-13修改):
在这里插入图片描述

图中的ARP邻居条目在超过base_reachable_time时间后不会立即被删除,而是状态切换为Stale状态,在经过gc_stale_time时间后被删除。前面提到的arp状态可以使用如下命令查看:

ip neigh show all
192.168.184.1 dev ens160 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.184.2 dev ens160 lladdr 00:50:56:f1:b9:fe STALE

与arp老化有关的超时参数可以使用sysctl或者proc文件系统进行查看,下面以ens160网卡为例查看arp相关优化参数:

root@ABC:/proc/sys/net/ipv4/neigh/ens160# ls
anycast_delay  base_reachable_time     delay_first_probe_time  locktime         mcast_solicit  proxy_qlen    retrans_time_ms  unres_qlen
app_solicit    base_reachable_time_ms  gc_stale_time           mcast_resolicit  proxy_delay    retrans_time  ucast_solicit    unres_qlen_bytes

那么一条处于Stale老化状态的ARP邻居条目会在静默gc_stale_time时间后被完全删除吗? 这里先给出答案,实测这条arp条目在gc_stale_time时间里没有被引用,还是不会被删除的。

ARP邻居条目的删除条件

以下几点因素影响邻居条目的删除:

  1. linux系统下的邻居条目被引用时不会被删除。一个邻居条目引用的主要影响因素是IPv4路由表。
    清理路由缓存的定时器时间为5min(/proc/sys/net/ipv4/route/gc_timeout单位是秒)。
    也可以手动使用ip r show cache; ip r flush cache命令清除缓存;
  2. ARP定时清理函数neigh_periodic_work会检查老化邻居条目数量,当小于/proc/sys/net/ipv4/neigh/default/gc_thresh1时,不进行清理。
  3. 老化邻居清理时间gc_stale_time和邻居垃圾清理定时器时间gc_interval

所以一条邻居条目从生成到被删除的过程如下:

  1. 发出arp请求时变为Delay状态
  2. 收到arp响应变为Reachable状态
  3. 不使用此邻居条目后,经过base_reachable_time秒后变为Stale状态
  4. 路由缓存不引用此邻居条目后(定时5min清理)
  5. 检查老化邻居条目数量大于等于gc_thresh1时进行下一步,否则不清理
  6. gc_interval定期进行邻居清理,邻居条目处于stale状态超出gc_stale_time秒后,此老化邻居条目才会被删除

经过实测,不清除路由缓存项后,9分钟后stale状态的邻居条目会被删除(一般来说5~10分钟老化邻居条目会被删除);
清除路由缓存项,经过gc_stale_time时间后老化邻居条目会被删除。

结论

综上所述,老化的邻居条目的删除时间被多种因素控制(不仅仅是gc_stale_time超时时间)。linux内核不轻易删除arp老化邻居的目的主要基于以下两点考虑

  1. 避免频繁的增删ARP邻居条目,复用老化的邻居条目内存结构
  2. 避免频繁的进行ARP广播请求

在配置ARP老化时间时,只需要配置base_reachable_time参数。一条邻居条目从Reachable状态转换为Stale状态即认为是老化状态。
至于Stale状态的邻居条目缓存什么时候会被回收清理,交给内核处理即可。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值