这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 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
判断:
- 只有 Request 没有 Reply:目标不在同网段、链路异常、防火墙拦截或地址不存在;
- Reply 的 MAC 不符合预期:IP 冲突、切换残留或中间代理;
- 大量 ARP Request:广播域过大或存在扫描;
- ARP 缓存频繁变化:高可用切换或异常。
5.4 ARP 缓存与故障切换
服务漂移后,调用方 ARP 可能仍是旧机器。
典型时间线:
1. VIP 从节点 A 漂移到节点 B
2. 节点 B 发送免费 ARP
3. 部分交换机或主机立即更新
4. 部分旧缓存仍指向 A
5. 请求在缓存刷新前失败
缓解:
- 发送多次免费 ARP;
- 调整交换机 MAC 表老化策略;
- 使用负载均衡健康检查;
- 客户端增加重试;
- 保持连接池可重建;
- 演练切换并观察恢复时间。
5.5 IP 冲突
现象:
- 连接时通时断;
- 抓包看到同一 IP 多个 MAC 回复;
- 系统日志出现地址冲突;
- 高可用切换后冲突;
- 容器网络误用同网段。
排查:
ip neigh show 192.168.1.100
tcpdump -i eth0 arp host 192.168.1.100
处理:
- 下线冲突地址;
- 检查 DHCP 静态绑定;
- 检查容器地址池;
- 检查漂移脚本;
- 建立 IP 地址管理系统。
5.6 ARP 安全风险
ARP 没有认证,同二层攻击者可以发送虚假 Reply。
风险:
| 攻击 | 效果 |
|---|---|
| ARP 欺骗 | 劫持流量 |
| ARP 泛洪 | 消耗资源 |
| MAC 泛洪 | 溢出交换机表 |
| 中间人攻击 | 窃听或篡改 |
防护:
- 划小 VLAN;
- 交换机绑定 IP-MAC-Port;
- DHCP Snooping;
- Dynamic ARP Inspection;
- 端口安全;
- 敏感系统使用 TLS;
- 内部链路也启用证书校验。
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 常见问题:
- 防火墙拦截 ICMPv6;
- RA 配置错误;
- 前缀或网关缺失;
- 地址选择策略导致走 IPv6 失败;
- 双栈环境 A/AAAA 优先级问题。
5.8 排障流程
同网段无法通信:
ip addr
ip route
ip neigh
ping <target>
tcpdump -i eth0 arp or icmp
判断:
- IP 和掩码是否正确;
- 是否误把跨网段目标当同网段;
- ARP 是否有回复;
- MAC 是否符合预期;
- 交换机是否学到端口;
- VLAN 是否一致;
- 是否存在 IP 冲突;
- 防火墙是否拦截。
本章小结
ARP 将 IPv4 地址映射为 MAC 地址,NDP 在 IPv6 中承担邻居和路由发现职责。ARP 缓存、免费 ARP、IP 冲突和二层攻击都会造成难以复现的连接问题。排查同网段通信要看地址、掩码、邻居状态、ARP 报文、交换机 MAC 表和 VLAN。生产环境应通过 VLAN、端口安全、DHCP Snooping 和 TLS 降低二层风险。
思考题
- 跨网段访问时 ARP 解析的是谁?
- ARP 的 STALE 和 FAILED 状态说明什么?
- VIP 漂移后为什么部分请求仍到旧节点?
- ARP 欺骗如何防护?
- 写一份同网段两台机器不通的排查命令清单。