本發明涉及網絡流量分析技術領域,特別涉及一種處理網絡流量分析的方法和裝置。
背景技術:
在網絡流量分析類軟件的開發中,需要將網絡中的數據包按照不同的五元組進行區分,將數據包還原成數據連接,在連接的基礎上再進行上層的分析業務。哈希算法由于其較高的運算效率,所以常常用于連接表的核心數據結構。當新建連接的時候,新的哈希節點被創建;當連接結束的時候,已有的哈希節點被釋放;整個哈希表的生存期間,哈希節點的數量是根據網絡連接的變化而變化的。
哈希算法的本質是集合K到集合T的映射,通常情況下K的集合要大于T,由于是一個不平衡的映射,所以會出現不同輸入得到相同的哈希值,此類情況稱之為哈希碰撞。
常用對哈希碰撞的處理辦法可以是拉鏈法,開放地址法或者多階哈希法,但是無論采用哪種方法,哈希碰撞都會導致計算效率降低,哈希碰撞率越高,整體的算法和操作復雜度越高。
除了選用根據輸入進行優化的哈希算法之外,盡量減少集合T與集合K的數量差異,也可以減少哈希碰撞產生的幾率。
實際使用中,哈希桶(即集合T)是要預先申請內存,在創建時候就將哈希桶的內存申請好,所以哈希桶申請的過大會導致內存占用過大;而如果哈希桶申請的數量過小,又會導致哈希碰撞的幾率變大。
技術實現要素:
為了解決現有技術的問題,本發明實施例提供了一種處理網絡流量分析的方法和裝置。所述技術方案如下:
一方面,本發明實施例提供了一種處理網絡流量分析的方法,包括:
統計待測哈希表中哈希節點的數量,所述待測哈希表包括與哈希表中每個哈希值對應建立的一個沖突鏈表;
根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,所述哈希節點使用上限為哈希節點利用率上限與當前哈希表的桶數的乘積,所述哈希節點使用下限為哈希節點利用率下限與當前哈希表的桶數的乘積;
當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表。
在本發明實施例上述的處理網絡流量分析的方法中,所述根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,包括:
根據統計到的哈希節點數量是否超過哈希節點使用上限,或者,統計到的哈希節點數量是否低于哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整。
在本發明實施例上述的處理網絡流量分析的方法中,所述當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表,包括:
當統計到的哈希節點數量超過哈希節點使用上限時,從預設的素數序列中,選取相對較大的素數作為新哈希表的桶數,重新建立哈希表;
當統計到的哈希節點數量低于哈希節點使用下限時,從預設的素數序列中,選取相對較小的素數作為新哈希表的桶數,重新建立哈希表。
在本發明實施例上述的處理網絡流量分析的方法中,所述預設的素數序列中每個素數均大于其相鄰前一個素數的2倍。
在本發明實施例上述的處理網絡流量分析的方法中,所述哈希節點利用率下限小于所述哈希節點利用率上限的一半。
另一方面,本發明實施例提供了一種處理網絡流量分析的裝置,包括:
統計模塊,用于統計待測哈希表中哈希節點的數量,所述待測哈希表包括與哈希表中每個哈希值對應建立的一個沖突鏈表;
判斷模塊,用于根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,所述哈希節點使用上限為哈希節點利用率上限與當前哈希表的桶數的乘積,所述哈希節點使用率下限為哈希節點利用率下限與當前哈希表的桶數的乘積;
處理模塊,用于當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表。
在本發明實施例上述的處理網絡流量分析的裝置中,所述判斷模塊,還用于根據統計到的哈希節點數量是否超過哈希節點使用上限,或者,統計到的哈希節點數量是否低于哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整。
在本發明實施例上述的處理網絡流量分析的裝置中,所述處理模塊,還用于當統計到的哈希節點數量超過哈希節點使用上限時,從預設的素數序列中,選取相對較大的素數作為新哈希表的桶數,重新建立哈希表;
所述處理模塊,還用于當統計到的哈希節點數量低于哈希節點使用下限時,從預設的素數序列中,選取相對較小的素數作為新哈希表的桶數,重新建立哈希表。
在本發明實施例上述的處理網絡流量分析的裝置中,所述預設的素數序列中每個素數均大于其相鄰前一個素數的2倍。
在本發明實施例上述的處理網絡流量分析的裝置中,所述哈希節點利用率下限小于所述哈希節點利用率上限的一半。
本發明實施例提供的技術方案帶來的有益效果是:
通過統計待測哈希表中哈希節點的數量,然后根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,并當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表,來實現處理網絡流量分析的方法。這樣通過調節哈希表的桶數,使得新的哈希表能夠主動適應網絡流量的需求,當網絡流量增加時,可以擴充哈希表的桶數,以提高新的哈希表的性能,當網絡流量降低時,可以縮減哈希表的桶數,以釋放被占據但未被利用的內存空間,將更多的閑置內存釋放給操作系統,從整體上提高現有軟件的處理性能。
附圖說明
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是本發明實施例一提供的一種處理網絡流量分析的方法流程圖;
圖2是本發明實施例一提供的一種哈希表的示意圖;
圖3是本發明實施例一提供的一種哈希表的示意圖;
圖4是本發明實施例一提供的一種哈希表的示意圖;
圖5是本發明實施例一提供的一種哈希表的示意圖;
圖6是本發明實施例二提供的一種處理網絡流量分析的裝置結構示意圖。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方式作進一步地詳細描述。
實施例一
本發明實施例提供了一種處理網絡流量分析的方法,參見圖1,該方法可以包括:
步驟S11,統計待測哈希表中哈希節點的數量,待測哈希表包括與哈希表中每個哈希值對應建立的一個沖突鏈表。
在本實施例中,現有的處理網絡流量分析的方法,會將網絡中的數據包還原成數據連接,在數據連接的基礎上再進行上層的分析業務。哈希表是種數據結構,它可以提供快速的插入操作和查找操作,其在各類網絡流量分析軟件中常常被應用到。
需要說明的是,本實施例中的待測哈希表采用的是鏈地址法來處理哈希沖突的,即對哈希表中每個哈希值(即關鍵字通過哈希函數計算得到的用于儲存數據的散列地址)建立一個沖突鏈表,將發生沖突的數據連接以鏈表的形式存儲在其中。此外,待測哈希表在建立之初,會為哈希表的哈希桶申請連續內存。哈希桶是使用一個順序表來存放具有相同哈希值的關鍵字的鏈表的頭節點,利用這個頭節點可以找到其它的關鍵字。
在實際應用中,可以在哈希表的數據結構中,設置哈希節點的計數器,來統計哈希表中哈希節點的數量,即每回有新插入哈希節點時,計數器中統計數量增加。
步驟S12,根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,哈希節點使用上限為哈希節點利用率上限與當前哈希表的桶數的乘積,哈希節點使用率下限為哈希節點利用率下限與當前哈希表的桶數的乘積。
在本實施例中,哈希表的桶數是指哈希表中哈希桶的數量。哈希桶是使用一個順序表來存放具有相同哈希值的關鍵字的鏈表的頭節點,利用這個頭節點可以找到其它的關鍵字。
具體地,上述步驟S12可以通過如下方式實現:
根據統計到的哈希節點數量是否超過哈希節點使用上限,或者,統計到的哈希節點數量是否低于哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整。
在本實施例中,當統計到的哈希節點的數量超過哈希節點使用上限時,說明該待測哈希表性能不能滿足現在的網絡流量,發生哈希碰撞的幾率大增,對應處理網絡流量分析的效率大幅下降,此時,應該根據預設的規則,增大哈希表的桶數,重新設定符合需要的哈希表;當統計到的哈希節點的數量低于哈希節點使用下限時,說明該待測哈希表有許多未利用的內存空間,此時,應該根據預設的規則,減小哈希表的桶數,釋放那些長期占有但未被利用的內存空間,從整體上提高現有軟件的處理性能。
進一步地,哈希節點利用率下限小于哈希節點利用率上限的一半,可以避免頻繁的重建新的哈希表。
步驟S13,當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表。
具體地,上述步驟S13可以通過如下方式實現:
1,當統計到的哈希節點數量超過哈希節點使用上限時,從預設的素數序列中,選取相對較大的素數作為新哈希表的桶數,重新建立哈希表。
在本實施例中,當統計到的哈希節點數量超過哈希節點使用上限時,需要對哈希桶進行擴充,重新申請連續的內存用于新的哈希桶,新哈希表的桶數是預設素數序列中的下一個相對較大的素數(現有哈希表的桶數也是從預設的素數序列中選取的)。然后遍歷舊的哈希表,將舊哈希表的所有哈希節點重新插入到新的哈希表中,并為新的哈希表設置計算新的哈希節點使用上、下限。完成后銷毀舊哈希表,釋放舊的哈希桶內存。
2,當統計到的哈希節點數量低于哈希節點使用下限時,從預設的素數序列中,選取相對較小的素數作為新哈希表的桶數,重新建立哈希表。
在本實施例中,當統計到的哈希節點數量低于哈希節點使用下限時,需要對哈希桶進行縮減,根據預設的素數序列向數值變小的方向進行選取,直到統計的哈希節點數量大于新的哈希節點使用下限(該新的哈希節點使用下限為哈希節點利用率下限與新選取的哈希桶數的乘積),即縮減時允許跳級縮減。重新申請連續內存用于新的哈希表,然后遍歷舊的哈希表,將舊哈希表的所有節點重新插入到新的哈希表中,并為新的哈希設置計算新的哈希節點使用上、下限。完成后銷毀舊哈希表,釋放舊的哈希桶內存。
此外,刪除哈希節點時,減少哈希節點計數器中統計數字,進行刪除操作,但是不進行任何的哈希表擴充和縮減操作。原因是,對哈希表的使用經常需要遍歷節點,如類似刪除所有超時節點的操作,如果在遍歷節點過程中發生哈希縮減,此時舊的哈希表已經被釋放了,會導致嚴重的內存錯誤。
進一步地,預設的素數序列中,每個素數都稍微大于其相鄰前一個素數的2倍,每個素數都盡量遠離其最近的2的冪。
在本實施例中,要求哈希桶的數字序列是一個素數的序列,因為在實際處理環境下,如果輸入的哈希值具備某種規律,如大量的等差數列,那么公差和模數不互質的時候發生碰撞的概率會變大,而用素數就可以很大程度上回避這個問題,使得哈希表可以避免一些局部的性能熱點。
下面結合圖2-5,舉例說明一下該處理網絡流量分析的方法。
在圖2中,該哈希表的桶數為5,由于網絡數據流量不大,數據連接數較少,沖突鏈表的平均鏈表長度較短,哈希沖突概率較小;
當網絡數據流量突然增大時(例如突發的新聞熱點),參見圖3,哈希表的節點增多,數據連接數也增多,沖突鏈表的平均鏈表長度增大,哈希沖突概率增大,此時,該哈希表的性能難以滿足現有的需求,需要對該哈希表的桶數進行擴充。
參見圖4,該哈希表為擴充哈希桶之后的新哈希表,其哈希桶的數量為11(大于原桶數5的2倍),將原有哈希節點進行重新分布后,新哈希表中沖突鏈表的平均鏈表長度降低,哈希沖突概率降低;
當網絡數據流量大幅降低時,哈希表中有許多哈希桶未被利用,極大的浪費了這些哈希桶所占據的內存。參見圖5,對圖4中的哈希表的桶數進行縮減,形成新的哈希表,有效釋放了未被利用的內存空間。
本發明實施例通過統計待測哈希表中哈希節點的數量,然后根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,并當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表,來實現處理網絡流量分析的方法。這樣通過調節哈希表的桶數,使得新的哈希表能夠主動適應網絡流量的需求,當網絡流量增加時,可以擴充哈希表的桶數,以提高新的哈希表的性能,當網絡流量降低時,可以縮減哈希表的桶數,以釋放被占據但未被利用的內存空間,將更多的閑置內存釋放給操作系統,從整體上提高現有軟件的處理性能。
實施例二
本發明實施例提供了一種處理網絡流量分析的裝置,采用了實施例一所述的處理網絡流量分析的方法,參見圖6,該裝置可以包括:
統計模塊100,用于統計待測哈希表中哈希節點的數量,待測哈希表包括與哈希表中每個哈希值對應建立的一個沖突鏈表。
在本實施例中,現有的處理網絡流量分析的方法,會將網絡中的數據包還原成數據連接,在數據連接的基礎上再進行上層的分析業務。哈希表是種數據結構,它可以提供快速的插入操作和查找操作,其在各類網絡流量分析軟件中常常被應用到。
需要說明的是,本實施例中的待測哈希表采用的是鏈地址法來處理哈希沖突的,即對哈希表中每個哈希值(即關鍵字通過哈希函數計算得到的用于儲存數據的散列地址)建立一個沖突鏈表,將發生沖突的數據連接以鏈表的形式存儲在其中。此外,待測哈希表在建立之初,會為哈希表的哈希桶申請連續內存。哈希桶是使用一個順序表來存放具有相同哈希值的關鍵字的鏈表的頭節點,利用這個頭節點可以找到其它的關鍵字。
在實際應用中,可以在哈希表的數據結構中,設置哈希節點的計數器,來統計哈希表中哈希節點的數量,即每回有新插入哈希節點時,計數器中統計數量增加。
判斷模塊200,用于根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,哈希節點使用上限為哈希節點利用率上限與當前哈希表的桶數的乘積,哈希節點使用率下限為哈希節點利用率下限與當前哈希表的桶數的乘積。
在本實施例中,哈希表的桶數是指哈希表中哈希桶的數量。哈希桶是使用一個順序表來存放具有相同哈希值的關鍵字的鏈表的頭節點,利用這個頭節點可以找到其它的關鍵字。
處理模塊300,用于當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表。
具體地,判斷模塊200,還用于根據統計到的哈希節點數量是否超過哈希節點使用上限,或者,統計到的哈希節點數量是否低于哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整。
在本實施例中,當統計到的哈希節點的數量超過哈希節點使用上限時,說明該待測哈希表不能滿足現在的網絡流量,發生哈希碰撞的幾率大增,對應處理網絡流量分析的效率大幅下降,此時,應該根據預設的規則,增大哈希表的桶數,重新設定符合需要的哈希表;當統計到的哈希節點的數量低于哈希節點使用下限時,說明該待測哈希表有許多未利用的內存空間,此時,應該根據預設的規則,減小哈希表的桶數,釋放那些長期占有但未被利用的內存空間,從整體上提高現有軟件的處理性能。
進一步地,處理模塊300,還用于當統計到的哈希節點數量超過哈希節點使用上限時,從預設的素數序列中,選取相對較大的素數作為新哈希表的桶數,重新建立哈希表。
在本實施例中,當統計到的哈希節點數量超過哈希節點使用上限時,需要對哈希桶進行擴充,重新申請連續的內存用于新的哈希桶,新哈希表的桶數是預設素數序列中的下一個相對較大的素數(現有哈希表的桶數也是從預設的素數序列中選取的)。然后遍歷舊的哈希表,將舊哈希表的所有哈希節點重新插入到新的哈希表中,并為新的哈希表設置計算新的哈希節點使用上、下限。完成后銷毀舊哈希表,釋放舊的哈希桶內存。
處理模塊300,還用于當統計到的哈希節點數量低于哈希節點使用下限時,從預設的素數序列中,選取相對較小的素數作為新哈希表的桶數,重新建立哈希表。
在本實施例中,當統計到的哈希節點數量低于哈希節點使用下限時,需要對哈希桶進行縮減,根據預設的素數序列向數值變小的方向進行選取,直到統計的哈希節點數量大于新的哈希節點使用下限(該新的哈希節點使用下限為哈希節點利用率下限與新選取的哈希桶數的乘積),即縮減時允許跳級縮減。重新申請連續內存用于新的哈希表,然后遍歷舊的哈希表,將舊哈希表的所有節點重新插入到新的哈希表中,并為新的哈希設置計算新的哈希節點使用上、下限。完成后銷毀舊哈希表,釋放舊的哈希桶內存。
此外,刪除哈希節點時,減少哈希節點計數器中統計數字,進行刪除操作,但是不進行任何的哈希表擴充和縮減操作。原因是,對哈希表的使用經常需要遍歷節點,如類似刪除所有超時節點的操作,如果在遍歷節點過程中發生哈希縮減,此時舊的哈希表已經被釋放了,會導致嚴重的內存錯誤。
進一步地,預設的素數序列中每個素數均大于其相鄰前一個素數的2倍。
在本實施例中,要求哈希桶的數字序列是一個素數的序列,因為在實際處理環境下,如果輸入的哈希值具備某種規律,如大量的等差數列,那么公差和模數不互質的時候發生碰撞的概率會變大,而用素數就可以很大程度上回避這個問題,使得哈希表可以避免一些局部的性能熱點。
進一步地,哈希節點利用率下限小于哈希節點利用率上限的一半,可以避免頻繁的重建新的哈希表。
本發明實施例通過統計待測哈希表中哈希節點的數量,然后根據預設的哈希節點使用上限和哈希節點使用下限,來判斷待測哈希表的桶數是否需要調整,并當判斷待測哈希表的桶數需要調整時,根據預設規則調整哈希表的桶數,重新建立哈希表。這樣通過調節哈希表的桶數,使得新的哈希表能夠主動適應網絡流量的需求,當網絡流量增加時,可以擴充哈希表的桶數,以提高新的哈希表的性能,當網絡流量降低時,可以縮減哈希表的桶數,以釋放被占據但未被利用的內存空間,將更多的閑置內存釋放給操作系統,從整體上提高現有軟件的處理性能。
上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。
需要說明的是:上述實施例提供的處理網絡流量分析的裝置在實現處理網絡流量分析的方法時,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將設備的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的處理網絡流量分析的裝置與處理網絡流量的分析方法實施例屬于同一構思,其具體實現過程詳見方法實施例,這里不再贅述。
本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。