OpenFlow协议中如何提高交换机流表的匹配成功率
写在前面
这段时间一直在研究如何提高流表空间的利用率。一直没能想到好的idea。有一篇文献中比较了现有研究中提到的手段,在这里记录一下都有哪些类型的手段以及这些手段存在的不足。这些手段不仅局限于如何提高流表空间的利用率,更把范围拓展至如何提高交换机流表的匹配成功率。
背景
软件定义网络(Software Defined Network,SDN)作为一种新的架构,利用分层的思想将控制平面和数据平面分离,为网络的部署和配置提供了极大的灵活性和可扩展性。
然而当前的SDN网络只能对L2~L4层的信息进行识别,控制器在制定流表项的timeout值时,将所有的数据流同等对待,导致交换机中流表的匹配成功率只有不到20%,极大地增加了控制器的负担,降低了网络的整体性能。
解决手段
- 增加流表的容量
- 思路: 通过在交换机中增加缓存的方式,来存放因为hard_timeout时间到达而被删除的频繁匹配的流表项,以此来提高流表的匹配率。
- 不足: 本质上只是增加了流表的容量,这种方式显然不能跟上SDN发展的速度;同时流表项在缓存中的匹配速率相比TCAM,性能要差很多。
- 相关文献: 《Flow table management scheme applying an LRU caching algorithm》,ICTC,2014
- 控制器中增加一个缓存模块
- 思路: 通过增加的缓存模块来记录流表项的到期时间,将流表项被再次安装的时间和到期时间的差值作为流表项的更新依据。
- 不足: 这种方式对因为idle_timeout超时导致的流表频繁更新存在只增不减的弊端。
- 相关文献: 《Intelligent timeout master:dynamic timeout for SDN—based data centers》,IFIP/IEEE,2015
- 预测无用的流表项
- 思路: 通过预测的方式,提前将最近一段时间内不会被匹配的流表项删除,预留流表空间给即将到来的数据流。
- 不足: 这种方式不可避免的会出现误判的情况,可能导致有用的流表项被删除,而真正无用的方式却占据流表空间。但是如果能够完善预测的机制,这种方法仍然是一个理想的idea。
- 相关文献: 《FlowMaster:early eviction of dead flow on SDN switche》,the 15th International Conference on Distributed Computing and Networking,2014
《A dynamic timeout control algorithmin software defined networks》,IJFCC,2014
- 将流表的工作方式类比为排队系统
- 思路: 将流表模型化为状态依赖的排队模型,并借助排队论定量地分析了hard_timeout对流截断次数和阻塞概率的影响。
- 不足: 基于hard_timeout超时机制的模型,灵活性较差,对于网络中数据传输时间参差不齐的数据包,不能很好地满足传输需求。
- 相关文献: 《AHTM:achieving efficient flow table utilization in software defined networks》,the 2014 IEEE Global Communications Conference,2014
- 考虑控制器的处理能力
- 思路: 以上提到的方法都没有将控制器的处理能力作为动态修改timeout
值的制约因素。可以将控制器单位时问内能够处理的
packet-in请求数作为约束条件,以满足该条件的最小idle_timeout值作为最终结果,从而实现满足控制器处理能力情况
下,最大限度地提高流表匹配率的目的。 - 不足: 该过程假设所有数据流都具有相同分布参数,没有考虑不同数据流类型间的特征差异。
- 相关文献: 《Effective idle_timeout value for instant messaging in software defined network》,the 2015 IEEE International Conference on Communication Workshop,2015
- 思路: 以上提到的方法都没有将控制器的处理能力作为动态修改timeout
- SDN网络中增加数据流类型感知技术
- 这个技术不太理解,需要进一步阅读。
- 相关文献: 《SDN-based application—Aware networking on the example of YouTube video》,2013 Second European Workshop on Software Defined Networks,2013
《Application—Awareness in SDN》, the ACM SIGCOMM 2013 conference on SIGCOMM,2013
- 综合利用数据流类型信息和网络资源使用情况
- 思路:
在L2~L4层网络信息的基础上,增加数据流特征信息区分音频流、视频流和普通文本流等数据流类型,从而为不同流类型数据包的流数据包表项制定不同的timeout值,能够在满足控制器处理能力的情况下,最大限度地利用流表资源,从而提高流表的匹配率 - 不足: 仅仅将数据流分为三大类,没有将数据流进行更细的划分,从而对流表项的更新实现更细粒度的控制。
- 相关文献: 《Intelligent update method for flow table in switch through analyzing data flow characteristics》,IJCA,2016
- 思路:
总结
- 目前我看到的针对流表的更新问题相关的文献,主要是分成三种类型:
- 寻找流表的匹配规律,来动态的更新timeout值,从而提高流表的匹配率。
- 提前移除无效的流表项,无论是通过预测的方式还是数据包本身可以明确的判断这个流即将关闭连接。
- 综合利用数据流类型信息和网络资源使用情况来更新流表。
OpenFlow协议中如何提高交换机流表的匹配成功率的更多相关文章
- OVS中arp响应的流表的实现
总结: 1.br-int 流表总体是按照Normal 的方式,即常规的交换机的转发方式进行转发.而br-tun 交换机则主要按照流表的方式进行转发. 2.一般情况下,VM发出的ARP请求,会在该VM的 ...
- ovs源码阅读--流表查询原理
背景 在ovs交换机中,报文的处理流程可以划分为一下三个步骤:协议解析,表项查找和动作执行,其中最耗时的步骤在于表项查找,往往一个流表中有数目巨大的表项,如何根据数据报文的信息快速的查找到对应的流表项 ...
- SDN学习之OpenFlow协议分析
学习SDN相关的学习也已经有快半年了,期间从一无所知到懵懵懂懂,再到现在的有所熟悉,经历了许多,也走了不少弯路,其中,最为忌讳的便是,我在学习过程中,尚未搞明白OpenFlow协议的情况下,便开始对S ...
- openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)
一.写在前面 唉,被分配到sdn安全方向,顶不住,顶不住,感觉搞不出来什么有搞头的东西.可若是让我水水的应付,我想我也是做不到的,世上无难事只怕有心人.好了,进入正题,本次要讨论的时一个比较细节的东西 ...
- SDN原理 OpenFlow协议 -2
本文由SDN原理视频而成:SDN原理 流表 FlowTable --- OpenFlow的核心 问题3 流表项 Flow Entry 单流表(OpenFlow 1.0版本) -> 多流表(Ope ...
- SDN学习之Mininet验证OpenFlow协议版本
最近学习如何使用mininet,但是,刚刚开始时一直无法知道如何查看OpenFlow协议的版本,通过查阅网上的资料,从SDNLAB中,学习到了如何验证,mininet自身基于OpenFlow13版本的 ...
- OpenFlow协议1.0及1.3版本分析
OpenFlow是SDN控制器和交换之间交流的协议,在SDN领域有着十分重要的地位. OpenFlow协议发展到现在已经经过了1.0.1.3.1.4等版本.其中1.0和1.3版本使用的是最为广泛的. ...
- Openflow协议详解
http://www.h3c.com/cn/d_201811/1131080_30005_0.htm# 1 OpenFlow背景 转发和控制分离是SDN网络的本质特点之一 .在SDN网络架构中,控制平 ...
- SDN原理 OpenFlow协议 -4
通道 Channel 在前面的OpenFlow的内容中,我们提到了在交换层所采用的流表是控制层的Controller下发的,那么Controller是如何下发流表的呢?中间经过了哪些的流程和步骤?控制 ...
随机推荐
- Spring学习(三)-----Spring自动装配Beans
在Spring框架,可以用 auto-wiring 功能会自动装配Bean.要启用它,只需要在 <bean>定义“autowire”属性. <bean id="custom ...
- Ubuntu系统python3版本设置问题
参照:https://blog.csdn.net/wangguchao/article/details/82151372
- const与readonly常量
const与readonly常量 const与readonly都是用来定义常量,但是它们有什么区别呢? 下面我们来简要的说明一下: const修饰的常量是编译时常量,如:public const St ...
- 第四篇 Postman之Pre-request Script(前置处理器:JS之 YYYY-MM-DD HH:MM:SS)
本篇来讲讲Pre-request Script 前置处理器,定义在发送request之前需要运行的一些脚本,应用场景主要是设置全局变量和环境变量. 本例子也是项目中遇到的,需要修改与客户的预约时间,但 ...
- sql server 批量备份数据库
很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: --开启文件夹权限 ...
- sql server 查询所有被锁表并批量解除
废话不多说,直接上代码: --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) table ...
- Javac提示不是内部或外部命令
1.先去百度搜索"jdk下载"下载最新版jdk,并安装,安装目录不用去更改,直接默认就好,下载完了之后,双击打开安装,jdk安装完成后,会接着安装jre包,(jre和jdk是配对的 ...
- 微软职位内部推荐-Senior Software Lead-Index Gen
微软近期Open的职位: Position: Senior Software Development Lead Bing Index Generation team is hiring! As one ...
- sip鉴权认证算法详解及python加密
1. 认证和加密 认证(Authorization)的作用在于表明自己是谁,即向别人证明自己是谁.而相关的概念是MD5,用于认证安全.注意MD5仅仅是个hash函数而已,并不是用于加密.因为ha ...
- 《Linux内核与分析》第五周
20135130王川东 一.给MenuOS增加time和time-asm命令 命令:1.强制删除:rm menu -rf 2.克隆:git clone (后跟需要克隆数据所在的位置) 3.自动编译,自 ...