运行Floodlight,在Mininet中新建一个拓扑之后,并未添加相关的流表项,但是主机之间却可以相互通信。执行pingall操作,任意两个主机之间都能通。相当于没有任何路由表的路由器,它是怎么让这些网络中的主机通信的呢?

原因在于Floodlight默认启用了Forwarding模块。说这个模块之前,首先说说Floodlight 中流表的两种添加方式:主动式和反应式。


官网上的文档是这么说的:
http://docs.projectfloodlight.org/display/floodlightcontroller/Static+Flow+Pusher+API

Proactive vs Reactive flow insertion

OpenFlow supports two methods of flow insertion: proactive and reactive. Reactive flow insertion occurs when a packet reaches an OpenFlow switch without a matching flow. The packet is sent to the controller, which evaluates it, adds the appropriate flows, and lets the switch continue its forwarding. Alternatively, flows can be inserted proactively by the controller in switches before packets arrive.

Floodlight supports both mechanisms of flow insertion. Static Flow Pusher is generally useful for proactive flow insertion.

Note that by default, Floodlight loads the Forwarding module which does reactive flow pushing. If you would like to exclusively use static flows, you must remove Forwarding from the floodlight.properties file.

主动式流插入与反应式流插入

OpenFlow协议支持两种流插入方式:主动式和反应式。当一个数据包到达OpenFlow交换机后,没有被任何现有的流匹配,这个包就被发到控制器。控制器对此数据包进行评估,然后向交换机添加合适的流,让交换机把此数据包(以及后来的类似的数据包)正确的转发下去。这就是反应式流插入。对应的主动式流插入则是,在数据包到达交换机之前,控制器已经向交换机中插入了流表。

Floodloght支持这两种插入方式。Static Flow Pusher 用于主动式流插入。

需要注意的是,Floodlight默认加载了Forwarding模块,这个模块会实现反应式流插入。如果你想排除这种临时流,只用自己写入的静态流,你需要在配置文件floodlight.properties 里移除Forwarding模块。


好,回到文章开始提出的问题:Floodlight默认启用了Forwarding模块,该模块的启用导致了没有流表的拓扑里,主机之间也能ping通。

可见,Forwarding模块实现的功能就是实现反应式流插入。当运行pingall操作时,Forwarding模块会产生很多“临时流表”,这种流表存活时间只有5s。因为这些临时流表的存在,主机之间才能通信。

以下是一个测试:

建立如下的拓扑:

执行 pingall 操作后立即在floodlight主页上查看5号交换机中的流表,如下图:

一共有10条流表项,有兴趣可以仔细分析一下,发现确实如此。同样的可以在3号交换机中看到10条,4号交换机中8条。

那么这种由Flowarding模块产生的流表项与通过python脚本(Static Flow Pusher API)写入的流表项是否一样呢?下图是通过 Static Flow Pusher 写入的流表项:

可以发现很多地方是不一样的。比如优先级,“临时流表”的优先级最低,是0。静态流表的Timeout为0,表示永久有效。ForwardingBase 类中可见定义:

public static int FLOWMOD_DEFAULT_IDLE_TIMEOUT = 5; // in seconds
public static int FLOWMOD_DEFAULT_HARD_TIMEOUT = 0; // infinite

Floodlight中的临时流表的更多相关文章

  1. openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)

    一.写在前面 唉,被分配到sdn安全方向,顶不住,顶不住,感觉搞不出来什么有搞头的东西.可若是让我水水的应付,我想我也是做不到的,世上无难事只怕有心人.好了,进入正题,本次要讨论的时一个比较细节的东西 ...

  2. SQL Server中的临时表和表变量

    SQL Server中的临时表和表变量 作者:DrillChina出处:blog2008-07-08 10:05 在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的 ...

  3. OVS 内核KEY值提取及匹配流表代码分析

    原文链接:http://ry0117.com/2016/12/24/OVS内核KEY值提取及匹配流表代码分析/ 当开启OVS后,创建datapath类型为system的网桥并他添加相关接口,OVS网桥 ...

  4. ovs源码阅读--流表查询原理

    背景 在ovs交换机中,报文的处理流程可以划分为一下三个步骤:协议解析,表项查找和动作执行,其中最耗时的步骤在于表项查找,往往一个流表中有数目巨大的表项,如何根据数据报文的信息快速的查找到对应的流表项 ...

  5. SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络

    邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工 ...

  6. FAST:通过Floodlight控制器下发流表

    参考: Floodlight+Mininet搭建OpenFlow(四):流表操作 通过Floodlight控制器下发流表 下发流表的方式有两种: 1.借助Floodlight的北向API,利用curl ...

  7. Openvswitch原理与代码分析(5): 内核中的流表flow table操作

      当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表Flow Table在内核中有一份,通过key查找内核中的flow table,即可以得到action,然后执行acti ...

  8. Floodlight下发流表过程分析

    https://blog.csdn.net/vonzhoufz/article/details/32166445 当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表 ...

  9. OpenFlow协议中如何提高交换机流表的匹配成功率

    写在前面 这段时间一直在研究如何提高流表空间的利用率.一直没能想到好的idea.有一篇文献中比较了现有研究中提到的手段,在这里记录一下都有哪些类型的手段以及这些手段存在的不足.这些手段不仅局限于如何提 ...

随机推荐

  1. 记一次linux samba服务问题调试

    linux下samba服务加入windows域控后,samba共享名与合法用户名不应一致,否则无法访问此共享.

  2. bootstrap2.3.2 modal 用href时有缓存

    $('body').on('hidden', '.modal', function () {$(this).removeData('modal');}); 直接在js里加入上面的代码就可以解决缓存问题 ...

  3. 一款jQuery打造的滚动条在底部滑出信息提示层

    一款jQuery打造的滚动条在底部滑出信息提示层, 当滚动鼠标滚轮,或者滚动条往下拉的时候,在右下角,弹出一个信息提示框. 有一点仿的是一个插件工具,就是网页中大家都长用到的友荐. 这款特效算一款简单 ...

  4. 【Qt】Qt之自定义界面(右下角冒泡)【转】

    简述 网页右下角上经常会出现一些提示性的信息,桌面软件中也比较常见,类似360新闻.QQ消息提示一样! 这种功能用动画实现起来很简单,这节我们暂时使用定时器来实现,后面章节会对动画框架进行详细讲解. ...

  5. Winform合并多个Excel文件到一个文件中(源文件.xls,实际是.xml)

    1.下面两个文件.xls是给的文件,实际上是.xml文件 2.具体的代码 private void btOK_Click(object sender, EventArgs e) { //0.获取路径文 ...

  6. Redis 一:安装篇

    .安装环境,虚拟机 + centos6. PS::前提已经安装了yum的情况下 第一步:安装 mkdir /usr/redis 新建redis目录 cd /usr/redis 进入目录 wget ht ...

  7. 边界函数Bounding Function(成长函数的上界)

    根据成长函数的定义,猜测    -->break point K restricts maximum possible mh(N) a lot for N>k bounding funct ...

  8. Posix 共享内存区

    要点 与mmap配合使用 open与shm_open的区别,open打开磁盘上的普通文件,shm_open创建和打开的文件在/dev/shm文件夹下,该文件夹对应的是内存 gcc编译时加参数-lrt ...

  9. Eclipse中查看JDK类库的源代码

    在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 “window”-> "Preferences" -> "Java" -> & ...

  10. using System.Threading.Tasks;

    using System.Threading.Tasks; .Net并行库介绍——Task1