换了路由器之后,局域网里有台打印机时通时不通,ping 网关正常,ping 打印机偶尔丢包。远程上去敲 arp -a,发现网关的 MAC 地址和昨天不一样,问题就浮出来了。arp命令不复杂,排查局域网时很好用。

arp -a 看的是什么

ARP 是地址解析协议,把 IP 地址换成 MAC 地址,结果存在本机的 ARP 缓存表里。Windows 下打开命令提示符,输入 arp -a,会列出接口地址、Internet 地址、物理地址和类型,动态项是自动学来的,静态项是自己绑的。只想看某台设备,可以在 arp -a 后面直接跟 IP,输出短很多。Linux 上对应 ip neigh show,老系统用 arp -a,前提是装了 net-tools。

清缓存和静态绑定

表项过期或怀疑被污染,先清掉让它重新学习。Windows 管理员命令行执行:

arp -d *

星号表示所有接口,缓存清空后会自动重新学习。只想删一条也可以,arp -d 192.168.1.1 就只删指定表项。要固定网关的对应关系,用 -s 参数:

arp -s 192.168.1.1 00-11-22-33-44-55

这样能减少 ARP 欺骗带来的断网。Linux 下用 ip neigh flush all 清空,绑定写 ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 nud permanent。注意 Windows 的静态项重启后一般要重新绑定,可以写进开机脚本。

查不到和 incomplete 是怎么回事

表里出现 0.0.0.0 或者 incomplete,说明对方没回 ARP 请求:可能设备关机、IP 冲突,也可能不在同一网段。跨网段通信时,本机 ARP 表里只有网关的 MAC,查不到目标主机的,这是正常现象。装了虚拟机和 Docker 的电脑,表里会多出几个虚拟网卡,表项多是正常现象,不用紧张。公司网络里网关 MAC 频繁变化,别自己乱绑,先找网管确认是不是双网关或负载均衡。

arp命令就三个动作:-a 看表,-d 清缓存,-s 绑定。排查断网先看网关 MAC 稳不稳定,比盲猜线路快得多。