为什么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入门教程相关推荐

  1. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  2. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  3. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  4. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  5. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  6. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  7. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

  8. 【Arduino】开发入门教程【一】什么是Arduino

    Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...

  9. python 三分钟入门_Cython 三分钟入门教程

    作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...

最新文章

  1. declare handler 声明异常处理的语法
  2. 从git中永久物理删除私密文件(改写git历史)
  3. 【RecyclerView】 四、RecyclerView 布局 ( 网格局管理器 GridLayoutManager )
  4. Codeforces Round #515 (Div. 3)【未完结】
  5. Abp太重了?轻量化Abp框架
  6. Mybatis实现CRUD操作
  7. 前端开发核心JavaScript要怎么学?给转行或是自学的朋友提些学习建议
  8. android gps 经纬度转换,AndroidGPS获取当前经纬度坐标
  9. 实现Codeblock支持C99标准
  10. 2019春季PAT题解
  11. 如何进行航拍全景摄影(上)
  12. 漫漫的webim(一) web实现简易im功能
  13. 安装windows和android双系统,真正的安卓Windows双系统,RemixOS Windows共存系统安装+附带ROOT+大分区...
  14. 怎样清空微信全部聊天记录?轻松几步!如何操作清除微信聊天记录?
  15. [2012-08-21] HTTPC 的使用
  16. 统计元音字母(JAVA)
  17. 【互补松弛定理】12.7.16省队集训
  18. window10快捷键
  19. 表情包组件(vue)
  20. [目标检测]目标检测的评价指标MAP(上)

热门文章

  1. python数据库管理实例_西游之路——python全栈——学员管理实例之数据库设计
  2. 联想服务器DL388eu盘装系统,服务器价格指导 10月双路机架产品导购
  3. Linux的load导入语句,LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项
  4. ctrl+shift+l指定选择 vscode_6.PYTHON开发利器之VS Code常用配置介绍
  5. php fprintf,PHP fprintf() 函数 | 菜鸟教程
  6. Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
  7. 没抢到欧冠杯的票?没关系!在VR中看!
  8. 虚幻UE4中如何采集360度全景图片和VR视频
  9. JAVA实现矩形覆盖问题(《剑指offer》)
  10. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...