FlowVisor入门教程


FlowVisor是建立在OpenFlow之上的网络虚拟化工具,它可以将物理网络划分成多个逻辑网络,从而实现虚网划分。它为管理员提供了通过定义流规则,而不是调整路由器和交换机配置的方式来管理网络。正如管理程序依赖于标准x86指令来虚拟化服务器一样,FlowVisor使用标准OpenFlow指令集来管理OpenFlow交换机,这些指令设置了低级别规则,比如如何基于数据包表头中的特点来转发数据包。

1 工作原理

作为一个网络虚拟化平台,FlowVisor部署在标准OpenFlow控制器和OpenFlow交换机之间,成为二者的透明代理。FlowVisor能够与多个控制器连接使得每个控制器控制一个虚网,保证各虚网相互隔离。

FlowVisor的设计有如下几个原则:(a) FlowVisor对控制器和交换机而言是透明的,它们都感知不到FlowVisor的存在;(b)各个虚网之间是隔离的,即使在广播条件下各个虚网的流量也必须实现隔离;(c)虚网划分策略是丰富且可扩展的,由于当前网络虚拟化的技术还不成熟,因此划分虚网的策略需要是灵活的、模块化的且可扩展的。

目前虚网划分范围涵盖了物理层、数据链路层、网络层和传输层的协议字段,以数据包的12元组作为划分依据,按照流的思想将网络资源进行合理分配,以达到限定当前切片内数据流量类型的目的。一般对于某个特殊的应用,可以通过指定源/目的IP地址、源/目的MAC地址或者TCP端口信息来把数据包划分到一个切片内。

FlowVisor是一个特殊的OpenFlow控制器,所有OpenFlow消息都将透过FlowVisor进行传送。FlowVisor会根据配置策略对OpenFlow消息进行拦截、修改、转发等操作。这样,OpenFlow控制器就只控制其被允许控制的流,并不知道其所管理的网络被FlowVisor进行过分片操作。相似地,从交换机发出的消息经过FlowVisor也只会被发送到相应的控制器。

FlowVisor主要由FVClassifier、FVSlicer和FlowSpace数据库三部分组成。FVClassifier用于维护与物理OpenFlow交换设备的连接,处理IO请求并记录每个物理设备的端口、性能等信息,每个FVClassifier对应一个OpenFlow交换设备。FVSlicer用于维护与控制器的连接,管理OpenFlow会话并对控制器下发的信令进行处理。当流从一个物理的OpenFlow交换设备到达FlowSpace后,FlowSpace根据数据库中切片规则,把OF消息交给本切片内的FVSlicer发送给连接的控制器。

02-flowvisor工作原理

图 1. FlowVisor工作原理

FlowVisor的核心主要是对上行消息的映射和对下行信令的过滤。如图1所示,控制器和交换机与FlowVisor的所有联系都通过Poll Loop来交互,交换机交给控制器的数据包通过FlowVisor的OFSwitchAcceptor模块接收后,FVClassifier对数据包的来源进行分析,再连接到FlowVisor中的数据库与Flowspace进行匹配,从而决定此数据包应该交由哪个控制器来处理。同理,控制器下发给交换机的数据包会通过相反的过程到达交换机。

2 安装配置

下面介绍如何在通用的Linux或者FreeBSD主机上构建和安装FlowVisor。以Ubuntu14.04系统下构建安装FlowVisor1.2为例,步骤如下:

第一步:源码下载,采用git的方式进行源码下载,下载FlowVisor-1.2-MAINT.zip安装包。

第二步:依赖包安装,需要安装ant和jdk,jdk要求使用jdk1.6版本或其以下版本,否则会发生错误。

第三步:编译,解压FlowVisor-1.2-MAINT.zip包后进行编译,成功后可以看到“BUILD SUCCESSFUL”提示。

第四步:安装,安装时使用默认路径,并输入用户名、用户组和密码,用户名是ubuntu的用户名。

FlowVisor安装完成后,它的配置文件位于/etc/flowvisor/config.json。配置文件中包括简单的Slice、FlowSpaceRule样例,以及FlowVisor的监听端口、日志等级、版本等信息。api_webserver_port是xml请求的监听端口,默认为8080; api_jetty_webserver_port是JSON请求的监听端口;listen_port是交换机的监听端口,默认为6633。参数配置如下所示:

02-flowvisor参数配置

图 2. FlowVisor参数配置

FlowVisor配置完成后,系统切换到FlowVisor用户下,即在上一步安装中输入的用户名,然后运行FlowVisor,命令如下:

3 常用命令

FlowVisor中常用的命令如表1所示:

表 1. FlowVisor常用命令

02-table01 Slice相关命令

4 一个简单实例

软件环境准备:

在Ubuntu14.04LTS下搭建本实例所需的软件环境,安装软件如表2所示。其中基本软件环境镜像可以在sdnlab资源库中下载mininet-2.1.0p2-140718-ubuntu-14.04-server-amd64-ovf(包括Ubuntu14.04及安装好的mininet),链接为http://pan.baidu.com/s/1sjG0fXN。

表 2. 所需软件

02-table2 软件名称

相关端口配置:

表 3. 端口配置

03-table3 端口配置

网络拓扑配置:

02-网络拓扑配置

图 3. 实例拓扑图

实验流程:
第一步,启动FloodLight,FlowVisor。

第二步,启动Mininet构建物理拓扑,包括1个交换机,2个主机,设置远程控制器为FlowVisor(127.0.0.1,6633)。

执行结果如下:

第三步,在FlowVisor上创建slice,指定FloodLight控制器(127.0.0.1:6634);然后添加两条基于端口划分的flowspace。

第四步,测试
在Mininet下进行主机ping操作。

执行结果如下,主机h1与h2可通信:

在FlowVisor下停止slice 。

在Mininet下再次验证h1与h2是否可通信。

执行结果如下,主机h1与h2不可通信:

5 总结

通过本文的阐述及实践,我们了解了FlowVisor的基本概念及工作原理。综合使用FlowVisor、FloodLight和Mininet,构建了一个基本SDN运行实例,通过本实例加强了对SDN组成原理的理解,提高了对FlowVisor的工作原理和使用方法的认知程度。希望以后可以为大家提供更多的实例,大家有想法也可以进一步交流。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/3081.html
分享到:
相关文章
条评论

登录后才可以评论

起跑者 发表于14-11-04
12