ip neigh 清理是什么
局域网设备更换网卡、虚拟机迁移或网关切换后,旧 MAC 可能仍留在 ARP 缓存里,表现为『一会儿通一会儿不通』或间歇性丢包。定向删除缓存条目或按接口清空邻居表是最快的处置方式,但要理解副作用:清空后所有条目都要重新学习,大网段上会瞬间产生一批 ARP 广播。需要强调的是,清理是恢复手段而不是根因分析:同样的现象反复出现时,问题在二层或地址规划上,不在缓存。
基本信息
| 适用平台 | Linux(iproute2)、Windows(netsh/arp) |
|---|---|
| 权限要求 | Linux 通常需要 root;Windows 显示与删除需管理员 |
| 核心命令 | ip neigh del / flush、arp -d、netsh interface ip delete |
| 副作用 | 清空后瞬时 ARP 重学,核心网段慎用 flush all |
典型使用场景
- 更换网关或防火墙设备后:旧 MAC 仍被缓存,业务间歇中断
- 虚拟机热迁移:新旧宿主 MAC 不同,通信方需要清缓存
- 双机主备切换:把网关与本机两侧的邻居条目都清一遍
- 手工固化关键条目:用 nud permanent 固定网关或存储的 MAC,防抖动
- 验证二层是否真的通:清掉条目后若一直无法重建,说明广播域或 VLAN 有问题
- 排查高频抖动:先用 watch 观察条目反复变化,再决定清理还是进一步查环路
定向与批量清理
定向与批量清理
ip neigh del 10.0.0.5 dev eth0 # 删除单条,换设备后最常用
ip neigh flush dev eth0 # 只清某个接口
ip neigh flush all # 清空全部,核心网段慎用
ip neigh show dev eth0 # 清理后确认条目已重建
ip neigh replace 10.0.0.5 lladdr aa:bb:cc:dd:ee:ff dev eth0 nud permanent # 手工固定Windows 清空 ARP 缓存
Windows 清空 ARP 缓存
arp -a # 查看当前缓存
netsh interface ip delete arpcache # 清空全部接口缓存(需管理员)
arp -d * # 等价做法,同样需要管理员权限邻居状态判读
| 状态 | 含义 | 处置建议 |
|---|---|---|
| REACHABLE | 近期确认可达 | 正常,无需处理 |
| STALE | 曾可达但已过期 | 下次通信会先确认,通常无需人工干预 |
| DELAY/PROBE | 正在探测确认中 | 短暂状态,持续停留需查链路 |
| FAILED | 探测无响应 | 检查对端是否在线或 VLAN 是否正确 |
| PERMANENT | 手工静态条目 | 对端换网卡时需手动更新,否则直接不通 |
| INCOMPLETE | 尚未收到应答 | 说明广播域内无人应答,重点查 VLAN 与物理连接 |
观察抖动再决定处置
观察抖动再决定处置
# 连续观察某条目的状态与 MAC 是否反复变化
watch -n 2 'ip neigh show 10.0.0.1'
# 只统计同一 IP 出现多个 MAC 的情况
ip neigh | awk '{print $1" "$5}' | sort | uniq -c | sort -rn | head
# 确认后定向删除并立即验证
ip neigh del 10.0.0.1 dev eth0 && ip neigh show 10.0.0.1一台机器上清缓存往往不够:通信是双向的,网关侧与对端也可能缓存了旧 MAC,换设备场景下两端都要清。交换机侧的 MAC 地址表同样需要关注,端口迁移后旧表项未老化也会造成流量黑洞。
Linux 邻居表的容量由 gc_thresh1/2/3 控制(见 /proc/sys/net/ipv4/neigh/<iface>/),条目接近 gc_thresh3 时会触发强制回收,表现为正常主机忽然连不通;大二层或扫描较多的网段要提前评估这个上限。
把 flush all 当万能药会掩盖真正的 MAC 漂移或二层环路问题:出现反复需要清缓存的现象时,应转去查 ARP 表异常与 STP 状态。