在配置了网络虚拟化(Overlay)的网络结构中,处于Overlay网络中的虚机数据包的封装和MAC地址学习和传统物理网络(Underlay)相似又不尽相同。除了我们了解Overlay网络需要借助Underlay网络进行二次封装之外,其MAC地址学习过程也相对要曲折一些。这些MAC地址学习过程取决于多种因素:
在配置了网络虚拟化(Overlay)的网络结构中,处于Overlay网络中的虚机数据包的封装和MAC地址学习和传统物理网络(Underlay)相似又不尽相同。除了我们了解Overlay网络需要借助Underlay网络进行二次封装之外,其MAC地址学习过程也相对要曲折一些。这些MAC地址学习过程取决于多种因素:
虚机是否在同一虚拟子网?
虚机是否在同一虚机网络的不同虚拟子网?
虚机是否运行于同一台物理机?
虚机是否运行在不同的物理机?
不同的场景,虚机之间学习对方的MAC地址,以及在互相学习到对方的MAC地址后何封装数据包都不尽相同?接下来我们详细分析以下5种不同场景:
虚机在同一虚拟子网(VSID相同),运行在同一台主机;
虚机在同一虚机网络的不同虚拟子网里(RDID相同,VSID不同),运行在同一台主机;
虚机在同一虚机网络的不同虚拟子网里(RDID相同,VSID不同),运行在不同的主机;
虚机在同一虚拟子网(VSID相同),运行在不同主机,未启用动态地址学习;
虚机在同一虚拟子网(VSID相同),运行在不同主机,启用了动态地址学习;
在上文(http://www.epubit.com.cn/article/1260)中讨论了SDN Overlay 网络中虚机数据包的转发的三个场景1),2)和3),今天我们将继续讨论第4)和第5)个场景。
有关于微软网络虚拟化HNV的相关概念,如RDID、VSID、虚机网络、虚拟子网、默认网关等,可以参考http://www.epubit.com.cn/article/1021 和http://www.epubit.com.cn/article/988 进一步了解 。
我们接着第4)个场景,如图1所示。我们在一个虚拟子网里创建了两台虚机,分配了同一个子网(192.168.188.0/24)的IP地址:
VM1的IP地址为192.168.188.2,MAC地址为MACvm1
VM2的IP地址为192.168.188.3,MAC地址为MACvm2
此刻,这两台虚机VM1和VM2运行在不同的物理服务器,未启用动态IP地址学习,那么VM1和VM2之间如何学习对方的MAC地址以及在互相学习到对方的MAC地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据包转发流。
所有在本地且VSID为11111的虚机
HNVFilter
注意:这种场景描述了NVGRE/VXLAN二次封装的过程和较为完整的HNV工作流程,我们需要强调几点:
如果没有启用动态IP地址学习,即使目标虚机不在本地Hyper-V主机上,ARP也是由HNVFilter处理而不会广播到虚拟交换机以外的网络。
在物理链路(也即传输网络)上,物理网络基于外部数据包(PA地址和物理机MAC地址)转发数据包,物理链路对内部原始数据包(CA IP地址和MAC地址)没有察觉。
数据包通过NVGRE/VXLAN进行二次封装,但是封装对于源虚机和目标虚机来说完全是透明的,意味着虚机不能感知到数据的二次封装和拆封。
我们接着第5)个场景,如图2所示。我们在一个虚拟子网里创建了两台虚机,分配了同一个子网(192.168.188.0/24)的IP地址:
VM1的IP地址为192.168.188.2,MAC地址为MACvm1
VM2的IP地址为192.168.188.3,MAC地址为MACvm2
此刻,这两台虚机VM1和VM2运行在不同的物理服务器,和第4个场景不同的是,在VM之间首次通信时,需要启用动态IP地址学习以补充CA和PA以及MAC地址查询表,在有了该查询表以后,虚机之间的通信就和场景4)一样了。
那么,这种场景下VM1和VM2之间如何学习对方的MAC地址以及在互相学习到对方的MAC地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据包转发流。
所有在本地且VSID为11111的虚机
HNVFilter
注意:以上这个场景就是虚机在从未通信时,借助启用动态IP地址学习的特性进行MAC地址学习和转发数据包,我们需要强调以下几点:
在启用了动态IP地址学习后,HNV封装ARP请求数据包,ARP请求数据包通过单播进行传输,并且也需要通过NVGRE/VXLAN进行二次封装。
目的虚机在数据包流中生成实际ARP应答。
源和目的Hyper-V主机都没有CAMAC/IP和PA MAC/IP地址对,所以在数据包流发生过程中这些地址对动态查询将被添加,并通知VMM创建了新的查找记录。