專利名稱:一種基于dfa的協(xié)議解析方法
技術(shù)領(lǐng)域:
本發(fā)明涉及協(xié)議解析,尤其涉及一種基于DFA的協(xié)議解析方法。
背景技術(shù):
協(xié)議是各種計(jì)算機(jī)應(yīng)用中及應(yīng)用間通信的方式,而協(xié)議解析成為一種特別是在網(wǎng)絡(luò)應(yīng)用中不可或缺的技術(shù)。通訊雙方將通信內(nèi)容封裝在協(xié)議中,再將協(xié)議字符串傳遞給對(duì)方。進(jìn)一步,從協(xié)議字符串中解析出協(xié)議內(nèi)容的速度,直接影響系統(tǒng)的性能。協(xié)議解析,其本質(zhì)為字符串中協(xié)議字段的查找。目前主要的方法有純軟件的協(xié)議解析、基于字符串匹配算法的協(xié)議解析和基于硬件的協(xié)議解析等。純軟件的解析方法使用操作系統(tǒng)中的字符串查找和比較函數(shù),其性能非常有限。基于字符串匹配算法的協(xié)議解析雖然比使用操作系統(tǒng)的字符串函數(shù)快很多,但還是受服務(wù)器芯片性能限制而越來越無法滿足高并發(fā)、大數(shù)據(jù)量的網(wǎng)絡(luò)應(yīng)用需求。隨著網(wǎng)絡(luò)應(yīng)用的快速發(fā)展,出現(xiàn)了基于硬件的協(xié)議解析方法,這種解析方法的性能較高。然而,基于硬件的協(xié)議解析方法存在擴(kuò)展性差的缺陷,只能適用于一些預(yù)設(shè)的固定場(chǎng)景。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種能夠克服上述缺陷的基于DFA引擎的協(xié)議解析方法。本發(fā)明提供了一種基于DFA的協(xié)議解析方法,包括:獲取待解析協(xié)議內(nèi)容中的字段名稱和字段分割符;將所述字段名稱和所述字段分割符作為模式串,根據(jù)所述模式串構(gòu)建模式查找樹;將所述模式查找樹和待解析協(xié)議內(nèi)容作為有限狀態(tài)自動(dòng)機(jī)的輸入,利用所述DFA在待解析協(xié)議內(nèi)容中對(duì)所述模式串進(jìn)行匹配;以及根據(jù)匹配結(jié)果將待解析協(xié)議中的協(xié)議字段值提取出來。優(yōu)選地,所述模式查找樹的根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)之外的其他節(jié)點(diǎn)至少包含一個(gè)字符,每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符都不相同。優(yōu)選地,根據(jù)所述模式串構(gòu)建模式查找樹的步驟包括:對(duì)所述模式查找樹進(jìn)行優(yōu)化壓縮,在優(yōu)化壓縮后的模式查找樹中,除根節(jié)點(diǎn)之外的其他節(jié)點(diǎn)包含一個(gè)或多個(gè)字符。優(yōu)選地,所述模式串在所述查找樹中是從根節(jié)點(diǎn)到其他任一節(jié)點(diǎn)的路徑上的所有節(jié)點(diǎn)中包含的字符的順序組合。優(yōu)選地,所述模式查找樹的各個(gè)節(jié)點(diǎn)對(duì)應(yīng)于所述DFA的各個(gè)狀態(tài),當(dāng)所述匹配中出現(xiàn)失配時(shí),所述DFA狀態(tài)從所述模式查找樹中對(duì)應(yīng)DFA當(dāng)前狀態(tài)的節(jié)點(diǎn)跳轉(zhuǎn)到下一節(jié)點(diǎn)。優(yōu)選地,所述利用所述DFA在待解析協(xié)議內(nèi)容中對(duì)所述模式串進(jìn)行匹配的步驟包括:通過利用DFA在待解析協(xié)議內(nèi)容中匹配所述字段名稱,得到所述字段名稱在待解析協(xié)議內(nèi)容中的字段名稱位置;通過利用DFA在待解析協(xié)議內(nèi)容中所述字段名稱位置開始匹配所述字段分割符,得到與所述字段名稱對(duì)應(yīng)的字段分割符的位置;以及根據(jù)所述字段名稱位置及其對(duì)應(yīng)的字段分割符的位置,提取出與所述字段名稱對(duì)應(yīng)的協(xié)議字段值。優(yōu)選地,所述字段名稱和所述字段分割符的獲取是通過待解析協(xié)議的擴(kuò)展巴克斯范式ABNF實(shí)現(xiàn)的。優(yōu)選地,所述模式串中包含一個(gè)或多個(gè)字段名稱和一個(gè)字段分割符。本發(fā)明一方面使用字符串多模式匹配構(gòu)建模式查找樹,另一方面使用DFA引擎,構(gòu)建的模式查找樹中的各個(gè)節(jié)點(diǎn)作為DFA中的各個(gè)狀態(tài),通過DFA引擎實(shí)現(xiàn)了字符串的快速匹配,大大提高了協(xié)議解析速度。
圖1是根據(jù)本發(fā)明實(shí)施例的基于DFA的協(xié)議解析方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的模式查找樹的示意圖;圖3是根據(jù)本發(fā)明實(shí)施例的模式查找樹在壓縮后的示意圖;圖4是根據(jù)本發(fā)明實(shí)施例的基于DFA的匹配示意圖;以及圖5是根據(jù)本發(fā)明實(shí)施例的根據(jù)匹配位置獲取字段值的示意圖。
具體實(shí)施例方式下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。本發(fā)明提出了一種使用DFA引擎的協(xié)議快速解析方法,首先根據(jù)待解析協(xié)格式中的模式串構(gòu)建模式匹配查找樹,將查找樹的各個(gè)節(jié)點(diǎn)作為DFA狀態(tài)機(jī)的不同狀態(tài),使用DFA引擎對(duì)原始文本進(jìn)行快速匹配查找,找到協(xié)議中相應(yīng)的模式串后給出協(xié)議內(nèi)容的定位信息,進(jìn)一步可解析得到相應(yīng)的協(xié)議內(nèi)容。本發(fā)明通過將多模式匹配與DFA引擎相結(jié)合,大大提高了協(xié)議解析速度。圖1是根據(jù)本發(fā)明實(shí)施例的基于DFA的協(xié)議解析方法的流程圖。在步驟101,獲取待解析協(xié)議中的字段名稱和字段分割符。在接收到待解析協(xié)議內(nèi)容后,可根據(jù)待解析協(xié)議的擴(kuò)展巴克斯范式(AngmentedBackus Naur Form,ABNF)等格式得到待解析協(xié)議中的各個(gè)字段名稱和字段分割符。在步驟102,形成待查找模式串。根據(jù)上面得到的待解析協(xié)議中的字段名稱和字段分割符來形成待查找模式串,每個(gè)模式串中可以包含一個(gè)或多個(gè)字符。一般來說,待解析協(xié)議中可以有多個(gè)不同的字段名稱,每個(gè)字段名稱可以對(duì)應(yīng)于形式上相同的多個(gè)字段分割符。在步驟103,根據(jù)查找模式串構(gòu)建出模式查找樹。首先構(gòu)建一個(gè)空節(jié)點(diǎn)作為查找樹的根。然后,依次遍歷待查找模式串集合,其中,對(duì)每個(gè)待查找模式串,再依次遍歷其中的每個(gè)字符。最后,根據(jù)每個(gè)模式串中的每個(gè)字符依次在根節(jié)點(diǎn)下構(gòu)建新的節(jié)點(diǎn),新的節(jié)點(diǎn)將作為子節(jié)點(diǎn)插入到查找樹中。優(yōu)選地,在查找樹中插入子節(jié)點(diǎn)的過程遵循下面的原則。每個(gè)節(jié)點(diǎn)都至少包含一個(gè)字符;每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符都不相同;如果發(fā)現(xiàn)某個(gè)字符對(duì)應(yīng)的節(jié)點(diǎn)已存在,則不插入子節(jié)點(diǎn)。應(yīng)當(dāng)理解,最終形成的模式查找樹應(yīng)該具有這樣的特征,即將從根節(jié)點(diǎn)到樹中任一節(jié)點(diǎn)的路徑上經(jīng)過的節(jié)點(diǎn)上的字符連接起來,應(yīng)該構(gòu)成該任一節(jié)點(diǎn)對(duì)應(yīng)的模式串。在某些特殊情況下,節(jié)點(diǎn)中也可以包含多余一個(gè)的字符,比如將常見的字段分割符\r\n包含在一個(gè)節(jié)點(diǎn)中。在步驟104,將模式查找樹和待解析的協(xié)議內(nèi)容作為DFA引擎的輸入。
具體而言,將查找樹的各個(gè)節(jié)點(diǎn)作為DFA狀態(tài)機(jī)的不同狀態(tài),用DFA引擎對(duì)原始文本/待解析協(xié)議內(nèi)容中的字符串進(jìn)行快速匹配查找。當(dāng)出現(xiàn)失配時(shí),DFA狀態(tài)會(huì)從查找樹中的一個(gè)節(jié)點(diǎn)跳轉(zhuǎn)到下一個(gè)節(jié)點(diǎn),而每次跳轉(zhuǎn)都將離下一個(gè)匹配位置更近。模式查找樹上各個(gè)邊代表DFA中狀態(tài)之間的跳變,將模式查找樹與DFA引擎結(jié)合起來,可以加快匹配查找的速度。在步驟105,通過DFA匹配得到字段名稱的位置。當(dāng)通過DFA引擎在模式查找樹中成功匹配到一個(gè)字段名稱之后,即可得到該字段名稱的位置。另外,該字段名稱的匹配位置的下一個(gè)字符即為該字段名稱對(duì)應(yīng)的協(xié)議字段值的開始位置。在步驟106,通過DFA引擎匹配得到步驟105中字段名稱后的第一個(gè)字段分割符,從而計(jì)算出該字段分割符的位置。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在待解析協(xié)議內(nèi)容中,通過一對(duì)模式串(包括字段名稱和字段分割符)匹配成功,以及這一對(duì)模式串之間的協(xié)議內(nèi)容的匹配不成功,可以通過簡(jiǎn)單計(jì)算并結(jié)合計(jì)數(shù)器等其他形式得到該協(xié)議字段值的起止位置。在步驟107,根據(jù)對(duì)應(yīng)的字段名稱和字段分割符的位置,解析得到對(duì)應(yīng)的協(xié)議字段值。在步驟108,在得到待解析協(xié)議內(nèi)容中的所有協(xié)議字段值后,完成該協(xié)議內(nèi)容的解析。通過DFA引擎對(duì)每對(duì)模式串的匹配,可以得到與各對(duì)模式串對(duì)應(yīng)的協(xié)議字段在待解析協(xié)議內(nèi)容的字符串中的位置。重復(fù)執(zhí)行步驟105和步驟106,可以將每個(gè)協(xié)議字段解析出來,從而完成該協(xié)議內(nèi)容的解析。圖2是根據(jù)本發(fā)明實(shí)施例的模式查找樹的示意圖。圖3是根據(jù)本發(fā)明實(shí)施例的模式查找樹在壓縮后的示意圖。下面,結(jié)合圖2和圖3對(duì)根據(jù)本發(fā)明實(shí)施例的模式查找樹的創(chuàng)建及其形式進(jìn)行詳細(xì)描述。在模式查找樹的示例中,root節(jié)點(diǎn)為查找樹的根節(jié)點(diǎn),不包含任何字符,she、he、his和her為4個(gè)模式查找串。首先,創(chuàng)建不包含字符的根節(jié)點(diǎn)root,然后遍歷模式查找串。首先,遍歷模式查找串she中的字符,依次在根節(jié)點(diǎn)下創(chuàng)建層級(jí)依次降低的三個(gè)子節(jié)點(diǎn),該三個(gè)子節(jié)點(diǎn)分別包含字符s、h和e ;接下來,遍歷模式查找串he中的字符,依次在根節(jié)點(diǎn)下創(chuàng)建層級(jí)依次降低兩個(gè)子節(jié)點(diǎn),該兩個(gè)子節(jié)點(diǎn)分別包含字符h和e ;繼續(xù)遍歷模式查找串his中的字符,由于查找樹中已經(jīng)存在包含字符h的節(jié)點(diǎn),因此只需在包含字符h的節(jié)點(diǎn)下創(chuàng)建兩個(gè)子節(jié)點(diǎn),該兩個(gè)子節(jié)點(diǎn)分別包含字符i和s ;最后遍歷模式查找串her中的字符,由于查找樹中已經(jīng)存在包含字符h的節(jié)點(diǎn)及其包含字符e的子節(jié)點(diǎn),因此只需在包含字符e的節(jié)點(diǎn)下創(chuàng)建一個(gè)子節(jié)點(diǎn),該子節(jié)點(diǎn)包含字符r。至此,根據(jù)查找字符串she、he、his和her的模式查找樹初步創(chuàng)建完畢。在模式查找樹的初步創(chuàng)建完成之后,還可以對(duì)模式查找樹進(jìn)行優(yōu)化壓縮,將葉子路徑上的各個(gè)節(jié)點(diǎn)合并成一個(gè)節(jié)點(diǎn),如圖3所示。應(yīng)當(dāng)指出,圖2和圖3示出的模式查找樹和模式查找串只是為了說明模式查找樹和模式查找串在構(gòu)建查找樹中的關(guān)系,并不意在限制模式查找串和模式查找樹的數(shù)量和形式。應(yīng)當(dāng)指出,還可以對(duì)上述得到的模式書進(jìn)行優(yōu)化壓縮,壓縮后的模式樹如圖3所示??梢姡趬嚎s后的模式樹中,每個(gè)節(jié)點(diǎn)中包括一個(gè)或多個(gè)字符。圖4是根據(jù)本發(fā)明實(shí)施例的基于DFA的匹配示意圖。如圖4所示,為模式查找樹匹配過程示例,從根節(jié)點(diǎn)到樹中任一節(jié)點(diǎn)的路徑經(jīng)過的節(jié)點(diǎn)上的字符連接起來,構(gòu)成該節(jié)點(diǎn)對(duì)應(yīng)的模式串。例如,匹配模式串she,從root開始逐層順序匹配。在匹配到字符s后在樹的下一層匹配到字符h,在匹配到字符h后在樹的下一層匹配到字符e。對(duì)于字符數(shù)量超過I個(gè)的節(jié)點(diǎn),在匹配到該節(jié)點(diǎn)上的第一個(gè)字符后,后續(xù)下一個(gè)字符與該節(jié)點(diǎn)的第二個(gè)字條進(jìn)行匹配,依次完成該節(jié)點(diǎn)上所有字符的匹配后,再移動(dòng)下一層節(jié)點(diǎn)進(jìn)行匹配。可以看出,模式串she在查找樹中體現(xiàn)為從根節(jié)點(diǎn)到包含字符e的節(jié)點(diǎn)的路徑。圖5是根據(jù)本發(fā)明實(shí)施例的根據(jù)匹配位置獲取字段值的示意圖。如圖5所示,為一個(gè)RTSP協(xié)議內(nèi)容解析結(jié)果,每個(gè)協(xié)議字段匹配位置和其后最近的字段分割符位置之間的部分為該協(xié)議字段對(duì)應(yīng)的值。假設(shè)該協(xié)議內(nèi)容中之前的模式串對(duì)應(yīng)的協(xié)議字段值已經(jīng)獲取完畢,以最后的字符串User_agent:VLC media player\r\n的協(xié)議字段值的查找為例進(jìn)行說明。匹配到模式串User-agent:,其中的字符U的位置為位置1,其字段長度ρ (在此為11),距離該位置I最近的字段分割符\r的位置為位置I。然后,匹配到距離模式串User-agent:的下一個(gè)字段分割符\r\n,其中的\r的位置為對(duì)應(yīng)的字段分割符的開始位置,令其為位置2。在待解析協(xié)議內(nèi)容中,通過一對(duì)模式串(包括字段名稱和字段分割符)匹配成功,以及這一對(duì)模式串之間的協(xié)議內(nèi)容的匹配不成功,可以通過簡(jiǎn)單計(jì)算并結(jié)合計(jì)數(shù)器等其他形式得到協(xié)議字段值的起止位置。進(jìn)一步,以上一對(duì)模式串的位置為基礎(chǔ),可以得出下一對(duì)模式串的位置。顯而易見,位置1+p則應(yīng)該為模式串User-agent:對(duì)應(yīng)的協(xié)議字段VLC mediaplayer的開始位置;另外,位置2-(位置1+p)即為對(duì)應(yīng)該模式串的協(xié)議字段值的長度。根據(jù)該協(xié)議字段的開始位置及其字段長度,可以將該協(xié)議字段值從待解析的協(xié)議內(nèi)容中提取出來,從而完成該協(xié)議字段的解析。待解析協(xié)議內(nèi)容中的其他協(xié)議字段值的解析與上面舉例描述的協(xié)議字段值的過程相似,因此不再贅述。因此,通過對(duì)圖5的待解析的協(xié)議內(nèi)容中的每個(gè)協(xié)議字段值的依次解析,最終完成對(duì)待解析協(xié)議內(nèi)容的協(xié)議解析。專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM),電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。以上所述的具體實(shí)施方式
,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式
而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于DFA的協(xié)議解析方法,包括: 獲取待解析協(xié)議內(nèi)容中的字段名稱和字段分割符; 將所述字段名稱和所述字段分割符作為模式串,根據(jù)所述模式串構(gòu)建模式查找樹; 將所述模式查找樹和待解析協(xié)議內(nèi)容作為有限狀態(tài)自動(dòng)機(jī)DFA的輸入,利用所述DFA在待解析協(xié)議內(nèi)容中對(duì)所述模式串進(jìn)行匹配;以及 根據(jù)匹配結(jié)果將待解析協(xié)議內(nèi)容中的協(xié)議字段值提取出來。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述模式查找樹的根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)之外的其他節(jié)點(diǎn)包含一個(gè)字符,每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符都不相同。
3.根據(jù)權(quán)利要求1所述的方法,所述根據(jù)所述模式串構(gòu)建模式查找樹的步驟包括: 對(duì)所述模式查找樹進(jìn)行優(yōu)化壓縮,在優(yōu)化壓縮后的模式查找樹中,除根節(jié)點(diǎn)之外的其他節(jié)點(diǎn)包含一個(gè)或多個(gè)字符。
4.根據(jù)權(quán)利要求1所述的方法,其中,所述模式串在所述查找樹中是從根節(jié)點(diǎn)到其他任一節(jié)點(diǎn)的路徑上的所有節(jié)點(diǎn)中包含的字符的順序組合。
5.根據(jù)權(quán)利要求1所述的方法,其中,所述模式查找樹的各個(gè)節(jié)點(diǎn)對(duì)應(yīng)于所述DFA的各個(gè)狀態(tài),當(dāng)所述匹配中出現(xiàn)失配時(shí),所述DFA狀態(tài)從所述模式查找樹中對(duì)應(yīng)DFA當(dāng)前狀態(tài)的節(jié)點(diǎn)跳轉(zhuǎn)到下一節(jié)點(diǎn)。
6.根據(jù)權(quán)利要求1所述的方法,其中,所述利用所述DFA在待解析協(xié)議內(nèi)容中對(duì)所述模式串進(jìn)行匹配的步驟包括: 通過利用DFA在待解析協(xié)議內(nèi)容中匹配所述字段名稱,得到所述字段名稱在待解析協(xié)議內(nèi)容中的字段名稱位置; 通過利用DFA在待解析協(xié)議內(nèi)容中從所述字段名稱位置開始匹配所述字段分割符,得到與所述字段名稱對(duì)應(yīng)的字段分割符的位置;以及 根據(jù)所述字段名稱位置及其對(duì)應(yīng)的字段分割符的位置,提取出與所述字段名稱對(duì)應(yīng)的協(xié)議字段值。
7.根據(jù)權(quán)利要求1-6所述的方法,其中,所述字段名稱和所述字段分割符的獲取是通過待解析協(xié)議的擴(kuò)展巴克斯范式ABNF實(shí)現(xiàn)的。
8.根據(jù)權(quán)利要求1-7之一所述的方法,其中,所述模式串中包含一個(gè)或多個(gè)字段名稱和一個(gè)字段分割符。
全文摘要
本發(fā)明涉及一種基于DFA的協(xié)議解析方法,包括獲取待解析協(xié)議內(nèi)容中的字段名稱和字段分割符;將所述字段名稱和所述字段分割符作為模式串,根據(jù)所述模式串構(gòu)建模式查找樹;將所述模式查找樹和待解析協(xié)議內(nèi)容作為確定有限狀態(tài)自動(dòng)機(jī)DFA的輸入,利用所述DFA在待解析協(xié)議中對(duì)所述模式串進(jìn)行匹配;以及根據(jù)匹配結(jié)果將待解析協(xié)議內(nèi)容中的協(xié)議字段值提取出來。本發(fā)明一方面使用字符串多模式匹配構(gòu)建模式查找樹,另一方面使用DFA引擎,構(gòu)建的模式查找樹中的各個(gè)節(jié)點(diǎn)作為DFA中的各個(gè)狀態(tài),通過DFA引擎實(shí)現(xiàn)了字符串的快速匹配,大大提高了協(xié)議解析速度。
文檔編號(hào)H04L29/06GK103188267SQ20131010208
公開日2013年7月3日 申請(qǐng)日期2013年3月27日 優(yōu)先權(quán)日2013年3月27日
發(fā)明者倪宏, 李軍, 陳君, 李明哲 申請(qǐng)人:中國科學(xué)院聲學(xué)研究所, 北京中科華影傳媒技術(shù)有限公司