Computer NetworkNotes

第 05 章:ARP 与邻居发现

zjc 于 2026-01-05 发布

这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 IP 负责跨网络寻址,但帧必须使用链路层地址交付。IPv4 通过 ARP 将 IP 映射为 MAC,IPv6 通过 NDP 完成类似工作。ARP 问题通常表现为“偶尔能通”“切换后旧地址残留”“IP 冲突”或“同网段部分主机不可达”。

5.1 ARP 解决什么问题

同一二层网络内,主机需要知道下一跳 MAC:

源 IP:192.168.1.10
源 MAC:AA:AA:AA:AA:AA:AA
下一跳 IP:192.168.1.1
下一跳 MAC:BB:BB:BB:BB:BB:BB

跨网段访问时,ARP 请求的对象通常是网关,而不是最终目标服务器。

5.2 ARP 工作流程

1. 主机查缓存
2. 未命中则广播 ARP Request
3. 目标主机单播回复 ARP Reply
4. 请求方写入缓存
5. 后续帧使用该 MAC

查看 IPv4 ARP:

ip neigh show
arp -n

状态可能包括:

状态 含义
REACHABLE 最近确认可达
STALE 缓存过期,待确认
DELAY / PROBE 延迟或主动探测
FAILED 解析失败
INCOMPLETE 请求进行中

手工清理:

ip neigh del 192.168.1.1 dev eth0

生产中不要把清 ARP 当作根因修复,只能作为验证手段。

5.3 抓包观察 ARP

tcpdump -i eth0 arp

典型输出字段:

ARP, Request who-has 192.168.1.1 tell 192.168.1.10
ARP, Reply 192.168.1.1 is-at bb:bb:bb:bb:bb:bb

判断:

  1. 只有 Request 没有 Reply:目标不在同网段、链路异常、防火墙拦截或地址不存在;
  2. Reply 的 MAC 不符合预期:IP 冲突、切换残留或中间代理;
  3. 大量 ARP Request:广播域过大或存在扫描;
  4. ARP 缓存频繁变化:高可用切换或异常。

5.4 ARP 缓存与故障切换

服务漂移后,调用方 ARP 可能仍是旧机器。

典型时间线:

1. VIP 从节点 A 漂移到节点 B
2. 节点 B 发送免费 ARP
3. 部分交换机或主机立即更新
4. 部分旧缓存仍指向 A
5. 请求在缓存刷新前失败

缓解:

  1. 发送多次免费 ARP;
  2. 调整交换机 MAC 表老化策略;
  3. 使用负载均衡健康检查;
  4. 客户端增加重试;
  5. 保持连接池可重建;
  6. 演练切换并观察恢复时间。

5.5 IP 冲突

现象:

  1. 连接时通时断;
  2. 抓包看到同一 IP 多个 MAC 回复;
  3. 系统日志出现地址冲突;
  4. 高可用切换后冲突;
  5. 容器网络误用同网段。

排查:

ip neigh show 192.168.1.100
tcpdump -i eth0 arp host 192.168.1.100

处理:

  1. 下线冲突地址;
  2. 检查 DHCP 静态绑定;
  3. 检查容器地址池;
  4. 检查漂移脚本;
  5. 建立 IP 地址管理系统。

5.6 ARP 安全风险

ARP 没有认证,同二层攻击者可以发送虚假 Reply。

风险:

攻击 效果
ARP 欺骗 劫持流量
ARP 泛洪 消耗资源
MAC 泛洪 溢出交换机表
中间人攻击 窃听或篡改

防护:

  1. 划小 VLAN;
  2. 交换机绑定 IP-MAC-Port;
  3. DHCP Snooping;
  4. Dynamic ARP Inspection;
  5. 端口安全;
  6. 敏感系统使用 TLS;
  7. 内部链路也启用证书校验。

TLS 不能阻止 ARP 欺骗,但可以降低被窃听和篡改的风险。

5.7 IPv6 Neighbor Discovery

IPv6 使用 ICMPv6 的 NDP:

报文 作用
Neighbor Solicitation 请求邻居链路地址
Neighbor Advertisement 回复邻居信息
Router Solicitation 请求路由器
Router Advertisement 发布路由和前缀

查看:

ip -6 neigh
tcpdump -i eth0 icmp6

NDP 常见问题:

  1. 防火墙拦截 ICMPv6;
  2. RA 配置错误;
  3. 前缀或网关缺失;
  4. 地址选择策略导致走 IPv6 失败;
  5. 双栈环境 A/AAAA 优先级问题。

5.8 排障流程

同网段无法通信:

ip addr
ip route
ip neigh
ping <target>
tcpdump -i eth0 arp or icmp

判断:

  1. IP 和掩码是否正确;
  2. 是否误把跨网段目标当同网段;
  3. ARP 是否有回复;
  4. MAC 是否符合预期;
  5. 交换机是否学到端口;
  6. VLAN 是否一致;
  7. 是否存在 IP 冲突;
  8. 防火墙是否拦截。

本章小结

ARP 将 IPv4 地址映射为 MAC 地址,NDP 在 IPv6 中承担邻居和路由发现职责。ARP 缓存、免费 ARP、IP 冲突和二层攻击都会造成难以复现的连接问题。排查同网段通信要看地址、掩码、邻居状态、ARP 报文、交换机 MAC 表和 VLAN。生产环境应通过 VLAN、端口安全、DHCP Snooping 和 TLS 降低二层风险。

思考题

  1. 跨网段访问时 ARP 解析的是谁?
  2. ARP 的 STALE 和 FAILED 状态说明什么?
  3. VIP 漂移后为什么部分请求仍到旧节点?
  4. ARP 欺骗如何防护?
  5. 写一份同网段两台机器不通的排查命令清单。