第2小题:流表管理
-------------温州大学 12网工
一、 实验目的
利用控制器提供的API(例如REST API),开发一个网络及流表管理工具(客户端,网页端均可)。管理工具可以显示网络拓扑结构,查看流表,增加流表,删除流表。
二、 实验原理-程序设计
我们基于Floodlight现有的API实现了一个简单的Web站点,主要功能有:
l 查看Switch列表及各个Switch的信息
l 查看Host列表及各个Host的信息
l 查看拓扑图
l 查看流表
l 针对某个Switch添加/删除Static Flow
l 查看日志
程序的架构设计如图1.1所示:
图1.1:架构设计
底层虚拟机上的操作系统上安装有Mininet,通过Mininet我们可以创建多种类型的拓扑,并且可以把floodlight controller设置为远程,在我们的方案中floodlight安装在虚拟机的宿主机上。Floodlight负责监听和控制虚拟机中拓扑的动态。我们在宿主机上又搭建了一个网站,网站后端即Command Proxy负责转发前端Web Interface的操作请求给Floodlight,Floodlight通过REST API接口开放。前端Web Interface负责发出操作请求并在页面上展示整个拓扑的状态并提供操作接口以便用户能够添加/删除flows。
(一)Mininet Virtual Network
1.1 Mininet介绍
Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。Mininet可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用ssh登录,启动应用程序,程序可以向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。
Mininet的特性包括可以简单、迅速地创建一个支持用户自定义的网络拓扑,缩短开发测试周期。可以运行真实的程序,在Linux上运行的程序基本上可以都可以在Mininet上运行,如WiresharkMininet。支持Openflow,在Mininet上运行的代码可以轻松移植到支持OpenFlow的硬件设备上。Mininet可以在自己的电脑,或服务器,或虚拟机,或者云(例如Amazon EC2)上运行。Mininet提供python API,简单易用。
1.2 基于Mininet拓扑搭建
拓扑搭建方面我们使用了Mininet,我们在VirtualBox安装Mininet虚拟 机。利用它可以非常方便的模拟出一个网络。例如,模拟出一个如提高题1 中的网络的命令为:
>>sudo mn --custom /home/ubuntu/mininet/custom/proxy-access.py --topo mytopo --switch ovsk --controller=remote,ip=192.168.181.129,port=6633
Mininet可以连接到Floodlight作为Controller,Controller可以是本地的 或者远程的。默认情况下一个Mininet虚拟网络中的Swicth只能使用同一个 Controller,但是可以通过编写自定义脚本的方式来构建Mininet拓扑,并且 在其中显示的指定多个Controller。
(二)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界面
首先为用户提供了可视化界面来查看路由的列表,所有路由的IP Adress、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可出现一个输入框,在这里用户可以自主输入添加流表命令,比如示例命令如下:
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:流表已添加
删除和添加基本上一样,区别仅在于命令不同。这是删除上面添加的流表的示例命令:
curl -X DELETE -d '{"name":"flow-mod-1"}' http://localhost:8080/wm/staticflowentrypusher/json
删除的动作如下。
图1.10:删除流表
删除完成,点击确认后,删除流表
图1.11:流表已删除
(六)查看日志
最后我们还完成了查看日志的功能。整个拓扑网络的日志监听完整地在这里反映出来了,并能够根据日志实时更新页面。页面的样子如下:
图1.12:架构设计