在高可用场景中,我们经常遇到vip切换后网络不通的问题.在ipv4网络条件下,这是由于交换机的ARP表没有更新造成的:
-
每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系,因为数据链路层的数据传输靠的就是MAC地址。这个ARP表具有老化时间.不同厂商默认的ARP表老化时间也不一样:思科是 5分钟,华为是 20分钟。
-
ARP 协议包(ARP 报文)主要分为 ARP 请求包和 ARP 响应包。网络中的主机通过这两种报文获取ip和mac的对应关系,或者更新邻居主机的arp表
-
ARP请求包:
某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,
如果没有,就向本网段的所有主机发送 ARP 广播数据包,该数据包包括的内容有:源主机 IP 地址,
源主机 MAC 地址,目的主机的 IP 地址等。当本网络的主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 目标地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖.然后将自己的 MAC 地址写入 ARP 响应包中,单播给发送请求的主机,告诉源主机自己就是它想要找的 MAC地址。
-
ARP响应包:
源主机收到 ARP 响应包后,将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
对于网络设备新加入网络(ip变化)或者mac地址发生变化等情况,可以发送免费的ARP响应包(garp,Gratuitous arp,即不请自来的,没有发送请求报文就发过来的响应报文,也叫unsolicited arp)来将自己的ip和mac广播到其他主机,使这些邻居主机更新arp缓存表
-
ARP老化问题.设备到ARP缓存表老化之前,不会自动更新ARP缓存表.如果在更新之前发生了vip切换,而交换机的ARP表没有更新,就会出现网络不通的问题,只有等到ARP表老化后交换机更新arp表,网络才能联通.
解决方法是切换vip后手动发送Garp包,可以使用arping工具:// ebp...为网卡 后面是vip arping -c 3 -U -I enp5s0f0 192.168.52.18 arping -c 3 -A -I enp5s0f0 192.168.52.18