一种基于深度学习的SDN流表冲突检测装置及方法与流程

文档序号:11929811阅读:233来源:国知局
本发明涉及网络通信
技术领域
,具体涉及一种基于深度学习的SDN流表冲突检测装置及方法。
背景技术
:随着人们对网络应用需求的增加,数据中心的规模不断扩大,在传统网络基础架构的成本、管理、复杂性方面,网络运营商、服务供应商等面临着巨大的挑战。传统网络架构部署的高成本制约了数据中心的建设,而复杂性则推迟了新服务和新应用的上市时间。传统网络架构中不易对网络设备管理的特性进一步增加了企业的运营成本,并且降低了更新网络结构的响应速度。面对传统网络架构暴露出的高成本、高复杂性、低灵活度等问题,越来越多的企业和高校开始着手研究新型网络体系架构。2006年,美国斯坦福大学CleanSlate课题组提出了软件定义网络(SoftwareDefinedNetwork,SDN)的概念。SDN是一种新型的网络架构,斯坦福大学的研究团队提出的OpenFlow协议就是实现SDN的一种方式。2011年,开放网络基金会(OpenNetworkingFoundation,ONF)成立,这极大地推动了SDN和OpenFlow的发展。SDN的主要思想是将网络设备的控制平面和数据平面分离,以实现对网络的灵活控制。SDN网络本身就是一个灵活性的网络,其网络配置和运行都是自动化控制的。基于OpenFlow协议的SDN网络抽象化了路由设备和交换设备的控制面,数据平面的转发设备由OpenFlow控制器进行管理,以便对网络进行集中化管理,从而降低了网络的部署成本,并且提升了整个网络的管理性。OpenFlow是实现SDN的一种主要方式,利用OpenFlow控制器对OpenFlow交换机下发流表来阻止恶意流量对网络节点攻击的方式是提高基于OpenFlow的SDN网络安全性的一种重要方式。虽然OpenFlow能够实现对网络灵活控制,由于OpenFlow并没有提供流表冲突检测的处理机制,如果要对一个大型的OpenFlow网络中的所有流表进行自动部署和控制,仅仅通过OpenFlow控制器来管理是不够的。如果不对OpenFlow交换机中的流表进行冲突检测,那么OpenFlow控制器对OpenFlow交换机添加的某些安全策略之间存在冲突,这可能会使一些流表项一直不能执行,进而会使某些本来被防火墙阻止的数据包顺利通过,这给基于OpenFlow实现的SDN架构的网络带来了一定安全隐患,也不利于大型网络中SDN业务的自动部署。因此,需要一种用于检测流表冲突的应用来解决这些问题。虽然当前的某些OpenFlow控制器(如:Floodlight)具有简单的流表冲突检测功能,但是其流表冲突检测是功能单一的,而且是基于传统的算法来查找OpenFlow交换机中冲突的流表项。如果OpenFlow交换机中的流表数目非常庞大,那么使用传统的流表冲突检测算法来查找冲突流表项会增加控制器的运行负载、延缓流表的部署。2006年,GeoffreyHinton等人提出了深度学习的概念。深度学习是机器学习的一个分支,是机器学习中表征学习方法的一类。通过深度学习模型中的多个处理层,能够对数据进行高层抽象。深度学习网络类似于大脑的神经网络,大脑中的神经网络由数千亿的神经元连接而成,而深度学习网络同样由大量的人工神经元组成。深度学习使用复杂的线性或非线性的模型来表示数据之间的关系,然后训练大量的数据来确定数据之间的关系。目前,深度学习已经被Google、Facebook、Microsoft、百度等公司在语音识别、计算机视觉、自然语言处理等领域广泛应用,由AndrewNg领导的GoogleBrain团队已经创建了能够学习后识别高级概念图片的神经网络。然而,目前深度学习并没有在SDN架构下的网络环境中得到广泛应用,尤其是将深度学习应用到SDN的安全领域中。对流表进行冲突检测是SDN架构下保证网络安全和业务自动部署的一个重要前提,因此本发明将SDN与深度学习结合,提出一种基于深度学习的SDN流表冲突检测方法。该方法利用了深度学习抽象化高层数据、自动学习的特点,能够快速地对大量的流表项做出是否冲突的判断。检测流表冲突的模块独立于控制器,所以该模块还在一定程度上减轻了OpenFlow控制器的运行负载。技术实现要素:现有OpenFlow协议本身没有提供流表冲突检测的处理机制,尽管当前的某些OpenFlow交换机具有简单的流表冲突检测功能,但其流表冲突检测功能单一,并且采用了基于传统算法来查找OpenFlow交换机中的冲突的流表项。若是OpenFlow交换机中的流表数目非常庞大的话,那么使用传统的流表冲突检测算法在交换机中查找冲突流表项将会增加交换机的运行负担、延缓流表的部署,影响数据包正常的转发。本发明克服了以上不足,提出了一种基于深度学习的SDN流表冲突检测装置及方法。该发明利用了策略映射层将上层SDN应用映射成具体的流表项,然后将新生成的流表项输入到深度检测模块,深度检测模块利用学习好的模型判断流表项是否存在冲突。该发明利用了深度学习抽象化高层数据、自动学习的特点,相比于传统的冲突查找算法,在大规模应用部署时能更快速地对超大规模的流表项做出是否冲突的检测。本发明基于深度学习的SDN流表冲突检测装置,包括以下模块:(1)窗口分割模块:完成循环读取数据存储模块中的已有流表项,并对所有流表项按照适合于深度检测模块处理的窗口大小进行分割;(2)深度检测模块:提取新产生的流表项及数据存储模块中已经存在的流表项的特征,使用已学习好的深度学习模型,检测新产生的流表项是否与数据存储模块中已有的流表项存在冲突;(3)结果分析模块:对使用深度学习进行流表冲突检测后的结果进行处理;(4)监听模块:对所有转发设备(OpenFlow交换机)中的流表信息进行动态监听,并将转发设备中流表的动态变化结果反馈到数据存储模块中;(5)数据存储模块:存储当前SDN中所有OpenFlow交换机的流表。本发明还提供了一种基于深度学习的SDN流表冲突检测方法,该方法包括如下步骤:(1)将一个具体SDN应用在策略映射层(PolicyMapping)映射为具体的SDN流表项{P}后,将这些新的流表项输入到深度检测模块(DeepDetecting);(2)深度检测模块(DeepDetecting)启动窗口分割模块(windowsplitter);(3)窗口分割模块(windowsplitter)从数据存储模块(Database)中提取适合于深度检测模块(DeepDetecting)处理的窗口大小的流表项{W},并输出给深度检测模块(DeepDetecting);(4)深度检测模块(DeepDetecting)提取{P}及{W}中流表项的所有可能冲突的域作为深度学习模型的输入特征;(5)深度检测模块(DeepDetecting)利用已学习的深度学习模型进行检测,如检测到冲突,则记录{P}及{W}中冲突的具体流表项;(6)判断是否已检测完数据存储模块(Database)中的所有流表项:如未检测完,跳转到步骤3),否则将检测结果输入到结果分析模块(Resultanalysis)中,并跳转到步骤7);(7)结果分析模块(Resultanalysis)对检测结果进行分析判断,如存在冲突,将冲突的具体流表项告知策略映射层(PolicyMapping);如不存在冲突,则将新的流表项输出给控制器(Controller)进行下发。本发明的有益效果如下:(1)能够将SDN策略分解成若干流表项,然后分别将每条流表项与OpenFlow交换机中所有的流表项进行冲突检测。若存在冲突,则定位出具体的冲突流表项;否则,将分解后的流表项下发给OpenFlow控制器执行。(2)具备快速冲突检测的能力,在大型的SDN网络中能够快速地定位出冲突的流表项。(3)能够实时上报冲突的流表项,以便于网络管理员对即将下发的策略进行处理或对已部署的策略进行更改。(4)具备可移植性,能够使该系统兼容目前市场中的主流控制器,如OpenDaylight、RYU、Floodlight、POX等。附图说明图1是本发明实施例的SDN流表冲突检测装置系统架构图。图2是本发明实施例的SDN流表冲突检测示意流程图。具体实施方式在大型的SDN网络中,需要部署大量的复杂策略,若这些策略都由网络管理员来部署,则会既费时又费力。SDN网络中的策略自动部署是未来的趋势,SDN策略的自动部署将会大大节省网络管理员的时间成本。SDN网络中的配置问题是SDN安全威胁中的一类问题,而策略冲突是该类问题中的一方面内容。结合以上两种情况,需要一种能够对SDN策略部署进行快速冲突检测的方式来解决SDN网络中的部分安全问题。本发明提供了一种基于深度学习的SDN流表冲突检测装置及方法,主要用来解决大型SDN网络中自动部署策略时的冲突检测问题。下面结合附图以及实施例,对本发明进行进一步的说明。装置实施例根据本发明的实施例,提供了一种基于深度学习的SDN流表冲突检测装置。图1是整个流表冲突检测装置的示意图。该检测装置主要包括以下模块:窗口分割模块、深度检测模块、结果分析模块、监听模块及数据存储模块,以下对本发明实施例中的各个模块进行详细的说明。1)窗口分割模块:窗口分割子模块主要负责对存储在数据库中的所有流表项按固定窗口大小分割,以便深度学习模型对窗口进行冲突判断。窗口分割子模块包含了window_split(flow_entries)方法,该方法的接口定义如下:defwindow_split(flow_entries):returnflow_entry_windows功能:将交换机中的所有流表项按固定窗口大小进行分割。参数:flow_entries,所有流表项信息,为list类型,其中list中的值为字符串类型。返回:flow_entry_windows,固定大小窗口的流表项信息,为list类型;2)深度检测模块:提取新产生的流表项及数据存储模块中已经存在的流表项的特征,使用已学习好的深度学习模型,检测新产生的流表项是否与数据存储模块中已有的流表项存在冲突;3)结果分析模块:深度学习模型对所有的窗口检测完毕后,将模型的检测结果传递给结果分析子模块,该子模块给出最终的冲突检测结果。结果分析子模块包含analyze_result(flow_entry,flow_entry_windows),submit_conflict_info(conflict_info)issue_policy(flow_entries)方法,该方法的接口定义如下:3.1)defanalyze_result(flow_entry,flow_entry_windows):passreturnresult功能:分析即将下发的流表项是否与交换机中已存在的流表项存在冲突。参数:flow_entry,某条流表项信息,为字符串类型。flow_entry_windows,固定大小窗口的流表项信息,为list类型。返回:result,冲突结果,为list类型。如果不存在冲突,返回空;如果存在冲突,返回交换机中所有冲突的流表项信息。3.2)defsubmit_conflict_info(conflict_info):passreturnbool功能:将冲突的流表项信息上报给应用交互层。参数:conflict_info,冲突的流表项信息,为list类型,其中list中的值为字符串类型。返回:bool,成功或失败,为布尔类型。3.3)defissue_policy(flow_entries):pass功能:将不冲突的策略下发给控制层。参数:flow_entries,策略转换后的流表项信息,为list类型,其中list中的值为字符串类型;4)监听模块:监听模块需要实现对底层OpenFlow交换机中流表项的状态监听的功能,并将转发设备中流表的动态变化结果反馈到数据存储模块中,该模块包含了sniff_event()方法,该方法的接口定义如下:defsniff_event():passreturnflow_entry功能:监听交换机中流表项变化事件,一旦交换机中有流表变化,就将变化信息上报给数据库操作模块。参数:无。返回:flow_entry,变更的流表项,为list类型,其中list中的值为字符串类型5)数据存储模块:数据库操作模块主要负责对数据库中的流表项信息进行操作,包括对流表项信息的添加、删除等操作。该模块方法包含judge_operate_type(type),insert_entries(flow_entries),delete_entries(flow_entries),select_entries(switch_id,table_id),各方法的接口定义如下:5.1)defjudge_operate_type(type):pass功能:判断数据库操作的类型,以便后面调用相关的数据库操作。参数:type,操作类型,为字符串类型。返回:空。5.2)definsert_entries(flow_entries):passreturnbool功能:向数据库中插入下发的流表项信息。参数:flow_entries,所有下发的流表项信息,为list类型,其中list中的值为字符串类型。返回:bool,成功或失败,为布尔类型。5.3)defdelete_entries(flow_entries):passreturnbool功能:从数据库中删除需要删除的所有流表项信息。参数:flow_entries,需要删除的所有流表项信息,为list类型,其中list中的值为字符串类型。返回:bool,成功或失败,为布尔类型。5.4)defselect_entries(switch_id,table_id):passreturnflow_entries功能:查询某个交换机中某个流表的所有流表项。参数:switch_id,查询的交换机ID,为字符串类型;table_id,查询的流表ID,为整形。返回:flow_entries,查询到的所有流表项信息,为list类型,其中list中的值为字符串类型。方法实施例根据本发明的实施例,提供了一种基于深度学习的SDN流表冲突检测方法。如图2所示是本发明实施例的SDN流表冲突检测过程示意流程图。如图2所示,该发明实施例中的基于深度学习的SDN流表冲突检测方法包括如下处理:(1)将一个具体SDN应用在策略映射层(PolicyMapping)映射为具体的SDN流表项{P}后,将这些新的流表项输入到深度检测模块(DeepDetecting);(2)深度检测模块(DeepDetecting)启动窗口分割模块(windowsplitter);(3)窗口分割模块(windowsplitter)从数据存储模块(Database)中提取适合于深度检测模块(DeepDetecting)处理的窗口大小的流表项{W},并输出给深度检测模块(DeepDetecting);(4)深度检测模块(DeepDetecting)提取{P}及{W}中流表项的所有可能冲突的域作为深度学习模型的输入特征,如表1所示:表1深度模块冲突检测用到的特征集编号字段名称字段描述二进制位数1ETH_DST目的MAC地址482ETH_SRC源MAC地址483ETH_TYPE以太网协议类型164IPv4_SRC源IP地址325IPv4_DST目的IP地址326IPv4_SRC_MASK源IP地址的掩码327IPv4_DST_MASK目的IP地址的掩码328Label标签1深度学习模型都由Keras实现,Keras中构建模型的方法如下:4.1)模型的初始化:model=Sequential(),其中model为模型的名称。4.2)模型中层的添加:model.add(Layer),其中Layer为需要添加的层。全连接层:Dense(output_dim,input_dim/input_shape),其中output_dim为输出维度,input_dim/input_shape为输入维度。如果全连接层为模型的首层时,input_dim/input_shape必须指定;如果全连接层不是模型的首层,则input_dim/input_shape不需要指定。激活层:Activation(activation),其中activation为激活函数,激活函数有linear、relu、tanh、softplus、sigmoid、softmax等。卷积层:Convolution1D(nb_filter,filter_length,input_dim/input_shape),其中nb_filter为卷积核的数目,filter_length为卷积核的空域或时域长度,input_dim/input_shape为输入维度。4.3)模型编译:model.compile(self,optimizer,loss,metrics=[]),其中optimizer为优化器,优化器有sgd、rmsprop、adam、adadelta等;loss为目标函数,目标函数有mean_squared_error、mean_absolute_error、mean_absolute_percentage_error、binary_crossentropy、categorical_crossentropy等。4.4)模型训练:model.fit(self,x,y,batch_size,nb_epoch,validation_data),其中x为模型的输入数据,y为样本标签,batch_size指定进行梯度下降时每个batch包含的样本数,nb_epoch为训练的轮数,validation_data为指定的验证集。(5)深度检测模块(DeepDetecting)利用已学习的深度学习模型进行检测,如检测到冲突,则记录{P}及{W}中冲突的具体流表项;本系统采用MySQL数据库来存储流表项信息,因此数据库操作模块所有对流表项信息的操作方法都是基于MySQL数据库实现,存储流表项信息的数据库表结构如表2所示。表2存储流表信息的数据库表结构字段名类型字段说明属性idint记录ID非空switch_idvarchar交换机ID非空table_idvarchar流表ID非空app_idint下发的应用ID非空eth_dstvarchar目的MAC地址可空eth_srcvarchar源MAC地址可空eth_typevarchar以太网协议类型可空ipv4_srcvarchar源IPv4地址可空ipv4_dstvarchar目的IPv4地址可空ipv4_src_maskvarchar源IPv4地址的子网掩码可空ipv4_dst_maskvarchar目的IPv4地址的子网掩码可空数据库操作模块中定义了judge_operate_type(type),insert_entries(flow_entries),delete_entries(flow_entries),select_entries(switch_id,table_id)接口。judge_operate_type(type)实现的是对数据库操作类型的判断,数据库操作类型包含了“insert”、“delete”和“select”三种类型。insert_entries(flow_entries)实现的是在数据库中添加流表项信息的功能,该方法内部实现了entry_split()和ins_entry()两个方法。其中,entry_split()方法是对insert_entries(flow_entries)方法传入的多条流表项信息进行分割,(6)判断是否已检测完数据存储模块(Database)中的所有流表项:如未检测完,跳转到步骤3),否则将检测结果输入到结果分析模块(Resultanalysis)中,并跳转到步骤7);(7)结果分析模块(Resultanalysis)对检测结果进行分析判断,如存在冲突,将冲突的具体流表项告知策略映射层(PolicyMapping);如不存在冲突,则将新的流表项输出给控制器(Controller)进行下发。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1