上一篇博客网络虚拟化之FlowVisor:网络虚拟层(上)主要对比了计算机虚拟化和网络虚拟化,引出了FLowVisor网络虚拟层,介绍了其一些特性,这篇博文深入讲解FLowVisor的技术。

一. 概念理解和回顾

上一篇博客说了,切片定义为一个虚拟网络的实例,而组成切片的流可以被当作有所有可能出现的数据包的包头构成的整个几何空间的一个子空间。举一个例子,OpenFlow的流表项会匹配一定的域,我们可以按照不同的域将整个几何空间进行划分。

FLowVisor定义切片为一组流,因此我们可以将切片当作一组域,给定一个数据包包头,我们可以判断出这个数据包包含在哪个流空间中,即可判断出这个数据包属于哪个虚拟网络,所以可以将FLowVisor的一个实例等价于一个流空间。

FLowVisor的设计目标有三点:

  1. 这个虚拟化对控制器来说应该是透明的
  2. 不同的切片之间是完全独立的
  3. 切片定义是可扩展的

二. FLowVisor的的实现

1. 工作流程

FLowVisor类似于一个OpenFlow代理,对OpenFlow交换机和控制器之间的消息进行拦截,如下图左。所有的OpenFlow消息,不论从交换机到用户还是用户到交换机,都会经过FLowVisor,FLowVisor利用OpenFlow协议和用户、交换机进行通信,FLowVisor对交换机和用户来说是透明的,所以在用户看来,他们是直接和交换机通信的。接下来以下图左简单的例子来阐述FLowVisor的操作流程。

Bob在控制器上面运行了一个HTTP负载均衡应用,将所有的HTTP流散播到一组服务器上,Bob的FLowVisor的策略是切片网络从而让自己只处理所有源IP为一个固定值的HTTP流,而控制器上可以看到所有的HTTP流,控制器自信可以实现负载均衡的任务,他会下发流表,对所有的HTTP流负载均衡。当Bob的控制器下发一条流表(如将某个流指引到某个服务器),FLowVisor会拦截他(上图左1),和Bob's的切片策略进行对比(上图左2),重写流表项只对固定源IP的HTTP流有效,这样控制器就实现了只控制固定源IP的流,但是他觉得自己控制了所有的流。同样的,对于从交换机向控制器的消息,FLowVisor只允许满足对应切片流空间的消息上传。FLowVisor不需要FLowVisor实例和物理交换机一对一存在,一个FLowVisor实例可以控制多个物理交换机,甚至可以虚拟化另外一个虚拟网路。如上图右

作者公布了源码,是C语言写的,大约7000行。

2. 切片定义策略
FLowVisor中切片被定义为可插入模块(非常方便和便捷),每个策略由文本配置文件来描述的,一个切片一个。对于带宽分配,一个切片的所有流都会被映射到一个Qos组,每个切片有固定数量的交换机CPU和转发流表的预算,网络拓扑被指定为网络结点和端口的列表。
用一个有序的元素列表,类似于防火墙规则来定义的每个切片的流空间,每个规则描述有一个相关的操作,比如,允许,只读或者拒绝,这些被按照特定顺序来进行解析,执行第一个匹配规则的操作。将所有规则组合起来作为流空间的一部分,基本控制了整个切片。只读规则只允许切片接收OpenFlow控制消息,查询交换机的统计信息,不允许在转发表中插入流表。规则是允许重叠的。

我们接着复杂化前面的场景:Bob邀请了他的一些小伙伴和他合作来做HTTP负载均衡实验,网络管理员Alice准许Bob进行这些合作性实验,Alice将参与这个合作性HTTP实验的人员的HTTP流交由Bob控制,她继续负责剩余的HTTP流,另外,Alice还想要运行一个被动的切片来监测整个网络的性能,为了实现这样的功能,我们可以用下面的流空间规则。

  1. Bob'的试验网络:被定义为所有参与实验的人员所需要的HTTP流,他的网络描述文件对每个用户只有一个规则,格式如下:
    Allow: tcp_port: 80 and ip = user_ip
    凡是来自于交换机中可以匹配这条规则的OpenFlow消息被转发到Bob的控制器,所有Bob意图插入的流表项都会满足这些规则
  2. Alice的生产网络:是Bob网络的补集,所以规则如下:
    Deny:  tcp_port:80 and ip=user_ip
    Allow: all
    凡是不进入Bob虚拟网络的交换机的OpenFlow消息都会被进入生产网络的控制器,对于不满足Bob流空间的流生产控制器就可以随意对它们进行控制
  3. Alice的监测网络:需要看到所有网络中的流,他的规则如下:
    Read-only: all
    这个规则确保Alice的检测网络是完全被动的,不与她的生产网、Bob的试验网产生任何冲突

通过上面的描述,我们可以发现,基于规则的策略是比较简单的,但是他可以满足实验和部署要求,更重要的是大家可以对自己所需要的规则完全DIY,所以十分灵活和可扩展。

经过这两篇文章,我基本理解了FLowVisor的原理和过程,进一步拓宽了自己的思路,下一篇文章详细说下FLowVisor如何隔离不同的虚拟网络

网络虚拟化之FlowVisor:网络虚拟层(中)的更多相关文章

  1. 网络虚拟化之FlowVisor:网络虚拟层(下)

    在前面两篇文章:网络虚拟化之FlowVisor:网络虚拟层(上)和网络虚拟化之FlowVisor:网络虚拟层(中)中分别介绍了FLowVisor的特性和实现,三连载的最后一篇介绍虚拟网络的隔离机制. ...

  2. 网络虚拟化之FlowVisor:网络虚拟层(上)

    概念解释:切片:虚拟网络的一个实例 一. 网络虚拟化(虚拟网络) 人类社会的发展在很大方面得益于自然界,飞机受益于鸟,雷达受益于蝙蝠等等,所以专门有个学科为仿生学就是研究和模仿生物的特殊本质,利用生物 ...

  3. 删除Windows中隐藏的物理网卡和网络虚拟化失败后的虚拟网卡

    Windows环境下,在更换硬件服务器主板和网卡等硬件.恢复操作系统或者网络虚拟化失败后,可能会出现网卡方面的问题.例如,设备管理器中多了不应该存在的网卡:因命名冲突无法重命名当前网络连接:IP地址冲 ...

  4. Windows Server 2012 虚拟化实战:网络(二)

    关于Windows Server的虚拟化网络,前文描述了在操作系统层面上的出现的配置变化.其中的一些配置通过Windows Server提供的小工具即可实现,如网卡组的配置,而有些需要安装Window ...

  5. Windows Server 2016-Hyper-V网络虚拟化概述

    在 Windows Server 2016 和虚拟机管理器中,Microsoft 提供的端到端网络虚拟化解决方案. 有构成了 Microsoft 的网络虚拟化解决方案的五个主要组件: Windows ...

  6. 《重构网络:SDN架构与实现》Chapter7 SDN与网络虚拟化 随笔

    参考: <重构网络:SDN架构与实现>,作者:杨泽卫.李呈. Chapter7 SDN与网络虚拟化 结构 7.1 网络虚拟化 7.1.1 为什么需要网络虚拟化技术 7.1.2 网络虚拟化 ...

  7. 从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨

    以前的大二层技术,一般是在物理网络底层使用IS-IS路由技术,再在此基础之上,实现数据中心网络的二层扩展,如公有的Trill.SPB技术和Cisco私有的OTV.Fabricpath技术:前沿一些的网 ...

  8. Hyper-V 网络虚拟化技术细节

    Hyper-V 网络虚拟化技术细节 适用对象:Windows Server 2012 R2 服务器虚拟化能让多个服务器实例在同一台物理主机上同步运行,但各个服务器实例都是相互独立的. 每台虚拟机的运作 ...

  9. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

随机推荐

  1. Android--从零开始开发一款文章阅读APP

    代码地址如下:http://www.demodashi.com/demo/11212.html 前言 本案例已经开源!如果你想免费下载,可以访问我的Github,所有案例均在上面,只求给个star.当 ...

  2. C++从零实现简单深度神经网络(基于OpenCV)

    代码地址如下:http://www.demodashi.com/demo/11138.html 一.准备工作 需要准备什么环境 需要安装有Visual Studio并且配置了OpenCV.能够使用Op ...

  3. nginx location静态文件配置

    进入nginx安装目录的conf目录下,修改nginx.conf文件,在一个server{}中添加 一个location 部分配置代码如下 root@ubuntu:/usr/local/nginx/c ...

  4. mysql处理大数据合并的另一种方法

    在做项目的时候我碰到了一个这样的场景,有两张表,数据都在300W左右,现在要求在生产环境中合并这两张表为一张表,本来想用sql语句insert into select来实现,后来发现这样操作速度很慢, ...

  5. Call to undefined function mysql_connect()

    Fatal error: Call to undefined function mysql_connect() in /data/www/qy_b2b/include/db_mysql.class.p ...

  6. HTTP协议发展历史

    一.HTTP 0.9版本 1991年发布0.9版本,只有一个 GET 命令. 例如:GET /index.html   表示浏览器只能接收返回 html 格式的字符串:服务器发送完毕就关闭tcp链接. ...

  7. Linux上寻找并杀死僵尸进程

    转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...

  8. Linux间的进程通信;以及子进程的创建

    "-----第六天-----------------------------------------------------------------------------" .版 ...

  9. Mysql的replace into语句

    Mysql语句 replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删 ...

  10. IoC容器Autofac学习笔记

    一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...