因为一些原因vritual private network 缩写为VNP
本文介绍一下内容:
- 同网内的单播转发流程;
- 跨网段单播转发流程;
- 双宿主机转发流程;
1. 网段内的单播转发
完成MAC/IP地址学习和通告后,会形成以下一张转发表:
转发表和BGP MAC/IP信息并不一定一致,因为需要将BGP收到的路由中的RT eport 和本地的RT import 比较,如果一致才会生成转发表。
同网段的转发过程已经在《VXLAN基本原理》中描述清楚,这里就不再赘述
2. 跨网段单播转发
如图:4台主机都位于VRF A中,VNI为50001;VNI 30001和网段192.168.1/0/24关联,host A,host B位于该网段中;VNI30002和192.168.2.0/24关联,host x, y 位于该网段。
在控制平面收敛后,VTEP1和VTEP2会形成一张类似的转发表:
A和X,B通信过程如下:
- A 请求发送ARP请求,请求ARP网关MAC地址信息,即VTEP1上配置的分布式任播网关的MAC地址;
- VTEP1收到后,将host A的MAC,IP,L2VNI,L3VNP和下一跳通过BGP EVNP更新给其他邻居。前两步过程如图:
- VTEP1使用任播的MAC IP回应ARP 请求;
- A发送数据包,源MAC为A的MAC地址,目的MAC为VTEP1,源IP为A的IP地址,目的IP为X的地址;
- VTEP1收到数据包后,发现目的地址为本身,查找VRF-A的路由表。如果目的地址在本地,直接转发到相应的出接口,无需进行VXLAN封装;如果目的地址为其他VTEP且位于不同子网的Y,返回VTEP2, L3VNI 50001;
- VTEP1对数据包进行封装,内层源MAC地址为VTEP1的路由器MAC地址,目的MAC地址为VTEP2的MAC地址。VTEP2的MAC地址通过BGP EVNP NIRI携带的的扩展团体属性获得。数据包封装如图,0200.0ade.de01 and 0200.0ade.de02
correspond 分别指VTEP1和VTEP2的MAC地址 - VTEP2 VXLAN数据包后,进行解封装,因为VNI50001属于VRF-A,需要在VRF-A中进行路由表查找,找到出接口后对源目的MAC地址进行重新后从相应的接口发出。
2.1 将流量路由到沉默的的主机
如图:Host A需要host Y 通信,VTEP1上还没有host y 的路由,只有网段路由,将经历以下过程:
、
VTEP1转发表信息如图,只有host Y 的网段信息,没有主机信息。
- A将数据包发送到VTEP1;
- VTEP1查找路由表,匹配到192.168.2.0/24,下一跳是VTEP2;使用VNI 50001封装,内层源MAC为VTEP1的MAC地址,目的MAC为VTEP2的MAC地址;
- 到达VTEP2后,VTEP进行解封装,vrf-A中查找路由表,找到匹配网段路由,但没找到主机路由
- VTEP2 发送ARP请求,本地向VLAN 20发送,同时使用VXLAN封装,VNI 为30002,目的地址为VNI30002的组播地址;
- VTEP2从本地收到回应,对MAC地址改写后发送给Host Y ;同时将Y的信息使用BGP update 更新给VXLAN网络;
双宿主转发
双宿主转发是指主机使用vPC连接到两个Leaf场景下的转发,如图,Host A通过vPC和VTEP1,VTEP2相连,VTEP1,VTEP2配置anycast IP ,Host A到Host B转发流程如下:
- Host A 通过哈希,将流量同时发往VTEP1,和VTEP2;
- VTEP1 和VTEP 2 查找IP/MAC表,发现Host B位于VTEP3,将数据包进行VXLAN封装。因为处于同一个网段,VNI使用Host A的VNI 30001;内层源MAC为A,目的MAC为B,内层源IP为A,内层目的IP为A;外层源IP为VTEP1,VTEP2的任播地址,外层目的IP为VTEP3;
- 数据包到达VTEP3后,进行接封装,在对应的VNI 内查找到host b的出接口,发送给B;
- VTEP 3收到B的回包后,将数据包进行封装,内层信息不变,VNI使用30001,源地址使用VTEP3地址,目的地址为任播地址
- 在underlay层面进行ECMP,数据包有可能到达VTEP1,VTEP2,VTEP1,VTEP2收到后,会对数据包进行解封装,最终到达host A。
如果主机只接了单边,有两种结局方案,一个是配置在peer link上配置vrf-lite ,为VRF配置一个子接口,另一个是配置advertise-pip特性。