关键词:
在配置了网络虚拟化(Overlay)的网络结构中,处于Overlay网络中的虚机数据包的封装和MAC地址学习和传统物理网络(Underlay)相似又不尽相同。除了我们了解Overlay网络需要借助Underlay网络进行二次封装之外,其MAC地址学习过程也相对要曲折一些。这些MAC地址学习过程取决于多种因素:
虚机是否在同一虚拟子网?
虚机是否在同一虚机网络的不同虚拟子网?
虚机是否运行于同一台物理机?
虚机是否运行在不同的物理机?
不同的场景,虚机之间学习对方的MAC地址,以及在互相学习到对方的MAC地址后何封装数据包都不尽相同?接下来我们详细分析以下5种不同场景:
虚机在同一虚拟子网(VSID相同),运行在同一台主机;
虚机在同一虚机网络的不同虚拟子网里(RDID相同,VSID不同),运行在同一台主机;
虚机在同一虚机网络的不同虚拟子网里(RDID相同,VSID不同),运行在不同的主机;
虚机在同一虚拟子网(VSID相同),运行在不同主机,未启用动态地址学习;
虚机在同一虚拟子网(VSID相同),运行在不同主机,启用了动态地址学习;
在上文(http://ichbinleo.blog.51cto.com/11948851/1942694)中讨论了SDN Overlay 网络中虚机数据包的转发的三个场景1),2)和3),今天我们将继续讨论第4)和第5)个场景。有关于微软网络虚拟化HNV的相关概念,如RDID、VSID、虚机网络、虚拟子网、默认网关等,可以参考http://ichbinleo.blog.51cto.com/11948851/1902265 和http://ichbinleo.blog.51cto.com/11948851/1903866 进一步了解 。
本文我们接着第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到:
所有在本地且VSID为11111的虚机
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到:
所有在本地且VSID为11111的虚机
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创建了新的查找记录。
本文出自 “黄利军的博客” 博客,谢绝转载!
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地址、路由表(数据转发表)。 一、路由表的主要作用:决定设备的三层数据包的转发关系。目标网络能匹配路由表,从相应接口转发;若不... 查看详情