论文部分内容阅读
随着互联网技术的快速发展,计算机网络在国民经济中发挥了日益重要的作用,已成为人们日常生活不可缺少的一部分。同时,网络安全也日益引起人们的关注,而防火墙或入侵检测系统作为维护网络安全的重要措施,得到了广泛的应用。对于防火墙或入侵检测系统技术来说,数据包过滤是其核心,而模式匹配算法却是数据包过滤的关键技术之一,它直接影响到系统的实时性。因此,研究一种高效的模式匹配算法对提高防火墙或入侵检测系统的性能具有十分重要的意义。在事件分析模块中包括单模式及多模式匹配,其中典型单模式匹配算法包括Brute Force算法、克努特—莫里斯—普拉特算法(简称KMP算法)和Boyer-Moore算法(BM算法);多模式匹配算法包括Aho-Corasick自动机算法(AC算法)、通过AC算法和BM算法结合后的AC_BM算法以及AC_BMH算法,这些算法中,单模式匹配算法无法在同一次匹配中同时匹配多个模式串,多模式匹算法的AC算法无法实现跳跃功能。虽然AC_BM算法和AC_BMH算法借鉴了单模式匹配算法中的跳跃功能,但是其跳跃的长度受到多模式串中的最短模式串长度限制,而且建立状态树时采用256个空间用于存储跳转的状态,其空间利用效率非常低。本文针对这些缺陷,提出了一种改进的多模式匹配算法AC_SUNDAY算法,该算法应用了AC算法的有限自动机原理构成模式树,同时结合类似AC_BM算法的构思,将SUNDAY算法的大幅度跳跃式搜索思想融合入AC算法中(SUNDAY算法的最大跳跃长度能超过其本身的模式串长度),减少了匹配次数,然而改进后的算法在某些特殊情况下例如skip[i+m-1]<skip[i+m]时可能出现低效,因而再次借鉴BMH算法的构思对AC_SUNDAY算法进行修正。无论是改进的算法还是AC_BM算法,初始化后首先都需要构造一个状态树,在构造状态树时,开辟的空间中多为0而真正储存用于跳转的状态却不多。由于此缺陷,在建立状态树时白白消耗了大量的系统内存,因此势必需要对这些空间进行压缩,本文中利用稀疏矩阵的存储原理对存储模式进行了改进,只需要牺牲微量的时间来换取大量的内存空间释放。最后利用随机生成的模式串和文本串,分别在固定模式串数量,改变模式串长度、固定模式串长度,改变模式串数量以及空间性能进行测试,实验测试表明改进后的AC_SUNDAY算法具有如下优势:1)可以不受最大移动距离不能超过前缀树中最短模式串的长度的限制,增大了不匹配时的跳跃距离;2)当文本字符串中的字符并不存在于模式树的任意子模式中时,可以跳过这一字符,而从该字符的前面第一个字符开始比较,减少了不必要的比较次数,加快了字符串的匹配速度;3)修正算法在skip[i+m-1]<skip[i+m]时低效的问题;4)应用稀疏矩阵模式对模式树进行存储,大幅减少算法对内存的需要。