專利名稱:一種萬兆協(xié)議解析方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種萬兆協(xié)議解析方法及系統(tǒng)。
背景技術(shù):
由于互聯(lián)網(wǎng)高速發(fā)展,互聯(lián)網(wǎng)上的結(jié)構(gòu)化、非結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù)流量也呈指數(shù)增長,根據(jù)對ISP、IDC數(shù)據(jù)機(jī)房的監(jiān)測,目前很多互聯(lián)網(wǎng)服務(wù)商的機(jī)房數(shù)據(jù)出入口千兆已經(jīng)普及,萬兆也在快速發(fā)展建設(shè)之中,所以適應(yīng)萬兆流量的協(xié)議解析系統(tǒng)將是主流。對于鏡像數(shù)據(jù)的協(xié)議解析來說,協(xié)議解析的性能是關(guān)鍵,當(dāng)前百兆、千兆協(xié)議解析系統(tǒng)都是基于Iibpcap (網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù))來抓包,受限于Iibpcap本身抓包性能的影響其丟包率非常嚴(yán)重,效果非常不好,當(dāng)數(shù)據(jù)流量超過協(xié)議解析的瓶頸時,原本可以解析或還原的數(shù)據(jù)就會解析出錯或還原不出來,隨著互聯(lián)網(wǎng)服務(wù)商機(jī)房設(shè)備的升級,百兆、千兆的方式其可用價值將逐步弱化并最終消失。百兆、千兆的協(xié)議解析系統(tǒng)其本身大部分都沒有考慮多進(jìn)程、多線程來并行處理數(shù)據(jù)包,沒有充分利用硬件資源,主要原因是協(xié)議解析本身需要對接收的數(shù)據(jù)包進(jìn)行組包、過濾、分析,需要一種并行處理框架實現(xiàn)萬兆協(xié)議數(shù)據(jù)的正確還原。
發(fā)明內(nèi)容
本發(fā)明要解決的問題在于,提供一種萬兆協(xié)議解析方法及系,能夠通過并行處理實現(xiàn)萬兆協(xié)議數(shù)據(jù)的正確還原。為解決上述問題,本發(fā)明采用的一個技術(shù)方案是:提供一種萬兆協(xié)議解析系統(tǒng),包括:網(wǎng)卡驅(qū)動單元、數(shù)據(jù)包處理單元、協(xié)議解析單元以及存儲單元,所述存儲單元中存儲有配置文件、數(shù)據(jù)包分發(fā)表以及協(xié)議解析數(shù)據(jù)鏈表,所述配置文件中記載有應(yīng)用層設(shè)定的數(shù)據(jù)包過濾規(guī)則;所述網(wǎng)卡驅(qū)動單元包括:數(shù)據(jù)包處理線程ID運算模塊,用于當(dāng)接收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第一 hash值,并將第一 hash值與系統(tǒng)CPU個數(shù)取模得到數(shù)據(jù)包處理線程ID,以及將第一 hash值關(guān)聯(lián)數(shù)據(jù)包處理線程ID并存入所述數(shù)據(jù)包分發(fā)表;以及第一數(shù)據(jù)包分發(fā)模塊,用于根據(jù)數(shù)據(jù)包處理線程ID將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程;所述數(shù)據(jù)包處理單元包括:虛擬網(wǎng)絡(luò)接口創(chuàng)建模塊,用于對應(yīng)每個CPU分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口 ;數(shù)據(jù)包抓取模塊,用于根據(jù)數(shù)據(jù)包處理線程在CPU注冊的函數(shù)接收數(shù)據(jù)包;數(shù)據(jù)包過濾模塊,用于根據(jù)數(shù)據(jù)包過濾規(guī)則對接收到的數(shù)據(jù)包進(jìn)行過濾,然后將過濾后的數(shù)據(jù)包通過虛擬網(wǎng)絡(luò)接口發(fā)送到相應(yīng)的CPU ;所述協(xié)議解析單元包括:協(xié)議解析線程開啟模塊,用于對應(yīng)每個CPU分別開啟一個協(xié)議解析線程;監(jiān)聽模塊,用于通過協(xié)議解析線程監(jiān)聽相應(yīng)CPU的虛擬網(wǎng)絡(luò)接口 ;過濾規(guī)則分發(fā)模塊,用于從配置文件讀取數(shù)據(jù)包過濾規(guī)則并發(fā)送至數(shù)據(jù)包處理單元,其中,每個協(xié)議解析線程對應(yīng)各自的協(xié)議解析數(shù)據(jù)鏈表;協(xié)議解析線程ID運算模塊,用于當(dāng)監(jiān)聽模塊監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二 hash值,并將第二 hash值與協(xié)議解析線程個數(shù)取模得到協(xié)議解析線程ID ;hash值比對模塊,用于檢索并判斷所述數(shù)據(jù)包分發(fā)表中是否存在與第二 hash值相等的第一 hash值;第二數(shù)據(jù)包分發(fā)模塊,用于當(dāng)hash值比對模塊確定所述數(shù)據(jù)包分發(fā)表中存與第二 hash值相等的第一 hash值時,將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上;協(xié)議解析模塊,用于以信號量方式讀取協(xié)議解析數(shù)據(jù)鏈表上的數(shù)據(jù)包并對其進(jìn)行協(xié)議解析、還原、入庫、建索引操作。其中,所述配置文件還記載有線程開啟負(fù)載均衡閥值,所述存儲單元中存儲有指標(biāo)情況,所述指標(biāo)情況包含線程負(fù)載值;所述協(xié)議解析單元還包括:線程開啟判定模塊,用于當(dāng)hash值比對模塊確定所述數(shù)據(jù)包分發(fā)表中不存在與第二 hash值相等的第一 hash值時,根據(jù)指標(biāo)情況判斷協(xié)議解析線程ID對應(yīng)的線程負(fù)載值是否大于所述線程開啟負(fù)載均衡閥值;所述第二數(shù)據(jù)包分發(fā)模塊還用于當(dāng)線程開啟判定模塊確定線程負(fù)載值大于線程開啟負(fù)載均衡閥值時,查找線程負(fù)載值最小的第二協(xié)議解析線程ID,并把數(shù)據(jù)包將以信號量方式分發(fā)到第二協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,以及將第二 hash值關(guān)聯(lián)第二協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表;所述第二數(shù)據(jù)包分發(fā)模塊還用于當(dāng)線程開啟判定模塊確定線程負(fù)載值小于線程開啟的負(fù)載均衡閥值時,直接把數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,以及將第二 hash值關(guān)聯(lián)協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。其中,所述指標(biāo)情況還包含協(xié)議解析線程處理的數(shù)據(jù)包總數(shù)、異常數(shù)據(jù)包數(shù)、線程(PU使用率、線程數(shù)據(jù)處理流量,所述配置文件中還記載有第一權(quán)重值和第二權(quán)重值,所述線程負(fù)載=CPU使用率*第一權(quán)重值+線程數(shù)據(jù)處理流量*第二權(quán)重值。其中,所述第一 hash值和第二 hash值的計算公式為,hash=((數(shù)據(jù)包源IP地址~數(shù)據(jù)包目的IP地址)~ (數(shù)據(jù)包源端口 ~數(shù)據(jù)包目的端口))%最大四元組鏈表數(shù)據(jù)長度。其中,所述配置文件中還記載有指標(biāo)情況刷新周期S和分發(fā)表清空周期M,所述協(xié)議解析單元每隔時間S統(tǒng)計并刷新每個協(xié)議解析線程的指標(biāo)情況,所述數(shù)據(jù)包分發(fā)表每隔時間M清空一次。本發(fā)明采用的另一個技術(shù)方案是:提供一種萬兆協(xié)議解析方法,運行于所述的萬兆協(xié)議解析系統(tǒng)中,包括步驟:網(wǎng)卡驅(qū)動單元接收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第一 hash值,并將第一 hash值與系統(tǒng)CPU個數(shù)取模得到數(shù)據(jù)包處理線程ID,然后將第一 hash值關(guān)聯(lián)數(shù)據(jù)包處理線程ID并存入一數(shù)據(jù)包分發(fā)表,以及根據(jù)數(shù)據(jù)包處理線程ID將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程;數(shù)據(jù)包處理單元對應(yīng)每個CPU分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口,以及根據(jù)數(shù)據(jù)包處理線程在CPU注冊的函數(shù)接收數(shù)據(jù)包,并根據(jù)數(shù)據(jù)包過濾規(guī)則對接收到的數(shù)據(jù)包進(jìn)行過濾,然后將過濾后的數(shù)據(jù)包通過虛擬網(wǎng)絡(luò)接口發(fā)送到相應(yīng)的CPU ;協(xié)議解析單元對應(yīng)每個CPU分別開啟一個協(xié)議解析線程,并通過協(xié)議解析線程監(jiān)聽相應(yīng)CPU的虛擬網(wǎng)絡(luò)接口,以及從配置文件讀取應(yīng)用層設(shè)定的數(shù)據(jù)包過濾規(guī)則并發(fā)送至數(shù)據(jù)包處理單元,其中,每個協(xié)議解析線程對應(yīng)各自的協(xié)議解析數(shù)據(jù)鏈表;協(xié)議解析單元監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二 hash值,并將第二 hash值與協(xié)議解析線程個數(shù)取模得到協(xié)議解析線程ID ;協(xié)議解析單元檢索并判斷所述數(shù)據(jù)包分發(fā)表中是否存在與第二 hash值相等的第一 hash值;當(dāng)確定所述數(shù)據(jù)包分發(fā)表中存與第二 hash值相等的第一 hash值時,協(xié)議解析單元將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上;協(xié)議解析單元以信號量方式讀取協(xié)議解析數(shù)據(jù)鏈表上的數(shù)據(jù)包并對其進(jìn)行協(xié)議解析、還原、入庫、建索引操作。
其中,所述的一種萬兆協(xié)議解析方法還包括:當(dāng)確定所述數(shù)據(jù)包分發(fā)表中不存在與第二 hash值相等的第一 hash值時,協(xié)議解析單元根據(jù)指標(biāo)情況判斷協(xié)議解析線程ID對應(yīng)的線程負(fù)載值是否大于配置文件設(shè)置的線程開啟負(fù)載均衡閥值,其中,所述指標(biāo)情況包含線程負(fù)載值;當(dāng)確定線程負(fù)載值大于線程開啟負(fù)載均衡閥值時,協(xié)議解析單元查找線程負(fù)載值最小的第二協(xié)議解析線程ID,把數(shù)據(jù)包以信號量方式分發(fā)到第二協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,同時將第二 hash值關(guān)聯(lián)第二協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表;當(dāng)確定線程負(fù)載值小于線程開啟的負(fù)載均衡閥值時,協(xié)議解析單元直接把數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,同時將第二 hash值關(guān)聯(lián)協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。其中,所述指標(biāo)情況還包含協(xié)議解析線程處理的數(shù)據(jù)包總數(shù)、異常數(shù)據(jù)包數(shù)、線程(PU使用率、線程數(shù)據(jù)處理流量,所述配置文件中還記載有第一權(quán)重值和第二權(quán)重值,所述線程負(fù)載=CPU使用率*第一權(quán)重值+線程數(shù)據(jù)處理流量*第二權(quán)重值。其中,所述第一 hash值和第二 hash值的計算公式為,hash=((數(shù)據(jù)包源IP地址~數(shù)據(jù)包目的IP地址)~ (數(shù)據(jù)包源端口 ~數(shù)據(jù)包目的端口))%最大四元組鏈表數(shù)據(jù)長度。其中,所述配置文件中還記載有指標(biāo)情況刷新周期S和分發(fā)表清空周期M,所述協(xié)議解析單元每隔時間S統(tǒng)計并刷新每個協(xié)議解析線程的指標(biāo)情況,所述數(shù)據(jù)包分發(fā)表每隔時間M清空一次。本發(fā)明的萬兆協(xié)議解析系統(tǒng)及方法,通過計算數(shù)據(jù)包hash值并與CPU個數(shù)和協(xié)議解析線程數(shù)量分別獲取數(shù)據(jù)包處理線程ID、協(xié)議解析線程ID,網(wǎng)卡驅(qū)動單元將數(shù)據(jù)包分發(fā)相應(yīng)的數(shù)據(jù)包處理線程ID,數(shù)據(jù)包處理單元對應(yīng)CPU創(chuàng)建虛擬網(wǎng)絡(luò)接口并通過虛擬網(wǎng)絡(luò)接口將數(shù)據(jù)包分發(fā)到相應(yīng)的協(xié)議解析線程ID,當(dāng)監(jiān)聽到虛擬接口接收到數(shù)據(jù)包時協(xié)議解析單元將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析數(shù)據(jù)鏈表上,并對協(xié)議解析數(shù)據(jù)鏈表記錄的數(shù)據(jù)包進(jìn)行解析。實現(xiàn)網(wǎng)卡驅(qū)動單元、數(shù)據(jù)包處理單元,協(xié)議解析單元對數(shù)據(jù)包進(jìn)行并行處理,并考慮了負(fù)載均衡策略,大大提高整體協(xié)議解析系統(tǒng)的處理性能,在萬兆流量下做到協(xié)議解析不丟包。
圖1是本發(fā)明一實施方式中一種萬兆協(xié)議解析系統(tǒng)的整體框圖;圖2是本發(fā)明一實施方式中網(wǎng)卡驅(qū)動單元的結(jié)構(gòu)框圖;圖3是本發(fā)明一實施方式中數(shù)據(jù)包處理單元的結(jié)構(gòu)框圖;圖4是本發(fā)明一實施方式中協(xié)議解析單元的結(jié)構(gòu)框圖;圖5是本發(fā)明一實施方式中一種萬兆協(xié)議解析方法的流程圖。主要元件符號說明網(wǎng)卡驅(qū)動單元10 ;數(shù)據(jù)包處理單元20 ;協(xié)議解析單元30 ;存儲單元40 ;CPU50 ;處理線程ID運算模塊11 ;第一數(shù)據(jù)包分發(fā)模塊12 ;虛擬網(wǎng)絡(luò)接口創(chuàng)建模塊21 ;數(shù)據(jù)包抓取模塊22 ;數(shù)據(jù)包過濾模塊23 ;協(xié)議解析線程開啟模塊31 ;監(jiān)聽模塊32 ;過濾規(guī)則分發(fā)模塊33 ;協(xié)議解析線程ID運算模塊34 ;hash值比對模塊35 ;第二數(shù)據(jù)包分發(fā)模塊36 ;協(xié)議解析模塊37 ;線程開啟判定模塊38。
具體實施例方式為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實現(xiàn)目的及效果,以下結(jié)合實施方式并配合附圖詳予說明。請一并參閱圖1、圖2,圖1是本發(fā)明一實施方式中一種萬兆協(xié)議解析系統(tǒng)的整體框圖。圖2是本發(fā)明一實施方式中網(wǎng)卡驅(qū)動單元的結(jié)構(gòu)框圖。一種萬兆協(xié)議解析系統(tǒng)包括網(wǎng)卡驅(qū)動單元10、數(shù)據(jù)包處理單元20、協(xié)議解析單元30、存儲單元40以及多個CPU50,所述存儲單元40中存儲有配置文件、數(shù)據(jù)包分發(fā)表以及協(xié)議解析數(shù)據(jù)鏈表,所述配置文件中記載有應(yīng)用層設(shè)定的數(shù)據(jù)包過濾規(guī)則。所述網(wǎng)卡驅(qū)動單元10包括數(shù)據(jù)包處理線程ID運算模塊11、第一數(shù)據(jù)包分發(fā)模塊
12。所述數(shù)據(jù)包處理線程ID運算模塊11用于當(dāng)接收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第一 hash值,并將第一 hash值與系統(tǒng)CPU個數(shù)取模得到數(shù)據(jù)包處理線程ID,以及將第一 hash值關(guān)聯(lián)數(shù)據(jù)包處理線程ID并存入所述數(shù)據(jù)包分發(fā)表。所述第一數(shù)據(jù)包分發(fā)模塊12用于根據(jù)數(shù)據(jù)包處理線程ID將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程。請參閱圖3,是本發(fā)明一實施方式中數(shù)據(jù)包處理單元的結(jié)構(gòu)框圖。所述數(shù)據(jù)包處理單元20包括虛擬網(wǎng)絡(luò)接口創(chuàng)建模塊21、數(shù)據(jù)包抓取模塊22、數(shù)據(jù)包過濾模塊23。所述虛擬網(wǎng)絡(luò)接口創(chuàng)建模塊21用于對應(yīng)每個CPU50分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口。所述數(shù)據(jù)包抓取模塊22用于根據(jù)數(shù)據(jù)包處理線程在CPU50注冊的函數(shù)接收數(shù)據(jù)包。所述數(shù)據(jù)包過濾模塊23用于根據(jù)數(shù)據(jù)包過濾規(guī)則對接收到的數(shù)據(jù)包進(jìn)行過濾,然后將過濾后的數(shù)據(jù)包通過虛擬網(wǎng)絡(luò)接口發(fā)送到相應(yīng)的CPU50。請參閱圖4,是本發(fā)明一實施方式中協(xié)議解析單元的結(jié)構(gòu)框圖。所述協(xié)議解析單元30包括協(xié)議解析線程開啟模塊31、監(jiān)聽模塊32、過濾規(guī)則分發(fā)模塊33、協(xié)議解析線程ID運算模塊34、hash值比對模塊35、第二數(shù)據(jù)包分發(fā)模塊36以及協(xié)議解析模塊37。所述協(xié)議解析線程開啟模塊31用于對應(yīng)每個CPU50分別開啟一個協(xié)議解析線程,所述監(jiān)聽模塊32用于通過協(xié)議解析線程監(jiān)聽相應(yīng)CPU50的虛擬網(wǎng)絡(luò)接口,所述過濾規(guī)則分發(fā)模塊33用于從配置文件讀取數(shù)據(jù)包過濾規(guī)則并發(fā)送至數(shù)據(jù)包處理單元20,其中,每個協(xié)議解析線程對應(yīng)各自的協(xié)議解析數(shù)據(jù)鏈表。所述協(xié)議解析線程ID運算模塊34用于當(dāng)監(jiān)聽模塊32監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二 hash值,并將第二 hash值與協(xié)議解析線程個數(shù)取模得到協(xié)議解析線程ID。hash值比對模塊35用于檢索并判斷所述數(shù)據(jù)包分發(fā)表中是否存在與第二 hash值相等的第一 hash值。第二數(shù)據(jù)包分發(fā)模塊36用于當(dāng)hash值比對模塊35確定所述數(shù)據(jù)包分發(fā)表中存與第二 hash值相等的第一 hash值時,將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上。所述配置文件還記載有線程開啟負(fù)載均衡閥值,所述存儲單元中存儲有指標(biāo)情況,所述指標(biāo)情況包含線程負(fù)載值。所述協(xié)議解析單元30還包括線程開啟判定模塊38,用于當(dāng)hash值比對模塊35確定所述數(shù)據(jù)包分發(fā)表中不存在與第二 hash值相等的第一 hash值時,根據(jù)指標(biāo)情況判斷協(xié)議解析線程ID對應(yīng)的線程負(fù)載值是否大于所述線程開啟負(fù)載均衡閥值。在本實施方式中,所述指標(biāo)情況還包含協(xié)議解析線程處理的數(shù)據(jù)包總數(shù)、異常數(shù)據(jù)包數(shù)、線程CPU使用率、線程數(shù)據(jù)處理流量,所述配置文件中還記載有第一權(quán)重值和第二權(quán)重值,所述線程負(fù)載=CPU使用率*第一權(quán)重值+線程數(shù)據(jù)處理流量*第二權(quán)重值。所述第二數(shù)據(jù)包分發(fā)模塊36還用于當(dāng)線程開啟判定模塊38確定線程負(fù)載值大于線程開啟負(fù)載均衡閥值時,查找線程負(fù)載值最小的第二協(xié)議解析線程ID,并把數(shù)據(jù)包以信號量方式分發(fā)到第二協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,以及將第二 hash值關(guān)聯(lián)第二協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。所述第二數(shù)據(jù)包分發(fā)模塊36還用于當(dāng)線程開啟判定模塊38確定線程負(fù)載值小于線程開啟的負(fù)載均衡閥值時,直接把數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,以及將第二 hash值關(guān)聯(lián)協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。所述協(xié)議解析模塊37用于以信號量方式讀取協(xié)議解析數(shù)據(jù)鏈表上的數(shù)據(jù)包并對其進(jìn)行協(xié)議解析、還原、入庫、建索引操作。其中,所述第一 hash值和第二 hash值的計算公式為,hash=((數(shù)據(jù)包源IP地址~數(shù)據(jù)包目的IP地址Γ (數(shù)據(jù)包源端口 '數(shù)據(jù)包目的端口))%最大四元組鏈表數(shù)據(jù)長度。 在本實施方式中,所述配置文件中還記載有指標(biāo)情況刷新周期S和分發(fā)表清空周期M,所述協(xié)議解析單元每隔時間S統(tǒng)計并刷新每個協(xié)議解析線程的指標(biāo)情況,所述數(shù)據(jù)包分發(fā)表每隔時間M清空一次,保持負(fù)載均衡策略的穩(wěn)定性。請參閱圖5,是本發(fā)明一實施方式中一種萬兆協(xié)議解析方法的執(zhí)行流程圖。一種萬兆協(xié)議解析方法,運行于上述萬兆協(xié)議解析系統(tǒng)中,包括:步驟S1、網(wǎng)卡驅(qū)動單元接收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第一 hash值,并將第一hash值與系統(tǒng)CPU個數(shù)取模得到數(shù)據(jù)包處理線程ID,然后將第一 hash值關(guān)聯(lián)數(shù)據(jù)包處理線程ID并存入一數(shù)據(jù)包分發(fā)表,以及根據(jù)數(shù)據(jù)包處理線程ID將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程;步驟S2、數(shù)據(jù)包處理單元對應(yīng)每個CPU分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口,以及根據(jù)數(shù)據(jù)包處理線程在CPU注冊的函數(shù)接收數(shù)據(jù)包,并根據(jù)數(shù)據(jù)包過濾規(guī)則對接收到的數(shù)據(jù)包進(jìn)行過濾,然后將過濾后的數(shù)據(jù)包通過虛擬網(wǎng)絡(luò)接口發(fā)送到相應(yīng)的CPU ;步驟S3、協(xié)議解析單元對應(yīng)每個CPU分別開啟一個協(xié)議解析線程,并通過協(xié)議解析線程監(jiān)聽相應(yīng)CPU的虛擬網(wǎng)絡(luò)接口,以及從配置文件讀取應(yīng)用層設(shè)定的數(shù)據(jù)包過濾規(guī)則并發(fā)送至數(shù)據(jù)包處理單元,其中,每個協(xié)議解析線程對應(yīng)各自的協(xié)議解析數(shù)據(jù)鏈表;步驟S4、協(xié)議解析單元監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二hash值,并將第二 hash值與協(xié)議解析線程個數(shù)取模得到協(xié)議解析線程ID ;步驟S5、協(xié)議解析單元檢索并判斷所述數(shù)據(jù)包分發(fā)表中是否存在與第二 hash值相等的第一 hash值;步驟S6、當(dāng)確定所述數(shù)據(jù)包分發(fā)表中存與第二 hash值相等的第一 hash值時,協(xié)議解析單元將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上;步驟S7、協(xié)議解析單元以信號量方式讀取協(xié)議解析數(shù)據(jù)鏈表上的數(shù)據(jù)包并對其進(jìn)行協(xié)議解析、還原、入庫、建索引操作。其中,所述的萬兆協(xié)議解析方法還包括:步驟S8、當(dāng)確定所述數(shù)據(jù)包分發(fā)表中不存在與第二 hash值相等的第一 hash值時,協(xié)議解析單元根據(jù)指標(biāo)情況判斷協(xié)議解析線程ID對應(yīng)的線程負(fù)載值是否大于配置文件設(shè)置的線程開啟負(fù)載均衡閥值,其中,所述指標(biāo)情況包含線程負(fù)載值;步驟S9、當(dāng)確定線程負(fù)載值大于線程開啟負(fù)載均衡閥值時,協(xié)議解析單元查找線程負(fù)載值最小的第二協(xié)議解析線程ID,把數(shù)據(jù)包以信號量方式分發(fā)到第二協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,同時將第二 hash值關(guān)聯(lián)第二協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表;步驟S10、當(dāng)確定線程負(fù)載值小于線程開啟的負(fù)載均衡閥值時,協(xié)議解析單元直接把數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,同時將第二hash值關(guān)聯(lián)協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。其中,所述指標(biāo)情況還包含協(xié)議解析線程處理的數(shù)據(jù)包總數(shù)、異常數(shù)據(jù)包數(shù)、線程(PU使用率、線程數(shù)據(jù)處理流量,所述配置文件中還記載有第一權(quán)重值和第二權(quán)重值,所述線程負(fù)載=CPU使用率*第一權(quán)重值+線程數(shù)據(jù)處理流量*第二權(quán)重值。其中,所述第一 hash值和第二 hash值的計算公式為,hash=((數(shù)據(jù)包源IP地址~數(shù)據(jù)包目的IP地址)~ (數(shù)據(jù)包源端口 ~數(shù)據(jù)包目的端口))%最大四元組鏈表數(shù)據(jù)長度。其中,所述配置文件中還記載有指標(biāo)情況刷新周期S和分發(fā)表清空周期M,所述協(xié)議解析單元每隔時間S統(tǒng)計并刷新每個協(xié)議解析線程的指標(biāo)情況,所述數(shù)據(jù)包分發(fā)表每隔時間M清空一次。本發(fā)明的萬兆協(xié)議解析系統(tǒng)及方法,通過計算數(shù)據(jù)包hash值并與CPU個數(shù)和協(xié)議解析線程數(shù)量分別獲取數(shù)據(jù)包處理線程ID、協(xié)議解析線程ID,網(wǎng)卡驅(qū)動單元將數(shù)據(jù)包分發(fā)相應(yīng)的數(shù)據(jù)包處理線程ID,數(shù)據(jù)包處理單元對應(yīng)CPU創(chuàng)建虛擬網(wǎng)絡(luò)接口并通過虛擬網(wǎng)絡(luò)接口將數(shù)據(jù)包分發(fā)到相應(yīng)的協(xié)議解析線程ID,當(dāng)監(jiān)聽到虛擬接口接收到數(shù)據(jù)包時協(xié)議解析單元將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析數(shù)據(jù)鏈表上,并對協(xié)議解析數(shù)據(jù)鏈表記錄的數(shù)據(jù)包進(jìn)行解析。實現(xiàn)網(wǎng)卡驅(qū)動單元、數(shù)據(jù)包處理單元,協(xié)議解析單元對數(shù)據(jù)包進(jìn)行并行處理,并考慮了負(fù)載均衡策略,大大提高整體協(xié)議解析系統(tǒng)的處理性能,在萬兆流量下做到協(xié)議解析不丟包。以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種萬兆協(xié)議解析系統(tǒng),其特征在于,包括:網(wǎng)卡驅(qū)動單元、數(shù)據(jù)包處理單元、協(xié)議解析單元以及存儲單元,所述存儲單元中存儲有配置文件、數(shù)據(jù)包分發(fā)表以及協(xié)議解析數(shù)據(jù)鏈表,所述配置文件中記載有應(yīng)用層設(shè)定的數(shù)據(jù)包過濾規(guī)則; 所述網(wǎng)卡驅(qū)動單元包括: 數(shù)據(jù)包處理線程ID運算模塊,用于當(dāng)接收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第一 hash值,并將第一 hash值與系統(tǒng)CPU個數(shù)取模得到數(shù)據(jù)包處理線程ID,以及將第一 hash值關(guān)聯(lián)數(shù)據(jù)包處理線程ID并存入所述數(shù)據(jù)包分發(fā)表;以及 第一數(shù)據(jù)包分發(fā)模塊,用于根據(jù)數(shù)據(jù)包處理線程ID將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程; 所述數(shù)據(jù)包處理單元包括: 虛擬網(wǎng)絡(luò)接口創(chuàng)建模塊,用于對應(yīng)每個CPU分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口 ; 數(shù)據(jù)包抓取模塊,用于根據(jù)數(shù)據(jù)包處理線程在CPU注冊的函數(shù)接收數(shù)據(jù)包; 數(shù)據(jù)包過濾模塊,用于根據(jù)數(shù)據(jù)包過濾規(guī)則對接收到的數(shù)據(jù)包進(jìn)行過濾,然后將過濾后的數(shù)據(jù)包通過虛擬網(wǎng)絡(luò)接口發(fā)送到相應(yīng)的CPU ; 所述協(xié)議解析單元包括: 協(xié)議解析線程開啟模塊,用于對應(yīng)每個CPU分別開啟一個協(xié)議解析線程; 監(jiān)聽模塊,用于通過協(xié)議解析線程監(jiān)聽相應(yīng)CPU的虛擬網(wǎng)絡(luò)接口 ; 過濾規(guī)則分發(fā)模塊,用于從配置文件讀取數(shù)據(jù)包過濾規(guī)則并發(fā)送至數(shù)據(jù)包處理單元,其中,每個協(xié)議解析線程對應(yīng)各自的協(xié)議解析數(shù)據(jù)鏈表; 協(xié)議解析線程ID運算模塊,用于當(dāng)監(jiān)聽模塊監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二 hash值,并將第二 hash值與協(xié)議解析線程個數(shù)取模得到協(xié)議解析線程ID ; hash值比對模塊,用于檢索并判斷所述數(shù)據(jù)包分發(fā)表中是否存在與第二 hash值相等的第一 hash值; 第二數(shù)據(jù)包分發(fā)模塊,用于當(dāng)hash值比對模塊確定所述數(shù)據(jù)包分發(fā)表中存與第二hash值相等的第一 hash值時,將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上; 協(xié)議解析模塊,用于以信號量方式讀取協(xié)議解析數(shù)據(jù)鏈表上的數(shù)據(jù)包并對其進(jìn)行協(xié)議解析、還原、入庫、建索引操作。
2.根據(jù)權(quán)利要求1所述的一種萬兆協(xié)議解析系統(tǒng),其特征在于,所述配置文件還記載有線程開啟負(fù)載均衡閥值,所述存儲單元中存儲有指標(biāo)情況,所述指標(biāo)情況包含線程負(fù)載值; 所述協(xié)議解析單元還包括: 線程開啟判定模塊,用于當(dāng)hash值比對模塊確定所述數(shù)據(jù)包分發(fā)表中不存在與第二hash值相等的第一 hash值時,根據(jù)指標(biāo)情況判斷協(xié)議解析線程ID對應(yīng)的線程負(fù)載值是否大于所述線程開啟負(fù)載均衡閥值; 所述第二數(shù)據(jù)包分發(fā)模塊還用于當(dāng)線程開啟判定模塊確定線程負(fù)載值大于線程開啟負(fù)載均衡閥值時,查找線程負(fù)載值最小的第二協(xié)議解析線程ID,并把數(shù)據(jù)包將以信號量方式分發(fā)到第二協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,以及將第二 hash值關(guān)聯(lián)第二協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表; 所述第二數(shù)據(jù)包分發(fā)模塊還用于當(dāng)線程開啟判定模塊確定線程負(fù)載值小于線程開啟的負(fù)載均衡閥值時,直接把數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,以及將第二 hash值關(guān)聯(lián)協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。
3.根據(jù)權(quán)利要求2所述的一種萬兆協(xié)議解析系統(tǒng),其特征在于,所述指標(biāo)情況還包含協(xié)議解析線程處理的數(shù)據(jù)包總數(shù)、異常數(shù)據(jù)包數(shù)、線程CPU使用率、線程數(shù)據(jù)處理流量,所述配置文件中還記載有第一權(quán)重值和第二權(quán)重值,所述線程負(fù)載=CPU使用率*第一權(quán)重值+線程數(shù)據(jù)處理流量*第二權(quán)重值。
4.根據(jù)權(quán)利要求1所述的一種萬兆協(xié)議解析系統(tǒng),其特征在于,所述第一hash值和第二 hash值的計算公式為,hash=((數(shù)據(jù)包源IP地址~數(shù)據(jù)包目的IP地址)~ (數(shù)據(jù)包源端口 ■'數(shù)據(jù)包目的端口))%最大四元組鏈表數(shù)據(jù)長度。
5.根據(jù)權(quán)利要求1-4任意一項所述的一種萬兆協(xié)議解析系統(tǒng),其特征在于,所述配置文件中還記載有指標(biāo)情況刷新周期S和分發(fā)表清空周期M,所述協(xié)議解析單元每隔時間S統(tǒng)計并刷新每個協(xié)議解析線程的指標(biāo)情況,所述數(shù)據(jù)包分發(fā)表每隔時間M清空一次。
6.一種萬兆協(xié)議解析方法,運行于權(quán)利要1-4任意一項所述的萬兆協(xié)議解析系統(tǒng)中,其特征在于,包括步驟: 網(wǎng)卡驅(qū)動單元接收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第一 hash值,并將第一 hash值與系統(tǒng)CPU個數(shù)取模得到數(shù)據(jù)包處理線程ID,然后將第一 hash值關(guān)聯(lián)數(shù)據(jù)包處理線程ID并存入一數(shù)據(jù)包分發(fā)表,以及根據(jù)數(shù)據(jù)包處理線程ID將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程; 數(shù)據(jù)包處理單元對應(yīng)每個CPU分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口,以及根據(jù)數(shù)據(jù)包處理線程在CPU注冊的函數(shù)接收數(shù)據(jù)包,并根據(jù)數(shù)據(jù)包過濾規(guī)則對接收到的數(shù)據(jù)包進(jìn)行過濾,然后將過濾后的數(shù)據(jù)包通過虛擬網(wǎng)絡(luò)接口發(fā)送到相應(yīng)的CPU ; 協(xié)議解析單元對應(yīng)每個CPU分別開啟一個協(xié)議解析線程,并通過協(xié)議解析線程監(jiān)聽相應(yīng)CPU的虛擬網(wǎng)絡(luò)接口,以及從配置文件讀取應(yīng)用層設(shè)定的數(shù)據(jù)包過濾規(guī)則并發(fā)送至數(shù)據(jù)包處理單元,其中,每個協(xié)議解析線程對應(yīng)各自的協(xié)議解析數(shù)據(jù)鏈表; 協(xié)議解析單元監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二 hash值,并將第二 hash值與協(xié)議解析線程個數(shù)取模得到協(xié)議解析線程ID ; 協(xié)議解析單元檢索并判斷所述數(shù)據(jù)包分發(fā)表中是否存在與第二 hash值相等的第一hash 值; 當(dāng)確定所述數(shù)據(jù)包分發(fā)表中存與第二 hash值相等的第一 hash值時,協(xié)議解析單元將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上; 協(xié)議解析單元以信號量方式讀取協(xié)議解析數(shù)據(jù)鏈表上的數(shù)據(jù)包并對其進(jìn)行協(xié)議解析、還原、入庫、建索引操作。
7.根據(jù)權(quán)利要求6所述的一種萬兆協(xié)議解析方法,其特征在于,還包括: 當(dāng)確定所述數(shù)據(jù)包分發(fā)表中不存在與第二 hash值相等的第一 hash值時,協(xié)議解析單元根據(jù)指標(biāo)情況判斷協(xié)議解析線程ID對應(yīng)的線程負(fù)載值是否大于配置文件設(shè)置的線程開啟負(fù)載均衡閥值,其中,所述指標(biāo)情況包含線程負(fù)載值; 當(dāng)確定線程負(fù)載值大于線程開啟負(fù)載均衡閥值時,協(xié)議解析單元查找線程負(fù)載值最小的第二協(xié)議解析線程ID,把數(shù)據(jù)包以信號量方式分發(fā)到第二協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,同時將第二 hash值關(guān)聯(lián)第二協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表; 當(dāng)確定線程負(fù)載值小于線程開啟的負(fù)載均衡閥值時,協(xié)議解析單元直接把數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,同時將第二 hash值關(guān)聯(lián)協(xié)議解析線程ID并存入數(shù)據(jù)包分發(fā)表。
8.根據(jù)權(quán)利要求7所述的一種萬兆協(xié)議解析方法,其特征在于,所述指標(biāo)情況還包含協(xié)議解析線程處理的數(shù)據(jù)包總數(shù)、異常數(shù)據(jù)包數(shù)、線程CPU使用率、線程數(shù)據(jù)處理流量,所述配置文件中還記載有第一權(quán)重值和第二權(quán)重值,所述線程負(fù)載=CPU使用率*第一權(quán)重值+線程數(shù)據(jù)處理流量*第二權(quán)重值。
9.根據(jù)權(quán)利要求6所述的一種萬兆協(xié)議解析方法,其特征在于,所述第一hash值和第二 hash值的計算公式為,hash=((數(shù)據(jù)包源IP地址~數(shù)據(jù)包目的IP地址)~ (數(shù)據(jù)包源端口 數(shù)據(jù)包目的端口))%最大四元組鏈表數(shù)據(jù)長度。
10.根據(jù)權(quán)利要求6-9任意一項所述的一種萬兆協(xié)議解析方法,其特征在于,所述配置文件中還記載有指標(biāo)情況刷新周期S和分發(fā)表清空周期M,所述協(xié)議解析單元每隔時間S統(tǒng)計并刷新每個協(xié)議解析線程的指標(biāo)情況,所述數(shù)據(jù)包分發(fā)表每隔時間M清空一次。
全文摘要
本發(fā)明公開一種萬兆協(xié)議解析方法,包括步驟網(wǎng)卡驅(qū)動單元計算出數(shù)據(jù)包的第一hash值以及數(shù)據(jù)包處理線程ID,將數(shù)據(jù)包分發(fā)到相應(yīng)的CPU數(shù)據(jù)包處理線程;數(shù)據(jù)包處理單元對應(yīng)每個CPU分別創(chuàng)建一個虛擬網(wǎng)絡(luò)接口,對接收到的數(shù)據(jù)包進(jìn)行過濾并送到相應(yīng)的CPU;協(xié)議解析單元監(jiān)聽到虛擬網(wǎng)絡(luò)接口收到數(shù)據(jù)包后計算出數(shù)據(jù)包的第二hash值及協(xié)議解析線程ID,判斷數(shù)據(jù)包分發(fā)表中是否存在與第二hash值相等的第一hash值,若存在,將數(shù)據(jù)包以信號量方式分發(fā)到協(xié)議解析線程ID對應(yīng)的協(xié)議解析數(shù)據(jù)鏈表上,對協(xié)議解析數(shù)據(jù)鏈表上的信號量方式的數(shù)據(jù)包進(jìn)行協(xié)議解析、還原、入庫、建索引操作。本發(fā)明公開一種萬兆協(xié)議解析系統(tǒng)。
文檔編號H04L29/06GK103179116SQ201310087219
公開日2013年6月26日 申請日期2013年3月19日 優(yōu)先權(quán)日2013年1月18日
發(fā)明者王先高, 高峰 申請人:廈門市美亞柏科信息股份有限公司