openstack项目【day24】:VLAN模式
本节内容
- 一 二层基础知识
- 1.1 vlan介绍
- 1.1.1:vlan的含义
- 1.1.2:vlan的类型
- 1.1.3:vlan的不足
- 1.2 : 二层交换的基础知识
- 1.2.1:二层交换机最基本的功能
- 1.2.2:ARP协议
- 二 使用OpenvSwitch(OVS)+VLAN组网
- 2.1 物理VLAN网络配置
- 2.2 Neutron配置
- 2.2.1 配置进行
- 2.2.2 配置生效过程
- 2.3:创建虚拟网络和子网
- 2.3.1 创建命令
- 2.3.2 Neutron代码实现
- 2.4:Neturon虚拟网络
一 二层基础知识
1.1 vlan介绍
本小节重点:
- vlan的含义
- vlan的类型
- 交换机端口类型
- vlan的不足
1.1.1:vlan的含义
局域网LAN的发展是VLAN产生的基础,因而先介绍一下局域网LAN
由Hub、网桥或交换机等网络设备连接同一网段内的所有节点形成局域网(LAN),通常是一个单独的广播域。
处于同一个局域网LAN之内的网络节点之间可以直接通信
处于不同局域网段的设备之间的通信则必须经过路由器才能通信。
上述传统拓扑结构的关键在于用三层设备,即路由器,来隔离不同的LAN,在网络规模增大的情况下存在两个缺陷:
1. 路由器数量需要增多,网络时延随之加长,进而导致网络数据传输速度的下降。这主要是因为数据在从一个局域网传递到另一个局域网时,必须经过路由器的路由操作: 路由器根据数据包中的相应信息确定数据包的目标地址,然后再选择合适的路径转发出去。
2. 用户是按照它们的物理连接被自然地划分到不同的用户组(广播域)中。这种分割方式并不是根据工作组中所有用户的共同需要和带宽的需求来进行的。因此,尽管不同的工作组或部门对带宽的需求有很大的差异,但它们却被机械地划分到同一个广播域中争用相同的带宽。
综上两点,必须选出一种隔离广播域的方式,兼备下述两点
1.可以不用通过路由器来隔离不同广播域
2.可以突破地理位置的限制,在逻辑上划分出不同的广播域
这就是VLAN,IEEE 802.1Q 标准定义了 VLAN Header 的格式。它在普通以太网帧结构的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 数据,其中包括 12-bits 的 VLAN ID。VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。
带 VLAN 的交换机的端口分为两类:
- Access port:这些端口被打上了 VLAN Tag。离开交换机的 Access port 进入计算机的以太帧中没有 VLAN Tag,这意味着连接到 access ports 的机器不会觉察到 VLAN 的存在。离开计算机进入这些端口的数据帧被打上了 VLAN Tag。
- Trunk port: 有多个交换机时,组A中的部分机器连接到 switch 1,另一部分机器连接到 switch 2。要使得这些机器能够相互访问,你需要连接两台交换机。 要避免使用一根电缆连接每个 VLAN 的两个端口,我们可以在每个交换机上配置一个 VLAN trunk port。Trunk port 发出和收到的数据包都带有 VLAN header,该 header 表明了该数据包属于那个 VLAN。因此,只需要分别连接两个交换机的一个 trunk port 就可以转发所有的数据包了。通常来讲,只使用 trunk port 连接两个交换机,而不是用来连接机器和交换机,因为机器不想看到它们收到的数据包带有 VLAN Header。
单台交换机上划分VLAN
多台交换机上划分VLAN
1.1.2:vlan的类型
(1)基于端口的 VLAN (untagged VLAN - 端口属于一个VLAN,数据帧中没有VLAN tag)
这种模式中,在交换机上创建若干个VLAN,在将若干端口放在每个VLAN 中。每个端口在某一时刻只能属于一个VLAN。一个 VLAN 可以包含所有端口,或者部分端口。每个端口有个PVID (port VLAN identifier)。这种模式下,一个端口上收到的 frame 是 untagged frame,因此它不包含任何有关 VLAN 的信息。VLAN 的关系只能从端口的 PVID 上看出来。交换机在转发 frame 时,只将它转发到相同 PVID 的端口。
如上图所示,连接两个交换机的同一个 VLAN 中的两个计算机需要通信的话,需要在两个交换机之间连两根线:
- 一根从 Switch A 端口4 到 Switch B 端口 4 (VLAN 1)
- 一根从 Switch A 端口8 到 Switch B 端口 8 (VLAN 2)
(2)Tagged VLANs (数据帧中带有 VLAN tag)
这种模式下,frame 的VLAN 关系是它自己携带的信息中保存的,这种信息叫 a tag or tagged header。当交换机收到一个带 VLAN tag 的帧,它只将它转发给具有同样 VID 的端口。一个能够接收或者转发 tagged frame 的端口被称为 a tagged port。所有连接到这种端口的网络设备必须是 802.1Q 协议兼容的。这种设备必须能处理 tagged frame,以及添加 tag 到其转发的 frame。
上图中,两个交换机上的端口8 支持 VLAN 1 和 2, 因此一根线就可以了实现跨交换机的同VLAN 内的计算机互相通信了。
1.1.3:vlan的不足
- VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。
- VLAN 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。
- VLAN 操作需手工介入较多,这对于管理成千上万台机器的管理员来说是难以接受的。
1.2 : 二层交换的基础知识
1.2.1:二层交换机最基本的功能
二层交换机最基本的功能包括:
- MAC 地址学习:当交换机从它的某个端口收到数据帧时,它将端口的 ID 和帧的源 MAC 地址保存到它的内部MAC表中。这样,当将来它收到一个要转发到该 MAC 地址的帧时,它就知道直接从该端口转发出去了。
- 数据帧转发:交换机在将从某个端口收到数据帧,再将其从某个端口转发出去之前,它会做一些逻辑判断:
- 如果帧的目的 MAC 地址是广播或者多播地址的话,将其从交换机的所有端口(除了传入端口)上转发。
- 如果帧的目的MAC地址在它的内部MAC表中能找到对应的输出端口的话(MAC 地址学习过程中保存的),将其从该端口上转发出去。
- 对其它情况,将其从交换机的所有端口(除了传入端口)上转发。
- 加 VLAN 标签/去 VLAN 标签:
- 帧接收:从 trunk port 上收到的数据帧必须是加了标签的。从 access port 上收到的数据帧必须是没有加标签的,否则该帧将会被抛弃。
- 帧处理:根据上述转发流程决定其发出的端口。
- 帧发出:从 trunk port 发出的帧是加了标签的。从 access port 上发出的帧必须是没加标签的。
默认情况下,交换机的所有端口都处于VLAN 1 中,也就相当于没有配置 VLAN。该机制说明如下:
- PC A 发一个帧到交换机的 1 端口,其目的MAC地址为 PC B 的 MAC。
- 交换机比较其目的 MAC 地址和它的内部 MAC Table,发现它不存在(此时表为空)。在决定泛洪之前,它把端口 1 和 PC A 的 MAC 地址存进它的 MAC Table。
- 交换机将帧拷贝多份,分别从2和3端口发出。
- PC B 收到该帧以后,发现其目的 MAC 地址和他自己的 MAC 地址相同。它发出一个回复帧进入端口3。
- 交换机将 PC B 的 MAC地址和端口3 存在它的 MAC 表中。
- 因为该帧的目的地址为PC A 的 MAC 地址它已经在 MAC 表中,交换机直接将它转发到端口1,达到PC A。
配置了 VLAN 的交换机的该机制类似,只不过:
(1)MAC 表格中每一行有不同的 VLAN ID。做比较的时候,拿传入帧的目的 MAC 地址和 VLAN ID 和此表中的行数据相比较。如果都相同,则选择其 Ports 作为转发出口端口。
(2)如果没有吻合的表项,则将此帧从所有有同样 VLAN ID 的 Access ports 和 Trunk ports 转发出去。
1.2.2:ARP协议
二层网络使用 MAC (media access control address)地址作为硬件的唯一标识。基于 TCP/IP 协议的软件使用 ARP 来将 IP 地址转化为 MAC 地址。
1. 目的 IP 地址在同一网段的话
- SRC MAC: A 的 MAC
- DST MAC:FF:FF:FF:FF:FF:FF
- SRA IP: A 的 IP
- DST IP: B 的 IP
- SRC MAC: B 的 MAC
- DST MAC:A 的 MAC
- SRA IP: B 的 IP
- DST IP: A 的 IP

- SRC MAC: A 的 MAC
- DST MAC:Router 的 interface 1 的 MAC 地址
- SRA IP: A 的 IP
- DST IP: B 的 IP
- SRC MAC: Router interface 2 的 MAC
- DST MAC:B 的 MAC
- SRA IP: A 的 IP
- DST IP: B 的 IP
二 使用OpenvSwitch(OVS)+VLAN组网
Neutron 基于 VLAN 模式的 tenant network 同 provider network 一样,都必须使用物理的 VLAN 网络。
2.1 物理VLAN网络配置
本例子中,交换机上划分了三个 VLAN 区域:
- 管理网络,用于 OpenStack 节点之间的通信,假设 VLAN ID 范围为 50 - 99.
- 数据网络,用于虚拟机之间的通讯。由于Vlan模式下,租户建立的网络都具有独立的 Vlan ID,故需要将连接虚机的服务器的交换机端口设置为 Trunk 模式,并且设置所允许的 VLAN ID 范围,比如 100~300。
- 外部网络,用于连接外部网络。加上 VLAN ID 范围为 1000-1010。
关于网段之间的路由:
- 如果该物理交换机接到一个物理路由器并做相应的配置,则数据网络可以使用这个物理路由器,而不需要使用 Neutron 的虚拟路由器。
- 如果不使用物理的路由器,可以在网络节点上配置虚拟路由器。
2.2 Neutron配置
2.2.1 配置进行
- 控制节点上:
- # vim /etc/neutron/plugins/ml2/ml2_conf.ini
- [ml2]
- type_drivers = flat,vlan
- tenant_network_types = vlan
- mechanism_drivers = openvswitch
- [ml2_type_flat]
- flat_networks = external
- [ml2_type_vlan]
- network_vlan_ranges = physnet1:100:300
网络节点上:
- #为连接物理交换机的网卡 eth2 和 eth3 建立 OVS physical bridge,其中,eth2 用于数据网络,eth3 用于外部网络
- ovs-vsctl add-br br-eth2
- ovs-vsctl add-br br-ex
- ovs-vsctl add-port br-eth2 eth2
- ovs-vsctl add-port br-ex eth3
- # vim /etc/neutron/plugins/ml2/ml2_conf.ini
- [m12]
- type_drivers = flat,vlan
- tenant_network_types = vlan
- mechanism_drivers = openvswitch
- [ml2_type_flat]
- flat_networks = external
- [ml2_type_vlan]
- network_vlan_ranges = physnet1:100:300,external:1000:1010
- [ovs]
- bridge_mappings = physnet1:br-eth2,external:br-ex
计算节点上:
- #为连接物理交换机的网卡 eth2 建立 OVS physical bridge
- ovs-vsctl add-br br-eth2
- ovs-vsctl add-port br-eth2 eth2
- # vim /etc/neutron/plugins/ml2/ml2_conf.ini
- [m12]
- type_drivers = vlan
- tenant_network_types = vlan
- mechanism_drivers = openvswitch
- [ml2_type_vlan]
- network_vlan_ranges = physnet1:100:300
- [ovs]
- bridge_mappings = physnet1:br-eth2
注意:
- network_vlan_ranges 中的 VLAN ID 必须和物理交换机上的 VLAN ID 区间一致。
- bridge_mappings 中所指定的 bridge 需要和在个节点上手工创建的 OVS bridge 一致。
然后重启相应的 Neutron 服务。
2.2.2 配置生效过程
当 Neutron L2 Agent (OVS Agent 或者 Linux Bridge agent)在计算和网络节点上启动时,它会根据各种配置在节点上创建各种 bridge。以 OVS Agent 为例,
(1)创建 intergration brige(默认是 br-int);如果 enable_tunneling = true 的话,创建 tunnel bridge (默认是 br-tun)。
(2)根据 bridge_mappings,配置每一个 VLAN 和 Flat 网络使用的 physical network interface 对应的预先创建的 OVS bridge。
(3)所有虚机的 VIF 都是连接到 integration bridge。同一个虚拟网络上的 VM VIF 共享一个本地 VLAN (local VLAN)。Local VLAN ID 被映射到虚拟网络对应的物理网络的 segmentation_id。
(4)对于 GRE 类型的虚拟网络,使用 LSI (Logical Switch identifier)来区分隧道(tunnel)内的租户网络流量(tenant traffic)。这个隧道的两端都是每个物理服务器上的 tunneling bridge。使用 Patch port 来将 br-int 和 br-tun 连接起来。
(5)对于每一个 VLAN 或者 Flat 类型的网络,使用一个 veth 或者一个 patch port 对来连接 br-int 和物理网桥,以及增加 flow rules等。
(6)最后,Neutron L2 Agent 启动后会运行一个RPC循环任务来处理 端口添加、删除和修改。管理员可以通过配置项 polling_interval 指定该 RPC 循环任务的执行间隔,默认为2秒。
2.3:创建虚拟网络和子网
2.3.1 创建命令
- s1@controller:~$ neutron net-create net1 (或者 Admin 用户运行 neutron net-create net1 --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 101。效果相同)
- Created a new network:
- +---------------------------+--------------------------------------+
- | Field | Value |
- +---------------------------+--------------------------------------+
- | admin_state_up | True |
- | id | dfc74f44-a9f2-4497-a53d-1723804a49a8 |
- | name | net1 |
- | provider:network_type | vlan |
- | provider:physical_network | physnet1 |
- | provider:segmentation_id | 101 |
- | router:external | False |
- | shared | False |
- | status | ACTIVE |
- | subnets | |
- | tenant_id | 74c8ada23a3449f888d9e19b76d13aab |
- +---------------------------+--------------------------------------+
- s1@controller:~$ neutron subnet-create subnet1 10.0.0.0/24 --name net1
2.3.2 Neutron代码实现
做完以上的步骤之后,用户就可以在 subnet 上 boot 虚机了。
boot 虚机的过程中,Nova 依次会:
(1)调用 Neutron REST API 申请一个或者多个 port。Neutron 会根据数据库中的配置来进行分配。
(2)在计算节点上,Nova 调用 ovs-vsctl 命令将虚机的 VIF 被 plug 到 br-int 上。
(3)启动虚机。
Neutron L2 Agent 的循环任务每隔两秒会依次:
(1)调用 ”ovs-vsctl list-ports“ 命令获取到 br-int 上的 port,再根据上次保存的历史数据,生成所有变更端口的列表(包括添加的、更新的、删除的端口)。比如:
{'current': set([u'04646b21-78a0-429e-85be-3167042b77be', u'592740b0-0768-4e57-870d-6495e6c22135']), 'removed': set([]), 'added': set([u'04646b21-78a0-429e-85be-3167042b77be', u'592740b0-0768-4e57-870d-6495e6c22135'])}
(2)为每一个待处理端口,根据其 ID 从 DB 中取得其详细信息。比如:
{u'profile': {}, u'admin_state_up': True, u'network_id': u'e2022937-ec2a-467a-8cf1-f642a3f777b6', u'segmentation_id': 4, u'device_owner': u'compute:nova', u'physical_network': phynet1, u'mac_address': u'fa:16:3e:fd:ed:22', u'device': u'592740b0-0768-4e57-870d-6495e6c22135', u'port_id': u'592740b0-0768-4e57-870d-6495e6c22135', u'fixed_ips': [{u'subnet_id': u'13888749-12b3-462e-9afe-c527bd0a297e', u'ip_address': u'91.1.180.4'}], u'network_type': u'vlan'}
(3)针对每一个增加或者变更的 port,设置 local VLAN Tag;调用 ”ovs-ofctl mod-flows “ 命令来设置 br-tun 或者 物理 bridge 的 flow rules;并设置 db 中其状态为 up。
(4)针对每一个被删除的 port,设置 db 中其状态为 down。
2.4:Neturon虚拟网络
(1)一个计算节点上的网络实例
它反映的网络配置如下:
- Neutron 使用 Open vSiwtch。
- 一台物理服务器,网卡 eth1 接入物理交换机,预先配置了网桥 br-eth1。
- 创建了两个 neutron VLAN network,分别使用 VLAN ID 101 和 102。
- 该服务器上运行三个虚机,虚机1 和 2 分别有一个网卡接入 network 1;虚机2 和 3 分别有一个网卡接入 network 2.
Neutron在该计算节点上做的事情:
创建了OVS Integration bridge br-int。它的四个Access口中,两个打上了内部vlan Tag1,连接接入network1的两个网卡;另外两个端口打上的是vlan tag 2
创建一对patch port连接br-int和br-eth1
设置br-int中的flow rules。对从access ports进入的数据帧,加上相应的vlan tag,转发到patch port;从patch port进入的数据帧,将vlan id 101修改为1,102修改为2,再转发到相应的access ports
设置br-eth1中的flow rules。从patch port进入的数据帧,将内部vlan id 1修改为101,内部vlan id 2修改为102,再从eth1端口发出。对从eht1进入的数据帧做相反的处理
(2)再加上另一个连接到同一个物理交换机的服务器(加上 neutron 网络使用的 VLAN ID 为 100,物理 brige 为 br-eth0):
Neutron 实现了基于物理 VLAN 交换机的跨物理服务器二层虚拟网络。
(3)连接到同一物理交换机的网络节点的情况
(4)网络流向
- 不同物理服务器上的虚机,如果 VM1 和 VM2 属于同一个 tenant network 的同一个subnet,那么两者的通信直接经过 物理交换机 进行,不需要做到网络节点。如图10 所示。
- 相同物理服务器上的虚机,如果 VM1 和 VM2 属于同一个 tenant network 的同一个subnet,那么两者的通信直接经过 br-int 进行。
对其他虚机之间数据交换情形,都算作跨子网的数据流向,都需要经过网络节点中的 Router 进行 IP 包的路由。(也可以直接使用连接物理交换机的物理路由器)。
openstack项目【day24】:VLAN模式的更多相关文章
- Openstack的nova-network的vlan模式扩展
openstack的nova-network的vlan模式是可以在安装的时候,将网络划分为多个子网,每个项目一个或者多个子网进行虚拟机创建.但是他现在代码级别上不支持:如果一开始安装的环境的vlan网 ...
- VLAN 模式下的 OpenStack 管理 vSphere 集群方案
本文不合适转载,只用于自我学习. 关于为什么要用OpenStack 管理 vSphere 集群,原因可以有很多,特别是一些传统企业,VMware 的使用还是很普遍的,用 OpenStack 纳管至少会 ...
- openstack之Neutron网络模式vlan,gre,vxlan详解
第一:neutron openvswitch + vlan虚拟网络 一:基础知识 vlan基础知识 1.vlan介绍 1.1:首先说下lan,LAN 表示 Local Area Network,本地局 ...
- 深入理解 Neutron -- OpenStack 网络实现(2):VLAN 模式
问题导读 1.br-int.br-ethx的作用是什么?2.安全组策略是如何实现的?3.VLAN 模式与GRE模式有哪些不同点?流量上有哪些不同?4.L3 agent实现了什么功能? 接上篇深入理解 ...
- OpenStack neutron vlan 模式下的网络包流向
时间:2015-01-15 18:09:41 1.什么是Neutron? Neutron是OpenStack的network project ,是NaaS(networking-as-a-servic ...
- OpenStack云平台网络模式及其工作机制
转自:http://openstack.csdn.net/content.html?arcid=2808381 OpenStack云平台网络模式及其工作机制 网络,是OpenStack的部署中最容易出 ...
- VMware/KVM/OpenStack虚拟化之网络模式总结
一.VMware虚拟机网络模式 Vmware虚拟机有三种网络模式:Bridged (桥接模式).NAT (网络地址转换模式).Host-Only (仅主机模式).下面分别总结下这三种网络模式: 1. ...
- openstack项目【day23】:openstack组件介绍
本节内容 openstack介绍 openstack项目(服务名是项目名的别名) openstack运行流程 openstack各组件详解 一:openstack介绍 open ...
- VLAN模式
一 二层基础知识 1.1 vlan介绍 本小节重点: vlan的含义 vlan的类型 交换机端口类型 vlan的不足 1.1.1:vlan的含义 局域网LAN的发展是VLAN产生的基础,因而先介绍一下 ...
随机推荐
- c/c++ 继承与多态 友元与继承
问题1:类B是类A的友元类,类C是类B的友元类,那么类C是类A的友元类吗?函数fun是类B的友元函数,那么fun是类A的友元函数吗? 都不是,友元关系不能传递. 问题2:类B是类A的友元类,类C是类B ...
- chome(谷歌浏览器)上传文件崩溃/上传图片崩溃/打开浏览文件未响应 解决方案
测试解决方案:关闭搜狗输入法(我用的是搜狗输入法,若使用其他输入法,此方案也可能适用),再测试是否重现浏览器崩溃问题 可选解决方案:升级搜狗输入法(如果想 卸载输入法 也可以) 前面有段时间chome ...
- 三机互ping(自己总结)
主机与虚拟机互ping设置: 点击VMware下的[编辑]--[虚拟网络编辑器]设置如下: 屏幕剪辑的捕获时间: 2016/5/21 13:10 屏幕剪辑的捕获时间: ...
- Mac系统编译FFmpeg
转载请标明来源:我不是掌柜的博客 前言 维基百科解释:FFmpeg是一个开源软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec – 这是一个用于多个项目中音频和视频的解码 ...
- 完成一个java项目需要的一些基础
包括 1.eclipse关键字 2.文档注 3. jar包的导出与导入 一.elipse关键字 ctry+t 查看父类 ctry+鼠标光标 查看源代码 二.文 ...
- day17-异常处理
今天的内容比较少,只是单独的异常处理 开始今日份整理 1.异常 定义:异常时错误发生的信号,一旦出错,并且程序没有处理这个错误,就会抛出异常,并且程序会运行中止 2.异常的分类 2.1语法错误:pyt ...
- 深入理解 path-to-regexp.js 及源码分析
阅读目录 一:path-to-regexp.js 源码分析如下: 二:pathToRegexp 的方法使用 回到顶部 一:path-to-regexp.js 源码分析如下: 我们在vue-router ...
- 工具篇-Spark-Streaming获取kafka数据的两种方式(转载)
转载自:https://blog.csdn.net/weixin_41615494/article/details/7952173 一.基于Receiver的方式 原理 Receiver从Kafka中 ...
- Lepus搭建企业级数据库全方位监控系统
前言 Lepus(天兔)数据库企业监控系统是一套由专业DBA针对互联网企业开发的一款专业.强大的企业数据库监控管理系统,企业通过Lepus可以对数据库的实时健康和各种性能指标进行全方位的监控.目前已经 ...
- Equinox OSGi应用嵌入Jersey框架搭建REST服务
原文地址:https://www.cnblogs.com/kira2will/p/5040264.html 一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Eq ...