基于fpga的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法,先采集網(wǎng)絡(luò)數(shù)據(jù)包,并將其存儲(chǔ)到一個(gè)數(shù)據(jù)緩沖器中,再對(duì)其頭部信息進(jìn)行提取,接著將提取到的相關(guān)信息存入SRAM中,與此同時(shí)將提取到IP地址作為訪問(wèn)SDRAM的地址去讀取過(guò)濾控制位信息,得出明確通過(guò)與否信號(hào),對(duì)數(shù)據(jù)緩沖器中數(shù)據(jù)讓其通過(guò)與否,查詢成功則數(shù)據(jù)轉(zhuǎn)發(fā),否則丟棄。通過(guò)上位機(jī)配置過(guò)濾規(guī)則集為IP數(shù)據(jù)包格式以DMA方式傳輸?shù)降讓覨PGA中,通過(guò)解析并將過(guò)濾控制位信息寫(xiě)入SDRAM中,用于過(guò)濾查詢。上述設(shè)計(jì)充分發(fā)揮FPGA硬件快速并行計(jì)算優(yōu)勢(shì),滿足線速過(guò)濾要求,實(shí)現(xiàn)高速網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾和統(tǒng)計(jì)顯示數(shù)據(jù)流相關(guān)信息。
【專(zhuān)利說(shuō)明】基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,具體涉及一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)流量的快速增長(zhǎng),信息共享已在社會(huì)的各個(gè)方面扮演著越來(lái)越重要的角色,人在享受信息共享便利的同時(shí),也不得不面對(duì)因互聯(lián)網(wǎng)而滋生的一些病毒、網(wǎng)絡(luò)攻擊等非法手段帶來(lái)的困擾,數(shù)據(jù)包過(guò)濾系統(tǒng)便應(yīng)運(yùn)而生。網(wǎng)絡(luò)帶寬的提高、網(wǎng)絡(luò)應(yīng)用層次不窮和攻擊行為的多樣化,隱藏性給防火墻提出了嚴(yán)峻的挑戰(zhàn)。
[0003]目前常用的數(shù)據(jù)包過(guò)濾是用軟件來(lái)實(shí)現(xiàn)的,但病毒的多樣化、網(wǎng)絡(luò)攻擊的復(fù)雜化以及網(wǎng)絡(luò)流量的激增日漸成為數(shù)據(jù)包過(guò)濾系統(tǒng)性能的一個(gè)瓶頸,基于軟件的過(guò)濾方案已不能滿足其線速處理要求,并且完全依賴于底層操作系統(tǒng)的協(xié)議棧,必然受到協(xié)議棧的制約。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問(wèn)題是現(xiàn)有的軟件數(shù)據(jù)包過(guò)濾方法速度不能滿足現(xiàn)有高速網(wǎng)絡(luò)過(guò)濾需求,而提供一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法。
[0005]為解決上述問(wèn)題,本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
[0006]一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法,包括如下步驟:
[0007]步驟1、通過(guò)上位機(jī)實(shí)時(shí)在線配置過(guò)濾規(guī)則集;
[0008]步驟2、上位機(jī)將過(guò)濾規(guī)則集以直接內(nèi)存存取的方式傳輸?shù)紽PGA中;
[0009]步驟3、FPGA對(duì)過(guò)濾規(guī)則集進(jìn)行解析獲得所有IP地址及其對(duì)應(yīng)的過(guò)濾控制位信息,并以IP地址作為動(dòng)態(tài)隨機(jī)存儲(chǔ)器的尋址地址,將其對(duì)應(yīng)的過(guò)濾控制位寫(xiě)入動(dòng)態(tài)隨機(jī)存儲(chǔ)器的存儲(chǔ)位空間,用于過(guò)濾查詢;
[0010]步驟4、FPGA對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行數(shù)據(jù)采集,并將采集到的網(wǎng)絡(luò)數(shù)據(jù)包存儲(chǔ)到FPGA的FIFO數(shù)據(jù)緩存器中;
[0011]步驟5、對(duì)FIFO數(shù)據(jù)緩存器中緩存的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行特征提取,并獲得數(shù)據(jù)包的頭部信息和IP地址;
[0012]步驟6、將提取到的頭部信息存儲(chǔ)到靜態(tài)隨機(jī)存儲(chǔ)器中并定時(shí)送主機(jī)顯示;
[0013]步驟7、將提取到的IP地址作為尋址地址,去訪問(wèn)動(dòng)態(tài)隨機(jī)存儲(chǔ)器的存儲(chǔ)位空間,去讀取對(duì)應(yīng)的過(guò)濾控制位;
[0014]步驟8、對(duì)于步驟4中所緩存的網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)發(fā)與否,則根據(jù)步驟7中所讀取的過(guò)濾控制位進(jìn)行查詢判定,以判定該網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)與否;若該過(guò)濾控制位查詢結(jié)果為通過(guò),則將FIFO數(shù)據(jù)緩存器中的數(shù)據(jù)轉(zhuǎn)發(fā),若該過(guò)濾控制位查詢結(jié)果為不通過(guò),則將FIFO數(shù)據(jù)緩存器中的數(shù)據(jù)丟棄。
[0015]上述步驟3和7中,動(dòng)態(tài)隨機(jī)存儲(chǔ)器的讀寫(xiě)地址需要進(jìn)行地址映射,動(dòng)態(tài)隨機(jī)存儲(chǔ)器的讀和寫(xiě)都是以IP地址作為直接讀寫(xiě)地址來(lái)訪問(wèn)動(dòng)態(tài)隨機(jī)存儲(chǔ)器。
[0016]上述步驟6中,對(duì)網(wǎng)絡(luò)數(shù)據(jù)包特征信息的讀取以塊為單位,其中一個(gè)塊中有多個(gè)數(shù)據(jù)結(jié)構(gòu)。
[0017]本發(fā)明公開(kāi)一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法。利用FPGA硬件的并行高速性,上位機(jī)通過(guò)PCI總線可實(shí)時(shí)在線配置過(guò)濾規(guī)則集到底層硬件的存儲(chǔ)器里面,過(guò)濾規(guī)則集采用位存儲(chǔ)形式存儲(chǔ),對(duì)待過(guò)濾的數(shù)據(jù)包進(jìn)行特征提取,用提取到的IP地址作為存儲(chǔ)器的讀地址(IP地址直接尋址:IP地址與存儲(chǔ)位空間地址建立線性映射關(guān)系)來(lái)讀取過(guò)濾控制位從而實(shí)現(xiàn)數(shù)據(jù)包過(guò)濾;在有限存儲(chǔ)空間的情況下,采用位存儲(chǔ)方法可實(shí)現(xiàn)海量數(shù)據(jù)包過(guò)濾。采用IP地址直接尋址方法,可提高過(guò)濾規(guī)則查找速度,該發(fā)明能在高速網(wǎng)絡(luò)流量下實(shí)現(xiàn)海量數(shù)據(jù)包快速高效過(guò)濾。
[0018]本發(fā)明的有益效果在于:通過(guò)本發(fā)明可以利用FPGA實(shí)現(xiàn)在高速網(wǎng)絡(luò)環(huán)境下,通過(guò)上位機(jī)可以很靈活配置過(guò)濾規(guī)則集,并且通過(guò)IP地址直接尋址方式確保過(guò)濾的有效性和健壯性,并將相關(guān)網(wǎng)絡(luò)信息通過(guò)上位機(jī)友好界面顯示。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0019]圖1是本發(fā)明優(yōu)選實(shí)施例的數(shù)據(jù)包過(guò)濾方法總體流程圖。
[0020]圖2是本發(fā)明優(yōu)選實(shí)施例的IP地址直接尋址過(guò)程示意圖。
[0021]圖3是本發(fā)明優(yōu)選實(shí)施例的數(shù)據(jù)包過(guò)濾總體框架示意圖。
【具體實(shí)施方式】
[0022]本發(fā)明一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法,如圖1所示,具體包含如下步驟:
[0023]步驟S1:數(shù)據(jù)采集采用TEMAC(三態(tài)以太網(wǎng)媒體訪問(wèn)控制器)IP核實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的采集,并簡(jiǎn)要實(shí)現(xiàn)數(shù)據(jù)包個(gè)數(shù),字節(jié)數(shù)統(tǒng)計(jì)。
[0024]步驟S2:FIF0(先入先出隊(duì)列)緩沖數(shù)據(jù),緩沖池接口采用雙端口設(shè)計(jì),即讀寫(xiě)同時(shí)進(jìn)行,此外為加快數(shù)據(jù)包的處理速度,提高網(wǎng)絡(luò)吞吐量,采用塊讀寫(xiě)方式,即1個(gè)數(shù)據(jù)塊中包含多個(gè)數(shù)據(jù)包。具體涉及步驟如下:
[0025]步驟S21:寫(xiě)入接口,寫(xiě)入地址從0開(kāi)始計(jì)數(shù),該方案中暫設(shè)數(shù)據(jù)塊大小為4K,即寫(xiě)入一個(gè)數(shù)據(jù)塊后,地址偏移4K,并對(duì)地址鎖存,以便后續(xù)實(shí)現(xiàn)累加;若寫(xiě)入地址到達(dá)64MB,則重置為0 ;
[0026]步驟S22:讀出接口,讀出地址從0開(kāi)始計(jì)數(shù),但每次讀取之前,必須判定讀地址小于寫(xiě)地址以防止讀取無(wú)效的數(shù)據(jù),但在wr_addr (寫(xiě)地址)重置為0時(shí),需發(fā)出通知信號(hào),使讀地址小于寫(xiě)地址條件無(wú)效,即當(dāng)rd_addr(讀地址)重置為0時(shí),讀地址小于寫(xiě)地址重新有效;讀取數(shù)據(jù)塊后,地址偏移4K,并對(duì)該地址鎖存,以便后續(xù)實(shí)現(xiàn)累加,后續(xù)與寫(xiě)入接口類(lèi)同。
[0027]步驟S3:網(wǎng)絡(luò)特征提取包括讀取網(wǎng)絡(luò)數(shù)據(jù)包,提取頭部相應(yīng)信息,存儲(chǔ)到SRAM中然后定時(shí)發(fā)送到上位機(jī)CPU中。具體步驟如下:
[0028]步驟S31:讀取網(wǎng)絡(luò)數(shù)據(jù)包,提取源IP、目的IP、IP包長(zhǎng)度、協(xié)議、源端口、目的端口,即32+32+16+8+16+16 = 120b = 15B作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)于SRAM ;
[0029]步驟S32:采用一個(gè)計(jì)數(shù)器,提取網(wǎng)絡(luò)特征數(shù)據(jù)結(jié)構(gòu)超過(guò)64個(gè)(4K/64,即塊大小為4K,數(shù)據(jù)包最小自己為64B),則讀取SRAM中的網(wǎng)絡(luò)特征數(shù)據(jù),通過(guò)PCI總線以寄存器I/O方式傳送至上位機(jī)CPU中,方便上層軟件統(tǒng)計(jì)網(wǎng)絡(luò)特征;
[0030]步驟S33:計(jì)數(shù)器達(dá)到上述額定值后清零,以備后續(xù)統(tǒng)計(jì)。
[0031]在本發(fā)明優(yōu)選實(shí)施例中,步驟S3中的網(wǎng)絡(luò)數(shù)據(jù)包的讀取以塊為單位,其中一個(gè)塊中有多個(gè)數(shù)據(jù)結(jié)構(gòu)。
[0032]步驟S4:提取過(guò)濾規(guī)則集,在上位機(jī)通過(guò)軟件配置好過(guò)濾規(guī)則集(IP數(shù)據(jù)包格式)通過(guò)PCI總線以DMA的方式下載到FPGA中,然后經(jīng)過(guò)提取過(guò)濾規(guī)則集模塊將去除數(shù)據(jù)包頭信息,保留IP地址及相應(yīng)的過(guò)濾控制位信息集。
[0033]在本發(fā)明優(yōu)選實(shí)施例中,步驟S3與S4并發(fā)執(zhí)行。
[0034]步驟S5:存儲(chǔ)過(guò)濾控制位信息集到SDRAM中,在步驟S4中提取到IP地址和相應(yīng)過(guò)濾控制位,以該IP地址作為SDRAM的尋址地址,將所有〈IP地址,過(guò)濾控制位〉集所有過(guò)濾控制位寫(xiě)入SDRAM中。
[0035]步驟S6:訪問(wèn)過(guò)濾控制,在步驟S3中提取到數(shù)據(jù)包的IP地址作為SDRAM的讀地址。為了提高存儲(chǔ)的效率,SDRAM中每一位對(duì)應(yīng)一個(gè)IP地址過(guò)濾控制位,用IP地址訪問(wèn)時(shí),須對(duì)IP地址進(jìn)行映射得到新的IP地址(行地址)和過(guò)濾控制位所在數(shù)據(jù)位寬位置,具體方法如圖2所示,用新的IP地址(行地址)和過(guò)濾控制位所在位置,從而確定寫(xiě)入在SDRAM中的過(guò)濾控制位,得到相應(yīng)該數(shù)據(jù)包是否通過(guò)過(guò)濾控制位,如:過(guò)濾控制位‘1’表示通過(guò),過(guò)濾控制位‘0’表示不通過(guò)。根據(jù)過(guò)濾控制位信息決定FIFO中網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)與否。
[0036]在本發(fā)明優(yōu)選實(shí)施例中,在步驟S5中過(guò)濾規(guī)則集寫(xiě)入SDRAM時(shí)所用IP地址,同步驟S6 —樣也需要進(jìn)行IP地址映射,原理與步驟S6類(lèi)同。此外,步驟S5和S6中對(duì)SDRAM的讀和寫(xiě)都是以IP地址作為直接讀寫(xiě)地址來(lái)訪問(wèn)SDRAM,可以確保不因時(shí)序錯(cuò)亂而導(dǎo)致數(shù)據(jù)包與相應(yīng)過(guò)濾控制位映射錯(cuò)序。
[0037]步驟S7:數(shù)據(jù)轉(zhuǎn)發(fā)包括等待過(guò)濾模塊信號(hào),數(shù)據(jù)包丟棄等。具體步驟如下:
[0038]步驟S71:采用FIFO緩存網(wǎng)絡(luò)數(shù)據(jù)包,等待網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾模塊的信號(hào),無(wú)論是否命中,網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾模塊都會(huì)給出明確的信號(hào);
[0039]步驟S72:若命中,則讀出FIFO中的數(shù)據(jù)包后丟棄,并將相關(guān)信息送上位機(jī)統(tǒng)計(jì)顯示。若未命中,則讀出FIFO中的數(shù)據(jù)并采用TEMAC轉(zhuǎn)發(fā),并簡(jiǎn)要實(shí)現(xiàn)數(shù)據(jù)包個(gè)數(shù),字節(jié)數(shù)統(tǒng)計(jì)。
[0040]步驟S8:數(shù)據(jù)交互包括寄存器組I/O方式和DMA方式。具體如下:
[0041]步驟S81:提取到的網(wǎng)絡(luò)特征如:源IP、目的IP、IP包長(zhǎng)度、協(xié)議、源端口、目的端口等信息通過(guò)寄存器組I/o方式傳輸?shù)缴衔粰C(jī)以便統(tǒng)計(jì)網(wǎng)絡(luò)信息。
[0042]步驟S82:在步驟S7中丟棄數(shù)據(jù)包的相關(guān)信息送上位機(jī)統(tǒng)計(jì)并顯示。
[0043]步驟S83:上位機(jī)將通過(guò)軟件配置好的過(guò)濾規(guī)則集下載到SDRAM中,為數(shù)據(jù)過(guò)濾提供規(guī)則集。
[0044]在本發(fā)明優(yōu)選實(shí)施例中,步驟S7與S8是并發(fā)執(zhí)行。
[0045]本發(fā)明的發(fā)明構(gòu)思是:首先采集數(shù)據(jù)包,將數(shù)據(jù)包存儲(chǔ)到一個(gè)數(shù)據(jù)緩沖器中,其次對(duì)其頭部信息進(jìn)行提取,接著將提取到的相關(guān)信息存入SRAM (靜態(tài)隨機(jī)存儲(chǔ)器)中,與此同時(shí)將提取到IP地址作為訪問(wèn)SDRAM的地址(直接尋址)去讀取過(guò)濾控制位信息,得出明確通過(guò)與否信號(hào),對(duì)數(shù)據(jù)緩沖器中數(shù)據(jù)讓其通過(guò)與否,查詢成功,數(shù)據(jù)轉(zhuǎn)發(fā),否則丟棄。提取到的相關(guān)信息定時(shí)傳輸?shù)缴衔粰C(jī)統(tǒng)計(jì)和顯示。通過(guò)上位機(jī)配置過(guò)濾規(guī)則集為IP數(shù)據(jù)包格式以DMA (直接內(nèi)存存取)方式傳輸?shù)降讓覨PGA中,通過(guò)解析并將過(guò)濾控制位信息寫(xiě)入SDRAM(動(dòng)態(tài)隨機(jī)存儲(chǔ)器)中,用于過(guò)濾查詢。同時(shí)過(guò)濾控制與規(guī)則集下載并行執(zhí)行。上述設(shè)計(jì)充分發(fā)揮FPGA硬件快速并行計(jì)算優(yōu)勢(shì),滿足線速過(guò)濾要求,實(shí)現(xiàn)高速網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾和統(tǒng)計(jì)顯示數(shù)據(jù)流相關(guān)信息。上述基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法的總體框架示意圖,如圖3所示。
[0046]以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對(duì)本發(fā)明的進(jìn)一步詳細(xì)說(shuō)明,不能認(rèn)定本發(fā)明的【具體實(shí)施方式】?jī)H限于此,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡(jiǎn)單的推演或替換,都應(yīng)該視為屬于本發(fā)明的權(quán)利要求書(shū)的保護(hù)范圍。
【權(quán)利要求】
1.一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法,其特征是包括如下步驟: 步驟1、通過(guò)上位機(jī)實(shí)時(shí)在線配置過(guò)濾規(guī)則集; 步驟2、上位機(jī)將過(guò)濾規(guī)則集以直接內(nèi)存存取的方式傳輸?shù)紽PGA中; 步驟3、FPGA對(duì)過(guò)濾規(guī)則集進(jìn)行解析獲得所有IP地址及其對(duì)應(yīng)的過(guò)濾控制位信息,并以IP地址作為動(dòng)態(tài)隨機(jī)存儲(chǔ)器的尋址地址,將其對(duì)應(yīng)的過(guò)濾控制位寫(xiě)入動(dòng)態(tài)隨機(jī)存儲(chǔ)器的存儲(chǔ)位空間,用于過(guò)濾查詢; 步驟4、FPGA對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行數(shù)據(jù)采集,并將采集到的網(wǎng)絡(luò)數(shù)據(jù)包存儲(chǔ)到FPGA的FIFO數(shù)據(jù)緩存器中; 步驟5、對(duì)FIFO數(shù)據(jù)緩存器中緩存的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行特征提取,并獲得數(shù)據(jù)包的頭部信息和IP地址; 步驟6、將提取到的頭部信息存儲(chǔ)到靜態(tài)隨機(jī)存儲(chǔ)器中; 步驟7、將提取到的IP地址作為尋址地址,去訪問(wèn)動(dòng)態(tài)隨機(jī)存儲(chǔ)器的存儲(chǔ)位空間,去讀取對(duì)應(yīng)的過(guò)濾控制位; 步驟8、對(duì)于步驟4中所緩存的網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)發(fā)與否,則根據(jù)步驟7中所讀取的過(guò)濾控制位進(jìn)行查詢判定,以判定該網(wǎng)絡(luò)數(shù)據(jù)包通過(guò)與否;若該過(guò)濾控制位查詢結(jié)果為通過(guò),則將FIFO數(shù)據(jù)緩存器中的數(shù)據(jù)轉(zhuǎn)發(fā),若該過(guò)濾控制位查詢結(jié)果為不通過(guò),則將FIFO數(shù)據(jù)緩存器中的數(shù)據(jù)丟棄。
2.根據(jù)權(quán)利要求1所述的一種基于FPGA的數(shù)據(jù)包過(guò)濾方法,其特征在于:上述步驟3和7中,動(dòng)態(tài)隨機(jī)存儲(chǔ)器的讀寫(xiě)地址需要進(jìn)行地址映射,動(dòng)態(tài)隨機(jī)存儲(chǔ)器的讀和寫(xiě)都是以IP地址作為直接讀寫(xiě)地址來(lái)訪問(wèn)動(dòng)態(tài)隨機(jī)存儲(chǔ)器。
3.根據(jù)權(quán)利要求1或2所述的一種基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾方法,其特征在于:上述步驟6中,對(duì)網(wǎng)絡(luò)數(shù)據(jù)包特征信息的讀取以塊為單位,其中一個(gè)塊中有多個(gè)數(shù)據(jù)結(jié)構(gòu)。
【文檔編號(hào)】H04L29/06GK104283742SQ201410619192
【公開(kāi)日】2015年1月14日 申請(qǐng)日期:2014年11月5日 優(yōu)先權(quán)日:2014年11月5日
【發(fā)明者】王勇, 曾小寶, 何倩, 陶曉玲, 強(qiáng)保華, 匡玉雯, 卓越 申請(qǐng)人:桂林電子科技大學(xué)