Ï来自FlowVisor: A Network Virtualization Layer这篇论文的理解

1. 简介

  论文讲述如何虚拟化一个网络,并描述一个特殊的系——FlowVisor

  网络虚拟化用来改善资源分配,相竞争的客户可独立控制一台共享设备。

计算机虚拟化:计算机虚拟化层有硬件抽象,支持分片、不同的客户系统共享资源。这让每个os系统觉得特闷私自享有硬件资源。推动了其上下两层的革新:

  (1)建立在连续硬件抽象上的能力促进了操作系统的发展

  (2)下层可使用不同的硬件,只要能映射到硬件抽象层(不同的硬件可使用不同的指令来优化)

  上下层都有更多的选择

对于网络:为实现类似效果

  ·应有硬件抽象层:应可以容易分片,使不同网络可同时运行在抽象层上,并且不会相互干扰,下层运行在不同的硬件上。  

  ·硬件抽象层之上:寻求新的协议、寻址格式,来运行在相同物理网络的各自分片上。使运行其上的应用最佳化,或为需要它的操作者提供特殊的服务

  ·抽象层之下:新硬件可以不同的速率、媒介、功率配置进不痛的环境中

  现状:现存网络中的设备并非为虚拟化二设计,没有通用的硬件抽象层。但特殊的技术能分割硬件资源并分层。但并不存在单一技术或抽象能虚拟化网络为一个整体。商业的交换机、路由器有私有的结构,设备制造商并没有公布他们的设计,从而只有有限的机制来改变,控制设备软件。

  FlowVisor:我们建立配置在网络中的网络虚拟化层。像是pc机上软硬件间的虚拟机监视器。

2. 网络虚拟化

  五个主要的资源划分

(1)Bandwidth(带宽):应给每个分片自己的连接带宽

(2)Topology(拓扑):每个分片应有自己的节点及其连接,这样分片才能有虚拟网络事件,如:连接失败

(3)Traffic(流量):应能联系一系列特殊的流量到一个(或多个)虚拟网络,这样这些流才能分开。(这里流量的定义很广:可以是一系列地址的包,一组用户的所有流量,可以是特殊的,如http流量)

(4)Device CPU(设备cpu):若无合适的分割将造成cpu过载,将停止转发慢路径包、更新静态计数器等;

(5)Forwarding Tables(转发表):失败的划分转发条目,降使一个分片阻碍另一分片转发包

3. FlowVisor 结构

  和传统pc机对比来理解。中间为抽象结构。

  就像操作系统用x86指令来控制底层硬件(如图所示cpu等)

  →FlowVisor用OpenFlow协议来控制底层物理网络(如图所示带宽等)

  FlowVisor支持多个客户OpenFlow控制器,每个控制器独立的享有一个分片

  特点:·FlowVisor定义一个切片为一系列运行在交换机拓扑上的流

     ·FlowVisor位于每个OpenFlow控制器及交换机之间,来保证每个客户交换机仅观察、控制所被提供的交换机

     ·划分带宽:通过分配最低数据率给一些列组成分片的流;

     ·在每个交换机上划分流表:通过追踪哪条流表项属于哪个客户控制器

  FlowVisor是OpenFlow代理实例→拦截Openflow设备与控制器间的信息。

3.1 Flowspace(流空间)

  一系列组成分片的流可以被看做,(合理的)包的头部的 整个集合空间的 子集。

  一个包头部10个字段共256比特。如果我们指定一个流来作为这特殊的256比特字符串上的匹配,这样我们就定义了256维空间(2^256)上的一个点。通过通配符,我们能定义空间中任意一个区域。(根据我的理解,简单来说就是在256由0、1组成的比特流中,任意选几位,再指定这几位上可以是0还是1,或者是都可以。这几位就定义了一个区域)。

  FlowVisor定义一个分片为一系列的流,我们可以认为一个分片被一系列的分片定义,我们称其为流空间。

3.2 FlowVisor设计目的

(1)透明

对软件、硬件都透明。原因:①虚拟化一个重要目的是为了提供在真是拓扑上设计原型、调试的能力。若控制者需注意虚拟化层,就可能使设计的控制器运行在虚拟网络,而非真实网络。

               ②把虚拟化从控制器中分离出来,可使他们独立更新、改进

(2)网络分片间因明确独立

(3)分片定义决策应丰富且可扩展

3.3系统描述

  通过一个例子来了解。

  Bob建立一个顾客控制器:HTTP负载平衡器:通过一系列服务来传播HTTP流量。控制器将作用在任意HTTP流量上,而Bob的FlowVisor策略划分网络使他仅能看到来自特定IP资源地址的流量。而顾客控制器并不知道网络被分片,他仅看到HTTP流量的子集。顾客控制器认为他能控制来自任意资源地址的所有HTTP流量中的流表项。当Bob控制器发送流表项给控制器(如:来重定向HTTP流量到特定的服务):

(1)FlowVisor截断它

(2)执行Bob的分片策略,

(3)重写流表项,使其仅含被允许的流量资源(而控制器却不知)

(4)类似的,来自交换机的信息被分类,仅发向流空间匹配此信息的客户控制器。如下图所示

  ·FlowVisor不同FlowVisor实例与物理交换机间一一映射,一个FlowVisor实例可控制多个交换机,甚至是另一个虚拟网络。

3.4分片定义策略

  分片被定义在FlowVisor上一个可插入模块。每个策略在一个配置文件中描述,也就是一个分片。

  每片的流空间通过元组的有序列表来定义(与防火墙规则相似)。每个规则描述与一个动作相关,如:allow(允许)、read-only(只读)、deny(拒绝),并以特定序列解析,执行第一个相匹配的规则。规则用来划分流空间的区域,并控制委托的特定分片。例:
  Alice是网络管理这,允许Bob来执行一个协作的HTTP负载平衡实验。Bob说服一群人一起实验。Alice想委派控制给Bob仅是那些参加实验用户的流量,并保证Alcie自身剩余产品的流量。并运行被动切片来监管整个网路的性能。据此,流空间的规则如下:

  Bob的实验网络:被定义为一系列加入实验用户的HTTP流量,所以他的网络描述中将会有一条规则,每个用户都会有。

            Allow:tcp-port:80 and ip=user_ip    

            任何来自交换机匹配这条规则的信息都将发往Bob控制器,Bob要插入流表项也将会重写为匹配这些规则

  Alice的产品网络:与Bob的网络互补,规则相反,

          Deny:tco-port: 80  and ip=user_ip      Allow:all  (允许发送转发向只要不是在Bob中)

  Alice的网络监督器: Read-only:all(被动,不影响网络产品的正常工作)

4.独立机制

4.1Bandwidth Isolation(带宽独立)

  VlAN有3比特位的标记,VLAN优先编码点(PCP)。由于OpenFlow还未提供VLAN标记及优先比特的管理。FlowVisor可通过标记它来加强独立性。

  重写所有片的转发表,加上“VLAN优先”,根据优先级将其分到8个队列之一。来自给定分片的所有流量被映射到一个流量分类中。(流量分类被资源策略规定,每个流量分类都被管理者配置)

4.2Toplogy Isolation(拓扑独立)

  无虚拟化中,网络设备主动连接控制器的TCP监听端口,这样控制就能发现新的设备。

  FlowVisor仅提供客户与在其拓扑中的交换机连接,在OpenFlow中油一条信息列出了一台交换机上可利用的物理端口。FlowVisor将其变为仅出现在其虚拟拓扑上的端口。

  ·NOX平台上,连接层发现协议(link layer discovery protocol  LLCP)信息从交换机的每个端口发出,用于发现邻居(即相邻交换机),当信息被邻居收到,它并不匹配任何规则,因此又将被送回控制器,通过编辑发送、接收交换机,控制器就能推测其连接性。由于LLCP信息有着特殊性、熟知的格式,FlowVisor拦截它,并用发送分片的ID来标记此信息。如此一来,当再次收到时就能送回到相应的分片。

4.3Switch CPU Isolation(交换机CPU的独立)

  交换机的CPU过度负载会造成网络的崩塌。例如:一个CPU过度负载,但仍会有转发发生,交换机停止回应OpenFlow请求,发现邻居协议超时,控制器就会认为连接出了问题,网络变得不安全。

  主要的负载来源:(1)产生新柳设置信息

          (2)解决控制器请求

          (3)转发“慢路径”包

          (4)内部状态的保持

  下面来一一说明

  (1)New Flow Message:

    当一个包到达交换机,没匹配上流表中的任何一个表项,新流信息将发送给控制器。这个过程会消耗交换机资源,频繁发生此现象将会使CPU资源耗尽。

    FlowVisor追踪每片的新流信息到达率,超过一定的限额,FlowVisor将插入一条转发规则来短暂丢弃这些新包,以此来限制新流信息率。

  (2)Con他roller Requests

    控制器发给交换机的请求会消耗资源。如:编辑转发表,查询统计等。

    FlowVisor限制每一片CPU消耗,通过限制其最大OpenFlow消息到达率。

  (3)Slow-Path Forwarding

    包通过“慢”的路径——那些不是“快”的专用硬件转发路径,会消耗CPU。(这个我也不是很理解)

    FlowVisor组织客户插入慢路径转发规则,重写他们为一次性转发事件。这样,慢路径包就可以通过上面所提的2种机制(即新流消息、控制器请求速率限制)来限制。

  (4)Intenel Bookkeeping

    所有网络设备用CPU来更新他们的内部计数器、进程事件等。所以必须保证留有足够CPU给交换机的记事簿。FlowVisor通过上述的速率限制来留有足够的CPU给交换机内部的功能。

  (由于带宽独立,CPU独立并非FlowVisor内在设计,而是在一个工作区范围内来解决硬件抽象)

4.4Flowspace Isolation

  每片必须被限制仅能影响其流空间中的流。

  FlowVisor通过重写信息,透明地保证每片仅控制自己的流而不影响别的流。但并非所有规则都可被重写来适应分片。FlowVisor只是通过使规则更加特殊。以前面的例子为例来说明:如果Bob控制器创造规则来影响所有的流,FlowVisor将重写规则来仅影响80端口的TCP流量。然而若规则是要影响22端口,FlowVisor不会重写这个规则来仅影响80端口。这个规则不会被改写,FlowVisor会发送错误报告给控制器,致命这个流表项不会被添加。

4.5Flow Entries ISolation

  FlowVisor统计每片的流表项数量来保证其不会超出预算。妹插入一条规则计数器加1,规则过期则计数器减1。超过给定限额将返回“标满”。

4.6OpenFlow Control Isolation

  除硬件资源外,OpenFlow控制通道本身需要被虚拟化、独立。(这个也不太理解)

  例:所有信息在OpenFlow中,包括一个独特的交易标志。FlowVisor必须重写交易ID来保证来自不同的客户的控制器不会使用相同的ID。相似的OpenFlow使用32位证书来定义缓冲区——包在队列中,转发决定在发往控制器。FlowVisor要保证每个客户控制仅能使用自己的缓冲。状态信息,例如断开端口连接,需要备份到所影响的所有分片中。虚拟化控制通道使其更加简单,因为OpenFlow仅定义16种信息类型。

5.Evaluation(评估)

5.1 Performance Overhead(性能上的额外开支)

  对于额外花销,数据路径、及控制面板并没有产生额外开销。主要产生在数据路径与控制层间的动作上,测量其常见的两种OpenFlow message:new flow and port status request messages

 (1)交换机向控制器发送新流信息:当一个到达的包没匹配到任意一条转发规则的时候,无FlowVisor的网络中时延大约是12ms,在有FlowVisor网络中大约16ms。这对于大部分用户是可接受的。

测量的方法如下图所示。设有两个接口一个用来以一定速率向交换机发送包,另一个接口连接控制通道,通过抓包的方法来测量时延。

           

 

(2)端口状态请求:是控制器送往交换机来查询特殊端口的比特,包计数器。交换机在恢复消息中返回相应的端口状态。这被认为额外开支最严重的情形:消息在交换机、控制器进程中十分简单,而FlowVisor必须编辑每片的信息来移除没有出现在这个分片虚拟拓扑结构中的端口统计。测量方法如下图:

经过测量,使用FlowVisor平均增加额外时延48ms。

5.2Isolation

  对于带宽独立的测量。一个分片发送tcp流量,一个分片发送CBR(constant bitrate)以满速率发送,在同一个连接上。入伍FlowVisor来独立带宽,CBR占大部分资源,TCP仅占1.2%。当使用FlowVisor,来保证TCP至少占70%,CBR至少占30%。根据实际测量TCP占64.2%,CBR占28.5%。

6.相关工作

  VLANS:将虚拟连接从端口上解耦。使多个连接可复用通过一个虚拟端口,单个交换机可被氛围多个。与FlowVisor不同,他虚拟化一个特殊的转发算法,而非虚拟化网络控制层。

  FlowVisor通过流空间支持更加灵活的定义网络的方法,并且它提供虚拟化任意转转发逻辑模型的能力,这更符合流接触模型。

  Orphal:低级的API来实现转发,控制在一个交换机产品上。提供直接转发应用间的分离,在同一个交换机上。

  与FlowVisor不同:1.在一个交换机上,而非整个网络的多个。不过Orphal用来实现OpenFlow,可参与FlowVisor中来管理网络。

           2.Orphal是为硬件提供低级的变成,而FlowVisor为控制软件提供高等级接口。

8.未来待发展工作

  还有一些资源可被虚拟化

  (1)VIrtual Device Configuration(虚拟化设备配置)

   FlowVisor不能让分片来影响交换机配置。如此,用户不能改变配置,来设置低功耗传输模式。期待设备配置成为虚拟化无线网络中重要特征。

  (2)Virtual Links

   FlowVisor的虚拟拓扑被限制于武力拓扑的子集。创造复杂的虚拟拓扑完全解耦于底层物理连接可能用于新网络的设计。

  (3)Virtual Address Space

   FlowVisor还没有办法对于两片在分享流空间的同时阻止他们推测对方的流量。这将会是潜在的问题,例如两分片想控制痛一个流空间。

   类似于虚拟内存。用包重写来虚拟分配给每片相同流空间,并透明地将其重写到不重叠的区域,这可能是个可行的方法。

  

FlowerVisor理解的更多相关文章

  1. 理解CSS视觉格式化

    前面的话   CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...

  2. 彻底理解AC多模式匹配算法

    (本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...

  3. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  4. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  5. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  6. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  7. ThreadLocal简单理解

    在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...

  8. JS核心系列:理解 new 的运行机制

    和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...

  9. 深入理解JS 执行细节

    javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...

随机推荐

  1. python中的图像数据库PIL

    from PIL import Image im = Image.open("图片路径") im.function() 常用的函数: 1.im.crop(x,y,x1,y1) 对图 ...

  2. 软件测试面试-必掌握的 Linux常用命令大全--2.0更新版!

  3. 分布式系列十三: nginx

    nginx偏运维, 不过作为开发应该了解它能做什么事情, 其作为技术架构的一部分必不可少 正向代理和反向代理 正向代理是代理的客户端, 反向代理是代理的服务端. nginx就是一款可以作反向代理的we ...

  4. dba_segements 没有所有的表的信息

    这是oracle11g新增的功能,假设一个一般的用户user新建了一张表user_table,这时切换到sys用户查看dba_segments 查看user_table的信息,发现dba_segmen ...

  5. Leetcode-1.两数之和

    题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  6. pointer-events属性屏蔽鼠标事件(点击穿透上层元素)

    应用场景 我们在 HTML 开发时可能会遇到这样的情况:页面上有一些元素使用绝对定位布局,这些元素可能会遮盖住它们位置下方的某个元素的部分或者全部.默认情况下,下方元素被遮挡的部分是不会响应鼠标事件的 ...

  7. 二、vue之 使用vscode配置

    vue之 使用vscode配置 visual  studio code 简称vscode,下图为图标 ... 开启vscode ... 1.导入文件夹,选择菜单栏 文件-打开文件夹->选择相应已 ...

  8. .net core WebAPI 初探及连接MySQL

    1. 前言 笔者最近跟着微软官方文档学习.net core WebAPI,但发现其对 WebAPI 连接数据库.读取数据库方面讲得不够细致明了.写此文的目的,即实现 .net core WebAPI ...

  9. python学习记录20190121

    print 语句默认会给每一行添加一个换行符.只要在print 语句的最后添加一个逗号(,),就可以改变它这种行为 带逗号的print语句输出的元素之间会自动添加一个空格 print 没有任何参数的p ...

  10. js变量传递

    基本类型.引用类型 基本类型: undefined.Null.Boolean.Number.String五种 (简单的数据段);引用类型: object (由多个值构成). 两种类型在使用上的区别: ...