1.概念理解与回顾上一篇博文说分片定义为一个虚拟网络的实例,构成分片的流可以看成是有所有可能出现的数据包的头部构成了整个几何空间的一个子空间。举个例子,OpenFlow的流表项会匹配一定的域,我们可以按照不同的域来划分整个几何空间。FLowVisor将切片定义为一组流,因此我们可以将切片视为一组域。给定一个数据包头,我们就可以判断这个数据包属于哪个流空间,进而判断这个数据包属于哪个虚拟空间。网络,因此FLowVisor的一个实例可以等同于一个流空间。FLowVisor的设计目标有三点:这个虚拟化对控制器应该是透明的,不同的切片应该是完全独立的,拦截OpenFlow交换机和控制器之间的消息,如下左图所示。所有的OpenFlow消息,无论是从交换机到用户还是从用户到交换机,都会通过FLowVisor。FLowVisor使用OpenFlow协议与用户和交换机进行通信。与交换机通信。下面通过下图左边的简单例子来说明FLowVisor的运行过程。Bob在控制器上运行一个HTTP负载平衡应用程序,以将所有HTTP流分发到一组服务器。Bob的FLowVisor的策略是对网络进行切片,使其只处理所有具有固定源IP的HTTP流。在控制器上可以看到所有的HTTP流,控制器有信心可以完成负载均衡的任务。它会发布一个流表来平衡所有HTTP流的负载。当Bob的controller发送流表时(比如将某个流指向某个server),FLowVisor会拦截他(上图左1),与Bob的切片策略(上图左2)进行比较,重写流表项只对固定源IP的HTTP流有效,所以controller意识到它只控制了固定源IP的流,但感觉它控制了所有的流。同样,对于从交换机到控制器的消息,FLowVisor只允许上传满足对应分片流空间的消息。FLowVisor不要求FLowVisor实例和物理交换机之间存在一对一的关系。一个FLowVisor实例可以控制多个物理交换机,甚至可以虚拟出另一个虚拟网络。如上图,右边的作者已经发布了源代码,是用C语言编写的,大约7000行。2.切片定义策略FLowVisor中的切片被定义为可插拔模块(非常方便方便),每一种策略都由一个文本配置文件来描述,每个切片一个。对于带宽分配,切片中的所有流都映射到一个QoS组,每个切片都有固定数量的交换机CPU和转发流表的预算,网络拓扑被指定为网络节点和端口的列表。每个切片的流空间由元素的有序列表定义,类似于防火墙规则。每条规则都描述了一个关联的操作,比如allow、read-only或者deny,按照特定的顺序解析,执行第一个匹配规则的动作。将所有规则组合为流空间的一部分,实质上控制了整个切片。只读规则只允许分片接收OpenFlow控制消息、查询交换机统计信息,不允许向转发表中插入流表。允许规则重叠。那么我们将之前的场景复杂化:Bob邀请他的一些朋友与他合作做HTTP负载均衡实验。网络管理员爱丽丝允许鲍勃进行这些合作实验。Alice将参与这个合作的HTTP实验。流量由Bob控制,她继续负责剩余的HTTP流量。此外,Alice还想运行一个被动分片来监控整个网络的性能。为了实现这样的功能,我们可以使用如下的流量空间规则。Bob的实验网络:定义为所有参与实验的参与者所需要的HTTP流量。他的网络描述文件对每个用户只有一条规则,格式如下:Allow:tcp_port:80andip=user_ip来自交换机的OpenFlow消息,可以匹配这条规则的就转发给Bob的controller,所有的流表项Bob打算插入将满足这些规则。Alice的生产网络:是Bob网络的补充,所以规则如下:Deny:tcp_port:80andip=user_ipAllow:交换机所有不进入Bob虚拟网络的OpenFlow报文都会发送到生产网络的controller,而不满足Bob的流空间的流生产控制器可以随意控制它们。Alice的监控网络:需要查看网络中的所有流,其规则如下:只读:全部该规则确保Alice的检测网络是完全被动的,不会与她的生产网络和Bob的测试网络造成任何冲突。通过上面的描述,我们可以发现基于规则的策略比较简单,但是可以满足实验和部署的要求。更重要的是,每个人都可以完全DIY自己需要的规则,因此非常灵活和可扩展。通过这两篇文章,我基本了解了FLowVisor的原理和流程,进一步拓宽了思路。下一篇文章将详细讲解FLowVisor如何隔离不同的虚拟网络。
