專利名稱:一種基于硬件cam芯片的高效能網(wǎng)絡(luò)數(shù)據(jù)包過濾方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)信息處理領(lǐng)域,具體地說,屬于網(wǎng)絡(luò)原始數(shù)據(jù)過濾還原領(lǐng)域,通過硬件芯片加速對符合五類源協(xié)議傳輸?shù)腡CP/IP數(shù)據(jù)包進(jìn)行關(guān)鍵字高速過濾和匹配方法。
背景技術(shù):
網(wǎng)絡(luò)上的數(shù)據(jù)傳輸都是以TCP/IP數(shù)據(jù)包為單位進(jìn)行的,每個數(shù)據(jù)包內(nèi)包含有諸多信息。常規(guī)協(xié)議還原的做法是由硬件完成包的接收后,由軟件逐項(xiàng)比較接收到數(shù)據(jù)包內(nèi)的協(xié)議信息后,進(jìn)行分類,并根據(jù)包序號對收到的數(shù)據(jù)包進(jìn)行數(shù)據(jù)段抽取排序,對已完成排序還原后的數(shù)據(jù)段一般稱為文件。對文件內(nèi)容與關(guān)鍵字逐字比對的工作稱為內(nèi)容匹配。內(nèi)容匹配的關(guān)鍵是比對對象是文件而不是包且比對過程需要逐字節(jié)移位后與關(guān)鍵字進(jìn)行比對。只有保證這兩點(diǎn)才能做到對針對內(nèi)容的精確匹配。 協(xié)議還原過程中,數(shù)據(jù)包排序和內(nèi)容匹配致頻繁的內(nèi)存搬移,使整個系統(tǒng)的處理效率降低,在單機(jī)多協(xié)議還原情況下尤為明顯。而不對數(shù)據(jù)包進(jìn)行按協(xié)議分類、重新排序?qū)崿F(xiàn)關(guān)鍵字過濾就成為難題。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明的目的是提供一種基于硬件CAM芯片的高效能網(wǎng)絡(luò)數(shù)據(jù)包過濾方法;本發(fā)明通過關(guān)鍵字偏移實(shí)現(xiàn)傳輸時的識別技術(shù),以數(shù)據(jù)包為對象不進(jìn)行數(shù)據(jù)段抽取和排序,直接移動數(shù)據(jù)段的數(shù)據(jù)內(nèi)容與關(guān)鍵字進(jìn)行移位匹配;當(dāng)發(fā)現(xiàn)比較器當(dāng)前窗口內(nèi)部分?jǐn)?shù)據(jù)和關(guān)鍵字前半段匹配,或者和關(guān)鍵字后半段匹配,即認(rèn)為部分匹配,亦叫半中標(biāo);如果數(shù)據(jù)包在移位比對中出現(xiàn)和關(guān)鍵字完全匹配的字段,即認(rèn)為完全匹配,即中標(biāo),將相關(guān)的網(wǎng)絡(luò)數(shù)據(jù)包全部過濾出來,存儲到某地;其中窗口內(nèi)前段部分?jǐn)?shù)據(jù)與關(guān)鍵字后半段部分?jǐn)?shù)據(jù)匹配,稱為窗口前中標(biāo),窗口內(nèi)后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字前半段部分?jǐn)?shù)據(jù)匹配,稱為窗口后中標(biāo)。為實(shí)現(xiàn)上述目的,本發(fā)明的解決方案是一種基于硬件CAM芯片的高效能網(wǎng)絡(luò)數(shù)據(jù)包過濾方法,其步驟為I)根據(jù)CAM芯片比較器的窗口寬度設(shè)定輸入關(guān)鍵字的最大長度;其中,比較器的窗口寬度為η字節(jié),關(guān)鍵字的最大長度小于或等于η字節(jié);2)所述比較器從網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段中順序移位讀取η個字節(jié)作為比較器的窗口數(shù)據(jù)與輸入的關(guān)鍵字進(jìn)行匹配;21)如果窗口數(shù)據(jù)包含匹配的關(guān)鍵字,則視為中標(biāo),將當(dāng)前數(shù)據(jù)包作為匹配網(wǎng)絡(luò)數(shù)據(jù)包過濾出來;22)如果窗口后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字前半段部分匹配,即發(fā)生窗口后中標(biāo),則t匕較器移位讀取當(dāng)前數(shù)據(jù)包數(shù)據(jù)段中后續(xù)η個字節(jié)作為比較器的窗口數(shù)據(jù)與該關(guān)鍵字進(jìn)行匹配,如果當(dāng)前窗口數(shù)據(jù)前半段部分?jǐn)?shù)據(jù)與該關(guān)鍵字剩余未匹配數(shù)據(jù)匹配,即發(fā)生窗口前中標(biāo),則視為中標(biāo),將當(dāng)前數(shù)據(jù)包作為匹配網(wǎng)絡(luò)數(shù)據(jù)包過濾出來;否則視為當(dāng)前數(shù)據(jù)包未中標(biāo),比較器繼續(xù)移位讀取當(dāng)前數(shù)據(jù)段中后續(xù)η個字節(jié)與關(guān)鍵字進(jìn)行匹配。進(jìn)一步的,如果前一個數(shù)據(jù)包數(shù)據(jù)段的最后一個窗口數(shù)據(jù)與關(guān)鍵字發(fā)生窗口后中標(biāo),則在后續(xù)相鄰數(shù)據(jù)包的第一個比較窗口數(shù)據(jù)與關(guān)鍵字比較時,判斷是否發(fā)生窗口前中標(biāo),如果是則視為中標(biāo),將相關(guān)的兩個數(shù)據(jù)包作為匹配網(wǎng)絡(luò)數(shù)據(jù)包過濾出來。進(jìn)一步的,如果比較器移位讀取到當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段段尾,移位讀取的數(shù)據(jù)長度不足η字節(jié)時,比較器根據(jù)上一窗口的比較結(jié)果進(jìn)行判斷;如果上一窗口比較時發(fā)生了窗口后中標(biāo),則比較器將上一窗口未匹配的剩余數(shù)據(jù)先左對齊與關(guān)鍵字進(jìn)行一次匹配,如果存在窗口前中標(biāo),則視為中標(biāo);否則,再取當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段最后η個字節(jié)與關(guān)鍵字進(jìn)行比較,如果發(fā)生窗口前中標(biāo),則為中標(biāo)。進(jìn)一步的,當(dāng)發(fā)生窗口前中標(biāo)或窗口后中標(biāo)時,比較器反饋預(yù)警提示信息給過濾模塊;所述反饋信息包括網(wǎng)絡(luò)數(shù)據(jù)包的編號、中標(biāo)位置、中標(biāo)碼及對應(yīng)的處理方式。進(jìn)一步的,當(dāng)窗口后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字后半段部分匹配,或窗口前半段部分 數(shù)據(jù)與關(guān)鍵字前半段部分匹配時,比較器反饋預(yù)警提示信息給過濾模塊;所述反饋信息包括網(wǎng)絡(luò)數(shù)據(jù)包的編號、中標(biāo)位置、中標(biāo)碼及對應(yīng)的處理方式。進(jìn)一步的,所述預(yù)警提示信息包括預(yù)警優(yōu)先級信息。進(jìn)一步的,比較器根據(jù)窗口數(shù)據(jù)與關(guān)鍵字的匹配長度設(shè)定預(yù)警優(yōu)先級,匹配長度越長優(yōu)先級越高。本發(fā)明的方法流程圖如圖I所示,關(guān)鍵字如果正處于相鄰兩個網(wǎng)絡(luò)數(shù)據(jù)包之間時,即前一個數(shù)據(jù)包數(shù)據(jù)段的最后一個比較窗口內(nèi)的后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字前半段部分內(nèi)容匹配,發(fā)生窗口后中標(biāo),則在下一個窗口比較時,即后續(xù)相鄰數(shù)據(jù)包的第一個比較窗口內(nèi)的數(shù)據(jù)與關(guān)鍵字比較時,就會關(guān)注相應(yīng)的窗口前半段部分?jǐn)?shù)據(jù)內(nèi)容與關(guān)鍵字剩余后半段未匹配內(nèi)容是否匹配,即是否發(fā)生窗口前中標(biāo),如果匹配則視為“中標(biāo)”,將相關(guān)的網(wǎng)絡(luò)數(shù)據(jù)包全部過濾出來,存儲到某地,否則忽略。CAM芯片每次可以比較位寬的大小,即是比較器所能看到的連貫數(shù)據(jù)段的范圍。此范圍根據(jù)CAM芯片型號的不同而不同,本文以常見的CAM芯片每次可以比較144bit寬的數(shù)據(jù),也就是18字節(jié)為例。如果數(shù)據(jù)段長度不是18字節(jié)對齊,數(shù)據(jù)段尾不足18字節(jié)時需根據(jù)上一窗口的比較結(jié)果進(jìn)行判斷,如果上一窗口比較時發(fā)生了窗口內(nèi)前半段部分?jǐn)?shù)據(jù)與關(guān)鍵字部分匹配的情況,則將上一窗口內(nèi)除匹配外的剩余全部數(shù)據(jù)段先左對齊與關(guān)鍵字部分進(jìn)行一次比較,觀察是否存在相應(yīng)的窗口后中標(biāo)的情況,如果存在則視為中標(biāo);如果不存在,則取TCP/IP包的數(shù)據(jù)段最后18字節(jié)與關(guān)鍵字部分再進(jìn)行一次比較觀察是否存在窗口后半段中標(biāo)的情況,如果存在則視為中標(biāo),否則視為未中標(biāo)。注窗口是指比較器每次進(jìn)行比較的字段寬度。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果采用此技術(shù)不會遺漏任何需要匹配的數(shù)據(jù),即使部分匹配也會出現(xiàn)中標(biāo)提示,信息比較器將包的編號、中標(biāo)位置、中標(biāo)碼及對應(yīng)的處理方式等信息,發(fā)送給實(shí)現(xiàn)過濾功能的模塊,根據(jù)應(yīng)用的不同發(fā)送的內(nèi)容而有所不同。此技術(shù)性能較高,節(jié)約成本。例如一片每秒可以完成250M次比對的CAM芯片,采用18字節(jié)窗口匹配法進(jìn)行比較,可以達(dá)到250M*18,即4. 5GB/S的純數(shù)據(jù)流。使用每秒比較速度為62. 5M次,144位寬查找表深度為16K的低端CAM芯片就可以處理16. 071Gb/S的接入速度。ARM9系列產(chǎn)品的性能雖好,但價格較高,達(dá)到同等性能的產(chǎn)品市場價要幾千元;而renesas electronics的同類產(chǎn)品價格相對低廉,但性能遠(yuǎn)不及本發(fā)明中的上述指標(biāo);而本發(fā)明中使用的CAM芯片市場價僅500元左右,經(jīng)過實(shí)驗(yàn)性測試,匹配準(zhǔn)確性及中標(biāo)率在99. 9%以上,真正做到了低成本,高性能。
圖I為本發(fā)明方法流程圖;圖2、關(guān)鍵字長度為9個字節(jié)時的比較條件示意圖。
具體實(shí)施例方式CAM芯片每次可以比較144bit寬的數(shù)據(jù),也就是18個字節(jié),那我們所說的比對器窗口就是指比較器所能看到的連貫數(shù)據(jù)段上的范圍。我們的比對器窗口寬度是18個字節(jié),允許的查找條件的長度范圍為[I 18]字 節(jié),所以最長的字符串支持9個漢字或18個英文字母,至于多條件查詢時的情況每個條件可以作為一個查找條件出現(xiàn),然后可根據(jù)實(shí)際使用系統(tǒng)規(guī)則再進(jìn)行相應(yīng)的分析處理即可。查找條件設(shè)計為了高效的對數(shù)據(jù)段進(jìn)行匹配查找,我們利用CAM芯片查找表資源過剩的特點(diǎn),將要查找的關(guān)鍵字限定為設(shè)定長度,設(shè)定長度就是比對器窗口寬度,限定關(guān)鍵字的長度不能超過設(shè)定長度。舉例說明如圖2所示,關(guān)鍵字為A I的9個英文字母序列(選用英文字母序列進(jìn)行說明,主要是每個英文字母的碼長正好是I個字節(jié),這樣看起來比較直觀,如果是漢字,雖然漢字的編碼是2字節(jié),但是對于處理過程仍然是以字節(jié)為單位),窗口寬度為18,為了每次比較的數(shù)據(jù)長度可以按窗口寬度進(jìn)行,我們這樣設(shè)計針對它的比較條件。當(dāng)關(guān)鍵字正處于窗口與窗口之間時,比如關(guān)鍵字一部分位于上一窗口數(shù)據(jù)的后段數(shù)據(jù),而關(guān)鍵字剩余另一部分?jǐn)?shù)據(jù)在當(dāng)前窗口數(shù)據(jù)的前段數(shù)據(jù)中,如果在TCP/IP包的數(shù)據(jù)前段發(fā)生了窗口前中標(biāo)的情況,則進(jìn)行信息記錄,在下一個窗口比較時,就會關(guān)注相應(yīng)的窗口后中標(biāo)情況是否存在,如果存在則視為“中標(biāo)”,否則忽略。當(dāng)在數(shù)據(jù)包中發(fā)現(xiàn)完全匹配的關(guān)鍵字時,即為中標(biāo)。如果數(shù)據(jù)段長度不是18字節(jié)時,數(shù)據(jù)段尾不足18字節(jié)時需根據(jù)上一窗口的比較結(jié)果進(jìn)行判斷,如果上一窗口比較時發(fā)生了窗口后中標(biāo)的情況,則剩余全部數(shù)據(jù)段先左對齊進(jìn)行一次匹配比較,觀察是否存在相應(yīng)的窗口前中標(biāo)的情況,如果存在,則為中標(biāo);如果不存在,然后再取TCP/IP包的數(shù)據(jù)段最后18字節(jié)進(jìn)行一次比較觀察是否存在窗口前中標(biāo)的情況,如果存在,則為中標(biāo);否則,忽略。為了不會遺漏任何需要匹配的數(shù)據(jù),即使部分匹配也會出現(xiàn)中標(biāo)提示,信息比較器將包的編號、中標(biāo)位置、中標(biāo)碼及對應(yīng)的處理方式等信息,發(fā)送給實(shí)現(xiàn)過濾功能的模塊。并且比較器根據(jù)窗口數(shù)據(jù)與關(guān)鍵字的匹配長度設(shè)定預(yù)警優(yōu)先級,匹配長度越長優(yōu)先級越高,從而及時發(fā)現(xiàn)最可能的匹配數(shù)據(jù)包。
權(quán)利要求
1.一種基于硬件CAM芯片的高效能網(wǎng)絡(luò)數(shù)據(jù)包過濾方法,其步驟為 1)根據(jù)CAM芯片比較器的窗口寬度設(shè)定輸入關(guān)鍵字的最大長度;其中,比較器的窗口寬度為η字節(jié),關(guān)鍵字的最大長度小于或等于η字節(jié); 2)所述比較器從網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段中順序移位讀取η個字節(jié)作為比較器的窗口數(shù)據(jù)與輸入的關(guān)鍵字進(jìn)行匹配; 21)如果窗口數(shù)據(jù)包含匹配的關(guān)鍵字,則視為中標(biāo),將當(dāng)前數(shù)據(jù)包作為匹配網(wǎng)絡(luò)數(shù)據(jù)包過濾出來; 22)如果窗口后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字前半段部分匹配,即發(fā)生窗口后中標(biāo),則比較器移位讀取當(dāng)前數(shù)據(jù)包數(shù)據(jù)段中后續(xù)η個字節(jié)作為比較器的窗口數(shù)據(jù)與該關(guān)鍵字進(jìn)行匹配,如果當(dāng)前窗口數(shù)據(jù)前半段部分?jǐn)?shù)據(jù)與該關(guān)鍵字剩余未匹配數(shù)據(jù)匹配,即發(fā)生窗口前中標(biāo),則視為中標(biāo),將當(dāng)前數(shù)據(jù)包作為匹配網(wǎng)絡(luò)數(shù)據(jù)包過濾出來;否則視為當(dāng)前數(shù)據(jù)包未中標(biāo),比較器繼續(xù)移位讀取當(dāng)前數(shù)據(jù)段中后續(xù)η個字節(jié)與關(guān)鍵字進(jìn)行匹配。
2.如權(quán)利要求I所述的方法,其特征在于如果前一個數(shù)據(jù)包數(shù)據(jù)段的最后一個窗口數(shù)據(jù)與關(guān)鍵字發(fā)生窗口后中標(biāo),則在后續(xù)相鄰數(shù)據(jù)包的第一個比較窗口數(shù)據(jù)與關(guān)鍵字比較時,判斷是否發(fā)生窗口前中標(biāo),如果是則視為中標(biāo),將相關(guān)的兩個數(shù)據(jù)包作為匹配網(wǎng)絡(luò)數(shù)據(jù)包過濾出來。
3.如權(quán)利要求I或2所述的方法,其特征在于如果比較器移位讀取到當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段段尾,移位讀取的數(shù)據(jù)長度不足η字節(jié)時,比較器根據(jù)上一窗口的比較結(jié)果進(jìn)行判斷;如果上一窗口比較時發(fā)生了窗口后中標(biāo),則比較器將上一窗口未匹配的剩余數(shù)據(jù)先左對齊與關(guān)鍵字進(jìn)行一次匹配,如果存在窗口前中標(biāo),則視為中標(biāo);否則,再取當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段最后η個字節(jié)與關(guān)鍵字進(jìn)行比較,如果發(fā)生窗口前中標(biāo),則視為中標(biāo)。
4.如權(quán)利要求I所述的方法,其特征在于當(dāng)發(fā)生窗口前中標(biāo)或窗口后中標(biāo)時,比較器反饋預(yù)警提示信息給過濾模塊;所述反饋信息包括網(wǎng)絡(luò)數(shù)據(jù)包的編號、中標(biāo)位置、中標(biāo)碼及對應(yīng)的處理方式。
5.如權(quán)利要求I所述的方法,其特征在于當(dāng)窗口后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字后半段部分匹配,或窗口前半段部分?jǐn)?shù)據(jù)與關(guān)鍵字前半段部分匹配時,比較器反饋預(yù)警提示信息給過濾模塊;所述反饋信息包括網(wǎng)絡(luò)數(shù)據(jù)包的編號、中標(biāo)位置、中標(biāo)碼及對應(yīng)的處理方式。
6.如權(quán)利要求4或5所述的方法,其特征在于所述預(yù)警提示信息包括預(yù)警優(yōu)先級信息。
7.如權(quán)利要求6所述的方法,其特征在于比較器根據(jù)窗口數(shù)據(jù)與關(guān)鍵字的匹配長度設(shè)定預(yù)警優(yōu)先級,匹配長度越長優(yōu)先級越高。
全文摘要
本發(fā)明公開了一種基于硬件CAM芯片的高效能網(wǎng)絡(luò)數(shù)據(jù)包過濾方法,屬于網(wǎng)絡(luò)信息處理領(lǐng)域。本方法為1)根據(jù)CAM芯片比較器的窗口寬度n設(shè)定輸入關(guān)鍵字的最大長度;2)比較器從網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)段中順序移位讀取n個字節(jié)與關(guān)鍵字進(jìn)行匹配;如果窗口數(shù)據(jù)包含匹配的關(guān)鍵字,則視為中標(biāo);如果窗口后半段部分?jǐn)?shù)據(jù)與關(guān)鍵字前半段部分匹配,則比較器移位讀取當(dāng)前數(shù)據(jù)包數(shù)據(jù)段中后續(xù)n個字節(jié)與該關(guān)鍵字進(jìn)行匹配,如果當(dāng)前窗口數(shù)據(jù)前半段部分?jǐn)?shù)據(jù)與該關(guān)鍵字剩余未匹配數(shù)據(jù)匹配,即發(fā)生窗口前中標(biāo),則視為中標(biāo);否則視為當(dāng)前數(shù)據(jù)包未中標(biāo),比較器繼續(xù)讀取當(dāng)前數(shù)據(jù)段中后續(xù)n個字節(jié)與關(guān)鍵字進(jìn)行匹配。本發(fā)明匹配準(zhǔn)確性及中標(biāo)率在99.9%以上,性能高。
文檔編號H04L12/56GK102801617SQ201210277909
公開日2012年11月28日 申請日期2012年8月6日 優(yōu)先權(quán)日2012年8月6日
發(fā)明者火一莽, 史延濤, 董雪 申請人:北京銳安科技有限公司