运行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. 数据库连接字符串大全 资料引用:http://www.knowsky.com/339545.html

    转自:http://www.connectionstrings.com/ • SQL Server • ODBC ◦ Standard Security: "Driver={SQL Serv ...

  2. ERP基本功——物料的四个量

    ERP基本功——物料的四个量 在分析制造业管理问题的时候,如果能借用一些ERP里才会用到的概念,就会非常的简单,并且条理清晰. 我觉得柳中冈先生一再强调的一个观点非常有用,大意是这样的:任何人依据现有 ...

  3. Global::validateEmail

    /***************************************************************** (C) Copyright DENTSPLY Internatio ...

  4. ASP.NET中的母版页机制

    项目中用到了母版页,由于好长时间没用了,不太熟悉起原理,在网上找了一下: http://www.cnblogs.com/_zjl/archive/2011/06/12/2078992.html 有时间 ...

  5. Python线性时间排序——桶排序、基数排序与计数排序

    1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然 ...

  6. SQL Server中如何用mdf,ldf文件还原数据库

    不论是手动还原还是写个脚本还原,首先都要修改文件的属性为可读写,另外这个用户能够修改 1.手动Attach 2.写个脚本还原 我个人比较喜欢写个脚本去还原 Exec sp_attach_db @dbn ...

  7. 说说iOS中的手势及触摸

    一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResp ...

  8. 有关UIView、subview的几个基础知识点-IOS开发 (实例)

    环境是xcode4.3 首先要弄懂几个基本的概念. 一)三个结构体:CGPoint.CGSize.CGRect 1.  CGPoint /* Points. */ struct CGPoint { C ...

  9. google api , the problem of null refresh token

    http://stackoverflow.com/questions/10827920/google-oauth-refresh-token-is-not-being-received The ref ...

  10. Large-Scale Deployment of SharePoint Team Services

    http://technet.microsoft.com/en-us/library/cc723713.aspx