4. 网卡与驱动层性能调优
ARP,地址解析协议。说白了,就是问一句「谁有这个 IP?请告诉我你的 MAC」。在网络世界里,IP 是门牌号,MAC 才是身份证。没有 ARP,数据包连二层都出不去。
我刚开始做运维那会儿,遇到过一次全网断流。查了半天,最后发现是一台测试机在疯狂发送虚假 ARP 应答。从那以后,我对 ARP 的敬畏心就刻在骨子里了。
核心要点:ARP 是 IP 到 MAC 的映射表。这张表一旦乱了,网络就「精神分裂」了。
4.1 两个核心命令:arp 与 ip neigh
排查 ARP 问题,你只需要两个命令。一个老派,一个新派。我建议你直接上手 ip neigh,但老系统上 arp 依然好用。
4.1.1 arp 命令(传统派)
# 查看完整 ARP 缓存表
arp -n
# 删除某个 ARP 条目
arp -d 192.168.1.1
# 静态绑定 MAC(慎用,用于防欺骗)
arp -s 192.168.1.100 00:11:22:33:44:55
-n 参数很重要。不加它,命令会尝试反向解析主机名,慢得要命。我在排查故障时,第一件事就是加 -n。
4.1.2 ip neigh 命令(现代派)
# 查看邻居表(ARP 缓存)
ip neigh show
# 删除条目
ip neigh del 192.168.1.1 dev eth0
# 添加静态条目
ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
nud permanent 表示永久有效,不会老化。这个在防 ARP 欺骗时很管用。
我的习惯:能用 ip neigh 就不用 arp。前者输出更规范,而且支持更多状态标识。
4.2 ARP 缓存表深度分析
一张健康的 ARP 表,应该只有你需要的条目。如果出现几百条,八成是中招了。
4.2.1 表项状态解读
| 状态 | 含义 | 说明 |
|---|---|---|
| REACHABLE | 可达 | 最近通信过,条目有效 |
| STALE | 过期 | 超过老化时间,需要重新探测 |
| DELAY | 延迟 | 刚发过探测,等待应答 |
| PROBE | 探测中 | 正在发送单播探测 |
| FAILED | 失败 | 多次探测无响应 |
| PERMANENT | 永久 | 静态绑定,不会老化 |
你想想看,如果网关的条目状态一直是 STALE 或 FAILED,那网络肯定有问题。我遇到过一台机器,ARP 表里网关状态反复在 REACHABLE 和 STALE 之间跳,最后发现是网线接触不良。
4.2.2 缓存老化机制
Linux 默认的 ARP 老化时间是 60 秒。你可以通过内核参数调整:
# 查看当前老化时间(单位:秒)
cat /proc/sys/net/ipv4/neigh/default/gc_stale_time
# 临时修改为 120 秒
echo 120 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
但我不建议改得太大。老化时间过长,网络拓扑变化时,你会等很久才能恢复通信。
避坑指南:我曾经把老化时间改成 600 秒,结果交换机割接后,所有机器等了 10 分钟才恢复。那 10 分钟,运维群里炸了锅。
4.3 ARP 欺骗:网络里的「李鬼」
ARP 欺骗的原理很简单:伪造 MAC 地址。攻击者发送虚假 ARP 应答,告诉网关「我是受害者」,告诉受害者「我是网关」。然后所有流量都经过攻击者。
4.3.1 如何发现 ARP 欺骗
第一步,看 ARP 表里有没有重复的 IP:
# 检查网关 MAC 是否唯一
arp -n | grep 192.168.1.1
# 用 ip neigh 更直观
ip neigh show | grep 192.168.1.1
如果同一个 IP 对应两个不同的 MAC,那基本可以断定有人在搞鬼。
第二步,用 arping 验证:
# 发送 ARP 请求,看谁应答
arping -I eth0 192.168.1.1
# 收到多个 MAC 应答,就是有问题
4.3.2 实战排查步骤
- 抓包确认:用 tcpdump 抓 ARP 包,看谁在发虚假应答。
- 定位源头:根据 MAC 地址查交换机端口。
- 临时防御:在网关和关键服务器上做静态绑定。
- 永久方案:部署 DAI(动态 ARP 检测)或 DHCP Snooping。
# 抓取 ARP 包,只看请求和应答
tcpdump -i eth0 -n arp
# 输出示例
# 08:12:33.123456 ARP, Request who-has 192.168.1.1 tell 192.168.1.100
# 08:12:33.123789 ARP, Reply 192.168.1.1 is-at 00:11:22:33:44:55 (正常的)
# 08:12:33.124001 ARP, Reply 192.168.1.1 is-at aa:bb:cc:dd:ee:ff (假的!)
关键判断:正常网络里,一个 IP 只对应一个 MAC。出现两个以上,立刻报警。
4.4 ARP 冲突:谁动了我的 MAC?
ARP 冲突和欺骗不一样。冲突是两台机器配置了相同的 IP,或者 MAC 地址重复。欺骗是故意的,冲突多半是配置失误。
4.4.1 冲突的典型症状
- 网络时通时断,丢包严重。
- 系统日志里出现
IP address conflict提示。 - ARP 表里同一个 IP 的 MAC 频繁变化。
4.4.2 排查方法
# 查看系统日志
dmesg | grep -i conflict
journalctl -k | grep -i arp
# 持续监控 ARP 表变化
watch -n 1 'ip neigh show | grep 192.168.1.1'
我遇到过最奇葩的一次:两台虚拟机用了相同的 MAC 地址。因为模板克隆时忘了重置 MAC。结果这两台机器一上线,整个网段都跟着遭殃。
快速定位:拔掉疑似冲突机器的网线,看 ARP 表是否稳定。如果稳定了,就是那台机器的问题。
4.5 知识体系总览
下面这张图,把 ARP 相关的知识点串起来了。你可以把它当作排查时的「作战地图」。
4.6 总结与建议
ARP 问题,说白了就是「谁是谁」的问题。IP 和 MAC 的对应关系一旦乱了,网络就跟着乱。
我个人建议你养成几个习惯:
- 定期检查 ARP 表,尤其是网关的条目。
- 关键服务器做静态绑定,别偷懒。
- 遇到网络异常,第一个想到的就是查 ARP。
嗯,ARP 这块就聊到这儿。记住一句话:网络无小事,ARP 无小事。