防火墙是指设置在不同网络安全域之间的安全元件,其根据预设的安全策略控制(允许、拒绝)出入网络的数据包[1]。近年来,随着网络应用的不断发展,防火墙策略包含的规则越来越多,使得包分类速度受到了很大影响。但同时,链路速度变得越来越快,使得包括防火墙在内的许多网络设备的数据包分类速度需求更高[2]。防火墙包分类技术的基本原理是根据预先设置的防火墙规则检查数据包的相关字段,例如,源/目的IP地址、协议号等信息,以判断数据包所匹配的规则;再按照规则所定义的动作处理数据包[3]。显然,最直观的包分类方法为顺序匹配,其基本思路是将规则集按照优先级从高到低的顺序,组成线性表;接收到数据包时,顺序访问线性表中的每一条规则,直到找到匹配规则为止。顺序匹配算法的时间复杂度与规则条数呈线性关系。随着防火墙规则数目的增多,顺序匹配所需要的时间会越来越多,导致防火墙吞吐量下降,影响网络性能。因此,有必要研究如何提高防火墙包分类速度,提高防火墙性能。
在此背景下,研究人员提出了许多优秀的包分类算法,包括基于硬件TCAM的包分类算法[4]、基于软件的包分类算法如Hicuts、HyperCuts等[5–12]。通常,TCAM能够并行地访问存储在其中的每一个规则条目,基于TCAM的包分类算法时间复杂度为常量。但是,TCAM自身的一些不足限制了其使用范围,其不足包括:1)范围扩展不易,一条以范围形式表示的
基于软件的包分类方法一般是指在分类数据包之前对规则空间进行划分,而根据划分准则的不同可分为:1)基于哈希表的划分。为每个不同的前缀长度构建一个哈希表,前缀长度相同的规则分量被存储在同一个哈希表中。当分类数据包时,顺序访问所有哈希表直至找到最长匹配前缀为止。代表算法有2维数据包分类算法RS(rectangle search)[5]、多维数据包分类算法TSS(tuple space search)[6]和BSOL(binary search on leaves)算法[7]等。2)基于决策树的划分。按照一定方式,对规则所在的多维空间进行递归分解,并建立一棵决策树。决策树的根节点代表整个多维空间,非根节点则代表子空间。递归分解的结束条件是节点关联的规则条数小于等于预设的阈值
现有基于软件的包分类方法中,虽然遍历哈希表或决策树能达到对数级时间复杂度,但是在找到最长匹配前缀或叶子节点之后需要在
一般而言,防火墙规则可用形如“
基于决策树的包分类方法,首先对规则所在的多维空间进行划分以构建分类决策树。当分类数据包时,从根节点出发遍历决策树找到叶子节点,然后,顺序访问该叶子节点所关联的一组规则。
以Hicuts分类算法为例,其按平均划分方式,对规则所在的多维空间进行递归分解以建立分类决策树。如图1所示,设原始规则集包含11条2维规则
![]() |
| 图1 规则前缀空间表示 Fig. 1 Rules in a prefix plane |
根据Hicuts算法的决策树构建思路,在
![]() |
| 图2 基于Hicuts算法构建分类决策树示例 Fig. 2 An example to construct the decision tree based on the Hicuts algorithm |
注意到,阈值
对现有基于决策树的包分类方法进行研究,发现当前方法存在3个主要的问题:1)匹配时间较长。一般规则之间会存在重叠,因此在对规则所在多维空间进行划分时,子空间内重叠的规则会关联到决策树的叶子节点,且相互重叠的规则越多,规则分组内的规则条数也越多,相应地执行顺序匹配所需的时间越长。2)所需存储空间大。以Hicuts为例,其采用平均划分方法对规则空间进行划分,使得一条规则可能被同时复制到多个叶子节点所分别对应的规则分组。例如图2(a)中,规则
针对现有基于决策树的包分类方法所存在的问题,提出了一种基于单元空间划分的快速防火墙包分类方法(Uscuts)。对问题1),首先,利用基于FDM(firewall design matrix)设计模型[14]的规则映射方法对原始规则进行预处理,使得目标规则与原始规则语义相同,但规则之间相互独立,不再有重叠 (规则映射结果为一系列独立的单元空间,映射过程示例见第2.2.1节)。对问题2),不同于Hicuts等算法对规则空间进行平均划分,Uscuts方法采用基于单元空间边界的划分方式,可有效减少规则子空间数目,节省存储空间。对问题3),因采用Uscuts方法对规则进行预处理,使得目标规则之间不再有重叠,相应地基于目标规则所构建的分类决策树中,每条树支均唯一对应一个独立多维规则子空间,直观上看,即决策树的每个叶子节点所关联的规则条数等于1。
因此,在Uscuts包分类方法中,当数据包匹配到叶子节点时,可以直接判定数据包的分类决策为accept,不同于传统包分类方法需要在规则分组内继续执行顺序匹配,该性质显著地提高了包分类速度。下面,结合一个2维访问控制规则实例对算法执行过程进行描述。
2.2 Uscuts算法步骤算法过程包括以下3个步骤:1)对原始规则作预处理,通过规则映射方法将规则在多维矩阵空间进行映射,形成一系列独立的单元空间;2)根据所有单元空间在各个维度上的坐标投影区间,对规则所在的多维矩阵空间依次进行划分以构建分类决策树;3)基于分类决策树对数据包进行快速分类。算法的输入为原始
按照基于FDM设计模型的规则映射思想,任一具有形如“
![]() |
|
图3 FDM规则映射示例
|
2.2.2 构建分类决策树
以2维情形为例,设原始访问控制策略(access control list,ACL)包含9条规则:
| ${{{r}_2}:{F_1} \in \left[ {5,7} \right] \wedge {F_2} \in \left[ {3,4} \right] \to {\rm{deny}};}$ |
| ${{{r}_3}:{F_1} \in \left[ {2,9} \right] \wedge {F_2} \in \left[ {7,8} \right] \to {\rm{accept}};}$ |
| ${{{r}_1}:{F_1} \in \left[ {0,4} \right] \wedge {F_2} \in \left[ {4,6} \right] \to {\rm{deny}};}$ |
| ${{{r}_4}:{F_1} \in \left[ {5,7} \right] \wedge {F_2} \in \left[ {3,9} \right] \to {\rm{accept}};}$ |
| ${{{r}_5}:{F_1} \in \left[ {4,7} \right] \wedge {F_2} \in \left[ {0,2} \right] \to {\rm{accept}};}$ |
| ${{{r}_6}:{F_1} \in \left[ {0,9} \right] \wedge {F_2} \in \left[ {0,1} \right] \to {\rm{deny}};}$ |
| ${{{r}_7}:{F_1} \in \left[ {0,4} \right] \wedge {F_2} \in \left[ {9,9} \right] \to {\rm{deny}};}$ |
| ${{r}_8}:{F_1} \in \left[ {0,1} \right] \wedge {F_2} \in \left[ {0,9} \right] \to {\rm{deny}};$ |
| ${{r}_9}:{F_1} \in \left[ {0,4} \right] \wedge {F_2} \in \left[ {2,9} \right] \to {\rm{accept}}{\text{。}}$ |
以该ACL作为输入,通过映射操作可以得到最终映射结果如图4(a)所示。
此时,6个单元空间分别为:
![]() |
| 图4 基于Uscuts算法构建分类决策树 Fig. 4 Constructing decision tree based on Uscuts |
一般而言,在某个给定维度
定义1 已知单元空间为
1)
| ${S}\left( {{u},{v},{F_i}} \right) =\! \left[ {{l^{(u)}_i},{l^{(v)}}_i} \right],\left[ {{l^{(v)}_i},{l^{(u)}_i} \!+\! {d^{(u)}_i}} \right],\left[\! {{l^{(u)}_i} \!+\! {d^{(u)}_i},{l^{(v)}_i} + {d^{(v)}}_i} \!\right];$ |
2)
| ${S}\left( {{u},{v},{F_i}} \right) = \left[\! {{l^{(u)}_i},{l^{(v)}_i}} \!\right],\left[\! {{l^{(v)}_i},{l^{(v)}_i} + {d^{(v)}_i}} \!\right],\left[\! {{l^{(v)}_i} + {d^{(v)}_i},{l^{(u)}_i} + {d^{(u)}_i}} \!\right];$ |
3)
| ${S}\left( {{u},{v},{F_i}} \right) = \left[\! {{l^{(v)}_i},{l^{(u)}_i}} \!\right],\left[\! {{l^{(u)}_i},{l^{(u)}_i} + {d^{(u)}_i}} \!\right],\left[\! {{l^{(u)}_i} + {d^{(u)}_i},{l^{(v)}_i} + {d^{(v)}_i}} \!\right];$ |
4)
| ${S}\left( {{u},{v},{F_i}} \right) = \left[ {{l^{(u)}_i},{l^{(u)}_i} + {d^{(u)}_i}} \right],\left[ {{l^{(v)}_i},{l^{(v)}_i} + {d^{(v)}_i}} \right];$ |
5)
| ${S}\left( {{u},{v},{F_i}} \right) = \left[ {{l^{(u)}_i},{l^{(u)}_i} + {d^{(u)}_i}} \right],\left[ {{l^{(v)}_i},{l^{(v)}_i} + {d^{(v)}_i}} \right];$ |
6)
以2维情形为例,两个单元空间
![]() |
|
图5 单元空间
|
基于定义1,下面简要描述构建分类决策树
设
1)求
2)将
3)维度
4)分别求各子树
5)将全部
6)迭代执行步骤3)到步骤5),当
以图4为例,初始情况下
子树
在基于决策树的包分类方法中,包分类本质上是一个查询操作。对决策树或其任意一棵子树,其根节点的子节点所对应区间坐标值均为严格递增,故在查找时可直接应用折半查找法。如图6所示,决策树
![]() |
| 图6 基于分类决策树对数据包进行快速分类 Fig. 6 Fast packet classification based on decision tree |
考虑一个
如图6所示,设有两个待分类数据包分别为
对数据包
算法1 数据包分类算法
Input:数据包
Output:数据包决策(‘accept’ or ‘deny’)
Begin
1. for (
/* 在根节点
2. if (
3.
4. continue;
5. } else
6. break;
7. }
8. if (
9.
End
从算法1执行过程可知,数据包分类速度取决于在决策树中查找数据包各元组的效率,下面具体分析Uscuts方法的查找效率。
3 理论分析与仿真结果 3.1 时间复杂度分析Uscut方法运行过程包括线下和线上两个阶段,线下计算包括规则预处理和构建分类决策树两个步骤。线上计算为根据决策树对数据包进行快速分类。从实际需要出发,重点关注Uscuts方法的包分类时间。下面分别从最坏情况和平均情况两个方面对包分类算法的时间复杂度进行定量分析。
1)最坏情况下时间复杂度
根据Uscuts方法所构建的决策树,其各叶子节点所关联的规则条数等于1。因此,在数据包分类过程中,当访问到决策树的叶子节点时,不需要像传统基于决策树的包分类方法一样继续在规则分组中执行顺序查找,而是可以直接确定数据包的分类结果。同时,对决策树或其任意一棵子树,其根节点的子节点所对应区间坐标值均为严格递增,所以可采用折半查找法。
设原始规则条数为
表1列出了Uscuts方法和几种经典包分类方法在最坏情况下的时间复杂度。表1中:
由表1可以看到,相比Grid-of-Tries[11]、HiCuts等算法而言,Uscuts分类算法的执行时间有比较明显的优势。
| 表1 最坏情况下算法时间复杂度对比 Tab. 1 Comparison of the worst time complexity |
![]() |
2)平均时间复杂度分析
为进一步说明Uscuts分类算法性能,接下来,对该算法在一般情况下的平均时间复杂度进行分析。
因为实际应用中数据包和规则均是动态变化的,考虑一般情况,首先提出两点假设并分别进行实验验证。已知原始访问控制规则条数为
针对假设1),待分类的
由表2可以看到,各数据集平均有60%左右分类为deny,基本符合假设。
| 表2 数据包分类验证结果 Tab. 2 Results of packet classification |
![]() |
针对假设2),分类为deny的数据包分别有1/
| 表3 分类为deny的数据包在各维上未能匹配到节点数占比 Tab. 3 Proportion of the deny packets that failed to match in each dimension |
![]() |
设待分类数据包数为
| $\begin{aligned}[b]\!\!\!\!\!{T_{{\rm{avg}}}}= & [(mk{\rm{/2)}} \cdot {\rm{lb(2}}n{\rm{) + (}}m{\rm{/2}}k{\rm{)}}\sum\limits_{{{_i}_{ = {\rm{1 - }}k}}} {{\rm{lb(2}}n{\rm{)}}} {\rm{]/}}m = \\& {\rm{ [(3}}k{\rm{ + 1)/4]}} \cdot {\rm{lb(2}}n)\end{aligned}$ | (1) |
即在
在算法实现过程中,采用链表结构对决策树内各个节点进行存储。具体而言,为树中每个节点设置一个孩子链表,并将这些节点及相应的孩子链表的头指针存放在一个向量中,其中,各链表元素分别对应决策树的节点。设决策树内节点数为
一般情况下,对基于决策树的分类方法而言,除最后一层的叶子节点外,其他各层节点的存储结构均相同。但注意到,传统基于决策树的分类方法不仅要存储节点信息,而且要存储叶子节点所对应规则分组内的所有规则。设
显然,与现有其他基于决策树的分类方法相比,Uscuts方法中决策树内每个叶子节点所关联的规则条数有且只有1条。因此,该方法不需要额外空间存储分组规则,在一定程度上降低了存储空间需求。
3.3 仿真实验为进一步验证Uscuts分类算法效率,选取8个不同规模(规则条数分别为16~1 000条)的ACL规则,及9个不同大小(分别为1~1 000 kByte)的数据集,测试了用UsCuts算法分类数据包所需时间,算法执行环境为Java JDK1.6 (操作系统Windows 7,内存4.0 GB,CPU为Intel(R)Core(TM)Processor of 2.60 GHz)。测试结果见表4。对规模为1 kByte的ACL,当数据集达1 000 kByte时,分类这些数据包所需时间也不超过220 ms。
|
表4 不同规模ACL(
|
![]() |
以ACL条数
![]() |
| 图7 Uscuts分类算法速度测试结果 Fig. 7 Running time for Uscuts |
由图7可以看到:分类数据包所需时间曲线分布均近似符合对数函数
随着网络应用的发展,对网络数据包分类速度提出了更高的要求。针对现有包分类方法存在的不足,提出了一种基于单元空间划分的快速防火墙包分类方法(Uscuts)。首先,对规则进行预处理生成一系列单元空间;然后,根据单元空间划分构建分类决策树;最后,基于决策树实现数据包快速分类。理论分析与测试结果表明,与现有基于决策树的分类方法相比,本文方法具有更高的分类效率,且针对决策树所需的存储空间更小。本文方法的应用不仅局限于防火墙包分类,也为路由器、SDN快速包分类等问题求解提供了一种新的思路。下一步工作将研究分布式防火墙包分类问题及如何将本文方法应用到SDN之中。
| [1] |
Daly J,Liu A X,Torng E. A difference resolution approach to compressing access control lists[J]. IEEE/ACM Transactions on Networking, 2016, 24(1): 610-623. DOI:10.1109/TNET.2015.2397393 |
| [2] |
Ding linxuan,Huang Kun,Zhang Dafang. Low-power TCAM for regular experssion matching[J]. Journal on Communications, 2014, 35(8): 162-168. [丁麟轩,黄昆,张大方. 基于 TCAM 的低能耗正则表达式匹配算法[J]. 通信学报, 2014, 35(8): 162-168. DOI:10.3969/j.issn.1000-436x.2014.08.020] |
| [3] |
Qi Yaxuan,Li Jun. Theoretical analysis and algorithm design of high-performance packet classification algorithms[J]. Chinese Journal of Computers, 2013, 36(2): 408-421. [亓亚烜,李军. 高性能网包分类理论与算法综述[J]. 计算机学报, 2013, 36(2): 408-421.] |
| [4] |
Rottenstreich O,Keslassy I,Hassidim A,et al.On finding an optimal TCAM encoding scheme for packet classification[C]//Proceedings of the 2013 IEEE Infocom.Turin:IEEE,2013:2049–2057.
|
| [5] |
Srinivasan V,Varghese G,Suri S,et al.Fast and scalable layer four switching[C]//Proceedings of the ACM SIGCOMM’98 Conference on Applications,Technologies,Architectures,And Protocols for Computer Communication.Vancouver:ACM,1998:191–202.
|
| [6] |
Srinivasan V,Suri S,Varghese G. Packet classification using tuple space search[J]. ACM SIGCOMM Computer Communication Review, 1999, 29(4): 135-146. DOI:10.1145/316188.316216 |
| [7] |
Lu H,Sahni S. O(log W) multidimensional packet classification
[J]. IEEE/ACM Transactions on Networking, 2007, 15(2): 462-472. DOI:10.1109/TNET.2007.892845 |
| [8] |
Gupta P,McKeown N. Classifying packets with hierarchical intelligent cuttings[J]. IEEE Micro, 2000, 20(1): 34-41. DOI:10.1109/40.820051 |
| [9] |
Singh S,Baboescu F,Varghese G,et al.Packet classification using multidimensional cutting[C]//Proceedings of the 2003 Conference on Applications,Technologies,Architectures,And Protocols for Computer Communications.Karlsruhe:ACM,2003:213–224.
|
| [10] |
Gupta P,McKeown N. Algorithms for packet classification[J]. IEEE Network, 2001, 15(2): 24-32. DOI:10.1109/65.912717 |
| [11] |
Lu Sheng,Gong Jian. A multi-dimension packet classification algorithm:NONintersection trie[J]. Chinese Journal of Computers, 2003, 26(11): 1502-1509. [陆晟,龚俭. 一种新的高维报文分类算法——无相交树算法[J]. 计算机学报, 2003, 26(11): 1502-1509. DOI:10.3321/j.issn:0254-4164.2003.11.012] |
| [12] |
Baboescu F,Singh S,Varghese G.Packet classification for core routers:Is there an alternative to CAMs?[C]//Proceedings of Twenty-second Annual Joint Conference of the IEEE Computer and Communications.San Francisco:IEEE,2003:53–63.
|
| [13] |
Spitznagel E,Taylor D,Turner J.Packet classification using extended TCAMs[C]//Proceedings of 11th IEEE International Conference on Network Protocols.Atlanta:IEEE,2003:120–131.
|
| [14] |
Cheng Y,Wang W,Min G,et al. A new approach to designing firewall based on multidimensional matrix[J]. Concurrency and Computation:Practice and Experience, 2015, 27(12): 3075-3088. DOI:10.1002/cpe.3178 |
| [15] |
Taylor D E,Turner J S. Classbench:A packet classification benchmark[J]. IEEE/ACM Transactions on Network-ing, 2007, 15(3): 499-511. DOI:10.1109/TNET.2007.893156 |
2018, Vol. 50













