网络虚拟化之FlowVisor:网络虚拟层(下)
在前面两篇文章:网络虚拟化之FlowVisor:网络虚拟层(上)和网络虚拟化之FlowVisor:网络虚拟层(中)中分别介绍了FLowVisor的特性和实现,三连载的最后一篇介绍虚拟网络的隔离机制。
虚拟化的一个重要元素是切片之间的隔离,因为不同资源的隔离机制是不相同的,接下来将分别描述。
1. 带宽隔离
FLowVisor可以通过标记数据包的VLAN优先级比特位来利用现存的交换机带宽隔离特性。VLAN标签拥有三个比特域,PCP(VLAN Priority Code Point)有一个将数据包映射到八个优先级队列中的其中一个的标准机制,OpenFlow协议里面有对VLAN标签和优先级比特的管理,所以可以给流中的所有数据包一个优先级。
因为,为了增强带宽隔离,FLowVisor重写了所有切片的转发表,加了一个“set VLAN priority”的操作,将优先级置为八个优先级队列中的某一个,一个虚拟网络实例中的所有流根据资源分配策略映射到相应的流组(流组需要网络管理员通过CLI定义)
使用VLAN PCP比特位并不是FLowVisor所固有的,而是为了和商用硬件协调工作所选择的短期变通方案。
2. 拓扑隔离
控制器通过OpenFlow协议发现网络中的结点和链路,在非虚拟网络中,当一个网络设备连接到控制器的TCP监听端口的时候,控制器就可以发现这个设备。FLowVisor作为交换机和控制器中间的一个代理,他只代理用户虚拟网络中的交换机和控制器的连接,同理,用于罗列交换机所有物理端口的OpenFlow消息,也会被FLowVisor拦截,修改为只有虚拟网络中有的端口。
需要注意的是LLDP消息的处理,在提高SDN控制器的拓扑发现性能(通过改进逻辑)这篇文章中我已经解释了SDN网络中拓扑发现原理和LLDP数据包的详解,这个消息他有特定的格式,所以FLowVisor拦截住这个消息,给其打上标签,标签为虚拟网络号,当他们再被交换机收到传送到控制器的时候,可以根据标签发送到相应的虚拟网络。
3. 交换机CPU隔离
商用交换机上的CPU都是典型的低功耗嵌入式处理器,因此很容易过载,在大多数交换机硬件中,一个高负载的CPU会导致严重的网络破坏。比如,一个CPU高负载的情况下,硬件转发数据会继续进行,但是交换机会停止响应控制器的OpenFlow请求,导致LLDP链路发现协议超时,让交换机误以为网络连接非常不稳定,网络变得不可用。
交换机的CPU负载主要被下面四种程序瓜分,这四个负载来源需要不同的隔离机制:
- 产生新流到达的消息:在OpenFlow交换机中,如果一个数据包无法匹配流表,就会向控制器发送PacketIn消息,这个过程消耗了一部分处理资源,如果新流比较多,消息产生很频繁,CPU资源就会耗尽。为了防止饿死,FLowVisor会追踪新流产生的消息到达速率,如果速率超过了阈值,FLowVisor插入一条转发流表规则在一个时间段内丢弃所有的数据包,就这样,FLowVisor利用OpenFlow协议限制了新流的速度。
- 处理控制器的请求:对于每个虚拟网络实例,FLowVisor通过限制OpenFlow消息速率来限制CPU消耗,因为不同类型的消息消耗不同的CPU资源,因此这个工作现在还略显不足。
- “慢路径”转发:除了很快的专用的硬件转发路径,数据包通过“慢路径”转发,这当然会消耗一部分CPU资源,而这个消耗显然是不确定的。FLowVisor通过重写多个转发规则,将他们分开,分别为为一次数据包转发事件来防止控制器一次插入多个“慢路径”转发规则,比如OpenFlow的PacketOut消息,他可以一次下发很多转发规则,但是FLowVisor可以拦截,将其分为多个。这样,“慢路径”数据包会通过上面提到的两条机制:新流产生的消息和控制器的请求来限速。
- 维持内部状态:所有的网络设备会使用CPU去更新他们的内部计算器、处理事件等等,所以必须留有足够的CPU给交换机“记账”。FLowVisor通过限制上面三点的CPU消耗来保障交换机有足够的资源执行内部功能。
和带宽隔离一样,CPU隔离机制不是FLowVisor固有的设计,更像是一个解决现在硬件抽象问题的应急措施,这个方面未来还需要做很多工作。
4. 流空间隔离
每个虚拟网络只能处理他们流空间中的数据流,FLowVisor对OpenFlow消息进行重写,确保每个切片之恩那个控制他自己的流,不能影响别的切片的流。当然,不是所有的规则都能够被重写来满足某个切片的流空间,FLowVisor只能让规则更加详细精确,比如在网络虚拟化之FlowVisor:网络虚拟层(中)这篇文章中用于描述FLowVisor工作原理的例子中,如果Bob的控制器想创建一个规则去影响所有的流,FLowVisor应该重写规则让其只影响TCP数据流。但是FLowVisor不会重写影响22端口的数据流的规则,让其只影响80端口(TCP数据流),在这种情况下,FLowVisor会给控制器发送一个错误消息。
5. 流表项隔离
FLowVisor会统计每个虚拟网络使用的流表项数目,确保其不会超过一个预先给定的值。对于控制器插入到交换机的的每个规则,FLowVisor会给其计数器加一,如果某个流表到期失效,计数器会减一。由于硬件约束,一些交换机会内部扩展规则来满足多个输入端口,FLowVisor需要处理这个情况。OpenFlow协议为FLowVisor协议提供了一个机制来精确的列出交换机中的所有流表项,当控制器超出了流表项预先给定的值,任何新的规则插入都只会收到“table full”的错误提醒消息。
6. OpenFlow控制通道隔离
除了上面提到的所有物理资源外,OpenFlow控制器通道本身也必须虚拟化和隔离。比如,OpenFlow协议中的所有消息包含一个独一无二的传输ID,FLowVisor必须重写这些传输ID以确保不同控制器的消息不会使用同一个ID,类似的,如果一个数据包的处理需要交换机做决定,需要先将数据包存储在交换机队列中,OpenFlow协议使用一个32位的整数去标识这个队列中的不同数据包。FLowVisor需要确保每个交换机只能访问交换机队列中他自己的数据包。
到这里,将FLowVisor的由来,实现原理,隔离机制都分析了一遍,对于未来网络中必不可少的虚拟层有了一些了解和新的想法思路,我相信,书和论文是拓展思路的不二法门,相信FLowVisor只是网络虚拟层的一个先驱,未来将会有更加完善,更加功能强大,更加智能化的系统产生,希望自己能够在这些方面有所贡献。
网络虚拟化之FlowVisor:网络虚拟层(下)的更多相关文章
- 网络虚拟化之FlowVisor:网络虚拟层(中)
上一篇博客网络虚拟化之FlowVisor:网络虚拟层(上)主要对比了计算机虚拟化和网络虚拟化,引出了FLowVisor网络虚拟层,介绍了其一些特性,这篇博文深入讲解FLowVisor的技术. 一. 概 ...
- 网络虚拟化之FlowVisor:网络虚拟层(上)
概念解释:切片:虚拟网络的一个实例 一. 网络虚拟化(虚拟网络) 人类社会的发展在很大方面得益于自然界,飞机受益于鸟,雷达受益于蝙蝠等等,所以专门有个学科为仿生学就是研究和模仿生物的特殊本质,利用生物 ...
- 删除Windows中隐藏的物理网卡和网络虚拟化失败后的虚拟网卡
Windows环境下,在更换硬件服务器主板和网卡等硬件.恢复操作系统或者网络虚拟化失败后,可能会出现网卡方面的问题.例如,设备管理器中多了不应该存在的网卡:因命名冲突无法重命名当前网络连接:IP地址冲 ...
- Windows Server 2016-Hyper-V网络虚拟化概述
在 Windows Server 2016 和虚拟机管理器中,Microsoft 提供的端到端网络虚拟化解决方案. 有构成了 Microsoft 的网络虚拟化解决方案的五个主要组件: Windows ...
- 《重构网络:SDN架构与实现》Chapter7 SDN与网络虚拟化 随笔
参考: <重构网络:SDN架构与实现>,作者:杨泽卫.李呈. Chapter7 SDN与网络虚拟化 结构 7.1 网络虚拟化 7.1.1 为什么需要网络虚拟化技术 7.1.2 网络虚拟化 ...
- 从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨
以前的大二层技术,一般是在物理网络底层使用IS-IS路由技术,再在此基础之上,实现数据中心网络的二层扩展,如公有的Trill.SPB技术和Cisco私有的OTV.Fabricpath技术:前沿一些的网 ...
- Hyper-V 网络虚拟化技术细节
Hyper-V 网络虚拟化技术细节 适用对象:Windows Server 2012 R2 服务器虚拟化能让多个服务器实例在同一台物理主机上同步运行,但各个服务器实例都是相互独立的. 每台虚拟机的运作 ...
- 数据中心网络技术新贵:VXLAN与园区网络虚拟化
摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...
- 网络虚拟化之linux虚拟网络基础
1 linux虚拟网络基础 1.1 Device 在linux里面devic(设备)与传统网络概念里的物理设备(如交换机.路由器)不同,Linux所说的设备,其背后指的是一个类似于数据结构.内核模块或 ...
随机推荐
- SpringMVC 异常记录
在使用SpringMVC中开发过程中,遇到的一些坑,简单记录一下. 1.The request sent by the client was syntactically incorrect 从字面意思 ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细(转载)
电子商务(电销)平台中订单模块(Order)数据库设计明细 以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- ...
- hadoop2.7.0实践- WordCount
环境要求 说明:本文档为wordcount的mapreduce job编写及执行文档. 操作系统:Ubuntu14 x64位 Hadoop:Hadoop 2.7.0 Hadoop官网:http://h ...
- 每天进步一点点——Ganglia的Python扩展模块开发
转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701245 注:本文涉及到的代码都在centos 6.5 64bit系统上通过验证,Gan ...
- SICP 1.23-1.26体会
1.23 代码修改非常easy, 关键是时间. 电脑上算了一下. 100000000下面全是0. 開始还以为代码写错了. 最后没办法, 用1e10 1e11来计算. 发现比 1e11 1e12快1.2 ...
- Win10怎么打开或关闭自动维护功能
- Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)
摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...
- maven打包classes为jar
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-p ...
- django rest framework(10)
1.权限 2.认证 3.访问频率限制 4.序列化 5.路由 6.视图 7.分页 8.解析器 9.渲染器 10.版本 面试题:你写的类都继承过哪些类? class Vive(object): class ...
- 转:python之如何在某文件中调用其他文件内的函数
假设名为A.py的文件需要调用B.py文件内的C(x,y)函数 情形1:在同一目录下, (1) import B if __name__ == "__main__": B.C(x, ...