51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1265|回复: 0
打印 上一主题 下一主题

使用PHP重新设计Floodlight的web界面

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-9-17 13:11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    </p>一、实验目的

    利用控制器提供的 API(例如 RESTAPI),开发一个网络及流表管理工具(客户端,网页端均可)。管理工具可以显示网络拓扑结构,查看流表,增加流表,删除流表。

    二、实验原理-程序设计

    我们基于 Floodlight现有的API实现了一个简单的 Web站点,主要功能有:
      查看Switch列表及各个Switch的信息查看Host列表及各个Host的信息查看拓扑图查看流表针对某个Switch添加/删除Static Flow查看日志

    程序的架构设计如图1.1所示:



    图 1.1:架构设计

    底层虚拟机的操作系统上安装有 Mininet,通过 Mininet我们可以创建多种类型的拓扑,并且可以把 floodlight controller设置为远程,在我们的方案中floodlight安装在虚拟机的宿主机上。Floodlight负责监听和控制虚拟机中拓扑的动态。我们在宿主机上又搭建了一个网站,网站后端即CommandProxy负责转发前端Web Interface的操作请求给 Floodlight,Floodlight通过RESTAPI接口开放。前端Web Interface负责发出操作请求并在页面上展示整个拓扑的状态并提供操作接口以便用户能够添加/删除flows。

    (一)Mininet Virtual Network

    1.1 Mininet介绍
    Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。Mininet可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用 ssh登录,启动应用程序,程序可以向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。
    Mininet的特性包括可以简单、迅速地创建一个支持用户自定义的网络拓扑,缩短开发测试周期。可以运行真实的程序,在 Linux上运行的程序基本上可以都可以在 Mininet上运行,如 Wireshark Mininet。支持 Openflow,在Mininet上运行的代码可以轻松移植到支持OpenFlow的硬件设备上。Mininet可以在自己的电脑,或服务器,或虚拟机,或者云(例如 Amazon EC2)上运行。Mininet提供python API,简单易用。
    1.2基于Mininet拓扑搭建
    拓扑搭建方面我们使用了Mininet,我们在 VirtualBox安装 Mininet虚拟机。利用它可以非常方便的模拟出一个网络。例如,模拟出一个网络的命令为:
    Shell
    Mininet可以连接到Floodlight作为 Controller,Controller可以是本地的或者远程的。默认情况下一个 Mininet虚拟网络中的 Swicth只能使用同一个Controller,但是可以通过编写自定义脚本的方式来构建 Mininet拓扑,并且在其中显示的指定多个 Controller。
    我的拓扑文件proxy-access.py脚本如下:
    Shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    from mininet.topo import Topo
    class MyTopo( Topo ):
    "Simple topology example."
    def __init__( self ):
    "Create custom topo."
    # Initialize topology
    Topo.__init__( self )
    # Add hosts and switches
    Switch1 = self.addSwitch( 's1' )
    Switch2 = self.addSwitch( 's2' )
    Switch3 = self.addSwitch( 's3' )
    Host1=self.addHost('h1')
    Host2=self.addHost('h2')
    Server=self.addHost('server')
    Proxy=self.addHost('proxy')
    # Add links
    self.addLink( Switch1,Host1 )
    self.addLink( Switch1,Host2 )
    self.addLink( Switch1,Switch2 )
    self.addLink( Switch3,Switch2 )
    self.addLink( Switch2,Server )
    self.addLink( Switch3,Proxy )
    topos = { 'mytopo': ( lambda: MyTopo ) }


    (二)Floodlight

    Floodlight是Openflow协议的一个实现。它提供了一些简单的 API用来查询和控制网络状态,例如查询拓扑环境;罗列 Switch和 Host;添加/删除静态流;配置防火墙等。

    (三)Command Proxy

    由于 ajax不能跨域请求,所以我们建立了一个服务器端代理。Command Proxy是我们用 Php编写的一个后端脚本,它用来转发 Web Interface的请求或者执行Web Interface发送的命令。流程如图 1.2所示:



    图 1.2:Command Proxy流程

    (四)Web Interface

    Web Interface提供了可视化的用户接口,用户可以在浏览器中查看拓扑、添加/删除流、查看日志等操作,并负责发出操作请求到后端 commend proxy。

    三、实验过程及结果

    在浏览器中输入 localhost/floodlightUI/index.html可进入 web界面查看各类信息。主界面如图 1.3所示:



    图 1.3:web主界面

    (一)查看 Switch列表及各个Switch的信息



    图 1.4:Switches界面

    首先为用户提供了可视化界面来查看路由的列表,所有路由的 IPAdress、Vender、Packets、Bytes、Flows以及Connected Since信息一览无遗。

    (二)查看 Host列表及各个Host的信息



    图 1.5:Host界面

    同时继续利用 floodlight的自带 API让各主机的信息也完美地展现在了用户面前。

    (三)查看拓扑图



    图 1.6:Topology界面

    接着我们实现了查看拓扑结构的功能,用户还可以自由拖动图中的设备以达到最好的视觉化效果。

    (四)查看流表



    图 1.7:Flows界面

    点击 Switches界面中某个具体交换机,便可以进入并查看该交换机的具体信息,还提供了查看流表的功能。用户可以看到流的名称、Cookie、优先级、数据包数量等信息。

    (五)针对某个 Switch添加/删除Static Flow

    图 1.8:添加流表

    我们还给用户提供了增加和删除流表的功能。在流表的下方我们为用户提供了命令输入窗口,单击 Flow Pusher可出现一个输入框,在这里用户可以自主输入添加流表命令,比如示例命令如下:
    Shell
    curl -d '{"switch": "00:00:00:00:00:00:00:03", "name":"flow-mod-1", "cookie":"0",
    "priority":"32768", "ingress-port":"1","active":"true", "actions":"output=2"}'
    http://localhost:8080/wm/staticflowentrypusher/json
    单击 commit来添加流表。图 1.8是在添加流表,图1.9则是添加流表成功的样子。我们可以明显看到流表中多了一条记录。



    图 1.9:流表已添加

    删除和添加基本上一样,区别仅在于命令不同。这是删除上面添加的流表的示例命令:
    Shell
    curl -X DELETE -d '{"name":"flow-mod-1"}'
    http://localhost:8080/wm/staticflowentrypusher/json
    删除的动作如下。



    图 1.10:删除流表

    删除完成,点击确认后,删除流表。



    图 1.11:流表已删除

    (六)查看日志

    最后我们还完成了查看日志的功能。整个拓扑网络的日志监听完整地在这里反映出来了,并能够根据日志实时更新页面。页面的样子如下:



    图 1.12:日志显示


    作者简介:
    蒋暕青@上海宽带技术及应用工程研究中心:SDN技术实践者,大四北上思博伦实习半年,现工作地点上海
    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 16:55 , Processed in 0.090072 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表