CN109725925B - 用于检测多个软件定义网络sdn应用之间的冲突的方法 - Google Patents

用于检测多个软件定义网络sdn应用之间的冲突的方法 Download PDF

Info

Publication number
CN109725925B
CN109725925B CN201811504826.6A CN201811504826A CN109725925B CN 109725925 B CN109725925 B CN 109725925B CN 201811504826 A CN201811504826 A CN 201811504826A CN 109725925 B CN109725925 B CN 109725925B
Authority
CN
China
Prior art keywords
output
openflow message
openflow
sdn
message set
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811504826.6A
Other languages
English (en)
Other versions
CN109725925A (zh
Inventor
王之梁
李亚慧
尹霞
施新刚
吴建平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN201811504826.6A priority Critical patent/CN109725925B/zh
Publication of CN109725925A publication Critical patent/CN109725925A/zh
Application granted granted Critical
Publication of CN109725925B publication Critical patent/CN109725925B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种用于检测多个软件定义网络SDN应用之间的冲突的方法。该方法通过利用符号执行工具对待测的多个SDN应用中的每个SDN应用的每个输入OpenFlow消息进行处理,并基于处理结果来检测多个SDN应用两两之间是否存在冲突,从而可以实现在部署多个SDN应用之前预先检测多个SDN应用之间是否存在冲突,具有很好的应用前景。

Description

用于检测多个软件定义网络SDN应用之间的冲突的方法
技术领域
本发明涉及软件定义网络(Software Defined Network,SDN)验证技术领域,尤其涉及一种用于检测多个软件定义网络SDN应用之间的冲突的方法。
背景技术
软件定义网络SDN是由Emulex提出的一种新型网络创新架构,其通过将网络设备控制面与数据面解耦,来简化数据面的转发并为控制面提供可编程性,从而大大地方便了新型网络功能的开发与部署。用户可以通过开发部署SDN应用来实现各种各样的策略以保证网络的可用性和安全性。随着各种SDN开源控制器(例如,ONOS,Floodlight)的发展,越来越多的SDN应用被开发部署。
OpenFlow协议定义了控制器(Controller)和交换机(Switch)通信过程的消息类型和格式。控制器通过OpenFlow协议与交换机建立安全通道,SDN应用通过控制器对交换机下发或删除用于定义报文转发规则的流表来管理网络的不同方面。为了实现各种各样的网络策略,许多SDN应用(例如,防火墙(Firewall),负载均衡(Load Balancer)等)被部署到同一个控制器上。事实上,来自不同方的SDN应用将使网络的控制逻辑变得复杂,且可能有意或无意地在同一台交换机上安装具有相同匹配域(match)和冲突的动作域(action)的规则,从而导致多个SDN应用之间产生冲突,致使网络故障或网络性能下降。目前,这个问题在SDN领域比较普遍,一些SDN控制器***依赖于各SDN应用之间的优先级来避免冲突。然而,即使各SDN应用具有明确的优先级,如何利用优先级处理各SDN应用的输出仍然是棘手的问题。因此,为了避免在部署多个SDN应用之后出现用户所不期待的行为,预先检测多个SDN应用之间的冲突是唯一的解决方案。
之前,研究者们提出了一些验证SDN应用的正确性的方案。例如,1)以NICE和Vericon为代表的验证工具,该验证工具是基于模型检测或定理证明等形式化方法来验证网络的正确性属性是否被违反,但是,该验证工具仅针对单一SDN应用进行验证,不能验证多个SDN应用之间的正确性;2)以VMN和HSA为代表的验证工具,该验证工具用于验证数据面的流表是否违反网络的正确性属性,但是,其并不能在部署SDN应用之前预先检测多个SDN应用之间的冲突;3)利用以Netcore和Frenetic为代表的新型控制器进行验证,该控制器在编译器中利用模型检测等形式化方法来避免SDN应用在交换机上安装可能导致冲突的规则,但是,这种验证方法只能支持某一种北向接口语言,无法支持现有控制器(例如,ONOS,Floodlight等)在编译器上的应用。由此可见,以上这些方法都不能预先检测多个SDN应用之间的冲突。
为了解决上述技术问题,本发明提供了一种用于检测多个软件定义网络SDN应用之间的冲突的方法,该方法无需改动控制器内核即可以在部署多个SDN应用之前预先检测多个SDN应用之间的冲突。
发明内容
本发明所要解决的技术问题是:现有技术中的方法不能在部署多个SDN应用之前预先检测多个SDN应用之间的冲突。
为了解决上述技术问题,本发明提供了一种用于检测多个软件定义网络SDN应用之间的冲突的方法,包括:
针对待测的多个SDN应用中的每个SDN应用,均执行以下操作:
获取该SDN应用的源代码和所有输入OpenFlow消息;
根据该SDN应用的源代码包含的各事件处理器的属性信息,确定各事件处理器所要处理的输入OpenFlow消息,其中,各事件处理器所要处理的输入OpenFlow消息的总和构成所有输入OpenFlow消息;
针对每个输入OpenFlow消息均执行以下操作:
利用与所述源代码的语言类型对应的符号执行工具,对该输入OpenFlow消息进行处理,得到与该输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集,所述第一输出OpenFlow消息集为与每条可执行路径对应的输出OpenFlow消息的集合;
利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解,并基于求解结果,对与每条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第二输出OpenFlow消息集,所述第二输出OpenFlow消息集为对所述第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合;
对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第三输出OpenFlow消息集,所述第三输出OpenFlow消息集为对所述第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合;
利用与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,检测多个SDN应用两两之间是否存在冲突。
在本发明一优选实施例中,利用与所述源代码的语言类型对应的符号执行工具,对输入OpenFlow消息进行处理,得到与该输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集,包括:
利用与SDN应用的源代码的语言类型对应的符号执行工具,将该SDN应用的各输入OpenFlow消息包含的相关变量指定为符号变量,其中,所述相关变量为在检测多个SDN应用之间的冲突的过程中所需使用的变量;
利用所述符号执行工具运行该SDN应用的源代码包含的各事件处理器,得到与该SDN应用的各输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集。
在本发明一优选实施例中,该方法还包括:将SDN应用的各输入OpenFlow消息包含的无关变量赋予具体值,其中,所述无关变量为在检测多个SDN应用之间的冲突的过程中无需使用的变量。
在本发明一优选实施例中,该方法还包括:根据与SDN应用的各输入OpenFlow消息包含的流表的各个域在软件定义网络SDN中的具体含义,将与该SDN应用的各输入OpenFlow消息包含的各符号变量的取值范围限定在预设范围内。
在本发明一优选实施例中,利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解,并基于求解结果,对与每条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第二输出OpenFlow消息集,包括:
针对与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径,均执行以下操作:
利用约束求解器对与该条可执行路径对应的路径约束条件进行求解;
在约束求解器返回结果为有解的情况下,为与该条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息包含的各符号变量赋予求解得到的具体值,得到与该条可执行路径对应的第二输出OpenFlow消息集;
在约束求解器返回结果为无解的情况下,去除与该条可执行路径对应的第一输出OpenFlow消息集,得到与该条可执行路径对应的第二输出OpenFlow消息集,其中,该第二输出OpenFlow消息集为空集。
在本发明一优选实施例中,所述输出OpenFlow消息包含的流表的动作域中含有重置动作或者不含有重置动作。
在本发明一优选实施例中,对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第三输出OpenFlow消息集,包括:
针对与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第二输出OpenFlow消息集,均执行以下操作:
根据该第二输出OpenFlow消息集中的各输出OpenFlow消息的属性信息,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行分类;
根据分类结果,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集。
在本发明一优选实施例中,根据分类结果,对第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集,包括:
在第二输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都不含有重置动作的情况下,该第二输出OpenFlow消息集中的各输出OpenFlow消息保持不变,则与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集包含的各输出OpenFlow消息与该第二输出OpenFlow消息集包含的各输出OpenFlow消息保持一致;
在第二输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都含有重置动作的情况下,去除该第二输出OpenFlow消息集中的各输出OpenFlow消息,则与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集为空集。
在本发明一优选实施例中,根据分类结果,对第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集,还包括:
在第二输出OpenFlow消息集中的一部分输出OpenFlow消息包含的流表的动作域中含有重置动作、且另一部分输出OpenFlow消息包含的流表的动作域中不含有重置动作的情况下,利用预设合成规则,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集。
在本发明一优选实施例中,利用与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,检测多个SDN应用两两之间是否存在冲突,包括:
从待测的多个SDN应用中任取两个SDN应用,得到第一SDN应用和第二SDN应用;
获取与第一SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息、以及与第二SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息;
分别从与第一SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中、以及从与第二SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中各任取一个输出OpenFlow消息,得到第一输出OpenFlow消息和第二输出OpenFlow消息;
根据第一输出OpenFlow消息和第二输出OpenFlow消息的属性信息,利用预设判断规则,判断第一SDN应用与第二SDN应用是否存在冲突。
与现有技术相比,上述方案中的一个或多个实施例可以具有如下优点或有益效果:
应用本发明实施例提供的用于检测多个软件定义网络SDN应用之间的冲突的方法,通过利用符号执行工具对待测的多个SDN应用中的每个SDN应用的每个输入OpenFlow消息进行处理,并基于处理结果来检测多个SDN应用两两之间是否存在冲突,从而可以实现在部署多个SDN应用之前预先检测多个SDN应用之间是否存在冲突,具有很好的应用前景。
本发明的其它特征和优点将在随后的说明书中阐述,并且部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例的用于检测多个软件定义网络SDN应用之间的冲突的方法的具体流程示意图;
图2为图1中步骤S103的具体流程示意图;
图3为图1中步骤S104的具体流程示意图;
图4为图1中步骤S105的具体流程示意图;
图5为图1中步骤S106的具体流程示意图;
图6为本发明的应用实例一中多个SDN应用共存的场景的示意图;
图7为利用符号执行工具运行用于处理输入OpenFlow消息为packect_in的事件处理器,并利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解得到的结果的示意图;
图8为显示图7中的具体结果的示意图;
图9为显示对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行合成的过程的示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
为解决现有技术中的方法不能在部署多个SDN应用之前预先检测多个SDN应用之间的冲突的技术问题,本发明实施例提供了一种用于检测多个软件定义网络SDN应用之间的冲突的方法。
SDN应用用于处理各种由交换机发送的OpenFlow消息,由于相对于SDN应用而言,这些OpenFlow消息为输入,所以将这些OpenFlow消息称为SDN应用的输入OpenFlow消息。SDN应用是事件驱动模式,其通过源代码包含的各事件处理器来处理该输入OpenFlow消息,并通过输出OpenFlow消息来对交换机下发或删除流表。通常,流表包括匹配域、动作域、优先级域、计数器、超时时间、附属属性等信息。SDN应用的源代码包含的各事件处理器可以响应各种网络事件,例如,报文到达、链路、交换机故障等。
本领域普通技术人员可以理解地是,SDN应用的输入OpenFlow消息包含报文等信息,SDN应用的输出OpenFlow消息包含对哪个交换机下发哪个流表等信息。
图1为本发明实施例的用于检测多个软件定义网络SDN应用之间的冲突的方法的具体流程示意图。
如图1所示,本发明实施例的用于检测多个软件定义网络SDN应用之间的冲突的方法,主要包括以下步骤S101至步骤S106。
针对待测的多个SDN应用中的每个SDN应用,均执行以下操作:
在步骤S101中,获取该SDN应用的源代码和所有输入OpenFlow消息。
在步骤S102中,根据该SDN应用的源代码包含的各事件处理器的属性信息,确定各事件处理器所要处理的输入OpenFlow消息,其中,各事件处理器所要处理的输入OpenFlow消息的总和构成所有输入OpenFlow消息。
针对步骤S102中的每个输入OpenFlow消息,均执行以下操作:
在步骤S103中,利用与源代码的语言类型对应的符号执行工具,对该输入OpenFlow消息进行处理,得到与该输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集。该第一输出OpenFlow消息集为与每条可执行路径对应的输出OpenFlow消息的集合,该输出OpenFlow消息包含的流表的动作域中含有重置动作或者不含有重置动作。其具体过程如图2所示。
在步骤S1031中,利用与SDN应用的源代码的语言类型对应的符号执行工具,将该SDN应用的各输入OpenFlow消息包含的相关变量指定为符号变量。其中,该相关变量为在检测多个SDN应用之间的冲突的过程中所需使用的变量,例如,源IP地址、目的IP地址等。
在步骤S1032中,利用符号执行工具运行该SDN应用的源代码包含的各事件处理器,得到与该SDN应用的各输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集。
在本发明一优选实施例中,该方法还包括:将SDN应用的各输入OpenFlow消息包含的无关变量赋予具体值。其中,该无关变量为在检测多个SDN应用之间的冲突的过程中无需使用的变量。例如,某一被测SDN应用的输入OpenFlow消息为packet_in,该输入OpenFlow消息包含的报文内容为packet header和payload,如果该被测SDN应用的功能与payload无关(即payload为无关变量),则可将payload赋予具体值。如此设置,可以有效提高符号执行效率。
在本发明一优选实施例中,该方法还包括:根据与SDN应用的各输入OpenFlow消息包含的流表的各个域在软件定义网络SDN中的具体含义,将与该SDN应用的各输入OpenFlow消息包含的各符号变量的取值范围限定在预设范围内。其中,各输入OpenFlow消息包含的流表的各个域都有一个最小取值范围,该预设范围与该最小取值范围相对应,本领域普通技术人员可以根据实际情况来具体设定该最小取值范围。例如,输入OpenFlow消息包含的符号变量“eth_type”域值的最小取值范围为(0-64)。
本发明通过利用符号执行工具对每个SDN应用的每个输入OpenFlow消息进行处理,不仅可以有效避免遍历每个SDN应用状态带来的状态空间***问题,而且可以保证对每个SDN应用的源代码的覆盖率。
在步骤S104中,利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解,并基于求解结果,对与每条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第二输出OpenFlow消息集,该第二输出OpenFlow消息集为对该第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合。其具体过程如图3所示。
针对与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径,均执行以下操作:
在步骤S1041中,利用约束求解器对与该条可执行路径对应的路径约束条件进行求解。
在约束求解器返回结果为有解的情况下,执行步骤S1042:为与该条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息包含的各符号变量赋予求解得到的具体值,得到与该条可执行路径对应的第二输出OpenFlow消息集。
例如,利用约束求解器对与可执行路径1对应的路径约束条件进行求解,得到λ.src=HostI。若与可执行路径1对应的第一输出OpenFlow消息集中的输出OpenFlow消息为(add,sw1,e8((p.src=λ.src,p.dst=ServerD)→fwd(3))),则为该输出OpenFlow消息包含的符号变量(p.src)赋予求解得到的具体值,得到输出OpenFlow消息(add,sw1,e8((p.src=HostI,p.dst=ServerD)→fwd(3))),该消息即为与可执行路径1对应的第二输出OpenFlow消息集中的输出OpenFlow消息。
在约束求解器返回结果为无解的情况下,执行步骤S1043:去除与该条可执行路径对应的第一输出OpenFlow消息集,得到与该条可执行路径对应的第二输出OpenFlow消息集,其中,该第二输出OpenFlow消息集为空集。
在步骤S105中,对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第三输出OpenFlow消息集,该第三输出OpenFlow消息集为对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合。其具体过程如图4所示。
针对与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第二输出OpenFlow消息集,均执行以下操作:
在步骤S1051中,根据该第二输出OpenFlow消息集中的各输出OpenFlow消息的属性信息,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行分类。其中,该属性信息是指各输出OpenFlow消息包含的流表的动作域中是否含有重置动作。
在步骤S1052中,根据分类结果,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集。
具体地,在第二输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都不含有重置动作的情况下,该第二输出OpenFlow消息集中的各输出OpenFlow消息保持不变。也就是说,与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集包含的各输出OpenFlow消息与该第二输出OpenFlow消息集包含的各输出OpenFlow消息保持一致。
在第二输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都含有重置动作的情况下,去除该第二输出OpenFlow消息集中的各输出OpenFlow消息,则与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集为空集。
在第二输出OpenFlow消息集中的一部分输出OpenFlow消息包含的流表的动作域中含有重置动作、且另一部分输出OpenFlow消息包含的流表的动作域中不含有重置动作的情况下,利用预设合成规则,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集。具体处理过程如下:
首先,将第二输出OpenFlow消息集中的各输出OpenFlow消息分为两组,第一组:输出OpenFlow消息包含的流表的动作域中含有重置动作,第二组:输出OpenFlow消息包含的流表的动作域中不含有重置动作。
然后,从第一组中任取一个输出OpenFlow消息,记为消息1。从第二组中任取一个输出OpenFlow消息,记为消息2。
接着,对消息1包含的流表的匹配域和动作域进行合成,得到消息1包含的流表的合成匹配域。
若消息1包含的流表的动作域和消息2包含的流表的动作域中均不含有删除动作,且消息2包含的流表的匹配域属于消息1包含的流表的合成匹配域,且消息1和消息2都是对同一台交换机操作,则对消息1包含的流表和消息2包含的流表的匹配域、动作域、以及优先级域进行合成。具体过程如下:
消息1包含的流表和消息2包含的流表的合成匹配域:若消息1(其包含的流表的动作域中含有重置动作)包含的流表的重置动作的作用域是目的地址域,则消息1包含的流表和消息2包含的流表的合成匹配域的目的地址域是:消息1(其包含的流表的动作域中含有重置动作)包含的流表的目的地址域,消息1包含的流表和消息2包含的流表的合成匹配域的源地址域是:消息2(其包含的流表的动作域中不含有重置动作)包含的流表的源地址域。
若消息1(其包含的流表的动作域中含有重置动作)包含的流表的重置动作的作用域是源地址域,则消息1包含的流表和消息2包含的流表的合成匹配域的目的地址域是:消息2(其包含的流表的动作域中不含有重置动作)包含的流表的目的地址域,消息1包含的流表和消息2包含的流表的合成匹配域的源地址域是:消息1(其包含的流表的动作域中含有重置动作)包含的流表的源地址域。
消息1包含的流表和消息2包含的流表的合成优先级域是:消息1(其包含的流表的动作域中含有重置动作)包含的流表的优先级域值与消息2(其包含的流表的动作域中不含有重置动作)包含的流表的优先级域值中较小的一个。
消息1包含的流表和消息2包含的流表的合成动作域是:消息2(其包含的流表的动作域中不含有重置动作)包含的流表的动作域值。
基于此,已完成对消息1包含的流表和消息2包含的流表的匹配域、动作域、以及优先级域的合成,得到消息3,并将消息3添加至第二组中。因为消息3包含的流表已经包括了消息1包含的流表的转发逻辑,因此,将消息1从第一组中去除。
如此重复执行上述过程,直至第一组中的各输出OpenFlow消息包含的流表与第二组中的各输出OpenFlow消息包含的流表两两都进行过合成为止。
需要说明的是,若对第一组中的各输出OpenFlow消息包含的流表和第二组中的各输出OpenFlow消息包含的流表两两都进行过合成后,第一组中还具有输出OpenFlow消息,则将该输出OpenFlow消息删除。
基于此,与第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都不含有重置动作。
需要说明的是,若消息1包含的流表的动作域和/或消息2包含的流表的动作域中含有删除动作,则删除消息1和/或消息2。在此情况下,重新从第一组和/或第二组中选择其他消息。
若消息1包含的流表的动作域和消息2包含的流表的动作域中均不含有删除动作,且消息2包含的流表的匹配域不属于消息1包含的流表的合成匹配域,则不能对消息1包含的流表和消息2包含的流表进行合成。在此情况下,需要重新从第一组和第二组中选择其他消息。此时,可以从第一组中选择消息1,从第二组中选择除消息2之外的其他消息;也可以从第一组中选择除消息1之外的其他消息,从第二组中选择消息2。
若消息1包含的流表的动作域和消息2包含的流表的动作域中均不含有删除动作,且消息2包含的流表的匹配域属于消息1包含的流表的合成匹配域,且消息1和消息2不是对同一台交换机操作,则不能对消息1包含的流表和消息2包含的流表进行合成。在此情况下,需要重新从第一组和第二组中选择其他消息。此时,可以从第一组中选择消息1,从第二组中选择除消息2之外的其他消息;也可以从第一组中选择除消息1之外的其他消息,从第二组中选择消息2。
在步骤S106中,利用与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,检测多个SDN应用两两之间是否存在冲突。其具体过程如图5所示。
在步骤S1061中,从待测的多个SDN应用中任取两个SDN应用,得到第一SDN应用和第二SDN应用。
在步骤S1062中,获取与第一SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息、以及与第二SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息。
在步骤S1063中,分别从与第一SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中、以及从与第二SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中各任取一个输出OpenFlow消息,得到第一输出OpenFlow消息和第二输出OpenFlow消息。
在步骤S1064中,根据第一输出OpenFlow消息和第二输出OpenFlow消息的属性信息,利用预设判断规则,判断第一SDN应用与第二SDN应用是否存在冲突。
具体地,若第一输出OpenFlow消息和第二输出OpenFlow消息包含的信息都是对同一台交换机下发流表,且第一输出OpenFlow消息包含的流表和第二输出OpenFlow消息包含的流表的源地址域和目的地址域分别相交,且动作域不同,则判断出第一SDN应用与第二SDN应用存在冲突。否则,判断出第一SDN应用与第二SDN应用不存在冲突。
也就是说,只有当两个SDN应用同时满足以下三个条件时,这两个SDN应用才会产生冲突:①两个SDN应用的输出OpenFlow消息包含的信息都是对同一台交换机下发流表;②两个SDN应用的输出OpenFlow消息包含的流表的源地址域和目的地址域分别相交;③两个SDN应用的输出OpenFlow消息包含的流表的动作域不同。若其不能同时满足上述三个条件中的任何一个,则这两个SDN应用不会产生冲突。
进一步地,若第一输出OpenFlow消息包含的流表的优先级域和第二输出OpenFlow消息包含的流表的优先级域不同,则第一输出OpenFlow消息包含的流表和第二输出OpenFlow消息包含的流表都能安装在交换机上。但包含的流表的优先级域较高的输出OpenFlow消息产生的动作将覆盖包含的流表的优先级域较低的输出OpenFlow消息产生的动作,因此,包含的流表的优先级域较低的输出OpenFlow消息产生的动作失效。
例如,假设第一输出OpenFlow消息包含的流表为流表1,该流表1的优先级域值是1,匹配域是λ.src=HostC,λ.dst=HostE,动作域是fwd(3);第二输出OpenFlow消息包含的流表为流表2,该流表2的优先级域值是2,匹配域是λ.src=HostC,λ.dst=HostE,动作域是drop。因此,流表1和流表2都能安装在交换机上。当某个输入OpenFlow消息包含的报文(该报文的源地址是HostC,目的地址是HostE)到达该交换机时,该交换机先查看优先级域值较高的流表,并查看该报文的源地址和目的地址是否满足该流表的匹配域。在本示例中,由于流表2的优先级域值高于流表1的优先级域值,因此,该交换机先查看流表2,并发现该报文的源地址和目的地址满足流表2的匹配域,则执行流表2的动作域所包含的动作,将该报文丢弃。由于流表1的优先级域值低于流表2的优先级域值,因此,该交换机不能按照流表1的动作域所包含的动作转发该报文。
需要说明的是,根据OpenFlow协议标准,若第一输出OpenFlow消息包含的流表的优先级域值和第二输出OpenFlow消息包含的流表的优先级域值不同,则第一输出OpenFlow消息包含的流表和第二输出OpenFlow消息包含的流表都能被安装。但其安装顺序取决于第一输出OpenFlow消息和第二输出OpenFlow消息到达交换机的时间顺序,与流表的优先级域值无关。
在第一输出OpenFlow消息包含的流表的优先级域值和第二输出OpenFlow消息包含的流表的优先级域值相同、且第一输出OpenFlow消息包含的流表的匹配域和第二输出OpenFlow消息包含的流表的匹配域相同的情况下,第一输出OpenFlow消息包含的流表和第二输出OpenFlow消息包含的流表不能被安装。
进一步地,若第一输出OpenFlow消息包含的流表的优先级域值和第二输出OpenFlow消息包含的流表的优先级域值相同,则后到达交换机的输出OpenFlow消息包含的流表不能安装在交换机上。也就是说,两个SDN应用中,优先级较低的SDN应用的输出OpenFlow消息包含的流表不能安装在交换机上。
例如,假设第一输出OpenFlow消息包含的流表为流表1,该流表1的优先级域值是1,匹配域是λ.src=HostC,λ.dst=HostE,动作域是fwd(3);第二输出OpenFlow消息包含的流表为流表2,该流表2的优先级域值是1,匹配域是λ.src=HostC,λ.dst=HostE,动作域是drop。若第一输出OpenFlow消息先到达交换机,第二输出OpenFlow消息后到达交换机,则流表1被安装在交换机上,而流表2不能安装在交换机上。
如此重复执行步骤S1063至步骤S1064,直至第一SDN应用包含的各输出OpenFlow消息和第二SDN应用包含的各输出OpenFlow消息两两之间都被取出并判断过为止。
需要说明的是,若通过第一SDN应用的某一输出OpenFlow消息和第二SDN应用的某一输出OpenFlow消息可以判断出第一SDN应用与第二SDN应用存在冲突,还需要重新从第一SDN应用和第二SDN应用中选取其他输出OpenFlow消息,并利用选取的输出OpenFlow消息再进行重新判断,直至第一SDN应用的各输出OpenFlow消息和第二SDN应用的各输出OpenFlow消息两两之间都被取出并判断过为止。
如此重复执行上述步骤S1061至步骤S1064,直至待测的多个SDN应用中两两都被检测过为止。
为了便于更好地理解本发明,下面通过应用实例一对本发明的技术方案进行详细描述。
应用实例一
图6为本实例中多个SDN应用共存的场景的示意图。在图6中,第一SDN应用(防火墙)和第二SDN应用(不安全应用)同时运行在同一控制器上。第一SDN应用(防火墙)在交换机sw1上安装规则Rule 1,以隔离外部主机HostC到内部网络服务器(ServerD)的流量,第二SDN应用(不安全应用)在交换机sw1上安装规则Rule2、Rule3和Rule4。其中,规则Rule2的含义是:到达交换机sw1上的输入OpenFlow消息包含的报文,如果其源地址(src)为主机HostC的地址,则交换机sw1在将该输入OpenFlow消息包含的报文的源地址(src)重置为主机HostE的地址后,继续将该输入OpenFlow消息包含的报文与交换机sw1上的其他规则进行匹配。规则Rule3的含义是:到达交换机sw1上的输入OpenFlow消息包含的报文,如果其目的地址(dst)为主机HostF的地址,则交换机sw1在将该输入OpenFlow消息包含的报文的目的地址(dst)重置为网络服务器(ServerD)的地址后,继续将该输入OpenFlow消息包含的报文与交换机sw1上的其他规则进行匹配。规则Rule4的含义是:到达交换机sw1上的输入OpenFlow消息包含的报文,如果其源地址(src)为主机HostE的地址,目的地址(dst)为网络服务器(ServerD)的地址,则将该输入OpenFlow消息包含的报文通过端口3转发出去。因此,如果输入OpenFlow消息包含的报文的源地址(src)为主机HostC的地址,目的地址(dst)为主机HostF的地址,则该输入OpenFlow消息包含的报文经过规则Rule2、Rule3和Rule4后到达网络服务器(ServerD)。也就是说,主机HostC上的输入OpenFlow消息包含的报文最终都会到达网络服务器(ServerD),而这与第一SDN应用(防火墙)的规则Rule 1是冲突的。其具体检测过程如下:
针对待测的第一SDN应用(防火墙)和第二SDN应用(不安全应用),均执行以下操作:
这里,为了简便,下面以第二SDN应用(不安全应用)为例进行说明。
在步骤S101中,获取该SDN应用的源代码和所有输入OpenFlow消息。
在步骤S102中,根据该SDN应用的源代码包含的各事件处理器的属性信息,确定各事件处理器所要处理的输入OpenFlow消息,其中,各事件处理器所要处理的输入OpenFlow消息的总和构成所有输入OpenFlow消息。
针对每个输入OpenFlow消息均执行以下操作:
在步骤S103中,利用与源代码的语言类型对应的符号执行工具,对该输入OpenFlow消息进行处理,得到与该输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集,该第一输出OpenFlow消息集为与每条可执行路径对应的输出OpenFlow消息的集合。
在步骤S104中,利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解,并基于求解结果,对与每条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第二输出OpenFlow消息集,该第二输出OpenFlow消息集为对第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合。
图7为利用符号执行工具运行用于处理输入OpenFlow消息为packect_in的事件处理器,并利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解得到的结果的示意图。
具体地,在步骤S1031中,利用与第二SDN应用(不安全应用)的源代码的语言类型对应的符号执行工具,将该SDN应用的输入OpenFlow消息packect_in包含的相关变量p指定为符号变量λ,即用λ表示变量p。
在步骤S1032中,利用该符号执行工具运行用于处理输入OpenFlow消息为packect_in的事件处理器,得到与该输入OpenFlow消息packect_in对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集。
在本示例中,当λ.src=HostC为假且λ.dst=HostF为假时,对应第一可执行路径(即图7中的左一分支)。当λ.src=HostC为假且λ.dst=HostF为真时,对应第二可执行路径(即图7中的左二分支)。当λ.src=HostC为真且λ.dst=HostF为真时,对应第三可执行路径(即图7中的右一分支)。当λ.src=HostC为真且λ.dst=HostF为假时,对应第四可执行路径(即图7中的右二分支)。其中,第一可执行路径至第四可执行路径是与该输入OpenFlow消息packect_in对应的多条可执行路径,与第一可执行路径对应的路径约束条件是:λ.src=HostC为假且λ.dst=HostF为假,与第二可执行路径对应的路径约束条件是:λ.src=HostC为假且λ.dst=HostF为真,与第三可执行路径对应的路径约束条件是:λ.src=HostC为真且λ.dst=HostF为真,与第四可执行路径对应的路径约束条件是:λ.src=HostC为真且λ.dst=HostF为假。
与第一可执行路径对应的第二输出OpenFlow消息集为空集,图8中未显示。与第二可执行路径对应的第二输出OpenFlow消息集如图8中的第三行所示,与第三可执行路径对应的第二输出OpenFlow消息集如图8中的第四行所示,与第四可执行路径对应的第二输出OpenFlow消息集如图8中的第二行所示。
需要说明的是,第二SDN应用的源代码可能有上千行,包含switch_on,link_up等一系列事件处理器,这里仅以用于处理输入OpenFlow消息为packect_in的事件处理器作为示例进行说明。
图7下面的方框中显示的内容为上述处理过程的伪代码,其表示以下含义:
若输入OpenFlow消息packect_in包含的报文的源地址(src)为主机HostC的地址,则第二SDN应用(不安全应用)通过输入OpenFlow消息packect_in对交换机sw1下发流表e4((p.src=HostC,p.dst=*)→Set(p.src=HostE),output(table))。该流表的含义为:到达交换机sw1上的输入OpenFlow消息包含的报文,如果其源地址(src)为主机HostC的地址,则交换机sw1在将该输入OpenFlow消息包含的报文的源地址(src)重置为主机HostE的地址后,继续将该输入OpenFlow消息包含的报文与交换机sw1上的其他规则进行匹配。
若输入OpenFlow消息packect_in包含的报文的目的地址(dst)为主机HostF的地址,则第二SDN应用(不安全应用)通过输入OpenFlow消息packect_in对交换机sw1下发流表e5((p.src=*,p.dst=HostF)→Set(p.dst=ServerD),output(table))。该流表的含义为:到达交换机sw1上的输入OpenFlow消息包含的报文,如果其目的地址(dst)为主机HostF的地址,则交换机sw1在将该输入OpenFlow消息包含的报文的目的地址(dst)重置为网络服务器(ServerD)的地址后,继续将该输入OpenFlow消息包含的报文与交换机sw1上的其他规则进行匹配。
若输入OpenFlow消息packect_in包含的报文的源地址(src)为主机HostE的地址,目的地址(dst)为网络服务器(ServerD)的地址,则第二SDN应用(不安全应用)通过输入OpenFlow消息packect_in对交换机sw1下发流表e6((p.src=HostE,p.dst=ServerD)→fwd(3))。该流表的含义为:到达交换机sw1上的输入OpenFlow消息包含的报文,如果其源地址(src)为主机HostE的地址,目的地址(dst)为网络服务器(ServerD)的地址,则将该输入OpenFlow消息包含的报文通过端口3转发出去。
在步骤S105中,对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第三输出OpenFlow消息集,该第三输出OpenFlow消息集为对第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合。
针对与第二SDN应用(不安全应用)的输入OpenFlow消息packect_in对应的每条可执行路径对应的第二输出OpenFlow消息集,均执行以下操作:
这里,为了简便,下面以与第三条可执行路径对应的第二输出OpenFlow消息集为例进行说明。
由图8可见,与第三条可执行路径对应的第二输出OpenFlow消息集中,输出OpenFlow消息(
Figure BDA0001899177470000181
Figure BDA0001899177470000182
)包含的流表的动作域中含有重置动作,输出OpenFlow消息
Figure BDA0001899177470000183
包含的流表的动作域中不含有重置动作,因此,需要利用预设合成规则,对该第二输出OpenFlow消息集中的输出OpenFlow消息(
Figure BDA0001899177470000184
Figure BDA0001899177470000185
)进行处理。具体处理过程如图9所示。
首先,将第二输出OpenFlow消息集中的输出OpenFlow消息(
Figure BDA0001899177470000186
Figure BDA0001899177470000187
)分为两组。第一组
Figure BDA0001899177470000188
包含的输出OpenFlow消息为
Figure BDA0001899177470000189
Figure BDA00018991774700001810
这两个输出OpenFlow消息包含的流表的动作域中含有重置动作。第二组
Figure BDA00018991774700001811
包含的输出OpenFlow消息为
Figure BDA00018991774700001812
该输出OpenFlow消息包含的流表的动作域中不含有重置动作。
然后,从第一组
Figure BDA00018991774700001813
和第二组
Figure BDA00018991774700001814
中各任取一个输出OpenFlow消息,并将取出的这两个输出OpenFlow消息进行组合。在本示例中,可以形成两个组合:组合1为:
Figure BDA00018991774700001815
Figure BDA00018991774700001816
组合2为:
Figure BDA00018991774700001817
Figure BDA00018991774700001818
接着,对
Figure BDA00018991774700001819
包含的流表的匹配域和动作域进行合成,得到
Figure BDA00018991774700001820
包含的流表的合成匹配域(λ.src=HostE,λ.dst=*)。对
Figure BDA00018991774700001821
包含的流表的匹配域和动作域进行合成,得到
Figure BDA00018991774700001822
包含的流表的合成匹配域(λ.src=*,λ.dst=ServerD)。
针对组合1,由于
Figure BDA00018991774700001823
包含的流表的动作域和
Figure BDA00018991774700001824
包含的流表的动作域中均不含有删除(del)动作,且
Figure BDA00018991774700001825
包含的流表的匹配域属于
Figure BDA00018991774700001826
包含的流表的合成匹配域,且
Figure BDA00018991774700001827
Figure BDA00018991774700001828
都是对交换机sw1操作,则对
Figure BDA00018991774700001829
包含的流表和
Figure BDA00018991774700001830
包含的流表的匹配域、动作域、以及优先级域进行合成。具体过程如下:
Figure BDA0001899177470000191
包含的流表和
Figure BDA0001899177470000192
包含的流表的合成匹配域:由于
Figure BDA0001899177470000193
包含的流表的重置动作的作用域是源地址域(src),则
Figure BDA0001899177470000194
包含的流表和
Figure BDA0001899177470000195
包含的流表的合成匹配域的目的地址域是:
Figure BDA0001899177470000196
的目的地址域,
Figure BDA0001899177470000197
包含的流表和
Figure BDA0001899177470000198
包含的流表的合成匹配域的源地址域是:
Figure BDA0001899177470000199
的源地址域。因此,
Figure BDA00018991774700001910
包含的流表和
Figure BDA00018991774700001911
包含的流表的合成匹配域为(λ.src=HostC,λ.dst=ServerD)。
Figure BDA00018991774700001912
包含的流表和
Figure BDA00018991774700001913
包含的流表的合成优先级域是:
Figure BDA00018991774700001914
包含的流表的优先级域值与
Figure BDA00018991774700001915
包含的流表的优先级域值中较小的一个。由于图8中未显示
Figure BDA00018991774700001916
包含的流表和
Figure BDA00018991774700001917
包含的流表的优先级域值,在此不进行说明。
Figure BDA00018991774700001918
包含的流表和
Figure BDA00018991774700001919
包含的流表的合成动作域是:
Figure BDA00018991774700001920
包含的流表的动作域值,即为fwd(3)。
基于此,已完成对
Figure BDA00018991774700001921
包含的流表和
Figure BDA00018991774700001922
包含的流表的匹配域、动作域、以及优先级域的合成,得到
Figure BDA00018991774700001923
(add,sw1,e((λ.src=HostC,λ.dst=ServerD)→fwd(3))),并将
Figure BDA00018991774700001924
添加至第二组
Figure BDA00018991774700001925
中。因为
Figure BDA00018991774700001926
包含的流表已经包括了
Figure BDA00018991774700001927
包含的流表的转发逻辑,因此,将
Figure BDA00018991774700001928
从第一组
Figure BDA00018991774700001929
中去除。
针对组合2,由于
Figure BDA00018991774700001930
包含的流表的动作域和
Figure BDA00018991774700001931
包含的流表的动作域中均不含有删除(del)动作,且
Figure BDA00018991774700001932
包含的流表的匹配域属于
Figure BDA00018991774700001933
包含的流表的合成匹配域,且
Figure BDA00018991774700001934
Figure BDA00018991774700001935
都是对交换机sw1操作,则对
Figure BDA00018991774700001936
包含的流表和
Figure BDA00018991774700001937
包含的流表的匹配域、动作域、以及优先级域进行合成。具体过程如下:
Figure BDA00018991774700001938
包含的流表和
Figure BDA00018991774700001939
包含的流表的合成匹配域:由于
Figure BDA00018991774700001940
包含的流表的重置动作的作用域是目的地址域(dst),则
Figure BDA00018991774700001941
包含的流表和
Figure BDA00018991774700001942
包含的流表的合成匹配域的目的地址域是:
Figure BDA00018991774700001943
包含的流表的目的地址域,
Figure BDA00018991774700001944
包含的流表和
Figure BDA00018991774700001945
包含的流表的合成匹配域的源地址域是:
Figure BDA00018991774700001946
包含的流表的源地址域。因此,
Figure BDA00018991774700001947
包含的流表和
Figure BDA0001899177470000201
包含的流表的合成匹配域是(λ.src=HostE,λ.dst=HostF)。
Figure BDA0001899177470000202
包含的流表和
Figure BDA0001899177470000203
包含的流表的合成优先级域是:
Figure BDA0001899177470000204
包含的流表的优先级域值与
Figure BDA0001899177470000205
包含的流表的优先级域值中较小的一个。由于图8中未显示
Figure BDA0001899177470000206
包含的流表和
Figure BDA0001899177470000207
包含的流表的优先级域值,在此不进行说明。
Figure BDA0001899177470000208
包含的流表和
Figure BDA0001899177470000209
包含的流表的合成动作域是:
Figure BDA00018991774700002010
包含的流表的动作域值,即为fwd(3)。
基于此,已完成对
Figure BDA00018991774700002011
包含的流表和
Figure BDA00018991774700002012
包含的流表的匹配域、动作域、以及优先级域的合成,得到
Figure BDA00018991774700002013
(add,sw1,e((λ.src=HostE,λ.dst=HostF)→fwd(3))),并将
Figure BDA00018991774700002014
添加至第二组
Figure BDA00018991774700002015
中。因为
Figure BDA00018991774700002016
包含的流表已经包括了
Figure BDA00018991774700002017
包含的流表的转发逻辑,因此,将
Figure BDA00018991774700002018
从第一组
Figure BDA00018991774700002019
中去除。
基于此,与第三可执行路径对应的第三输出OpenFlow消息集中的输出OpenFlow消息为:
Figure BDA00018991774700002020
Figure BDA00018991774700002021
这些输出OpenFlow消息包含的流表的动作域中均不含有重置动作。
如此重复执行上述步骤,直至完成对与第二可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息的合成、以及对与第四可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息的合成为止。
类似地,可以得到与第一SDN应用(防火墙)的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,如图8所示。
在步骤S106中,利用与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,检测多个SDN应用两两之间是否存在冲突。
在本示例中,由于与第二SDN应用(不安全应用)的输入OpenFlow消息packect_in对应的第三条可执行路径对应的第三输出OpenFlow消息集中含有
Figure BDA00018991774700002022
(add,sw1,e((λ.src=HostC,λ.dst=ServerD)→fwd(3))),与第一SDN应用(防火墙)的某个输入OpenFlow消息对应的某条可执行路径对应的第三输出OpenFlow消息集中含有
Figure BDA0001899177470000211
(add,sw1,e3((λ.src=HostC,λ.dst=ServerD)→drop)),而
Figure BDA0001899177470000212
Figure BDA0001899177470000213
都是对交换机sw1操作,且
Figure BDA0001899177470000214
Figure BDA0001899177470000215
的源地址域和目的地址域分别相交,且动作域不同,则判断出第一SDN应用(防火墙)与第二SDN应用(不安全应用)存在冲突,受影响的是:输入OpenFlow消息中包含的源地址为HostC、目的地址为ServerD的报文。
应用本发明实施例提供的用于检测多个软件定义网络SDN应用之间的冲突的方法,通过利用符号执行工具对待测的多个SDN应用中的每个SDN应用的每个输入OpenFlow消息进行处理,并基于处理结果来检测多个SDN应用两两之间是否存在冲突,从而可以实现在部署多个SDN应用之前预先检测多个SDN应用之间是否存在冲突,具有很好的应用前景。
本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (9)

1.一种用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,包括:
针对待测的多个SDN应用中的每个SDN应用,均执行以下操作:
获取该SDN应用的源代码和所有输入OpenFlow消息;
根据该SDN应用的源代码包含的各事件处理器的属性信息,确定各事件处理器所要处理的输入OpenFlow消息,其中,各事件处理器所要处理的输入OpenFlow消息的总和构成所有输入OpenFlow消息;
针对每个输入OpenFlow消息均执行以下操作:
利用与所述源代码的语言类型对应的符号执行工具,对该输入OpenFlow消息进行处理,得到与该输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集,所述第一输出OpenFlow消息集为与每条可执行路径对应的输出OpenFlow消息的集合;
利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解,并基于求解结果,对与每条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第二输出OpenFlow消息集,所述第二输出OpenFlow消息集为对所述第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合;
对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第三输出OpenFlow消息集,所述第三输出OpenFlow消息集为对所述第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理后得到的输出OpenFlow消息的集合;
其中,对与每条可执行路径对应的第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第三输出OpenFlow消息集,包括:
针对与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第二输出OpenFlow消息集,均执行以下操作:
根据该第二输出OpenFlow消息集中的各输出OpenFlow消息的属性信息,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行分类;
根据分类结果,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集;
利用与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,检测多个SDN应用两两之间是否存在冲突。
2.根据权利要求1所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,利用与所述源代码的语言类型对应的符号执行工具,对输入OpenFlow消息进行处理,得到与该输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集,包括:
利用与SDN应用的源代码的语言类型对应的符号执行工具,将该SDN应用的各输入OpenFlow消息包含的相关变量指定为符号变量,其中,所述相关变量为在检测多个SDN应用之间的冲突的过程中所需使用的变量;
利用所述符号执行工具运行该SDN应用的源代码包含的各事件处理器,得到与该SDN应用的各输入OpenFlow消息对应的多条可执行路径、与该多条可执行路径中的每条可执行路径对应的路径约束条件、以及与每条可执行路径对应的第一输出OpenFlow消息集。
3.根据权利要求2所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,还包括:
将SDN应用的各输入OpenFlow消息包含的无关变量赋予具体值,其中,所述无关变量为在检测多个SDN应用之间的冲突的过程中无需使用的变量。
4.根据权利要求2或3所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,还包括:
根据与SDN应用的各输入OpenFlow消息包含的流表的各个域在软件定义网络SDN中的具体含义,将与该SDN应用的各输入OpenFlow消息包含的各符号变量的取值范围限定在预设范围内。
5.根据权利要求1所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,利用约束求解器分别对与每条可执行路径对应的路径约束条件进行求解,并基于求解结果,对与每条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与每条可执行路径对应的第二输出OpenFlow消息集,包括:
针对与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径,均执行以下操作:
利用约束求解器对与该条可执行路径对应的路径约束条件进行求解;
在约束求解器返回结果为有解的情况下,为与该条可执行路径对应的第一输出OpenFlow消息集中的各输出OpenFlow消息包含的各符号变量赋予求解得到的具体值,得到与该条可执行路径对应的第二输出OpenFlow消息集;
在约束求解器返回结果为无解的情况下,去除与该条可执行路径对应的第一输出OpenFlow消息集,得到与该条可执行路径对应的第二输出OpenFlow消息集,其中,该第二输出OpenFlow消息集为空集。
6.根据权利要求1所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,所述输出OpenFlow消息包含的流表的动作域中含有重置动作或者不含有重置动作。
7.根据权利要求1所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,根据分类结果,对第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集,包括:
在第二输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都不含有重置动作的情况下,该第二输出OpenFlow消息集中的各输出OpenFlow消息保持不变,则与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集包含的各输出OpenFlow消息与该第二输出OpenFlow消息集包含的各输出OpenFlow消息保持一致;
在第二输出OpenFlow消息集中的各输出OpenFlow消息包含的流表的动作域中都含有重置动作的情况下,去除该第二输出OpenFlow消息集中的各输出OpenFlow消息,则与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集为空集。
8.根据权利要求7所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,根据分类结果,对第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集,还包括:
在第二输出OpenFlow消息集中的一部分输出OpenFlow消息包含的流表的动作域中含有重置动作、且另一部分输出OpenFlow消息包含的流表的动作域中不含有重置动作的情况下,利用预设合成规则,对该第二输出OpenFlow消息集中的各输出OpenFlow消息进行处理,得到与该第二输出OpenFlow消息集所属的可执行路径对应的第三输出OpenFlow消息集。
9.根据权利要求1所述的用于检测多个软件定义网络SDN应用之间的冲突的方法,其特征在于,利用与每个SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息,检测多个SDN应用两两之间是否存在冲突,包括:
从待测的多个SDN应用中任取两个SDN应用,得到第一SDN应用和第二SDN应用;
获取与第一SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息、以及与第二SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中的各输出OpenFlow消息;
分别从与第一SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中、以及从与第二SDN应用的每个输入OpenFlow消息对应的每条可执行路径对应的第三输出OpenFlow消息集中各任取一个输出OpenFlow消息,得到第一输出OpenFlow消息和第二输出OpenFlow消息;
根据第一输出OpenFlow消息和第二输出OpenFlow消息的属性信息,利用预设判断规则,判断第一SDN应用与第二SDN应用是否存在冲突。
CN201811504826.6A 2018-12-10 2018-12-10 用于检测多个软件定义网络sdn应用之间的冲突的方法 Active CN109725925B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811504826.6A CN109725925B (zh) 2018-12-10 2018-12-10 用于检测多个软件定义网络sdn应用之间的冲突的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811504826.6A CN109725925B (zh) 2018-12-10 2018-12-10 用于检测多个软件定义网络sdn应用之间的冲突的方法

Publications (2)

Publication Number Publication Date
CN109725925A CN109725925A (zh) 2019-05-07
CN109725925B true CN109725925B (zh) 2020-09-18

Family

ID=66294948

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811504826.6A Active CN109725925B (zh) 2018-12-10 2018-12-10 用于检测多个软件定义网络sdn应用之间的冲突的方法

Country Status (1)

Country Link
CN (1) CN109725925B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107809381A (zh) * 2017-10-19 2018-03-16 北京邮电大学 一种实现基于sdn中路由环路主动审计算法及实现方法
CN108156046A (zh) * 2016-12-06 2018-06-12 ***通信有限公司研究院 分布式路由检测方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9973429B2 (en) * 2013-04-05 2018-05-15 Futurewei Technologies, Inc. Software defined networking (SDN) controller orchestration and network virtualization for data center interconnection
CN104283738B (zh) * 2014-10-11 2018-07-17 新华三技术有限公司 一种链路检测方法及设备

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108156046A (zh) * 2016-12-06 2018-06-12 ***通信有限公司研究院 分布式路由检测方法及装置
CN107809381A (zh) * 2017-10-19 2018-03-16 北京邮电大学 一种实现基于sdn中路由环路主动审计算法及实现方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
动态符号执行中路径搜索策略的研究与实现;王磊;《中国优秀硕士学位论文全文库 信息科技辑》;《中国学术期刊(光盘版)电子杂志社》;20180415;第9-45页 *
软件定义网络OpenFlow流表优化技术研究;席孝强;《中国优秀硕士学位论文全文库 信息科技辑》;中国学术期刊(光盘版)电子杂志社;20180615;全文 *

Also Published As

Publication number Publication date
CN109725925A (zh) 2019-05-07

Similar Documents

Publication Publication Date Title
US11716265B2 (en) Anomaly detection and reporting in a network assurance appliance
US11902120B2 (en) Synthetic data for determining health of a network security system
CN109417496B (zh) 虚拟网络环境中的自动服务功能验证
US11178009B2 (en) Static network policy analysis for networks
CN112470431B (zh) 使用自动布尔学习的网络的模型的合成
US7505463B2 (en) Rule set conflict resolution
US11038743B2 (en) Event clustering for a network assurance platform
CN110710159B (zh) 用于网络配置和故障排除的方法、***、设备和介质
US20180351819A1 (en) Semantic analysis to detect shadowing of rules in a model of network intents
CN111684439B (zh) 网络保证数据库版本兼容性
CN110741602A (zh) 响应于网络意图形式对等性失败的事件生成
Kim et al. Formal verification of SDN-based firewalls by using TLA+
Tu et al. Linux network programming with p4
Wang et al. Rule anomalies detecting and resolving for software defined networks
CN109725925B (zh) 用于检测多个软件定义网络sdn应用之间的冲突的方法
CN112019361A (zh) 访问控制列表的迁移方法及装置,存储介质和电子设备
US20160006605A1 (en) Network control device and network setting system
Xiaochen et al. A Fine-Grained Detection Mechanism for SDN Rule Collision
US20240061796A1 (en) Multi-tenant aware data processing units
US20210173938A1 (en) Security risk reduction method and security risk reduction system
Yao et al. Model Checking of Software-Defined Networking for Multiple Applications
Zhou Guided synthesis of network behavior
US7949007B1 (en) Methods of clustering actions for manipulating packets of a communication protocol
GB2415342A (en) Splitting a unified packet flow rule set into subsets for plural enforcement devices

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant