一種基于ip五元組的哈希存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)會(huì)話統(tǒng)計(jì)分析領(lǐng)域,尤其涉及一種基于IP五元組的哈希存儲(chǔ)方法。
【背景技術(shù)】
[0002]拒絕服務(wù)攻擊(DoS, Denial of Service)是指利用各種服務(wù)請(qǐng)求耗盡被攻擊網(wǎng)絡(luò)的系統(tǒng)資源,從而使被攻擊網(wǎng)絡(luò)無法處理合法用戶的請(qǐng)求。而隨著僵尸網(wǎng)絡(luò)的興起,同時(shí)由于攻擊方法簡(jiǎn)單、影響較大、難以追查等特點(diǎn),又使得分布式拒絕服務(wù)攻擊(DDoS,Distributed Denial of Service)得到快速壯大和日益泛濫。成千上萬主機(jī)組成的僵尸網(wǎng)絡(luò)為DDoS攻擊提供了所需的帶寬和主機(jī),形成了規(guī)模巨大的攻擊和網(wǎng)絡(luò)流量,對(duì)被攻擊網(wǎng)絡(luò)造成了極大的危害。
[0003]隨著DDoS攻擊技術(shù)的不斷提高和發(fā)展,互聯(lián)網(wǎng)服務(wù)提供商(ISP,InternetService Provider)、因特網(wǎng)內(nèi)容提供商(ICP,Internet Content Provider)、互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC,Internet Data Center)等運(yùn)營(yíng)商面臨的安全和運(yùn)營(yíng)挑戰(zhàn)也不斷增多,運(yùn)營(yíng)商必須在DDoS威脅影響關(guān)鍵業(yè)務(wù)和應(yīng)用之前,對(duì)流量進(jìn)行檢測(cè)并加以清洗,確保網(wǎng)絡(luò)正常穩(wěn)定的運(yùn)行以及業(yè)務(wù)的正常開展。同時(shí),對(duì)DDoS攻擊流量的檢測(cè)和清洗也可以成為運(yùn)營(yíng)商為用戶提供的一種增值服務(wù),以獲得更好的用戶滿意度。
[0004]在ISP、IDC等運(yùn)營(yíng)商的大流量網(wǎng)絡(luò)環(huán)境下,要快速準(zhǔn)確地判斷當(dāng)前網(wǎng)絡(luò)狀態(tài),會(huì)話統(tǒng)計(jì)分析正是最核心的技術(shù)之一,把流量中所有的連接會(huì)話建立起來并分析其傳輸?shù)母鞣N數(shù)據(jù),能夠得到很多關(guān)于當(dāng)前網(wǎng)絡(luò)狀態(tài)的信息,對(duì)及時(shí)發(fā)現(xiàn)DDoS攻擊有很大幫助,而建立連接,需要數(shù)據(jù)報(bào)文中的IP五元組信息即源地址、目標(biāo)地址、源端口、目標(biāo)端口和IP協(xié)議,使用何種方法存儲(chǔ)IP五元組信息將會(huì)對(duì)會(huì)話連接分析的效率有關(guān)鍵的作用。
[0005]目前IP五元組哈希存儲(chǔ)方法最為常用,但現(xiàn)有技術(shù)中的IP五元組哈希存儲(chǔ)方法是有很多的缺點(diǎn)的。主要有以下幾個(gè)缺點(diǎn):
[0006]1、哈希分布不均勻:很多方法使用的哈希函數(shù)算出的哈希存儲(chǔ)位置不夠平均,導(dǎo)致哈希沖突深度較大。
[0007]2、新增速度慢:因?yàn)榉植疾痪鶆?,哈希的沖突深度大,而且很多方法使用鏈表法解決沖突時(shí)往往在新增時(shí)會(huì)遍歷整個(gè)鏈條而消耗了大量的時(shí)間。
[0008]3、查找速度慢:隨著存儲(chǔ)的值越來越多,深度大于I的存儲(chǔ)位置也越來越多,往往很多查找比較多次數(shù)的值并不在存儲(chǔ)位置的首部,查找這些值的時(shí)候往往需要遍歷鏈表數(shù)次才能獲得,這其中又消耗了大量的時(shí)間。
【發(fā)明內(nèi)容】
[0009]有鑒于此,本發(fā)明實(shí)施例提供一種基于IP五元組的哈希儲(chǔ)存方法,以解決現(xiàn)有技術(shù)中哈希分布不均,新增和查找速度很慢的問題。
[0010]本發(fā)明實(shí)施例提供了一種基于IP五元組的哈希儲(chǔ)存方法,包括:[0011 ] 接收會(huì)話信息查詢請(qǐng)求;
[0012]根據(jù)所述會(huì)話信息查詢請(qǐng)求中的IP五元組,基于第一哈希函數(shù)確定第一哈希數(shù)組的第一單元標(biāo)識(shí),基于第二哈希函數(shù)確定第二哈希數(shù)組的第二單元標(biāo)識(shí),其中,所述第一哈希數(shù)組中的每個(gè)單元用于存儲(chǔ)所述第二哈希數(shù)組;
[0013]根據(jù)所述第一單元標(biāo)識(shí)和第二單元標(biāo)識(shí)確定當(dāng)前第二哈希數(shù)組;
[0014]遍歷所述當(dāng)前第二哈希數(shù)組指向的所有會(huì)話存儲(chǔ)單元,查找與所述IP五元組對(duì)應(yīng)的會(huì)話存儲(chǔ)單元;
[0015]從所述會(huì)話存儲(chǔ)單元中獲取會(huì)話信息。
[0016]本發(fā)明的有益效果是:本發(fā)明提供的一種基于IP五元組的哈希存儲(chǔ)方法,使用CRC32算法和異或運(yùn)算兩個(gè)運(yùn)算作為哈希函數(shù)相結(jié)合來得出最終的哈希存儲(chǔ)位置,使得哈希存儲(chǔ)分布很均勻。兩串不同的數(shù)據(jù),經(jīng)過兩個(gè)函數(shù)算出的值都一樣的概率是很小的,所以結(jié)合兩個(gè)哈希函數(shù),能最大限度地使不同數(shù)據(jù)串算出的最終值不一樣,從而減少哈希沖突。通過以上措施,解決現(xiàn)有技術(shù)中哈希分布不均,新增和查找速度很慢的問題,從整體上大大提升了 IP五元組的哈希存儲(chǔ)效率。
【附圖說明】
[0017]通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0018]圖1是本發(fā)明實(shí)施例一的一種基于IP五元組的哈希存儲(chǔ)方法的流程示意圖;
[0019]圖2是本發(fā)明實(shí)施例三的一種基于IP五元組的哈希存儲(chǔ)方法的流程示意圖;
【具體實(shí)施方式】
[0020]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。
[0021]實(shí)施例一
[0022]圖1是實(shí)施例一提供一種基于IP五元組的哈希存儲(chǔ)方法的流程示意圖。該方法適用于大流量網(wǎng)絡(luò)環(huán)境下,將較大的數(shù)據(jù)信息轉(zhuǎn)換成較小的數(shù)據(jù)信息存儲(chǔ)起來,便于訪問和統(tǒng)計(jì)分析的情況。該方法由基于IP五元組的哈希存儲(chǔ)方法的裝置執(zhí)行,該裝置可設(shè)置在終端中,可以采用軟件和/或硬件的形式實(shí)現(xiàn)。比如互聯(lián)網(wǎng)服務(wù)提供商(ISP,InternetService Provider)、因特網(wǎng)內(nèi)容提供商(ICP,Internet Content Provider)、互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC,Internet Data Center)等運(yùn)營(yíng)商可以應(yīng)用此方法來對(duì)流量進(jìn)行檢測(cè)并加以清洗,確保網(wǎng)絡(luò)正常穩(wěn)定的運(yùn)行以及業(yè)務(wù)的正常開展。
[0023]如圖1所示,該方法包括:
[0024]S110、接收會(huì)話信息查詢請(qǐng)求。
[0025]基于IP五元組的哈希存儲(chǔ)方法的裝置接收含有IP五元組信息的會(huì)話查詢請(qǐng)求,用IP五元組去確定會(huì)話信息的存儲(chǔ)位置,從而訪問到會(huì)話信息。
[0026]S120、根據(jù)所述會(huì)話信息查詢請(qǐng)求中的IP五元組,基于第一哈希函數(shù)確定第一哈希數(shù)組的第一單元標(biāo)識(shí),基于第二哈希函數(shù)確定第二哈希數(shù)組的第二單元標(biāo)識(shí),其中,所述第一哈希數(shù)組中的每個(gè)單元用于存儲(chǔ)所述第二哈希數(shù)組。
[0027]IP五元組信息link包括源地址sip,目標(biāo)地址dip,源端口 sport,目標(biāo)端口 dport和IP協(xié)議號(hào)protocol。首先建立第一哈希數(shù)組和第二哈希函數(shù)組,第一哈希數(shù)組中的每個(gè)單元又為一個(gè)第二哈希數(shù)組。第二哈希函數(shù)的每個(gè)單元為一個(gè)指針,指向每一個(gè)儲(chǔ)存單元。由第一哈希函數(shù)計(jì)算得出第一單元標(biāo)識(shí),由第二哈希函數(shù)得出第二單元標(biāo)識(shí)。
[0028]進(jìn)一步的,第一哈希數(shù)組的長(zhǎng)度大于第二哈希數(shù)組。
[0029]進(jìn)一步的,第一哈希函數(shù)為F = CRC_32(M->link) % A。
[0030]其中,F(xiàn)為第一哈希數(shù)組中的第一單元標(biāo)識(shí),CRC_32為32位的循環(huán)冗余校驗(yàn)算法函數(shù),M->link為會(huì)話存儲(chǔ)單元中的IP五元組信息,A為第一哈希數(shù)組的長(zhǎng)度。
[0031]第二哈希函數(shù)為f = (sip'dip' ((sport?16)+dport)) % aD
[0032]其中,f為第二哈希數(shù)組中的第二單元標(biāo)識(shí),a為第二哈希數(shù)組的長(zhǎng)度。
[0033]首先一串?dāng)?shù)據(jù)經(jīng)過32位的CRC函數(shù)算過之后,得到的值是基本分布的比較均勻的,如果還是有沖突的,還有第二個(gè)IP五元組異或哈希函數(shù),兩串不同的數(shù)據(jù),經(jīng)過兩個(gè)函數(shù)算出的值都一樣的概率,是很小的,所以結(jié)合兩個(gè)哈希函數(shù),能最大限度地使不同數(shù)據(jù)串算出的最終值不一樣。這樣大大降低了哈希沖突。
[0034]S130、根據(jù)所述第一單元標(biāo)識(shí)和第二單元標(biāo)識(shí)確定當(dāng)前第二哈希數(shù)組。
[0035]第一單元標(biāo)識(shí)確定第一哈希函數(shù)組的位置,第二單元標(biāo)識(shí)確定第二哈希數(shù)組的位置。因?yàn)榈谝还?shù)組中每個(gè)單元為一個(gè)第二哈希數(shù)組,所以第一單元標(biāo)識(shí)以及第二單元標(biāo)識(shí)最終確定了一個(gè)當(dāng)前的第二哈希數(shù)組,當(dāng)前的第二哈希數(shù)組為第一哈希數(shù)組和第二哈希數(shù)組的結(jié)合。
[0036]S140、遍歷所述當(dāng)前第二哈希數(shù)組指向的所有會(huì)話存儲(chǔ)單元,查找與所述IP五元組對(duì)應(yīng)的會(huì)話存儲(chǔ)單元。
[0037]如果用哈希函數(shù)算出很多個(gè)存儲(chǔ)位置一樣的會(huì)話存儲(chǔ)單元,即當(dāng)前第二哈希數(shù)組指向很多會(huì)話存儲(chǔ)單元。這些會(huì)話存儲(chǔ)單元就需要用鏈表連接起來,而這個(gè)鏈表的長(zhǎng)度也可以理解為沖突深度。當(dāng)查找與所屬IP五元組對(duì)應(yīng)的會(huì)話存儲(chǔ)單元時(shí)就需要遍歷當(dāng)前第二哈希函數(shù)組指向的所有會(huì)話存儲(chǔ)單元。
[0038]進(jìn)一步的,所述會(huì)話存儲(chǔ)單元M包括:
[0039]IP五元組信息link ;
[0040]上一存儲(chǔ)單元指針prev ;
[0041]下一存儲(chǔ)單元指針next ;
[0042]查找計(jì)數(shù)count,用于記錄會(huì)話存儲(chǔ)單元的被查找次數(shù)。
[0043]S150、從所述會(huì)話存儲(chǔ)單元中獲取會(huì)話信息。
[0044]進(jìn)一步的,若所述會(huì)話存儲(chǔ)單元為所述當(dāng)前第二哈希數(shù)組指向的首個(gè)存儲(chǔ)單元,則返回所述會(huì)話信息;
[0045]若所述會(huì)話存儲(chǔ)單元不為所述當(dāng)前第二哈希數(shù)組指向的首個(gè)存儲(chǔ)單元,則根據(jù)所述上一存儲(chǔ)單元指針獲取上一會(huì)話存儲(chǔ)單元的查找計(jì)數(shù),比較所述會(huì)話存儲(chǔ)單元的查找計(jì)數(shù)是否大于上一會(huì)話存儲(chǔ)單元的查找計(jì)數(shù),若是,則交換兩個(gè)會(huì)話存儲(chǔ)單元的位置,更新相應(yīng)的指針,并返回所述會(huì)話信息;若否,則直接返回所述會(huì)話信息。
[0046]現(xiàn)有技術(shù)中,隨著會(huì)話存儲(chǔ)單元越來越多,深度大于I的存儲(chǔ)位置也越來越多,往往很多查找比較多次數(shù)的存儲(chǔ)單元并不在存儲(chǔ)位置的頭部,查找這些存儲(chǔ)單元的時(shí)候往往需要遍歷鏈表數(shù)次才能獲得,這其中又消耗了大量的時(shí)間。本實(shí)施例中,通過查找計(jì)數(shù)的大小交換同一鏈表上的會(huì)話存儲(chǔ)單元,使得被查找較多的會(huì)話存儲(chǔ)單元總是位于鏈表頭部,這樣處在同一鏈表下的會(huì)話存儲(chǔ)單元將按被查找的次數(shù)由大到小從鏈表的頭部到尾部進(jìn)行排列。大大減少了由于查找元素時(shí)遍歷鏈表的時(shí)間,有效提高了存儲(chǔ)的效率。
[0047]本發(fā)明實(shí)施例一提供的一種基于IP五元組的哈希存儲(chǔ)方法,通過使用CRC32算法和異或運(yùn)算兩個(gè)運(yùn)算作為哈希函數(shù)相結(jié)合來得出最終的哈希存儲(chǔ)位置。兩串不同的數(shù)據(jù),經(jīng)過兩個(gè)函數(shù)算出的值都一樣的概率是很小的,所以結(jié)合兩個(gè)哈希函數(shù),能最大限度地使不同數(shù)據(jù)串算出的最終值不一樣,減少哈希沖突。通過以上措施,解決現(xiàn)有技術(shù)中哈希分布不均,新增和查找速度很慢的問題,從整體上大大提升了 IP五元組的哈希存儲(chǔ)效率。
[0048]實(shí)施例二
[0049]本實(shí)施例以實(shí)施例一為基礎(chǔ),進(jìn)一步的在遍歷所述當(dāng)前第二哈希數(shù)組指向的所有會(huì)話存儲(chǔ)單元,查找與所述IP五元組對(duì)應(yīng)的會(huì)話存儲(chǔ)單元之后,還執(zhí)行如下操