- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于FPGA正则表达式匹配引擎设计
基于FPGA正则表达式匹配引擎设计
【摘要】为了提高硬件正则表达式匹配引擎的吞吐率和状态信息存储效率,设计了一种可以多字节并行处理的正则表达式匹配结构,引入了“失效状态”的概念,并且结合Bloom Filter的思想,对状态机进行了过滤和分类匹配。最后在FPGA上进行了验证和测试,结果表明,该匹配引擎有效节约了状态信息存储所需的空间,提高了正则表达式的匹配速率。
【关键词】正则表达式;并行处理;Bloom Filter;FPGA
1.引言
基于模式匹配的入侵检测系统是将入侵的行为和手段表达为一种模式和特征,然后检测网络上的数据是否与既定的模式相匹配。正则表达式匹配是模式匹配的一种,因其丰富和灵活的表达能力在模式匹配中得到广泛应用。最初的正则表达式匹配引擎大多是基于软件的,但是通用处理器的发展远远跟不上网络数据流量的增长。基于软件的正则表达匹配引擎的吞吐率越来越跟不上日益增长的网络数据流量,所以基于硬件的正则表达匹配引擎逐渐成为国内外学者研究的热点。
自1982年Floyd和Ullman[1]首次在硬件上实现一个分层的NFA模型起,正则表达式的硬件匹配技术已得到了长足地发展。Sidhu和Prasanna[2]设计了针对正则表达式中“或”、“循环”、“连接”3个基本操作的专用电路,并基于基本操作提出了一个NFA专用匹配电路结构。Christopher L.Hayes等人提出了一种能够减少存储空间且能够有很高匹配速率的正则表达式匹配结构。国内的学者也研究出了不少高性能的正则表达式匹配引擎。清华大学的张伟[5]等人提出了一种硬件四级流水线的多正则表达式匹配结构;张树壮[6]等人提出了一种基于猜测―验证的正则表达式匹配结构。
目前,正则表达式匹配的硬件实现方法主要有两种:基于纯硬件专用匹配电路和基于存储器查询。前者的特点是占用资源比较少,不需要大容量存储器,匹配速度快,但缺点同样明显,即重构性差,只能针对特定的正则表达式,有局限性。基于存储器查询的方法可以解决前者的不可重构性和局限性的问题,但是它需要大容量存储器的支持。并且,存储器访问频率的限制和大量状态信息的存储已成为基于存储器查询的正则表达式???配引擎性能提高的瓶颈。本文在前人研究的基础上,利用硬件的可并行特点,设计了一种可以多字符同时处理的正则表达匹配结构。并且结合Bloom filter的思想,对状态机进行了过滤和分类匹配,引入了“失效状态”的概念,在一定程度上解决了以上的两个瓶颈问题。
2.设计原理
2.1 多字符的并行处理
假设,待检测的字符串为“FiniteAu-tomata”,模式串为“.*Auto”。那么模式串“.*Auto”的DFA如图1所示。
一般情况下,必须把字符串进行逐个匹配,设一次状态转移需要消耗的时钟周期为M,那么共需消耗M*N(N为字符串长度,这里N=14)个时钟周期。现在把字符串平均分成两段,L1=FiniteA和L2=utomata,如表1所示。
然后进行如下处理,第一步,让L1和L2从0状态开始进行并行匹配,并且记录L2达到过的状态;第二步,以L1的末状态为首状态,继续对L2进行匹配,并且每到达一个状态与第一步中L2在该字符到达的状态比较。如果两个状态相同,那么就可以跳过后面的字符,直接开始下一个字符串的匹配。
这种方法是正确的。①当模式串只包含在L1或L2中时,第一步就可以把模式串匹配出来。②当模式串被拆散在L1和L2中的情况下,因为第二步继续匹配的起始状态为L1的末状态,所以同样能匹配出来。③假设,第二步中找到的相同状态为Si,因为对于同一DFA,在同一状态下,输入同一个字符,能到达的下一个状态是确定的[7],所以在Si以后的状态在第一步的L2中都已到达过,可以直接跳过。
从表1可以看到,用此方法来处理字符串“FiniteAutomata”时,消耗的时钟周期为11*M,比直接逐个处理的方法节省了22%的时间。当用正则表达式状态机来匹配网络数据流时,匹配的概率是很低的,所有的正则表达式开始于一个单一的初始状态,大量状态转换会回到初始状态或与初始状态相邻的状,且许多状态接受同样的字符会转移到相同的目的状态[7]。因此,当进行第二步处理时,有很高的概率可以较早得到达相同状态。最好情况下,把待处理的字符串分成两段,速度就可以提高一倍;分成四段,速度就可以提高三倍。
2.2 “失效状态”的概念
当正则表达式编译成DFA状态机时,会引起状态爆炸,状态信息的存储面临着巨大地挑战。本文对状态信息的存储进行了优化,引入了“失效状态”的概念,有效地节省了状态信息存储占用的空间。先举一个简单的例子,如表2所示为“AB.*CD”的状态转移表。状态2就是由“.*”引入的状态,也
原创力文档


文档评论(0)