Floodlight中的临时流表
运行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中的临时流表的更多相关文章
- openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)
一.写在前面 唉,被分配到sdn安全方向,顶不住,顶不住,感觉搞不出来什么有搞头的东西.可若是让我水水的应付,我想我也是做不到的,世上无难事只怕有心人.好了,进入正题,本次要讨论的时一个比较细节的东西 ...
- SQL Server中的临时表和表变量
SQL Server中的临时表和表变量 作者:DrillChina出处:blog2008-07-08 10:05 在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的 ...
- OVS 内核KEY值提取及匹配流表代码分析
原文链接:http://ry0117.com/2016/12/24/OVS内核KEY值提取及匹配流表代码分析/ 当开启OVS后,创建datapath类型为system的网桥并他添加相关接口,OVS网桥 ...
- ovs源码阅读--流表查询原理
背景 在ovs交换机中,报文的处理流程可以划分为一下三个步骤:协议解析,表项查找和动作执行,其中最耗时的步骤在于表项查找,往往一个流表中有数目巨大的表项,如何根据数据报文的信息快速的查找到对应的流表项 ...
- SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络
邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工 ...
- FAST:通过Floodlight控制器下发流表
参考: Floodlight+Mininet搭建OpenFlow(四):流表操作 通过Floodlight控制器下发流表 下发流表的方式有两种: 1.借助Floodlight的北向API,利用curl ...
- Openvswitch原理与代码分析(5): 内核中的流表flow table操作
当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表Flow Table在内核中有一份,通过key查找内核中的flow table,即可以得到action,然后执行acti ...
- Floodlight下发流表过程分析
https://blog.csdn.net/vonzhoufz/article/details/32166445 当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表 ...
- OpenFlow协议中如何提高交换机流表的匹配成功率
写在前面 这段时间一直在研究如何提高流表空间的利用率.一直没能想到好的idea.有一篇文献中比较了现有研究中提到的手段,在这里记录一下都有哪些类型的手段以及这些手段存在的不足.这些手段不仅局限于如何提 ...
随机推荐
- Logstash+kibana+ ElasticSearch+redis
这是之前Logstash+kibana+ ElasticSearch+redis 安装时,自己整理的初学者容易看懂的资料,按照以下的步骤也已经完成了安装. 这里有二台服务器: 192.168.148. ...
- 我们为什么要使用 href="javascript:void(0)"
做过web前端UI的小伙伴们都知道,有时候我们在网页中会使用一些超级链接,而这些链接不用指向任何地址,只是为了配合javascript的onclick事件而存在的,当我们点击这些链接时(其实也可以看做 ...
- PHP CodeIgniter(CI)去掉 index.php
去掉CodeIgniter(CI)默认url中的index.php的步骤: 1.打开apache的配置文件,conf/httpd.conf : LoadModule rewrite_module mo ...
- SOAP Web 服务介绍
已经跨入 2015 年,当今最为常见的两种 Web 服务类型分别是: REST 和 SOAP .不过,从趋势来看,越来越多人已经开始使用 REST 风格的 Web 服务.而 SOAP 大多也开始或已经 ...
- sql拆分查询
有这样一个需求: 临时表sql: create table #AA ( ID int, Name nvarchar(20) ) insert #AA select 1,'苏州/上海/温州' union ...
- 1014. Waiting in Line (30)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...
- 系统架构师JD
#################################################################################################### ...
- OpenWRT 路由配置技巧
随着最近 Google 在国内已经完全无法访问,使得通过 VPN 访问网络的需求更加强烈,本文介绍的方法可以使一个普通的路由具备稳定连接 VPN 的能力,并能够根据目标访问网站选择国内外线路,从而得到 ...
- int main(int argc,char* argv[])参数详解
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[] ...
- Windows 7 搭建 nodejs、npm、express 环境
准备工作: 下载nodejs (exe format)(http://nodejs.org/) 下载npm(zip format)(http://nodejs.org/dist/npm/) 开始安装 ...