![](https://img-blog.csdnimg.cn/3e75d4237e2e4fcd85f624e7e14d493d.png)
冯亚伟(去哪儿网 NETOPS)
2014年7月加入去哪儿网,拥有丰富的网络运维经验,现负责公司IDC和骨干传输网络的运维工作。
1. 故障描述
1、19:01 在 fw4 仍然为 master 的状态下 fw3 独自提升为 master 状态;
2、19:27 fw3 独自放弃 master 状态,故障开始;
3、19:44 发现机器 server1 请求外部接口异常;
4、19:48 清理机器 server1 上的 arp 缓存,机器恢复;
5、19:51 在 fw4 上发送 vip 的免费 arp 刷新内部服务器上的 arp 表项后,故障恢复。
2. 涉及到的关键知识点
2.1 linux 系统的 arp cache 状态
REACHABLE 状态:arp 条目对应的邻居可达,可以直接用该 arp 条目。REACHABLE 超时时间是15s~45s之间的随机值。使用 arp 条目成功发送数据包后(如 tcp 得到 ack,icmp request 得到 reply),会重置超时计时器。
STALE 状态:arp 条目从 REACHABLE 状态超时后,进入 STALE 状态,该状态不确定 arp 条目对应的邻居是否可达,但是在使用该条目再次发送数据包之前不会对其可达性进行检测。
DELAY 状态:使用处于 STALE 状态的 arp 条目发送出去数据包后,arp 条目从 STALE 状态进入 DELAY 状态,DELAY 状态超时时间为5s,在 DELAY 状态会进行邻居不可达检测,如果确认邻居依然可达则条目进入 REACHABLE 状态,否则进入 PROBE 状态。
PROBE 状态:会发送3次单播 arp 以确认邻居可达性,发送间隔为1s。若收到 arp 应答,则条目进入 REACHABLE 状态,否则进入 FAILED 状态。
FAILED 状态:向条目中的 IP 地址发送数据包时,会重新发送广播 arp,解析 IP 对应的 MAC 地址。
2.2 邻居不可达检测
分两种方式:
1、通过上层协议进行邻居可达性确认,例如当 TCP 收到了 ACK,ICMP 收到了 echo reply 时,证明邻居可达;
2、使用 arp 条目中的 MAC 地址作为目的 MAC 地址,发送单播 arp 进行检测,如果能收到 arp 应答,则证明邻居可达。
2.3 Linux6.0 和 Linux7.0系统对 STALE 状态的 ARP 条目进行邻居不可达检测的区别
Linux6.0:
图1