1. BGP EVPN 分布式网关通信原理
a. VXLAN 隧道建立
同子网互通: CE1 和 CE2 建立 BGP EVPN 邻居后,会传递 EVPN 的 Type3 路由。Type3 路由包含两部分:前缀和 PMSI。前缀携带 Originator IP(用于告知对端的 VTEP IP),PMSI 会携带 Tunnel Identifier,即 VTEP IP 和 L2 VNI(用于建立 VXLAN 隧道和该 VNI 的头端复制列表)。
跨子网互通(此处介绍 IRB 情况): 因为是跨子网并且跨 VTEP,所以 CE1 和 CE3 上是需要有 32 位的主机路由(不同的 Leaf 节点可能连接着相同的网段,如果 Leaf 节点发布的是下属主机 IP 所在的网段路由,则可能与其他 Leaf 节点发布的网段路由冲突,进而导致某些 Leaf 节点的下属主机不可达)。
a. PC1 首次和 CE1 通信的时候,CE1 会记录 PC1 的 IP 地址和 MAC 地址进入 ARP 表项,然后在对应网关下配置 arp host collect enable,用于收集租户侧的主机信息和生成 IRB 的路由(包含 MAC 地址、IP 地址、L2 VNI、L3 VNI)。
b. 然后通过 BGP EVPN 邻居将路由传递给 CE3,在 IP vpn-instance 处和 Bridge domain 下对比 vpn-target,决定是否接收路由。RT 值对应将 IRB 路由收下,在路由表生成对应的主机路由,在 BD 域下生成对应的用于生成 ARP 抑制表。所以跨子网互通会通过 L3 VNI。
b. MAC 地址动态学习
- 当首次有数据包从 PC1 到 CE1 的时候,CE1 会学习到 PC1 的 MAC 地址、BD 域(如 Bridge Domain 2000 等)和入接口(二层子接口),此时会记录 MAC 地址表项和 ARP 表项。
- CE1 根据 MAC 地址表项会生成 Type2 的 EVPN 路由(主机 MAC 地址通告),根据 ARP 表项生成 Type2 的 EVPN 路由(主机 ARP 通告,用于 ARP 广播抑制)。该路由携带本端 EVPN 实例的出方向 VPN-Target、路由下一跳属性、二层 VNI、MAC 地址及长度。
- CE3 收到 CE1 的 BGP EVPN 路由后,首先检查该路由携带的 EVPN 实例的出方向 VPN-Target,如果与本端 EVPN 实例的入方向 VPN-Target 相等,则接收该路由,否则丢弃。接收后,CE3 在本地 MAC 地址表项中添加 CE1 的 MAC 地址,出接口不再是物理接口,而是对端 VTEP 地址。
注意:
- 第一次 CE1 和 CE3 通信时会发送 ARP 广播来请求 CE3 的 MAC 地址。若此 VXLAN 的广播域太大,会对不需要回应此报文的设备增加负担,因此可以在 CE1 和 CE3 上都开启 ARP 广播抑制功能。
- 开启此功能后,会产生 Type2 的 EVPN 路由(主机 ARP 通告)。不管是 CE1 还是 CE3 在发送 ARP 广播时,都会检查本地的表项中是否有对端的 MAC 地址。如果有,会将全 F 的 MAC 地址替换成对端 MAC 地址,这样就将广播 ARP 变为单播 ARP。
c. 同子网已知报文转发
- CE1 收到来自 PC1 的报文,根据报文中接入的端口和 VLAN 信息获取对应的二层广播域,并在该二层广播域内查找出接口和封装信息(查找 ARP 表,没有对应 MAC 地址,就发送 ARP 广播也可能是单播)。
- CE1 上 VTEP 根据查找到的封装信息对数据报文进行 VXLAN 封装,然后根据查找到的出接口进行报文转发。
- CE3 上 VTEP 收到 VXLAN 报文后,根据 UDP 目的端口号、源/目的 IP 地址、VNI 判断 VXLAN 报文的合法有效性。然后依据 VNI 获取对应的二层广播域,进行 VXLAN 解封装,获取内层的二层报文。
- CE3 根据内层二层报文的目的 MAC,从本地 MAC 表找到对应的出接口和封装信息,为报文添加 VLAN Tag,转发给对应的主机 Host2。
d. 同子网 BUM 报文转发
- CE1 收到来自 PC1 的报文,根据报文中接入的端口和 VLAN 信息获取对应的二层广播域。
- CE1 上根据对应 BD 内有一个泛洪表,发给具有相同 VNI 的 VTEP,并进行 VXLAN 封装。然后将封装后的报文从出接口转发出去。
- CE3 作为集中复制节点接收到 VXLAN 报文后,根据 UDP 目的端口号、源/目的 IP 地址、VNI 判断 VXLAN 报文的合法有效性。然后依据 VNI 获取对应的二层广播域,进行 VXLAN 解封装,获取内层二层报文,再根据二层广播域对应 VNI 的头端复制列表进行 VXLAN 封装。此时外层的源 IP 地址为 CE1 的 VTEP 地址,不会影响 VTEP 间的 MAC 地址学习。
- CE3 检查内层二层报文的目的 MAC,发现是 BUM MAC,在对应的二层广播域内的非 VXLAN 隧道侧进行广播处理。即从其他 VTEP 发来的广播包,不会再发给具有相同 VNI 的 VTEP 了。CE3 分别从本地 MAC 表中找到非 VXLAN 隧道侧的所有出接口和封装信息,为报文添加 VLAN Tag,转发给对应的终端 PC2。


