-
一、arp表里清除表状态:
1,Delay:请求arp
2,Reachab:响应arp
3,Stale此状态下,待gc_stale_time超时后,准备gc_interval定期清理
即:base_reach_timer(reachable_timer)到期进入stale- > 度过gc_stale_time删除arp表项
-
二、限制条件
base_reachable_time:后变为Stale
gc_thresh1:数量限制
gc_stale_time:时间限制
gc_interval:定期间隔
-
三,测试
在断开连接,经测试发现即使上面都满足条件下,也不会立即清除arp表stale下的条目。
也就是说还需要触发条件:
1,立即清除ip neigh flush dev eth0
2,额外时间是创建每个动态ARP条目时添加的抖动。随机抖动会添加到ARP缓存超时,以避免ARP条目同步过期,这可能会触发ARP风暴。抖动应是0秒到30分钟之间的随机数,最大抖动为30分钟。
linux5.10
必须net.ipv4.neigh.default.gc_thresh1=0,gc_stale_time设置过期时间。
老化时间计算:
Timeout =random( base_reachable_time/2, 3*base_reachable_time/2) + gc_stale_time
因此只能改动gc_stale_time。
即net.ipv4.neigh.default.gc_thresh1=0 + gc_stale_time组合
tips:
要启动垃圾回收
gc_thresh1 表示最小可保留的表项数量,如果表项数量小于此值GC(Garbage collector)不进行回收操作,默认为128;
工具调试命令:
ip ntable show dev eth0 #查看参数
ip neigh show dev eno1 #查看状态