华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识

1.vNIC

​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC,每个 NIC 可以是多个 vNIC 的基础。

​ 将 vNIC 附加到虚拟机时,Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的 vNIC( vNIC 本身)以及 vNIC 所基于的物理主机 NIC。特别是,当 vNIC 附加到虚拟机时,会在 vNIC 所基于的物理主机 NIC 上创建新的 vNIC 和 MAC 地址。然后,在虚拟机附加了 vNIC 后第一次启动虚拟机时,libvirt 为 vNIC 分配 PCI 地址。然后,MAC 地址和 PCI 地址用于获取虚拟机中的 vNIC 的名称(如 eth0)。

2.OVS

​ OVS(OpenvSwitch)是一个高质量、多层的虚拟交换软件。它的目的是通过编程扩展支持大规模网络自动化,同时还支持标准的管理接口和协议。

​ OVS官方的定位是要做一个产品级质量的多层虚拟交换机,通过支持可编程扩展来实现大规模的网络自动化。设计目标是方便管理和配[虚拟机网络,检测多物理主机在动态虚拟环境中的流量情况。针对这一目标,OVS具备很强的灵活性。可以在管理程序中作为软件switch运行,也可以直接部署到硬件设备上作为控制层。

3.OpenStack与Neutron

​ OpenStack是一个云平台管理的项目,它不是一个软件,它是由几个主要的组件组合起来,为公有云、私有云和混合云的建设与管理提供软件的开源项目。OpenStack的主要目标是管理数据中心的资源,简化资源分配。它管理计算、存储、网络三部分资源。华为FusionSphere OpenStack就是基于OpenStack的架构开源代码进行开发的。

​ Neutron是OpenStack的SDN组件,用于实现网络虚拟化和自动化。Neutron的应用分为两大类:基于OpenStack的应用、基于SDN的应用。前者是在云的场景下,与OpenStack其他部件一起配合,为用户提供云服务。后者是在SDN场景下,与SDN Controller一起配合,为用户提供网络服务。

3.qbr与br-int

​ qbr是Quantum Bridge的缩写,Quantum是OpenStack网络组件的前一个商标名,由于版权原因现改名为Neutron。

​ br-int是Integration Bridge(综合网桥)的缩写。

​ qbr与br-int都是Bridge。qbr的实现载体是Linux Bridge,br-int的实现载体是OVS。需要注意的是Linux Bridge不是qbr的唯一实现载体,OVS也不是br-int的唯一实现载体,也可以用其他的实现方式来替换它们。只不过这样的实现方式是当前OpenStack解决方案的比较经典的方式而已。qbr与br-int之间,通过veth pair连接,VM与qbr之间,通过tap连接。VM与qbr之间只有1个tap,及1个tap分别挂接在VM和qbr之上。

​ vm通常需要挂载两层Bridge,及VM先接qbr(Linux Bridge),再接br-int(OVS)。如果只有一个qbr,由于qbr仅仅是一个Linux Bridge,它的功能不能满足实际场景的需求;如果只有一个br-int,由于br-int实际是一个OVS,而OVS现在还不支持基于iptables规则的安全组功能,且OpenStack(HCS)是要基于iptables规则来实现安全组功能。所以OpenStack(HCS)引入qbr其目的主要就是利用iptables来实现security group功能(qbr有时候也被称为安全网桥),而引入br-int,才是真正为了实现一个综合网桥的功能。

4.br-ethx

​ br-ethx是一个Bridge,也是一个OVS,它的全称是:Bridge-Ethernet-External。br-ethx负责与"外"部通信,这里的"外"部指的是Host外部,但是却又要属于一个Network(这个Network指的是Neutron的概念)的内部,指的是VLAN内部。

​ br-ethx与br-int之间的接口是veth pair。值得注意的是,br-ethx上的接口是一个真正的Host的网卡接口(NIC Interface,Interface in Network Interface Card)。网卡接口是网卡物理口上的一个Interface。

5.br-tun

​ br-tun是一个Bridge,也是一个OVS,它的全称是:Bridge-Tunnel。这里的Tunnel指的是VXLANTunnel。

​ br-tun用于连接br-int网桥和linux网桥,实现物理环境的互联。

6.vlan与vxlan

​ VLAN(Virtual Local Area Network,虚拟局域网)和 VxLAN(Virtual eXtential LAN,虚拟可拓展局域网)。二者的作用都是为了实现网络隔离,具体的作用原理与区别本文不做阐述。

​ VLAN中对应的是br-ethx,而VXLAN中对应的是br-tun,二者都是OVS,两者的差别不是实现组件的差别,而是组件所执行的功能的差别。br-ethx所执行的功能是一个普通二层交换机的功能,br-tun所执行的是VXLAN中VTEP(VXLAN Tunneling End Point,VXLAN隧道终结点)的功能。

7.QinQ

​ QinQ(802.1Q-in-802.1Q)也称为VLAN Stacking(堆叠VLAN)或Double VLAN(双VLAN),由IEEE 802.1ad标准定义,是一项扩展VLAN空间的技术,通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的目的。它将VLAN标记封装为两层---私有网络的内部标记和公共网络的外部标记。

QinQ特性使网络最多可以提供4094*4094个VLAN,满足城域网对VLAN数量的需求,它主要解决了如下几个问题:

  1. 缓解日益紧缺的公网VLAN ID资源问题。
  2. 用户在规划自己的私网VLAN ID时,不会与公网VLAN ID发生冲突。
  3. 为小型城域网或企业网提供一种较为简单的二层VPN解决方案。

​ 如下图所示,我们规划了两个VLAN:VLAN100、VLAN200,现在让位于Host1的VM1访问位于Host2的VM3,在用户看来可能就是VLAN100内的一个访问,但在Host看来,其实是VLAN10与VLAN30的一次访问。

​ 首先我们要清楚,4台虚拟机的VLAN ID分别变成了10、20、30、40,与我们用户自己划分的VLAN ID 100、200完全不是一个概念,这就涉及内外视角所看到的VLAN ID的不同。

VM ID 用户视角VLAN ID(外部VLAN) Host视角VLAN ID(内部VLAN)
VM1 100 10
VM2 200 20
VM3 100 30
VM4 200 40

​ 一台虚拟机之所以会有两个VLAN ID,是为了防止在公网中VLAN ID之间产生冲突,不同用户在私网内规划VLAN可能不会进行统一的规划,当不同VLAN划分方式的私网用户通过公网相互访问时就会对Host造成困扰,到底要听谁的规划规则?所以Host干脆谁的也不听了,它自身再宏观地规划一个巨大的VLAN。当不同Host之间进行通信时,先将外VLAN ID 转化成内VLAN ID (内外VID转换),查询到目标后在将内VLAN ID 转化成外VLAN ID(内外VID转换)。

8.VID

VID是一种抽象的称呼,用于划分端口,它的含义随着网络类型的不同而不同:在VLAN网络中,VID指的就是VLAN ID;在VXLAN,VID指的就是VNI;在GRE网络中,VID指的就是GRE Key。

8.1 VLAN类型网络出报文内外VID的转换

如上图,以VM1为例,报文从VM1发出,从br-ethx离开Host1:

  1. 报文从VM1的A1端口发出,为Untag报文;
  2. 报文从B1端口进入qbr1,再从C1端口离开qbr1,也是Untag报文;
  3. 报文从D1端口进入br-int,在D1端口,报文被打上标签,VLAN ID = 10;
  4. 报文从E端口离开br-int,此时报文VID = 10;
  5. 报文从F端口进入br-ethx,在F端口,报文的标签被转变为VLAN ID = 100;
  6. 报文从G端口离开Host,VLAN ID = 100。
8.2 VLAN类型网络入报文内外VID的转换

如上图,以VM3为例,报文从Host2进入,从qbr1进入VM3:

  1. 报文从Host进入到br-ethx,是Tag报文,VID = 100;
  2. 报文从br-ethx离开,在离开的端口F,报文VID转变为30;
  3. 报文从E端口进入br-int,此时报文VID = 30;
  4. 报文进入br-int后,从D1端口被转发出去,在离开D1时,被剥除Tag,变成Untag报文;
  5. 报文从C1端口进入qbr1,然后从B1端口离开,再从A1端口进入VM3,始终为Untag报文。
8.3 VXLAN类型网络出报文内外VID的转换

如上图,以VM1为例,报文从VM1发出,从br-tun离开Host:

  1. 报文从VM1的A1端口发出,为Untag报文;
  2. 报文从B1端口进入qbr1,再从C1端口离开qbr1,也是Untag报文;
  3. 报文从D端口进入br-int,在D端口,报文被打上标签,VLAN ID = 10;
  4. 报文从E端口离开br-int,此时报文VID = 10;
  5. 报文从F端口进入br-tun,此时报文VID = 10;
  6. 报文从G端口离开Host,在G端口,报文被从VLAN封装为VXLAN,并且VNI = 100。
8.4 VXLAN类型网络入报文内外VID的转换

如上图,以VM3为例,报文从Host2进入,从qbr1进入VM3:

  1. 报文来到Host进到br-tun,为VXLAN报文,VNI = 100;
  2. 报文在br-tun的G端口,被转换为VLAN报文,VLAN ID = 30;
  3. 报文从br-tun离开,一直到进入br-int,都是VLAN报文,VLAN ID = 30;
  4. 报文从br-int D1端口离开br-int,报文被剥去Tag,变成Untag报文;
  5. 报文从C1端口进入qb1,然后再从B1端口离开,再从A1端口进入VM1,始终为Untag报文。
相关推荐
青松@FasterAI5 分钟前
【动手学大模型开发】VSCode 连接远程服务器
服务器·ide·vscode
Hy行者勇哥11 分钟前
HTTP, AMQP, MQTT之间的区别和联系是什么?华为云如何适配?
网络·网络协议·http·华为云
Linux运维老纪19 分钟前
交换机之配置系统基本信息(Basic Information of the Configuration System for Switches)
linux·网络·mysql·华为·云计算·运维开发
努力学习的小廉1 小时前
深度理解linux系统—— 了解操作系统
linux·运维·服务器
玩电脑的辣条哥1 小时前
一台服务器已经有个python3.11版本了,如何手动安装 Python 3.10,两个版本共存
服务器·python·python3.11
敲上瘾1 小时前
基于Tcp协议的应用层协议定制
linux·运维·服务器·网络·c++·网络协议·tcp/ip
莹莹学编程—成长记2 小时前
string的模拟实现
服务器·c++·算法
曹天骄5 小时前
100个用户的聊天系统:轮询 vs WebSocket 综合对比
网络·websocket·网络协议
简单.is.good5 小时前
【计算机网络】IP地址
网络·tcp/ip·计算机网络
桃花岛主709 小时前
STUN协议 与 TURN协议
网络·网络协议