在 EVPN 中,解决 BUM 报文,通常是使用头端复制的方式 (具体体现是在桥中添加 mac 地址为全 0 的 FDB 表项进行头端复制)。当有很多的 arp 广播请求报文的时候,容易造成广播泛滥。采用 ARP 抑制可以有效限制广播 ARP 报文的数量。
ARP 抑制的原理是:当 VTEP 接收到广播 ARP 请求报文时,会先查看自己的 overlay 邻居表,如果存在则将广播 arp 请求报文替换成单播 arp 请求报文 (这与 arp 代答是不同的,arp 代答是直接回应),然后将单播报文发送给目的主机,目的主机收到后,回应一个应答报文给源主机。VTEP 通过 EVPN 学习到了很多主机的 mac/ip 对。该方案可以有效的减少 arp 广播报文。
ARP 抑制
如上图所示,VXLAN 三层网关通过动态学习终端租户的 ARP 表项,再根据 ARP 表项生成主机信息(包括主机 IP 地址、MAC 地址、VTEP 地址和 VNI ID),并将主机信息通过 MP-BGP 或 BGP EVPN 对外发布,使其他的 BGP 邻居可以学习到主机信息。VXLAN 二层网关学习到的主机信息用于广播抑制。Server1 初次访问 Server2 时,Server1 会向 Server2 发送 ARP 广播请求报文,请求目的主机
Server2 的 MAC 地址,具体实现过程如下:
- Server1 发送 ARP 请求报文,请求目的主机 Server2 的 MAC 地址。
- 作为 VXLAN 二层网关的 Device1 收到 ARP 请求报文后,查询主机信息。
– 如果主机信息中有目的主机信息,Device1 将 ARP 请求报文中的广播目的 MA 地址和 Target MAC 地址替换为目的主机的 MAC 地址,并进行 VXLAN 封装后转发。
– 如果主机信息中没有目的主机信息,ARP 请求报文中的广播目的 MAC 地址不变,Device1 进行 VXLAN 封装后转发。 - 作为 VXLAN 二层网关的 Device2 收到封装后的 ARP 请求报文进行 VXLAN 解封装获取内层二层报文,判断报文的目的 MAC 是否为广播地址。
– 是,在对应的二层广播域内非 VXLAN 网络侧进行广播处理。
– 不是,发送给对应的目的主机。 - 目的主机 Server2 收到单播 ARP 请求报文后,进行 ARP 应答。
- Server1 收到 ARP 应答报文建立 ARP 缓存表,并可以与 Server2 通信。
LINUX 配置 ARP 抑制
linux 可以使用如下命令开启 arp 抑制功能
sudo bridge link set dev eth0 neigh_suppress on