FlowVisor入门教程
为什么80%的码农都做不了架构师?>>>
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发送给连接的控制器。
图 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。参数配置如下所示:
图 2. FlowVisor参数配置
FlowVisor配置完成后,系统切换到FlowVisor用户下,即在上一步安装中输入的用户名,然后运行FlowVisor,命令如下:
3 常用命令
FlowVisor中常用的命令如表1所示:
表 1. FlowVisor常用命令
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. 所需软件
相关端口配置:
表 3. 端口配置
网络拓扑配置:
图 3. 实例拓扑图
第二步,启动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,可点击此阅读原文。如果您对本文感兴趣,可参与以下互动方式与作者近距离交流。(1) 微博(http://weibo.com/sdnlab/)
(2) 微信(账号:SDNLAB)
(3) QQ群
SDN研究群(214146842)
OpenDaylight研究群(194240432)
转载于:https://my.oschina.net/sdnlab/blog/352863
FlowVisor入门教程相关推荐
- Kafka入门教程与详解
1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...
- 【CV】Pytorch一小时入门教程-代码详解
目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...
- python tornado教程_Tornado 简单入门教程(零)——准备工作
前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- mysql query browswer_MySQL数据库新特性之存储过程入门教程
MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...
- python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...
- air调用java,AIR2.0入门教程:与Java应用交互
在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...
- 【Arduino】开发入门教程【一】什么是Arduino
Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...
- python 三分钟入门_Cython 三分钟入门教程
作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...
最新文章
- declare handler 声明异常处理的语法
- 从git中永久物理删除私密文件(改写git历史)
- 【RecyclerView】 四、RecyclerView 布局 ( 网格局管理器 GridLayoutManager )
- Codeforces Round #515 (Div. 3)【未完结】
- Abp太重了?轻量化Abp框架
- Mybatis实现CRUD操作
- 前端开发核心JavaScript要怎么学?给转行或是自学的朋友提些学习建议
- android gps 经纬度转换,AndroidGPS获取当前经纬度坐标
- 实现Codeblock支持C99标准
- 2019春季PAT题解
- 如何进行航拍全景摄影(上)
- 漫漫的webim(一) web实现简易im功能
- 安装windows和android双系统,真正的安卓Windows双系统,RemixOS Windows共存系统安装+附带ROOT+大分区...
- 怎样清空微信全部聊天记录?轻松几步!如何操作清除微信聊天记录?
- [2012-08-21] HTTPC 的使用
- 统计元音字母(JAVA)
- 【互补松弛定理】12.7.16省队集训
- window10快捷键
- 表情包组件(vue)
- [目标检测]目标检测的评价指标MAP(上)
热门文章
- python数据库管理实例_西游之路——python全栈——学员管理实例之数据库设计
- 联想服务器DL388eu盘装系统,服务器价格指导 10月双路机架产品导购
- Linux的load导入语句,LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项
- ctrl+shift+l指定选择 vscode_6.PYTHON开发利器之VS Code常用配置介绍
- php fprintf,PHP fprintf() 函数 | 菜鸟教程
- Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
- 没抢到欧冠杯的票?没关系!在VR中看!
- 虚幻UE4中如何采集360度全景图片和VR视频
- JAVA实现矩形覆盖问题(《剑指offer》)
- mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...