1. FlowVisor工作原理(转)

  作为一个网络虚拟化平台,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发送给连接的控制器。

                               FlowVisor工作原理

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

2. 安装配置

2.1 安装依赖

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

# sudo apt-get install ant
# sudo apt-get install openjdk-6-jdk

2.2 安装

git clone git://github.com/OPENNETWORKINGLAB /FlowVisor.git
或者:wget https://github.com/OPENNETWORKINGLAB/flowvisor/archive/1.2-MAINT.zip
   unzip flowvisor-1.2-MAINT

cd FlowVisor make #编译,成功后“BUILD SUCCESSFUL”提示 make install #安装, 安装时使用默认路径,输入用户名,用户组,密码;

注意:安装过程需要输入如下一些信息,根据界面提示信息输入。

  l  安装目录前缀,可以不填,默认是/usr/local

  l  输入用来运行flowvisor的用户名(当前虚拟机上已经存在的用户)。

  l  运行Flowvisor的用户的对应用户组名

  l  Fvadmin的密码,每次运行flowvisor命令的时候,都要输入的密码

   l  安装路径使用默认的

2.3 配置

(1).配置文件位于/etc/flowvisor/config.json

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

  如修改flowvisor的控制端口为6634(默认6633),web端口8181(默认8080)

vi /etc/flowvisor/config.json

  

 

           

(2). 文件/usr/local/bin/fvctl

  找到fvctl里面MATCHSTRS(第812行),把其中的两个toInt改成toStr,主要是为了add-flowspace的时候,可以指定具体的mac

vi /usr/local/bin/fvctl

  

                

3 常用命令

3.1 常用命令

3.2 使用

3.2.1 启动

  切换到flowvisor用户(对应安装输入的用户名),启动flowvisor

~$ flowvisor /etc/flowvisor/config.json
~$ nohup flowvisor /etc/flowvisor/config.json >/dev/null &

  上面的命令意思是“不挂断地后台启动flowvisor,并且不在终端输出日志”

3.2.2 datapath操作

查看所有的datapaths

  fvctl -p 8181  list-datapaths       (-p 8181,8181即为/etc/flowvisor/config.json的web端口,下同)

输入的密码,即为安装的时候输入的fvctladmin的密码(下同),可见共有4台ovs

查看具体datapath详细信息

  $ fvctl -p 8181 list-datapath-info 00:00:f2:c2:ca:ad:7d:4f

查看具体datapath的状态

  $ fvctl -p 8181 list-datapath-stats  00:00:f2:c2:ca:ad:7d:4f

3.2.3 slice操作

1).创建slice

fvctl add-slice [options] <slicename> <controller-url> <admin-email>

2).查看slice

查看创建的slice(所有的)

fvctl  -p  <port>  list-slices  

查看slice的具体信息

fvctl  -p  <port>  list-slice-info <slicename>

  

显示slice的统计信息

fvctl -p 8181 list-slice-stats <slicename>

报告整体slice的健康状态

fvctl -p 8181 list-slice-health <slicename>

3).修改slice

fvctl -p <8181> update-slice [option]<slice-name>

修改控制器IP

修改控制器端口

4).删除slice

fvctl remove-slice <slicename>

3.2.4  flowspace操作

Flowspcae字段:                                                            

字段名

含义

priority

优先级,0-65535

in_port

进入端口

dl_vlan

Vlan id, 0xffff 表示匹配非vlan包,否则指定为 0 - 4095表示12位的vlan id

dl_vpcp

Vlan优先级,

最外层VLAN头的PCP域

dl_src

Ethernet 源Mac地址

dl_dst

Ethernet 目的Mac地址

dl_type

Ethernet 协议类型, 采用0 – 65535表示

nw_src

源IP地址

nw_dst

目的IP地址

nw_proto

IP协议类型,十进制数0-255

nw_tos

IP Tos位,采用0-255表示

tp_src

TCP/UDP 源端口

tp_dst

TCP/UDP 目的端口

wildcards

匹配规则

actions

切片行为,指的是slice对这个flowspace拥有的权限,DELEGATE=1, READ=2, WRITE=4.actions的值为这3个的组合,所有取值范围为1-7

1).创建flowspace

fvctl add-flowspace [options] <flowspace-name> <dpid> <priority> <match> <slice-perm>

priority :值0:2^31

slice-perm:值0:7,Delegate=1,Read=2,Write=4

创建flowspace

fvctl -p 8181 add-flowspace fs1 all 100 dl_dst=78:45:c4:2d:72:51 s1=5(假如不修改/usr/local/bin/fvctl的inStr值,此命令就会出现错误)

2).查看 flowspace

fvctl list-flowspace [options]

3).修改flowspace

fvctl update-flowspace [options] <flowspace-name>

4).删除 flowspace

fvctl remove-flowspace <flowspace-name> [<flowspace-name>...]

4. 简单实例

所需软件

相关端口配置

网络拓扑配置

实验流程:

第一步,启动FloodLight,FlowVisor。

# flowvisor /etc/ flowvisor/config.json
# java –jar ./ floodlight-0.90/target/floodlight.jar

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

# sudo mn --controller=remote,127.0.0.1,6633

执行结果如下:

*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
*** Starting 1 switches
s1
*** Starting CLI:
mininet>

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

# fvctl -p 8083 add-slice slice1 tcp:127.0.0.1:6634 test@sdnlab.com
# fvctl -p 8083 add-flowspace flowspace1 all 100 in_port=1 slice1=7
# fvctl -p 8083 add-flowspace flowspace2 all 100 in_port=2 slice1=7  

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

# mininet> pingall

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

*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)

在FlowVisor下停止slice 。

# fvctl -p 8083 update-slice slice1 --disable-slice 

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

# mininet> pingall

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

*** Ping: testing ping reachability
h1 -> X
h2 -> X
*** Results: 100% dropped (0/2 received)

FlowVisor相关的更多相关文章

  1. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

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

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

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

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

  4. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  5. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  6. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  7. 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?

    HostingEnvironment是承载应用当前执行环境的描述,它是对所有实现了IHostingEnvironment接口的所有类型以及对应对象的统称.如下面的代码片段所示,一个HostingEnv ...

  8. virtualbox linux虚拟机相关

    linux虚拟机设置为静态IP 在virtualbox中安装好linux虚拟机后,如果采用的是NAT方式的话,linux虚拟机默认采用dhcp方式自动上网,而且用的是NetworkManager服务而 ...

  9. WebGIS中等值面展示的相关方案简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值面是气象.环保等相关项目上常用到的效果展示.在传统的CS项 ...

随机推荐

  1. 蓝桥杯 正则问题(dfs)

    1607: 正则问题 时间限制: 1 Sec  内存限制: 256 MB提交: 34  解决: 13[提交][状态][讨论版] 题目描述 考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达 ...

  2. css border实现三角形

    实现过程: 正常的border <div class="box"></div> .box { background: #ddd; width: 100px; ...

  3. ue4 射线Trace Responses(踪迹响应)

    关于 Visibility和Camera区别 就是两个预定义通道 可以通过Character和pawn的Collider设置看出为什么要有这两个的区别,预制值设置成Pawn也是跟下图一致 所以Visi ...

  4. C#中Obsolete特性

    一般在逼格比较高的程序员代码中常见此特性手法,他们因为某些原因不详注释掉原有的代码,用Obsolete [csharp] view plain copy class Program { static  ...

  5. 宽度设置百分比 高度跟宽度一样css解决方案

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 洛谷P2899 [USACO08JAN]手机网络Cell Phone Network

    P2899 [USACO08JAN]手机网络Cell Phone Network 题目描述 Farmer John has decided to give each of his cows a cel ...

  7. 2018最新苹果APP上架App Store流程(超详细)

    本文转发:https://blog.csdn.net/xxw888/article/details/73618837 2018最新整理iOS app上架app详细教程 上架iOS需要一个付费688的开 ...

  8. IT兄弟连 Java语法教程 编写Java源代码

    现在我们来一步一步的编写第一个Java程序,鼎鼎大名的“HelloWorld”. 编写Java源代码 编写Java源代码可以使用任何无格式的文本编辑器,在Windows操作系统上可以使用记事本.Edi ...

  9. ElasticStack之Logstash安装

    服务器环境 操作系统 Host:port node 1 CentOS 7.2.1511 11.1.11.127:9200 node1 2 CentOS 7.2.1511 11.1.11.128:920 ...

  10. IBM Websphere MQ常用命令及常见错误

    MQSC: MQ Script Command  (不区分大小写) 注明: 下面命令行中的队列管理器名字,队列名字分别用QmgrName, QName替代. 下面标蓝色的,都需要根据实际配置更改! 打 ...