网站大量收购独家精品文档,联系QQ:2885784924

一种高效的正则表达式dfa存储方法.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一种高效的正则表达式dfa存储方法 由于网络安全的需要,深度包检测变得越来越重要,多模式匹配是最重要的技术。现在,基于其灵活性和效率的表达能力,正统表达的df(definemata)具有更好的处理性能,而非正统表达的df(非正统表面活性剂)具有更高的处理性能,但占用的内存区域是最大的问题。因此,本文主要讨论df的存储压缩。 1 正则表达式存储压缩 深度包检测,即扫描数据包的包头及有效载荷内容,对网络安全及网络监控至关重要.许多重要的网络处理应用都需要深度包检测,比如入侵检测系统、防御系统和防火墙等,且当前大多数系统是软件实现的. 在深度包检测中,多模式匹配是实现数据包扫描的核心技术,即通过扫描一次文本,找出模式集合中的模式在文本中的所有出现.传统的多模式匹配,其模式是多个精确字符串(例如apple,banana)的集合.由于通配符、字符集合等正则特征,正则表达式具有很强的表达能力和灵活性,一个正则表达式本身就是一组字符串的集合.正则表达式正在替换精确的字符串成为可选取的模式匹配语言.当前,几个内容检测引擎已经添加了对正则表达式的支持,比如Snort入侵检测系统、Bro入侵检测系统、Linux应用协议分类器(L7-filter)等. 基于正则表达式的多模式匹配,其原理是将正则表达式构造成FSM(finite states machine),再用FSM对文本进行扫描,从而实现模式在文本中的出现.DFA因其处理性能比NFA好而成为了首选的自动机形式,但DFA需要很大的存储空间,这是当前最严重的限制因素.因此,本文主要针对DFA的存储压缩进行讨论. DFA的存储空间是由状态点数目和每个状态点的状态转移数目共同决定的,文中对这两方面分别进行了探讨.首先,对FSM的状态点数目进行压缩,提出了一种复合的FSM的构造方法,通过对正则表达式转化成DFA的状态点数目复杂度的分析,将不同复杂度的正则表达式采用不同的方式构建FSM,使得所有平方级和指数级复杂度的状态点数目降低到了线性级.其次,对DFA的状态转移数目进行压缩,给出了一种高效的压缩算法,即WD2FA(weighted delayed input DFA)算法,该算法尤其对于复杂的正则表达式具有更好的压缩效果,且相对于D2FA(d Delayed input DFA)有更强的压缩能力,使得D2FA是WD2FA在权值为0情况下的特例. 本文第2节介绍FSM存储压缩的相关工作.第3节针对状态点数目进行压缩.第4节是状态转移数目的压缩算法.第5节给出压缩算法的整体结构.第6节是实验性能结果.最后第7节对全文进行总结. 2 背景和相关工作 2.1 nfa的空间和处理复杂度 为了对存储空间进行压缩,首先考虑正则表达式是如何表示的.正则表达式都是用FSM来表示,它有两种逻辑形式:DFA和NFA.对于任意的正则表达式,都对应有一个具有最少状态点数目的DFA. DFA用五元组(Q,Σ,q0,δ,A)表示,其中,Q为状态点集合,Σ为字符表,q0为初始状态点,A为终止状态点,δ为状态转移函数.一个DFA有且只有一个初始状态点作为匹配的起点,之后每扫描文本中的一个字符,则根据转移函数δ确定下一个状态点,当遇到终止状态点(终止状态点可有多个)时,则产生一个模式输出.NFA与DFA的区别在于,NFA的转移函数δ确定了一个或者多个下一状态点,而DFA的转移函数δ确定唯一的下一状态点. FSM所需要的存储空间是由状态点数目和每个状态点的状态转移数目共同决定的.在网络处理过程中,字符表是扩展的ASCII码,这样,每个状态点有256个状态转移.包含数百条正则表达式的规则集,在构建DFA时将有数万个状态点,以至于需要数百兆的存储空间.随着正则表达式数目的增加,空间需求将是不可容忍的. FSM的空间和处理复杂度见表1.当输入一个字符时,DFA能够确定唯一的下一状态点,因此处理复杂度为O(1).而NFA由于它的不确定性,处理一个字符时的最坏复杂度为O(n2).DFA虽然处理复杂度很好,但其实际上是用更多的状态点记录了NFA处理字符的不确定性分枝,以至于空间复杂度要比NFA大得多.从理论上讲长度为n的正则表达式构建的DFA需要状态点数目为O(2n),构建的NFA需要的状态点数目为O(n). 对于含有m条正则表达式的集合,有3种方法可以表示:将其表示成为m个独立的FSM;将其合并成一个FSM;将其表示成k(km)个独立的FSM,也即将m条规则分成k组,每组合并成一个独立的FSM.对于DFA,多个DFA合并可以提高处理性能.若表示成k个独立的FSM,则其处理一个字符的复杂度为O(k),但k值越小,DFA占用的空间越大.为了达到最佳性能,应该对规则分组采取折衷选择.对于NFA,合并不能提高处理性能. 第2.2节和第2.3节介绍当前对D

文档评论(0)

lmzwkyc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档