ARP 表是二层与三层的桥
同网段通信必须先把 IP 解析成 MAC,这张映射表就是邻居表(ARP 表)。ping 不通时先看邻居表状态:REACHABLE 说明二层可达,问题在更上层;INCOMPLETE 或 FAILED 说明连 ARP 应答都收不到,问题一定在链路层。Linux 用 iproute2 的 ip neigh 查看并带状态,Windows 用 arp -a 或 Get-NetNeighbor。
表项怎么来怎么走
主机发送前先查邻居表,命中就直接封装以太网帧;未命中就广播一个 ARP 请求,对方单播应答后写入表项。表项有老化时间,长期不用会退化为待验证状态,下次发包时内核再确认一次。理解这条生命周期,就能明白为什么刷新表项、为什么跨网段只看见网关、以及为什么冲突时同一个 IP 的 MAC 会来回跳。
Linux 查看
Linux 查看
ip neigh show # 推荐:带 REACHABLE/STALE/FAILED 状态
ip neigh show dev eth0 # 只看某张网卡
ip neigh show 10.0.0.5 # 只看某个目标
arp -a # net-tools 风格,装了才有
ip neigh flush 10.0.0.5 # 清条目强制重新解析(慎用)Windows 查看
Windows 查看
arp -a
Get-NetNeighbor -AddressFamily IPv4 | Where-Object State -ne Permanent
Get-NetNeighbor -IPAddress 10.0.0.5 | Select-Object IPAddress,LinkLayerAddress,State
Remove-NetNeighbor -IPAddress 10.0.0.5 -Confirm:$false # 清条目复测排查用法
- 同网段 ping 不通:先看目标条目是 REACHABLE 还是 INCOMPLETE,一步区分二层与三层问题
- 怀疑地址冲突:连续查看同一 IP 的条目,MAC 是否在两组地址之间跳动
- 刚换过网卡或交换机:清掉旧条目再复测,避免内核复用老化表项
- 排查跨网段问题:只核对网关条目,目标 IP 查不到属正常现象
- 做资产核对:用邻居表反查同网段在线设备的 MAC 与厂商前缀
状态逐项读法
| 状态 | 含义 | 正常/异常 |
|---|---|---|
| REACHABLE | 近期验证过可达,二层通畅 | 正常 |
| STALE | 条目仍可用但未重新验证,内核会按需确认 | 正常,不必手动刷新 |
| DELAY / PROBE | 正在重新验证过程中 | 正常过渡态 |
| INCOMPLETE | 已发 ARP 请求未收到应答 | 异常:链路、VLAN 或对端问题 |
| FAILED | 多次请求无应答,条目已判失败 | 异常:对端不存在、口未启用或 VLAN 错 |
跨网段的目标在邻居表里只会看到网关的 MAC,不会出现目标 IP,拿目标地址去查邻居表查不到属正常。
邻居表有老化时间:条目长期不用会从 REACHABLE 退到 STALE,需要发包时内核再验证一次。因此 STALE 状态本身不代表不通,只有 INCOMPLETE 与 FAILED 才需要往链路层查。