基于流表项删除的测试与分析

一 测试目的

本测试的目的是为了得知在运行openflow协议的SDN网络中,交换机上的流表项的生存时间问题,即流表项被生成后在流表中持续时间的问题。我们知道流表项中的timeout字段为流表项维护了最大空闲时间(idle_timeout),也就是一条流表项不再匹配数据包时能够持续的最大时间。那么这个idle_timeout的默认值是多少,当这个时间计数器结束后流表项是否被删除,以及能否手动配置这个时间字段是本测试的主要目的。

二 分析方法

   可以通过软件实现本次测试。Floodlight是一个SDN控制器,可以获取数据层的链路以及流信息。Mininet是一个软件虚拟化平台,可以用来模拟SDN中的网络拓扑,可以灵活地构件自定义的网络拓扑,并连接到控制器,形成一个SDN网络环境。OpenvSwitch(OVS)是一个虚拟交换机,支持Openflow协议,在其上可以灵活地进行配置,比如增加或者删除一条流表项等,并可以通过控制器来远程获取交换机上的数据信息。因此本次实验就是基于以上的虚拟化平台进行的。

三 过程与结果

3.1 Floodlight+Mininet实验

3.1.1实验目的:本实验的目的是为了得到idle_timeout的默认值,并且通过实验观察该计数器结束后,流表项是否被删除。

3.1.2实验过程

在mininet环境下创建一个depth=3,fanout=2的树形拓扑结构,如下图所示

图3-1-1 拓扑环境建立图

首先,在网络初始时,通过控制器的REST API查看当前所有交换机中的流信息,入下所示:


图3-1-2 

 

可以看到,网络中的7台交换机都是没有流数据的。

接下来,对主机h1和h5进行ping连接,:


图3-1-3 主机h1和h2 PING连接图

此时立即通过控制器的REST API查看当前所有的交换机中的流信息:


图3-1-4当前所有交换机中流信息显示

接下来断开PING连接,立即查看控制器的web端口所显示的数据,通过反复的刷新界面,以及重复实验,发现在平均5s之后,流表数据完全被删除。


图3-1-5约5s后所有交换机中流信息显示

 

 

 

 3.2 Floodlight+OVS实验

3.2.1实验目的:

在OVS上新建流表项,并设置好这些流表的idle_timeout时间,并在Floodlight控制器提供的web端口上观察流表信息,验证idle_timeout时间结束以后这些流表是否结束。

 

3.2.2实验过程:

1) 实验环境搭建:

在640服务器上安装OVS和Floodlight控制器,并由Floodlight实现对OVS的控制。查看目前OVS上的配置信息(Floodlight所在的服务器的ip为:10.103.24.66;网桥BYOD的IP为:10.103.26.148)

图3-2-1 网桥BYOD的配置信息

 

2)在OVS上添加流表项:

在OVS上可以手动添加流表项,并且自定义流表项的字段信息。为了实验验证,主要对idle_timeout字段进行配置。

 

2.1首先添加一条流表项,而不配置其idle_timeout字段,发现这条流表项会一直存在于流表中而不被删除。如下所示:

添加一条流表项“priority=1,in_port=12,actions=output:1”

图3-2-2 添加一条流表项

通过Floodlight提供的REST API,获取流表信息,如下:

{"00:00:b8:2a:72:d1:a1:bd":{"flows":[{"version":"OF_10","cookie":"0","tableId":"0x0","packetCount":"0","byteCount":"0","durationSeconds":"1077","priority":"1","idleTimeoutSec":"0","hardTimeoutSec":"0","match":{"in_port":"12"},"actions":{"output":"1"}}]}}

发现这条流表项的默认idletime被设置为0,当下的持续存在时间为:1077s,并且这条流会一直存在而不被删除。

 

2.2添加两条流表项,配置其idle_timeout分别为10s和20s。过程如下:

添加一条流表项“priority=1,in_port=12,actions=output:1”

添加一条流表项“priority=1,in_port=12, idle_time=20,actions=output:1”


图3-2-3 添加一条流表项 

在添加流表项之前,通过Floodlight REST API得到的流表集合信息如下:

{"00:00:b8:2a:72:d1:a1:bd":{"flows":[]}}

说明此时网络中没有流表项。

 

在添加完以上两条流表以后,可以看到Floodlight的REST API上的流表集合为:

{"00:00:b8:2a:72:d1:a1:bd":{"flows":[{"version":"OF_10","cookie":"0","tableId":"0x0","packetCount":"0","byteCount":"0","durationSeconds":"2","priority":"1","idleTimeoutSec":"10","hardTimeoutSec":"0","match":{"in_port":"12"},"actions":{"output":"1"}},{"version":"OF_10","cookie":"0","tableId":"0x0","packetCount":"0","byteCount":"0","durationSeconds":"1","priority":"1","idleTimeoutSec":"20","hardTimeoutSec":"0","match":{"in_port":"11"},"actions":{"output":"1"}}]}}
 
在10s过后,流表集合的信息如下:
{"00:00:b8:2a:72:d1:a1:bd":{"flows":[{"version":"OF_10","cookie":"0","tableId":"0x0","packetCount":"0","byteCount":"0","durationSeconds":"11","priority":"1","idleTimeoutSec":"20","hardTimeoutSec":"0","match":{"in_port":"11"},"actions":{"output":"1"}}]}}
 
20s过后,信息如下:
{"00:00:b8:2a:72:d1:a1:bd":{"flows":[]}}
这说明,在idle_timeout计数结束之后,这条流表项就会被删除。


四 分析与结论

通过以上的实验,可以发现。在Floodlight和mininet实验结果中发现默认的idle_timeout字段的值为5s,并且这个计数器结束后,流表项即刻被删除。在Floodlight和OVS的实验结果中,可以发现OVS可以手动配置流表项的idle_timeout字段,并且该字段维护的时间结束后,流表项即刻被删除。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值