51学通信论坛2017新版

标题: 使用PHP重新设计Floodlight的web界面 [打印本页]

作者: admin    时间: 2017-9-17 13:11
标题: 使用PHP重新设计Floodlight的web界面
</p>一、实验目的

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

二、实验原理-程序设计

我们基于 Floodlight现有的API实现了一个简单的 Web站点,主要功能有:

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

[attach]1040[/attach]


图 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所示:

[attach]1041[/attach]


图 1.2:Command Proxy流程

(四)Web Interface

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

三、实验过程及结果

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

[attach]1042[/attach]


图 1.3:web主界面

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

[attach]1043[/attach]

图 1.4:Switches界面

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

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

[attach]1044[/attach]

图 1.5:Host界面

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

(三)查看拓扑图

[attach]1045[/attach]

图 1.6:Topology界面

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

(四)查看流表

[attach]1046[/attach]

图 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则是添加流表成功的样子。我们可以明显看到流表中多了一条记录。

[attach]1047[/attach]


图 1.9:流表已添加

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

[attach]1048[/attach]


图 1.10:删除流表

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

[attach]1049[/attach]


图 1.11:流表已删除

(六)查看日志

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

[attach]1050[/attach]


图 1.12:日志显示


作者简介:
蒋暕青@上海宽带技术及应用工程研究中心:SDN技术实践者,大四北上思博伦实习半年,现工作地点上海
声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。




欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/) Powered by Discuz! X3