zoukankan      html  css  js  c++  java
  • FlowVisor相关

    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发送给连接的控制器。

    02-flowvisor工作原理

                                   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. 简单实例

    所需软件

    02-table2 软件名称

    相关端口配置

    03-table3 端口配置

    网络拓扑配置

    02-网络拓扑配置

     

     

    实验流程:

    第一步,启动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不可通信:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    通达OA 新旧两种数据库连接方式
    c++ 如何获取系统时间
    性能测试开源小工具——http_load介绍
    http_load安装与测试参数分析
    不错的C++框架: Thrift(2)-传输和网络相关
    管理处理器的亲和性(affinity)
    300元内,此耳机是首选。不亏千人好评,对的起你的耳朵。
    [品质生活] 舒适 Schick HYDRO 5剃须刀
    巴氏刷牙法_百度百科
    Amazon.com : The Odyssey of the Manual Toothbrusher
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/4785266.html
Copyright © 2011-2022 走看看