超详细VXLAN分布式网关通信原理,看这篇就够了(主页文章还有对应实验)
1.BGP EVPN分布式网关通信原理

a.VXLAN隧道建立
同子网互通:
a.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地址动态学习
1.当首次有数据包从PC1到CE1的时候,CE1会学习到PC1的MAC地址,BD域(比如Bridge domian 2000等)和入接口(二层子接口),所以此时会记录MAC地址表项和ARP表项。
2.CE1根据MAC地址表项会生成Type2的EVPN路由(主机MAC地址通告),根据ARP表项生成Type2的EVPN路由(主机ARP通告,用户ARP广播抑制),该路由携带本端EVPN实例的出方向VPN-Target、路由下一跳属性,二层VNI,MAC地址,MAC地址长度
3.CE3收到CE1的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后。CE3在本地MAC地址表项中添加CE1的MAC地址,出接口不再是某些物理接口,而是对端VTEP地址
注意:
1.在第一次CE1和CE3通信时会发送ARP广播来请求CE3的MAC地址,若此VXLAN的广播域太大,会对那些不需要回应此报文的设备增加负担,所以此时可以在CE1和CE3上都开启ARP广播抑制功能。
2.在开启此功能后,会产生Type2的EVPN路由(主机ARP通告的)不管是CE1和CE3在发送ARP广播时,都会检查本地的表项中是否有对端的MAC地址,如果有的话,会将全F的MAC地址替换成对端MAC地址,这样就将广播ARP变为单播ARP
c.同子网已知报文转发
1.CE1收到来自PC1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,并在该二层广播域内查找出接口和封装信息(查找ARP表,没有对应MAC地址,就发送ARP广播也可能是单播)。
2.CE1上VTEP根据查找到的封装信息对数据报文进行VXLAN封装,然后根据查找到的出接口进行报文转发。
3.CE3上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层的二层报文。
4.CE3根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和封装信息,为报文添加VLAN Tag,转发给对应的主机Host2
d.同子网BUM报文转发
1.CE1收到来自PC1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。
2.CE1上根据对应BD内有一个泛洪表(我自己这样称)发给具有相同VNI的VETP,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。
3.CE3作为集中复制节点接收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文,再根据二层广播域对应VNI的头端复制列表进行VXLAN封装,此时外层的源IP地址为CE1的VTEP地址,不会影响VTEP间的MAC地址学习。
4.CE3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:从其他VTEP发来的广播包,不会再发给具有相同VNI的VTEP了,CE3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,为报文添加VLAN Tag,转发给对应的终端PC2。
e.跨子网报文转发
CE1属于BD10,CE2属于BD20
1.不再像同子网一样直接再VTEP建立VXLAN隧道,需要VTEP和Spine(也就是网关所在位置)建立VXLAN隧道
2.CE1接收来自PC1的报文后,从报文中的vlan id判断从那哪个子接口接收,判断该报文属于哪一个BD域,然后查看目的IP地址,判断是需要进行三层转发,以VBDIF的MAC地址为目的MAC地址,发给VBDIF网关
3.VBDIF网关查路由表,判断需要进行VXLAN封装,封装上L3VNI,内层IP为PC1和PC2的IP,M源MAC为本端VTEP的MAC地址,目的MAC为对端VTEP的MAC地址,将VXLAN数据包发给CE3
4.CE3侧VXLAN报文后进行解封装,发现VNI是L3 VNI,进行L3的查表转发,然后够内层报文中的L3中的目的IP地址是PC2的IP地址,查对应的路由表,从VBDIF20发出,然后封装源MAC为VBDIF20,目的MAC为PC2,将数据包发给PC2
5.CE2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的PC2
2.总结
a.VXLAN隧道建立:
同子网:通过Type3的EVPN路由的传递,来建立VXLAN隧道
跨子网:通过Type3的EVPN路由的传递,来建立VXLAN隧道,通过Type2的IRB路由收集主机信息,跨子网直接通过主机路由通信
b.同子网互访:PC1的数据包发出的时候,先查ARP表,没有对应IP-MAC的映射的话,就发ARP广播(开了ARP广播抑制,就是ARP广播变成单播),然后通过子接口进入对应的BD,查MAC地址表,若有MAC-Port的对应关系就直接转发,没有的话就泛洪(通过头端复制泛洪给对应的VNI的VTEP),然后封装上VXLAN头部(这里是L2的VNI),发给对端CE,解封装VXLAN头部,根据VNI找到对应的BD域,查找MAC地址表,封装后,将数据包发给PC2
c.跨子网互访(此处IRB型):PC1将数据包发出的时候,发现是跨子网,发ARP请求网关的MAC地址,封装上数据包后,通过子接口进入对应的BD域,将数据包发给对应的VBDIF,解封装数据包,查找对应的路由表,发现下一跳进行VXLAN封装(这里就是封装L3 VNI),发给对端后,解封装,发现是L3 VNI,查对应路由表,然后从对应VBDIF发出,然后封装源MAC为VBDIF的,目的MAC为PC2,将数据包发给PC2