SDN Overlay 网络中虚机数据包的转发(2)

举报
G-washington 发表于 2019/12/16 16:37:20 2019/12/16
【摘要】 在配置了网络虚拟化(Overlay)的网络结构中,处于Overlay网络中的虚机数据包的封装和MAC地址学习和传统物理网络(Underlay)相似又不尽相同。

在配置了网络虚拟化(Overlay)的网络结构中,处于Overlay网络中的虚机数据包的封装和MAC地址学习和传统物理网络(Underlay)相似又不尽相同。除了我们了解Overlay网络需要借助Underlay网络进行二次封装之外,其MAC地址学习过程也相对要曲折一些。这些MAC地址学习过程取决于多种因素:


  1. 虚机是否在同一虚拟子网?

  2. 虚机是否在同一虚机网络的不同虚拟子网?

  3. 虚机是否运行于同一台物理机?

  4. 虚机是否运行在不同的物理机?


不同的场景,虚机之间学习对方的MAC地址,以及在互相学习到对方的MAC地址后何封装数据包都不尽相同?接下来我们详细分析以下5种不同场景:


  1. 虚机在同一虚拟子网(VSID相同),运行在同一台主机;

  2. 虚机在同一虚机网络的不同虚拟子网里(RDID相同,VSID不同),运行在同一台主机;

  3. 虚机在同一虚机网络的不同虚拟子网里(RDID相同,VSID不同),运行在不同的主机;

  4. 虚机在同一虚拟子网(VSID相同),运行在不同主机,未启用动态地址学习;

  5. 虚机在同一虚拟子网(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地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据包转发流。


VM1要和VM2通信,需要学习到对方的MAC地址。因此,VM1发送ARP消息查询 VM2 的MAC地址。

Hyper-V虚拟交换机广播ARP到:


  1. 所有在本地且VSID为11111的虚机

  2. HNVFilter


HNV Filter将ARP响应转发给VM1,VM1学习到VM2的MAC地址是MACVM2

VM1封装原始数据包,目的IP是VM2的IP地址,目的MAC地址为MACvm2。

原始数据包发送到VM1所在的物理机的Hyper-V虚拟交换机,虚拟交换机获取到VM1所包含的VSID为11111。

Hyper-V虚拟交换机看到MACVM2并不在本地Hyper-V虚拟交换机的记录中,于是将数据包发送给HNV Filter。

HNV Filter检索查找记录,获得目标虚机的VSID是11111,CA地址为192.168.188.3,目标MAC地址为MACVM2,以及对应的PA地址。然后将这些获取到的信息和原始数据包使用NVGRE/VXLAN进行二次封装。

二次封装的数据包通过传输网络发送到目标虚机所在的Hyper-V物理机。

IP地址为10.2.41.206以及MAC地址为MACPA2的Hyper-V物理机接收到数据包,然后发送到自己虚拟交换机的HNV Filter。

HNV Filter拆开封装的包,获取到内原始数据包以及包含了VSID为11111的OOB数据。

HNV Filter将原始数据包发送到具有VSID为11111的Hyper-V虚拟交换机。

Hyper-V虚拟交换机按照访问控制策略将IP数据包发送到目标虚机VM2。


 


注意:这种场景描述了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地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据包转发流。


VM1要和VM2通信,需要学习到对方的MAC地址。因此,VM1发送ARP消息查询 VM2 的MAC地址。

Hyper-V虚拟交换机广播ARP到:


  1. 所有在本地且VSID为11111的虚机

  2. HNVFilter


但是,HNV Filter在查询表里并未找到 VM2的MAC地址

于是,HNV 封装一个ARP请求数据包,然后单播到每个PA地址,数据包里包含 VSID=111111的OOB数据和相关的L2记录。

HNV Filter将ARP请求数据包通过NVGRE/VXLAN进行二次封装。

二次封装的数据包通过传输网络传输到目的Hyper-V物理机。

IP地址为10.2.41.206以及MAC地址为MACPA2的Hyper-V物理机接收到数据包,然后将其发送到自己的HNV Filter。

目的物理机的HNV Filter拆开二次封装的数据包,获取到即原始数据包以及包含了VSID为11111的OOB数据。

HNV Filter将原始数据包发送到具有VSID为11111的Hyper-V虚拟交换机。

Hyper-V虚拟交换机按照访问控制策略将原始数据包(也即ARP请求数据包)发送到目标虚机。

如果目的虚机网卡和ARP所请求的MAC地址匹配,那么虚拟将将ARP应答发送给Hyper-V虚拟交换机。

Hyper-V虚拟交换机同时附加上VSID为11111的OOB数据

因为该ARP响应数据包不是发送给本地虚机,所以Hyper-V虚拟交换机将ARP请求直接传递给HNV Filter。

HNV Filter看到该ARP数据包后如果发现CA的MAC/IP地址和PA的MAC/IP地址对动态IP记录不存在,便会加上这条CA-PA配对记录。接着发送一条新动态记录的通知给VMM,以便VMM将更新的记录发送给其他Hyper-V主机。

HNV Filter在查找记录里找到目标虚机VM1的MAC地址(MACVM1),然后将ARP应答数据包通过NVGRE/VXLAN进行二次封装。

二次封装的数据包通过传输网发送到源虚机所在的Hyper-V物理机。

IP地址为10.2.41.204以及MAC地址为MACPA1的Hyper-V物理机接收到数据包,然后发送到HNV Filter

HNV Filter拆开二次封装的数据包,获得原始数据包(也即ARP应答数据包),然后添加CA MAC/IP和PA MAC/IP动态地址对记录。接着发送一条新动态记录的通知给VMM,以便VMM将更新的记录发给其他Hyper-V主机。Hyper-V虚拟交换机接着将ARP应答数据包发送给VM1。

至此,VM1已经学习到VM2的MAC地址为MACVM2。

VM1封装原始数据包,目的IP地址为VM2的IP地址,目的MAC地址为MACvm2。

该数据包发送到Hyper-V虚拟交换机,虚拟交换机获取到源虚机(VM1)网卡上的VSID(11111),并将VSID信息组织为带外(OOB)数据。

Hyper-V虚拟交换机看到MACVM2 并不在本地Hyper-V虚拟交换机上,因此将数据包传递给HNV Filter。

HNV Filter检索查找记录,获得目标虚机的VSID是11111,CA地址为192.168.188.3,目标MAC地址为MACVM2,以及对应的PA地址为10.2.41.206。然后将这些获取到的信息和原始数据包使用NVGRE/VXLAN进行二次封装。

二次封装的数据包通过传输网络发送到目的虚机(VM2)所在的Hyper-V物理机。

IP地址为10.2.41.206以及MAC地址为MACPA2的Hyper-V物理机接收到数据包,然后发送到HNV Filter。

HNV Filter拆开二次封装的包,获取到原始数据包,以及包含了VSID 为11111的OOB数据。

HNV Filter将原始数据包转发到具有VSID为11111的Hyper-V虚拟交换机。

Hyper-V虚拟交换机按照访问控制策略将原始数据包发送到目标虚机VM2。


 


注意:以上这个场景就是虚机在从未通信时,借助启用动态IP地址学习的特性进行MAC地址学习和转发数据包,我们需要强调以下几点:


在启用了动态IP地址学习后,HNV封装ARP请求数据包,ARP请求数据包通过单播进行传输,并且也需要通过NVGRE/VXLAN进行二次封装。


目的虚机在数据包流中生成实际ARP应答。


源和目的Hyper-V主机都没有CAMAC/IP和PA MAC/IP地址对,所以在数据包流发生过程中这些地址对动态查询将被添加,并通知VMM创建了新的查找记录。


本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF946D200001DC7B1B7310907040

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。