sdnoverlay网络中虚机数据包的转发

author author     2022-09-06     113

关键词:

在配置了网络虚拟化(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相同),运行在不同主机,启用了动态地址学习;

        本文我们将先讨论1),2)和3),并在接下来的文章继续讨论第4)和第5)个场景,有关于微软网络虚拟化HNV的相关概念,如RDID、VSID、虚机网络、虚拟子网、默认网关等,可以参考http://ichbinleo.blog.51cto.com/11948851/1902265http://ichbinleo.blog.51cto.com/11948851/1903866  进一步了解 。


我们先看第一个场景,如图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运行在同一台物理服务器,那么VM1和VM2之间如何学习对方的MAC地址以及在互相学习到对方的MAC地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据包转发流。
    1. VM1要和VM2通信,需要学习到对方的MAC地址。因此,VM1发送ARP消息查询 VM2 的MAC地址。
    2. Hyper-V虚拟交换机记录VM1连接的端口和MAC地址,并广播ARP消息到:
        ① 所有在本地且VSID为11111的虚机
        ② HNV Filter(HNV过滤器)
    3. 由于VM2的VSID与VM1一样同为11111,因此VM2在接收到ARP广播后,返回自己的MAC地址信息给Hyper-V交换机,Hyper-V虚拟交换机记录下VM2连接的端口和MAC地址,并将ARP响应转发给VM1。
    4. VM1学习到VM2的MAC地址MACvm2 后,封装数据包(目的IP为VM2的IP, 目的MAC地址为VM2的MAC地址)并发送到Hyper-V虚拟交换机。
    5. Hyper-V虚拟交换机接收到数据包后,虚拟交换机获取到源虚机(VM1)网卡上的VSID(11111),并将VSID信息封装为带外(OOB)数据。
    6. Hyper-V虚拟交换机基于RDID和VSID进行访问控制判断,得知目标VM2的RDID与VSID和VM1的RDID与VSID一致后,再将数据包转发给虚机VM2。
    7. VM2收到数据包,完成此次数据的发送和接收。

    注意: Hyper-V 虚拟交换机应用了基于VSID和RDID的访问控制策略,VSID ACL在Hyper-V虚拟交换机内部发生,Hyper-V虚拟交换机把VSID信息封装成OOB数据,然后基于OOB数据所提供的VSID进行访问控制。因为虚机的虚拟网卡具有指定的VSID信息,源和目的虚机的VSID相同或者在同一个虚机网络(RDID)时,HNV访问控制列表才允许互相之间的访问。目标和源虚机在同一台物理机上运行时,虚机之间发送数据包并不需要通过NVGRE/VXLAN二次封装,HNV Filter并不参与数据包的转发。

 

        第2个场景,如图2所示。我们在一个虚机网络里创建了2个虚拟子网(分别为172.16.188.0/24和192.168.188.0/24),然后在每个虚拟子网中各自创建1台虚机,分配了各自子网的的IP地址:
    VM1的IP地址为192.168.188.2,MAC地址为MACvm1 
    VM2的IP地址为172.16.188.2,MAC地址为MACvm2

技术分享

        此刻,这两台虚机VM1和VM2运行在同一台物理服务器,那么VM1和VM2之间如何学习对方的MAC地址以及在互相学习到对方的MAC地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据包转发流。
    1. VM1要和VM2通信,需要学习到对方的MAC地址。但是VM1和VM2不在同一个子网,所以VM1要学习的是默认网关的MAC地址,而不是VM2的MAC地址。
    2. Hyper-V虚拟交换机收到VM1发送ARP数据包后,记录VM1连接的端口和MAC地址,然后将ARP广播到HNV Filter。
    3. HNV Filter返回默认网关的MAC地址MACDFGW给虚拟交换机, MACDFGW就是HNV Filter自身。
    4. VM1学习到默认网关的MAC地址为MACDFGW,其VSID为11111 (默认网关的MAC地址MACDFGW包含在OOB数据里)。
    5. VM1封装数据包,目的IP为VM2的IP地址,目的MAC地址为默认网关的MAC地址MACDFGW ,数据包先发送到默认网关。
    6. 接着数据包被默认网关转发到Hyper-V虚拟交换机,Hyper-V虚拟交换机获取到源虚机(VM1)网卡上的VSID(11111),并将VSID信息封装成带外(OOB)数据。
    7. 在Hyper-V交换机做进一步数据包转发之前,HNV Filter先检查源虚机VM1和目的虚机VM2的RDID是否一致,如果2者的RDID不同,那么数据包将会被丢弃。
    8. HNV Filter检索查找记录(VirtulizationLookupRecord)来确定目的虚机VM2的PA地址,如果找不到目的虚机的PA地址,数据包将会被丢弃。在这种情况下,目标虚机VM2的PA地址就是本地HNV Filter的PA地址。HNV Filter重写数据包以将目的MAC地址更改为VM2的MAC地址MACvm2。
    9. 同时,HNV Filter更新数据包中的OOB数据,将VSID从11111更改为22222。
    10. Hyper-V虚拟交换机基于RDID和VSID进行访问控制判断,得知目标VM2的RDID和VM1的RDID一致,然后将数据包转发给虚机VM2。
    11. VM2收到数据包,完成此次数据的发送和接收。

   注意:在此场景下,因为虚机处于不同VSID里,HNV起到分布式路由的作用,需要注意以下几点:
 数据包里的GRE Key/VNID里只能容下一个VSID,所以GRE只会将目标虚机的VSID放置在GRE Key/VNID里进行传输。
 如果目标和源虚机在同一台物理机上运行时,虚机之间发送数据包并不需要通过NVGRE/VXLAN二次封装。
 和2台虚机在相同的VSID的情况不同的是,2台虚机在不同VSID的情况下,HNV Filter 参与数据包的转发,因为HNV Filter承担起默认网关的角色,也即HNV的分布式路由功能。
 在承担默认网关的时候,HNV Filter 更新数据包的VSID和目标MAC地址,将其匹配到目标虚机的VSID和MAC地址 。

 

            第3个场景,如图3所示。我们在一个虚机网络里创建了2个虚拟子网(分别为172.16.188.0/24和192.168.188.0/24),然后在每个虚拟子网中各自创建1台虚机,分配了各自子网的的IP地址:
          VM1的IP地址为192.168.188.2,MAC地址为MACvm1
    VM2的IP地址为172.16.188.2,MAC地址为MACvm2 

技术分享


        此刻,这两台虚机VM1和VM2运行在不同的物理服务器,那么VM1和VM2之间如何学习对方的MAC地址以及在互相学习到对方的MAC地址后如何封装数据包呢?接下来我们详细地分析这一场景的数据流。
    1. VM1要和VM2通信,需要学习到对方的MAC地址。但是VM1和VM2不在同一个子网,所以VM1要学习的是自己连接的虚拟交换机的默认网关的MAC地址,而不是VM2的MAC地址。
    2. Hyper-V虚拟交换机收到VM1发送ARP数据包后,记录VM1连接的端口和MAC地址,然后将ARP广播到HNV Filter。
    3. HNV Filter返回默认网关的MAC地址MACDFGW , MACDFGW就是HNV Filter自身。
    4. VM1学习到默认网关的MAC地址为MACDFGW ,其VSID为11111 (默认网关的MAC地址MACDFGW包含在OOB数据里)
    5. VM1封装数据包目的IP为VM2的IP地址,目的MAC地址为默认网关的MAC地址MACDFGW,数据包先发送到默认网关。
    6. 接着数据包被发送到Hyper-V虚拟交换机,Hyper-V虚拟交换机获取到源虚机(VM1)网卡上的VSID(11111),并将VSID信息封装为带外(OOB)数据。
    7. HNV Filter检查VM1和VM2的网络是否具有同样的RDID,如果2者的RDID不同,那么数据包将会被丢弃 
    8. HNV Filter使用查找记录来确定目的虚机VM2的PA地址,如果找不到目的虚机的PA地址,数据包将会被丢弃。
    9. HNV Filter重写数据包以将目标MAC地址更改为VM2的MAC地址MACvm2。
    10. HNV Filter检索查找记录发现目的虚机的VSID(22222)和源虚机的VSID(11111)所属RDID一样。这时,NVGRE/VXLAN将目的虚机VM2的VSID(22222)、HNV Filter查找到的PA地址(10.2.41.206)连同原始数据包和其他信息做二次封装。二次封装的外部源IP地址是源虚机所对应的PA地址,外部目的IP地址是目的虚机所对应的PA地址。
    11. 二次封装的数据包通过传输网络传输到目的虚机所运行的物理机。
    12. 在传输网络上,IP地址为10.2.41.206以及MAC地址为MACPA2的Hyper-V物理机接收到数据包,然后将数据发送到该物理机的HNV Filter。
    13. HNV Filter拆开封装的数据包,获取到内部数据包(也即原始数据包)以及包含了VSID为22222的OOB数据。
    14. HNV Filter将原始数据包(在上一步获取的内部数据包)发送到具有VSID为22222的Hyper-V虚拟交换机。
    15. Hyper-V虚拟交换机按照访问控制规则将数据包发送到目标虚机VM2。

注意: 在这个情况下,数据包通过NVGRE/VXLAN进行二次封装,但是封装对于源虚机和目标虚机来说完全是透明的,意味着虚机不能感知到数据的二次封装和拆封。

        到此,我们详细讨论了3种不同的场景下,虚机数据转发流过程的详细说明。


本文出自 “黄利军的博客” 博客,谢绝转载!

sdnoverlay网络中虚机到物理机的数据包的转发

在之前我们讨论了SDNOverlay网络中5个不同场景下虚机数据包如何转发,今天我们将继续讨论处于Overlay网络中的虚机如何与物理机进行数据转发。有关于微软网络虚拟化HNV的相关概念,如RDID、VSID、虚机网络、虚拟子网、默认网关... 查看详情

软件定义网络基础---sdn数据平面

主要介绍SDN架构和转发模型一:传统网络设备(一)传统设备控制平面和数据平面(二)数据平面的任务数据平面对数据包的处理,主要通过查询由控制平面所生成的转发信息表来完成(三)传统网络数据平面数据包的处理流程... 查看详情

单播反向路径转发urpf

...p; 建议一下两种情况使用严格模式:1、仅有一条进出网络的连接;2、满足要求的单宿主客户与核心网络连接。      ?松散模式(loose):仅检查数据包的源地址是不是在FIB中,不检查源地址是不是由最... 查看详情

5g网络学习——5g网络中数据包转发模型(未完待续)

3GPPTS29.244介绍了控制层面和用户层面节点之间的接口主要介绍了数据包转发模型及其内部一系列操作。目录1.定义缩写2数据包转发模型2.1数据包检测规则(PDR)2.2使用报告的规则(URR,usagereportingrule)2.3转发... 查看详情

什么是网关(gateway)?

网关(Gateway)就是一个网络连接到另一个网络的“关口”。按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关;实质上是一个网络通向其他网络的IP地址在没... 查看详情

gatewayip是啥

网关(Gateway)就是一个网络连接到另一个网络的“关口”。按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。那么网关到底是什么呢?网关实质上是一... 查看详情

fiscobcospbft网络优化(代码片段)

....0优化了PBFT消息转发机制和Prepare包的结构,尽量减少网络中冗余的数据包,提升网络效率。PBFT消息转发优化为了保证节点断连情况下共识消息包能到达所有节点,FISCOBCOSPBFT共识模块采用了消息转发机制,优化前... 查看详情

网络数据包最大长度mtu分片转发https://blog.csdn.net/singular2611/article/details/52513406

1、数据链路层对数据帧的长度都有一个限制,也就是链路层所能承受的最大数据长度,这个值称为最大传输单元,即MTU。以以太网为例,这个值通常是1500字节。2、对于IP数据包来讲,也有一个长度,在IP包头中,以16位来描述IP... 查看详情

iptables指南(代码片段)

...NAT和连接跟踪处理。mangle:用于修改数据包的内容nat:用于网络地址转换,可以修改数据包的源地址或目标地址filter:iptables的默认表,可以抛弃或接受数据包表中的规则构成了链:PREROUTING:来自网络接口(网卡)的数据包首先会经过PREROUT... 查看详情

路由器

用于网络互连的计算机设备。作用:实现网络互连,数据转发路由(寻址):路由表建立,刷新交换:在网桥之间转发分组数据隔离广播,指定访问规则异种网络互连子网间的速率匹配路由表:当路由器检查到包的目的IP地址时... 查看详情

windows系统命令行修改默认的ttl值不用重启的方法(代码片段)

...从0开始编号,即0~31。TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字... 查看详情

软件定义网络基础---openflow流表(代码片段)

一:流表(一)流的概念我们把同一时间经过同一网络中,具有某种共同特征或属性的数据,抽象为一个流比如:我们将访问同一个地址的数据视为一个流流一般是由网络管理员定义的,可以根据不同的流执行不同的策略,在Ope... 查看详情

5g网络学习——5g网络中数据包转发模型(未完待续)

3GPPTS29.244介绍了控制层面和用户层面节点之间的接口主要介绍了数据包转发模型及其内部一系列操作。目录1.定义缩写2数据包转发模型2.1数据包检测规则(PDR)2.2使用报告的规则(URR,usagereportingrule)2.3转发... 查看详情

静态路由及默认路由详解

...路由器的工作原理1.1路由解释路由器工作在OSI参考模型的网络层,它的重要作用就是为数据包选择最佳路径,最终送达目的地。路由:从源主机到目标主机的转发过程。路由技术:为了尽可能的提高网络访问速度,就需要有一个... 查看详情

socket编程。怎么实现数据包的转发?c语言版的。

...发?我也不知道····只好复制一份···共同学习~~要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,writ... 查看详情

neutron相关知识(代码片段)

Neutron对虚拟三层网络的实现是通过其L3Agent(neutron-l3-agent)。该Agent利用LinuxIP栈、route和iptables来实现内网内不同网络内的虚机之间的网络流量,以及虚机和外网之间网络流量的路由和转发。为了在同一个Linux系统上支持可能的IP... 查看详情

微软网络虚拟化hnvoverlay子网和分布式路由

虚机网络和虚拟子网      在介绍HNV工作原理之前,我们有必要了解下组成HNV的原子网络——VMNetwork(虚机网络)和VirtualSubnet(虚拟子网)。HNV中,虚机网络作为租户间虚机隔离的单位,在网络虚拟化结构... 查看详情

静态路由与动态路由

...交换机:mac地址、mac地址表(转发数据的依据)。三层(网络层)——路由器:IP地址、路由表(数据转发表)。 一、路由表的主要作用:决定设备的三层数据包的转发关系。目标网络能匹配路由表,从相应接口转发;若不... 查看详情