openstack之Neutron网络模式vlan,gre,vxlan详解
第一:neutron openvswitch + vlan虚拟网络
一:基础知识
vlan基础知识
1.vlan介绍
1.1:首先说下lan,LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接LAN 中的计算机。(一个 LAN 表示一个广播域)
vlan:(Virutal LAN) 将同一个LAN上的用户在逻辑上分成多个虚拟局域网,换句话说,一个带有 VLAN 功能的switch 能够同时处于多个 LAN 中,每个vlan中的主机连接交换机的端口是access口,从而保证了交换机只在同一个vlan中转发包
1.2:IEEE 802.1Q 标准定义了 VLAN Header 的格式。它在普通以太网帧结构的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 数据,其中包括 12-bits 的 VLAN ID。VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。
vlan数据帧格式介绍:
TPID(Tag Protocol Identifier,标签协议标识)值规定为0x8100。设备缺省采用协议规定的TPID值,交换机通过TPID来确定数据帧是否附加基于IEEE802.1Q的VLAN信息。
TCI(Tag Control Information,标签控制信息)字段分为Pri、CFI和VLAN三部分。Pri表示报文优先级(也称1p优先级、COS或1q优先级),CFI(Canonical Format Indicator)标识MAC地址在不同传输介质中是否以标准格式进行封装,通常为0(标准格式)。Vlan ID标识该报文所属的VLAN编号,取值范围为 0~4095,一般0和4095保留(中兴设备Vid=0表示priority-tagged帧)。
1.3 带vlan的交换机端口划分:
Access port:这些端口被打上了 VLAN Tag。离开交换机的 Access port 进入计算机的以太帧中没有 VLAN Tag,这意味着连接到 access ports 的机器不会觉察到 VLAN 的存在。离开计算机进入这些端口的数据帧被打上了 VLAN Tag。
Trunk port: 两台或者多台交换机通过一个根线连接,线的两头都是trunk口,可以转发多个vlan信息。
2.vlan类型
基于port的vlan(数据帧中不包含vlan tag,vlan信息从交换机的端口pvid上得知,交换机转发包也基于此)
基于tagged vlan(数据帧中包含vlan tag,vlan信息从数据帧内包含的vlan信息,交换机需要有对该数据帧拆包/封包的能力,即连接到这种端口的网络设备必须是8021.Q)
3.vlan的不足
VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。
VLAN 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。
VLAN 操作需手工介入较多,这对于管理成千上万台机器的管理员来说是难以接受的。
以上上中在小公司,用在小规模的云平台服务完全是可以的,但是每一个小公司都有一颗做大的心嘛,所以还是不提倡的
交换机基础知识
1.交换机工作原理:
交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接收接口发送出去(也就是广播)。
1.mac地址:
mac地址表:在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。
mac地址学习:
1)主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机
2)交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。
3)交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。
4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机2都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。
5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。
总结:交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口
2.arp原理:
主机A与主机B在同一网段
1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。
2)当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。
3)当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。
4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。
主机A与主机B不在同一网段
不在同一网段的话,就需要借助路由器了
1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。
2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。
3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。
4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。
5)此时HostB才会收到来自HostA发送的数据。
总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。
二:openvswitch+vlan组网
1.物理网络vlan配置
管理网络,用于 OpenStack 节点之间的通信,假设 VLAN ID 范围为 50 - 99.
数据网络,用于虚拟机之间的通讯。由于Vlan模式下,租户建立的网络都具有独立的 Vlan ID,故需要将连接虚机的服务器的交换机端口设置为 Trunk 模式,并且设置所允许的 VLAN ID 范围,比如 100~300。
外部网络,用于连接外部网络。加上 VLAN ID 范围为 1000-1010。
- 如果该物理交换机接到一个物理路由器并做相应的配置,则数据网络可以使用这个物理路由器,而不需要使用 Neutron 的虚拟路由器。
- 如果不使用物理的路由器,可以在网络节点上配置虚拟路由器。
2.Neutron 配置生效的过程:
配置就不详细说了,后续将会整理成一个完成的部署博客,下面简述下Neutron配置生效的过程。
当 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秒。
3.Neutron代码的实现流程
boot虚拟机的过程。nova依次会
1调用neutron rest api申请一个或多个port,neutron会根据数据库中的配置进行分配
2计算机节点上,nova调用ovs-vsctl命令将虚拟机的VIF被plug到br-int上
3启动虚拟机
neutron l2 agent的循环任务每隔2秒会
1)调用ovs-vsctl list-ports命令获取br-int上的port,在根据上次保存的历史记录,生成所有变更端口的列表(包括添加的,删除的,更新的)
2)为每一个待处理端口,根据其ID从DB中取出详细信息
3)针对每一个增加或变更的port设置local vlan tag,调用命令ovs-ofctl mod-flows命令来设置br-tun或者物理的bridge的flow rules;并设置db中其状态为up
4)针对每一个被删除的port,设置db中其状态为down
4.Neutron的vlan模式的虚拟网络
4.1一个计算节点上的网络示例:
1) Neutron 使用 Open vSiwtch。
2) 一台物理服务器,网卡 eth1 接入物理交换机,预先配置了网桥 br-eth1。
3) 创建了两个 neutron VLAN network,分别使用 VLAN ID 101 和 102。
4) 该服务器上运行三个虚机,vm1 和 vm2 分别有一个网卡接入 network 1;vm2 和 vm3 分别有一个网卡接入 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进入的数据帧做相反的处理
4.2连接到同一个物理交换机上的两个计算节点的内部通信
两个物理节点,compute01上面有两个云主机,都是vlan1,compute02上面有两个云主机,vm3为vlan1,vm4位vlan2。
4.2.1:同一个物理节点上,同一个vlan之间的通信
例如:vm1:10.0.0.2----》vm2:10.0.0.3
相同物理服务器上的虚机, VM1 访问VM2,当数据包到达br-int的时候,先查询br-int的mac地址表,如果有记录,则直接找到VM2,如果没有记录的话,需要经过 br-int 进行广播,寻找,这个时候vm2收到mac地址,一看是我的,他就回给br-int,br-int就会把mac地址缓存起来,并回给vm1即可
4.2.2:不同物理节点上,同一个vlan之间的通信
例如:vm1:10.0.0.2---》vm3:10.0.0.4
4.2.3:同一个物理节点上,不同vlan之间的通信
例如:vm3:10.0.0.4---》vm4:10.0.1.2 或者
4.2.4:不同物理节点上,不同vlan之间的通信
例如:vm1:10.0.0.2---》vm 4:10.0.1.2
第二:neutron openvswitch + gre/vxlan虚拟网络
一.gre介绍
二.vxlan介绍
三.gre与vxlan的对比
四: Neutron 通过 OVS 对 GRE 和 VXLAN 的支持
五:介绍几个典型的流程案例
案例一:同一个主机上同一个子网内虚机之间的通信过程
案例二:不同主机上同一个子网内的虚机之间的通信过程
案例三:同一个主机上不同子网内虚机之间的通信流程
案例三:不同主机上不同子网内的虚机之间的通信流程
案例四: 虚机访问外网
案例五: 虚机发送DHCP请求
参考资料:http://20161215.blog.51cto.com/2276215/1766742
openstack之Neutron网络模式vlan,gre,vxlan详解的更多相关文章
- neutron 中 flat vlan gre vxlan的区别
In a flat network, everyone shares the same network segment. For example, say 2 tenants are sharing ...
- openstack之Neutron网络虚拟化
第一:为什么需要网络虚拟化? 一.数据中心的现有网络不能满足云计算的物理需求: 互联网行业数据中心的基本特征就是服务器的规模偏大.进入云计算时代后,其业务特征变得更加复杂,包括:虚拟化支持.多业务承载 ...
- openstack核心组件——neutron网络服务(8)
云计算openstack核心组件——neutron网络服务(8) 一.neutron 介绍: Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云 ...
- openstack核心组件——neutron网络服务 抓取ip(9)
云计算openstack核心组件——neutron网络服务(9) 一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务 ...
- OpenStack云平台网络模式及其工作机制
转自:http://openstack.csdn.net/content.html?arcid=2808381 OpenStack云平台网络模式及其工作机制 网络,是OpenStack的部署中最容易出 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- [转]网络性能评估工具Iperf详解(可测丢包率)
原文链接:安全运维之:网络性能评估工具Iperf详解:http://os.51cto.com/art/201410/454889.htm 参考博文:http://linoxide.com/monito ...
- 入木三分学网络第一篇--VRRP协议详解第一篇(转)
因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...
- BS模式的模型结构详解
编号:1004时间:2016年4月12日16:59:17功能:BS模式的模型结构详解 URL:http://blog.csdn.net/icerock2000/article/details/4000 ...
随机推荐
- JSP基础知识➣语法整理(二)
A.脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式:<% 代码片段 %>,但是不能包含文件的方法和变量的声明 B.J ...
- [bzoj3522][bzoj4543][POI2014]HOTEL
题解: 比较难的一道题目 首先考虑暴力dp 我们会发现构成这种形状只有三种情况 1.三个点的lca相同 2.两个点lca相同,第三个点是lca的祖先 3.两个点lca相同,第三个点是lca祖先的子树中 ...
- 【C#】使用OWIN创建Web API
OWIN的介绍 OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准 ...
- day10.函数进阶
函数的命名空间 从python解释器开始执行之后,就在内存中开辟了一个空间,每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来. 但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存, ...
- Python学习(二十三)—— 前端基础之jQuery
转载自http://www.cnblogs.com/liwenzhou/p/8178806.html 一.jQuery入门 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQue ...
- HDU2853 Assignment KM
原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html 题目传送门 - HDU2853 题意概括 (来自谷歌翻译) 题解 这是一道好题. 我们首先 ...
- 20165235 实验二Java面向对象程序设计
20165235 Java面向对象程序设计 姓名:祁瑛 学号:20165235 班级:1652 实验课程:JAVA程序设计 实验名称:Java面向对象程序设计 实验时间:2018.4.14 指导老师: ...
- Java常用API及Math类
一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...
- 问题 J: Palindromic Password ( 2018组队训练赛第十五场) (简单模拟)
问题 J: Palindromic Password 时间限制: 3 Sec 内存限制: 128 MB提交: 217 解决: 62[提交][状态][讨论版][命题人:admin] 题目描述 The ...
- 附006.harbor.cfg配置文件详解
一 必须参数 需要在配置文件中设置这些参数.如果用户更新它们harbor.cfg并运行install.sh脚本以重新安装Harbor,它们将生效. hostname:目标主机的主机名,用于访问UI和注 ...