专利名称:扩展巴克斯范式字符串模式匹配和解析的方法及装置的制作方法
技术领域:
本发明涉及网络通信技术领域,尤其涉及一种扩展巴克斯范式字符串模式匹配和解析的方法及装置。
背景技术:
ABNF(扩展巴克斯范式,Augmented BNF)是在IETF(Internet工程任务组,Internet Engineering Task Force)组织在RFC2234中定义的一个字符串模式匹配的文法定义。ABNF是在BNF(巴克斯范式)基础上的扩展,其与标准巴克斯范式的区别包括命名规则、循环、选择、次序独立以及值域。IETF组织使用ABNF定义了多个协议中的报文格式,例如,SIP(会话启动协议,Session Initiation Protocol)。
在解析ABNF定义的多个协议时,需要按照ABNF规则对报文的规则进行描述和分析。
ABNF规则以如下的方式来定义Name=elements crlf;其中,“name”是规则名,“elements”是一个或多个规则名或终结符组合成的序列,“crlf”是回车换行,表征一行的结束;“=”表示“定义为”的含义,用于将规则名和规则定义分开。
ABNF的操作符有多种操作符,用来表示规则名或终结符之间的关系。其中有四种最基本的操作符连接、选择、循环和可选项;利用该四种操作符可以描述绝大多数复杂数据结构,其余的操作符可以用这四种基本的操作符来取代。
以下举一个简单的例子来说明ABNF规则的特点以及四种基本操作符的意义Rule=“a”*(rule1)rule2[rule3];Rule1=“b”|“c”;Rule2=“de”;Rule3=“f”;在上述规则中,“*”指不定循环,表示rule1可以循环0次或无穷次;rule2与前后规则具有连接关系;用方括号(“[”和“]”)括起来的成分表示是可选的,表明rule3是一可选项;Rule1中的“b”和“c”由“|”连接,表示选择关系(“或”关系)。Rule实际上就是用ABNF文法定义了一种字符串模式规则,对于一些字符串如“abdef”、“abbccdef”、“ade”等都可以匹配。
Rule的语法树如图1所示,树的叶子是终结符,在ABNF文法中所有的终结符都属于ASIIC码。树的节点是一些ABNF文法中操作符或子规则名(表示调用)。代表连接操作符,在ABNF文法中被省略。相比于用来描述多数计算机语言所使用的正规表达式,ABNF的文法较丰富。ABNF文法中一些操作符具有相关性,如可选项在表达规则时完全可以用选择关系来取代。但这些操作符都是很有必要的,因为ABNF主要是用来描述数据结构,它在定义结构规则的同时,也要给出结构中的域值,共上层识别、提取,使用这些操作符提高了ABNF的表达能力。
现有常见的ABNF解析方案之一是在通用微处理器上,使用软件来实现,主要分为两类,一类是使用嵌套程序直接描述ABNF表达的协议规则,实质上就是使用开发语言的语法代替ABNF语法来描述协议规则;另一类是根据整个协议规则生成一棵语法树,解析的过程上就是遍历语法树的过程。
以上两种软件实现的方案中,前者的特点是占用存储空间小,但通用性能差,每有新的协议都需要重新开发;后者的特点是通用性能好,可以根据ABNF描述的协议规则直接生成语法树,但占用存储空间较大,不适合在嵌入式系统中实现。
以上两种软件实现的方案在CPU执行时判断、跳转、调用太多,频繁访问不连续的存储空间,带来的缺点是效率低,处理速度慢,给整个系统的运转带来很大的瓶颈。特别是一些面对百万级连接、吞吐量比较大的网络服务器,纯软件实现方案无法满足性能要求。
目前,还提出了一种硬件实现的高速字符串匹配方案,可以对满足正则表达式类字符串进行高速匹配。
正则式有三种基本形式(1)r1|r2标识选择关系,可以匹配任何满足规则r1或规则r2的字符串;(2)r1r2表示连接关系;(3)r1*表示循环关系;如正则式((a|b)*)(cd)可以匹配字符串有acd、aabbcd、cd等。可以为每一个正则式构造一个相应的NFA,采用硬件逻辑通过构造NFA来对可以使用正则式描述其模式规则的字符串进行匹配。图2是四种基本的逻辑结构(a)单个字符的匹配;(b)r1|r2;(c)r1r2;(d)r1*。其中(a)是最基本的单元,在硬件实现中,字符c可以用比较器来实现,用一个触发器(Flip-flop)传接该单元的使能信号,并使整个电路同步。与门、或门和单元之间的物理连线描述了各个单元的逻辑关系。使用这四种基本的逻辑结构可以构造任意的正则式。
图3是((a|b)*)(cd)的逻辑结构。我们将这种思想应用在本发明的特殊解析器模块中(参考图5),用这种思想实现的字符串模式匹配可以达到很高的速度。与软件实现相比,该方案的可以以O(n)的速度对字符串进行匹配。对硬件实现而言即每个时钟周期处理一个字符。
然而,在这一方案中,如果构造大规模的正则式,由于其模块不能复用,占用的硬件逻辑资源太多,以致代价太高。另一方面,该方案不易于提取域值,难以应用在报文的内容解析中。多数ABNF描述的应用层网络协议,例如,SIP(会话初始协议),协议规则非常庞大,而且域值很多,因此不适合使用这一技术方案实现。
发明内容
鉴于上述现有技术所存在的问题,本发明的目的是提供一种扩展巴克斯范式字符串模式匹配和解析的方法及装置,从而实现快速、高效地对任何使用ABNF语法描述的协议规则的报文进行模式匹配和解析。
本发明的目的是通过以下技术方案实现的本发明提供了一种ABNF字符串模式匹配和解析的方法,包括A、建立ABNF规则对应的ABNF指令;B、将基于ABNF文法描述的协议规则编译为基于ABNF指令的描述的协议规则;C、对使用ABNF文法描述字符串或协议报文基于所述的ABNF指令描述的协议规则进行匹配和解析处理。
所述的ABNF指令包括选择命令、循环命令、可选命令、调用命令、比较命令和返回命令。
所述的返回命令包括匹配成功命令和匹配失败命令。
所述的步骤B包括当使用选择命令、循环命令和可选命令时需要指明相应的偏移地址,所述的偏移地址分别用于表明选择关系的长度、循环关系的长度和用于确定可选项的结束地址。
所述的步骤C包括
利用硬件处理芯片对所述的字符串或协议报文进行匹配和解析处理。
基于上述方法,本发明还提供了一种ABNF字符串模式匹配和解析处理装置,包括数据存储空间用于存放需要进行扩展巴克斯范式ABNF字符串模式匹配和解析处理的文本数据;程序存储空间用于存放将所述的ABNF描述的字符串模式规则经编译处理后获得的基于ABNF指令的协议规则序列的目标代码;译码器用于对程序存储空间的协议规则序列的目标代码进行译码,获得控制信号;并提取程序空间的待比较数据,提供给比较器;比较器用于将程序空间被译码器提取出的操作数与当前数据空间的数据进行比较,并反馈比较结果。
所述的数据存储空间、程序存储空间和匹配和译码器通过总线连接。
所述的ABNF字符串模式匹配和解析处理装置还包括结果输出缓冲模块连接于控制总线上,用于保存针对协议规则序列代码的匹配和解析处理结果。
所述的ABNF字符串模式匹配和解析处理装置还包括特殊解析器对特定的字符串模式规则进行匹配,且为完全使用硬件逻辑单元实现,每个特殊解析器与专用的指令对应,通过所述指令调用相应的特殊解析器对报文进行解析。
所述的ABNF字符串模式匹配和解析处理装置还包括循环计数器,用于为程序存储空间提供访问地址。
所述的ABNF字符串模式匹配和解析处理装置还包括链表栈用于保存选择命令、循环命令和可选命令时需要指明的偏移地址信息。
由上述本发明提供的技术方案可以看出,由于本发明为基于硬件解码芯片实现所述的ABNF解码器,使得其与软件实现方式相比,解析效率大为提高;而且,本发明中,所述的ABNF指令集实质上相当于一种高级语言,基本与ABNF文法是一一对应,使得目标代码简便,并易于硬件实现。而且,在本发明提供编译器可以直接根据用ABNF文法描述的协议规则生成相应的机器代码,这样,开发人员直接使用ABNF语法描述协议规则即可,不必用指令来描述协议规则,这样开发起来方便,提高了通用性,缩短了开发周期,降低了开发成本。因此,本发明构造了一个通用、高效的字符串模式匹配和解析的处理器。
图1为规则Rule=“a”*(rule1)rule2[rule3]语法树的结构示意图;图2为正则式的四种基本逻辑结构示意图;图3为规则Rule=“a”*(rule1)rule2[rule3]组合逻辑结构示意图;图4为本发明所述的方法的流程图;图5为本发明所述的解析器的原理框图。
具体实施例方式
本发明主要是提供了一种基于ABNF文法的字符串模式匹配和解析的硬件解码器的实现,可以对任何使用ABNF语法描述的协议规则的报文进行高速模式匹配和解析。
为对本发明有进一步了解,下面首先对本发明所述的扩展巴克斯范式字符串模式匹配和解析的方法的具体实现方式进行描述。
为实现本发明所述的方法首先需要建立ABNF规则对应的ABNF指令,所述的ABNF指令包括选择命令、循环命令、可选命令、调用命令、比较命令和返回命令,所述的返回命令又进一步包括匹配成功命令和匹配失败命令;而且,当应用选择命令、循环命令和可选命令时,还需要指明相应的偏移地址,所述的偏移地址分别用于表明选择关系的长度、循环关系的长度和用于确定可选项的结束地址,ABNF指令集的具体含义描述如下表所示
有了上述ABNF指令集后,则可以将基于ABNF字符串描述的协议规则编译为基于ABNF指令的协议规则序列,也就是说,将待匹配和解析处理的数据文本(协议规则数据文本)首先以ABNF字符串进行描述,然后,再将所述的ABNF字符串基于ABNF指令进行编译;最后,便可以对所述的基于ABNF指令的协议规则序列进行匹配和解析处理,由于ABNF指令的简便且易于实现,因此整个匹配和解析过程的硬件实现将更为方便,从而保证的解析处理的高效性和通用性。
可以看出,本发明中,ABNF指令的格式为操作码[操作数],其中一些操作数是隐式给出,如指令cmp‘c1’实质上有两个操作数,一个是字符‘c1’,存放在程序空间,另一个是当前数据空间里数据指针指向的内容;所述的ABNF指令集的具有双出口特点,即部分指令(如or,loop等)用来记录该状态执行成功和执行失败所需返回的地址,称为成功匹配地址和失败匹配地址,压入链表栈中;部分指令(如cmp)根据执行的结果来决定是从链表栈里取出成功地址还是失败地址作为返回地址。
本发明还提供了一种采用硬件实现的扩展巴克斯范式字符串模式匹配和解析处理装置,在使用该装置开发基于新的协议规则的解析处理软件时,首先将ABNF规则编译成为ABNF指令序列,然后下载到解码芯片的程序空间即可使用,具体处理过程如图4所示,首先使用ABNF语法描述协议规则,然后,使用本发明中的ABNF指令集对所述的协议规则进行编译连接,如果编译失败,则重新使用ABNF语法描述协议规则,再进行编译连接,当编译连接成功时,便可以将所述的基于ABNF指令的协议规则序列利用本发明提供的装置进行匹配和解析处理,获得解析处理结果。
下面再对本发明提供了扩展巴克斯范式字符串模式匹配和解析处理装置结合附图进行说明,如图5所示,具体包括(1)数据存储空间,即数据空间用于存放需要进行扩展巴克斯范式ABNF字符串模式匹配和解析处理的文本数据,所述的数据存储空间充当待解析的报文的缓冲;(2)程序存储空间,即代码空间用于存放将所述的ABNF描述的字符串模式规则经编译处理后获得的基于ABNF指令的协议规则序列的目标代码,即所述的代码空间(即程序存储空间)用于存放描述协议规则的目标代码;(3)循环计数器循环计数器用来产生程序存储空间的地址,为了提高地址产生效率,循环计数器除了具有普通计数器功能之外,还专门支持loop(循环)指令;循环计数器使用两个寄存器文件,即StartReg文件和EndReg文件,分别用来存放计数器的起始计数值和结束计数值;计数器从起始值开始递增计数,当到达结束值时,自动从起始值开始重新递增计数;当StartReg0=0x0000,EndReg=0xffff时,该循环计数器功能就与普通计数器一样;(4)译码器译码器用于对存放在程序存储空间的机器码进行译码,为各个存储空间以及比较器、特殊解析器、循环计数器、数据地址发生器、解析结果输出缓冲器提供控制信号,为比较器提供比较数据;(5)比较器比较器用于对除特定的协议规则外的协议规则进行比较处理,获得匹配和解析处理结果;具体为所述的比较器用来专门支持所述的cmp(比较)指令,将程序空间被译码器提取出的操作数与当前数据空间的数据进行比较,然后反馈比较结果;(6)特殊解析器特殊解析器为基于特定的协议规则设置,专门针对协议中常见模块规则直接用硬件逻辑构造不确定状态机,专门对特定常用的规则模式进行解析,如IPV4和IPV6地址模式规则的字符串进行解析;特殊解析器连接在处理器数据总线和控制总线上,需要特殊解析器解析的模式规则对应有专门的指令,程序调用这些指令时,处理器就直接调用特殊解析器来解析当前报文数据,这样在解析协议中常见的模块规则时,使用特殊解析器大大地提高了报文解析速度。特殊解析器可以根据处理器的应用目的进行定制,例如若处理器应用于SIP协议解析,可以针对SIP协议的特点定制特殊处理器,以提高解析速度;(7)结果输出缓冲模块用于保存针对协议规则序列代码的匹配和解析处理结果;具体是在解析数据缓冲的报文过程中记录下需要提取的域值的位置(地址)和错误信息;(8)链表栈用于保存选择命令、循环命令和可选命令时需要指明的偏移地址,以及子规则调用指令(call)的返回地址;这些地址可分为匹配成功返回地址和匹配失败返回地址。
具体为所述的链表栈控制器和RAM构成一个链表栈,该链表栈是支持ABNF指令集关键的模块,一些ABNF指令是直接解释ABNF文法的操作符,需要记录当前匹配成功或匹配失败所需返回的地址,链表栈就是用来按照一定的数据结构存放成功地址和失败地址,便于解析器在代码空间快速寻址。
本发明所述的装置采用的是增强的哈佛结构,即所述的数据存储空间、程序存储空间、匹配和解析处理器(包括特殊解析器和比较器),以及结果输出缓冲模块和链表栈控制器间通过五根独立的总线连接,其目的是为了提高访问存储器的效率,所述的五根总线包括两根地址总线、两根数据总线和一根控制总线,两根地址总线分别为数据存储地址总线和程序存储地址总线,两根数据总线分别为数据存储数据总线和程序存储数据总线;不难看出,本发明的实现过程中,ABNF指令集起到了重要的作用。下面将结合具体实例来说明所述ABNF指令集的使用
(a)顺序关系(1)对于规则RR=R1 R2的描述如下call R1call R2ret其中,R1、R2为基于ABNF字符串描述的协议规则,下同;(2)对于规则RR=‘c1’‘c2’的描述如下cmp ‘c1’cmp ‘c2’ret其中,C1、C2为具体的ABNF字符串,下同;(b)选择关系(1)对于规则RR=R1|R2的描述如下or [ornum]call R1call R2errorret(2)对于规则RR=‘c1’|‘c2’的描述如下or [ornum]cmp ‘c1’cmp ‘c2’errorret(c)循环关系(1)对于规则RR=*(R1)的描述如下loop [loopnum]
call R1endloopret(2)对于规则RR=*(c1)的描述如下loop [loopnum]cmp ‘c1’endloopret(d)可选项(1)对于规则RR=R1[R2]R3的描述如下call R1opt [optnum]call R2call R3ret(2)对于规则RR=c1[c2]c3的描述如下cmp ‘c1’opt [optnum]cmp ‘c2’cmp ‘c3’ret基于上述ABNF指令集,下面再以一个具体的ABNF规则为例,描述其采用ABNF指令集描述的形式Rule=“abc”*(rule1)rule2[rule3];规则名及其定义Rulecmp ‘a’cmp ‘b’cmp ‘c’loop [loopnum]
call Rule1;endloopcall Rule2opt [optnum]call Rule3retRule1=“d”|”e”;子规则名及其定义Rule1or [ornum]cmp ‘d’cmp ‘e’errorretRule2=“f” ;子规则名及其定义Rule2cmp‘f’retRule3=“gh” ;子规则名及其定义Rule3cmp ‘g’cmp ‘h’ret基于硬件解码芯片的ABNF解码器可带来如下有益效果发明一种高速进行字符串模式匹配和解析的处理器,便于应用在大型网络服务器上对应用层文本编码的报文进行合法性检查和解析;与传统软件实现方法相比,匹配和解析的速度大为提高。
所述的ABNF指令实质上相当于一种与ABNF文法对应的高级语言。在本发明中,实现了该语言的编译器,可以根据用ABNF文法描述的协议规则生成指令描述的规则和处理器的机器代码。开发人员开发新的协议时可以直接使用ABNF文法来描述协议规则,不必用指令集来描述,这样就缩短开发周期,降低开发成本。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种ABNF字符串模式匹配和解析的方法,其特征在于,包括A、建立ABNF规则对应的ABNF指令;B、将基于ABNF文法描述的协议规则编译为基于ABNF指令的描述的协议规则;C、对使用ABNF文法描述字符串或协议报文基于所述的ABNF指令描述的协议规则进行匹配和解析处理。
2.根据权利要求1所述的ABNF字符串模式匹配和解析的方法,其特征在于,所述的ABNF指令包括选择命令、循环命令、可选命令、调用命令、比较命令和返回命令。
3.根据权利要求2所述的ABNF字符串模式匹配和解析的方法,其特征在于,所述的返回命令包括匹配成功命令和匹配失败命令。
4.根据权利要求2所述的ABNF字符串模式匹配和解析的方法,其特征在于,所述的步骤B包括当使用选择命令、循环命令和可选命令时需要指明相应的偏移地址,所述的偏移地址分别用于表明选择关系的长度、循环关系的长度和用于确定可选项的结束地址。
5.根据权利要求1、2、3或4所述的ABNF字符串模式匹配和解析的方法,其特征在于,所述的步骤C包括利用硬件处理芯片对所述的字符串或协议报文进行匹配和解析处理。
6.一种ABNF字符串模式匹配和解析处理装置,其特征在于,包括数据存储空间用于存放需要进行扩展巴克斯范式ABNF字符串模式匹配和解析处理的文本数据;程序存储空间用于存放将所述的ABNF描述的字符串模式规则经编译处理后获得的基于ABNF指令的协议规则序列的目标代码;译码器用于对程序存储空间的协议规则序列的目标代码进行译码,获得控制信号;并提取程序空间的待比较数据,提供给比较器;比较器用于将程序空间被译码器提取出的操作数与当前数据空间的数据进行比较,并反馈比较结果。
7.根据权利要求6所述的ABNF字符串模式匹配和解析处理装置,其特征在于,所述的数据存储空间、程序存储空间和匹配和译码器通过总线连接。
8.根据权利要求6所述的ABNF字符串模式匹配和解析处理装置,其特征在于,该装置还包括结果输出缓冲模块连接于控制总线上,用于保存针对协议规则序列代码的匹配和解析处理结果。
9.根据权利要求6、7或8所述的ABNF字符串模式匹配和解析处理装置,其特征在于,该装置还包括特殊解析器对特定的字符串模式规则进行匹配,且为完全使用硬件逻辑单元实现,每个特殊解析器与专用的指令对应,通过所述指令调用相应的特殊解析器对报文进行解析。
10.根据权利要求9所述的ABNF字符串模式匹配和解析处理装置,其特征在于,该装置还包括循环计数器,用于为程序存储空间提供访问地址。
11.根据权利要求9所述的ABNF字符串模式匹配和解析处理装置,其特征在于,该装置还包括链表栈用于保存选择命令、循环命令和可选命令时需要指明的偏移地址信息。
全文摘要
本发明涉及一种基于ABNF(扩展巴克斯范式)文法的字符串模式匹配和解析的方法及装置。本发明主要包括(1)定义了一套适合描述字符串模式规则的指令集;(2)设计了一个编译器,可以直接将ABNF文法描述的协议规则生成用指令集描述的协议规则以及目标代码;(3)根据指令集特点设计硬件解析器,解析器包含专用硬件实现的模块支持相应的指令,可以实现高速字符串模式匹配和解析。采用本发明进行字符串模式匹配和解析的效率大大提高;开发人员可以直接使用ABNF文法来描述协议规则,然后使用编译器生成机器码下载到解析器的内存里,不必用指令集来描述协议规则,这样大大地缩短了开发周期,降低了开发成本。
文档编号H04L29/06GK1842081SQ200510059650
公开日2006年10月4日 申请日期2005年3月30日 优先权日2005年3月30日
发明者赵宝华, 靳志伟, 屈玉贵, 周颢, 王烁, 李奇越, 吕超, 田野 申请人:华为技术有限公司, 中国科学技术大学