四、VPC内部三层流量模型分析
首先需要注意的是二层流量模型与三层流量模型的最大区别在于Host1与Host2不在同一网段下。
- VM1在本地会做判断是同子网访问还是跨子网访问,,由于此次分析为三层流量模型,请求为跨子网访问,VM1发送arp请求网关MAC,arp报文根据流表到达br-tun,br-tun给予VM1网关的MAC信息。此时arp报文不出宿主机(Host1);
- 首次封装时目的MAC 为自身网关MAC(GW1);
**注意:**br-int网桥存放各个子网网关,网关为分布式,在8.0.3及以后版本网关在br-router网桥上。
- 数据包到br-tun网桥后,封装时替换源MAC 为该宿主机1的关于该网关的MAC(DVR1 MAC),同时增加VNI 为目的子网VNI(VNI-2);
- br-tun将报文处理完后,通过查询找到br-physnet网桥上的tunnel_bearing网卡口,在这个网桥上打上tunnel_bearing的VLAN,然后从对应的物理网卡将报文发出;
- 目的宿主机收到报文后,tunnel_bearing 会剥离VLAN,送到br-tun,然后拆除VXLAN封装,拆封时替换源MAC为自身网关MAC(GW2),最后基于MAC学习通过网桥送到目的主机(VM2)。
**注意:**流表的下发顺序为:
Pecado → kafka → loca controller → agent → ovs → vSwitchD
五、VPC Peer流量模型分析
VPC Peering即对等连接,用于VPC和VPC之间互通。通过VPC Peering使原来隔离的VPC可以路由互通,满足用户不同VPC业务互通需求。
- VM1发送arp请求,arp报文根据流表到达br-tun,br-tun给予VM1到达VM2的MAC信息。此时arp报文不出宿主机(Host1);
- 以太网封装,在封装的时候源MAC为DVR1:MAC,目的MAC 为SG1:MAC;由于外层目的MAC 因为不清楚目的地址的位置,所以将报文送往自己tunnel_bearing网关,因此外层目的MAC 为网关MAC;
**注意:**VPC 子网网关为分布式网关,所以在每台宿主机上针对子网网关都有一个MAC,同一个子网网关不同的宿主机上DVR:MAC 是不同的。
**注意:**vRouter在VPC内注册生成的SG Port 口的MAC(SG-A MAC),vRouter 会给每个VPC创建一个SG口。如下图红框所示:
- br-tun将报文处理完后,通过查询找到br-physnet网桥上的tunnel_bearing网卡口,在这个网桥上打上tunnel_bearing的VLAN,然后从对应的物理网卡将报文发出;
- 报文被网络节点接收,vRouter 网络节点不仅包含流表还有路由信息,这些信息都是由控制平面下发的,包含有不同的VPC下VM对应的MAC以及外层封装信息。通过对路由表的查询,将目的MAC地址修改为VM2的MAC地址,并将报文发出。
- 目的宿主机收到报文后,tunnel_bearing 会剥离VLAN,送到br-tun,然后拆除VXLAN封装,拆封时替换源MAC为自身网关MAC(GW2),最后基于MAC学习通过网桥送到目的主机(VM2)。