本發明涉及數據處理領域,具體而言,涉及一種表項處理方法及裝置。
背景技術:
在防火墻、路由器、網關等網絡設備,需要創建大規格的(session)會話表或者連接信息表,轉發表等,在高端網絡設備上,這些表項需要多達幾百萬條,甚至上千萬條目,來支持大量用戶的并發上網和控制需求。出于資源回收再利用和安全控制的目的,需要一種超時機制將超出限定時段不活動的表項刪除,將資源回收用于新連接的服務或者斷開連接。
常用的表項老化機制是計時器超時機制,在創建表項時動態啟動一個對應的計時器,設置超時時間,為了避免長期活動的連接表項被多次超時重新創建,在連接活動期內如果計時器超時,通常進行計時器的重置,保持連接表項不被老化刪除。但是,計時器超時機制需要一個高效的計時器隊列管理算法,能夠快速插入新建計時器,能夠快速查找到超時的計時器,故該問題轉換為一個高效排序算法,經典算法包括時間車輪算法(timer wheel),最小堆算法(min heap),快跳表算法(fast skip)等等。所有這些算法都面臨在大量計時器需要管理時的效率問題,隨著計時器隊列的增長,在具有上百萬,上千萬個計時器的隊列中新建和重置計時器的查找計算量巨大,一個計時器的新建或者重置計算量甚至占到整個轉發處理流程的一半以上,嚴重影響了轉發性能。
另一種表項老化機制是定期主動遍歷掃描表格,找出需要老化的條目進行老化,判別依據通常也是不活動時段超出設置時間,同時,為了避免每次掃描大量表項導致定期轉發丟包或者新建速率下降,將整表劃分成幾個邏輯區間,每次掃描的表項限定在一個區間內,經過幾個周期完成整張表的遍歷。此機制的問題在于掃描間隔長短難于定量,若掃描間隔太短則增加不必要的計算量,若掃描間隔太長又使條目得不到及時老化,影響資源重復利用,而且設備中通常具有數張大規格的表項都需要老化機制,全部定期遍歷,增加了許多不必要的計算量。
技術實現要素:
有鑒于此,本發明實施例的目的在于提供一種表項處理方法及裝置。
第一方面,本發明實施例提供一種表項處理方法,所述方法包括:根據接收報文的頭信息,生成接收報文對應的識別號;根據所述識別號,查找所述識別號對應的表項鏈表;將所述表項鏈表中的第一個表項作為當前表項,判斷所述接收報文對應的識別號是否與所述當前表項對應的識別號相匹配;若匹配,判斷所述當前表項是否需要老化;若所述當前表項需要老化,則更新所述當前表項中的表項字段及當前表項對應的更新時間;若所述當前表項不需要老化,則更新所述當前表項對應的更新時間;若不匹配,判斷所述當前表項是需要老化;若所述當前表項需要老化,則將所述當前表項刪除,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢;若所述當前表項不需要老化,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢。
第二方面,本發明實施例提供一種表項處理裝置,所述裝置包括:生成模塊,用于根據接收報文的頭信息,生成接收報文對應的識別號;查找模塊,用于根據所述識別號,查找所述識別號對應的表項鏈表;判斷模塊,用于將所述表項鏈表中的第一個表項作為當前表項,判斷所述接收報文對應的識別號是否與所述當前表項對應的識別號相匹配;第一處理模塊,用于若匹配,判斷所述當前表項是否需要老化;若所述當前表項需要老化,則更新所述當前表項中的表項字段及當前表項對應的更新時間;若所述當前表項不需要老化,則更新所述當前表項對應的更新時間;第二處理模塊,用于若不匹配,判斷所述當前表項是需要老化;若所述當前表項需要老化,則將所述當前表項刪除,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢;若所述當前表項不需要老化,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢。
與現有技術相比,本發明實施例提供的一種表項處理方法及裝置,根據接收報文的頭信息,生成接收報文對應的識別號,并進一步查找所述識別號對應的表項鏈表,將所述表項鏈表中的第一個表項作為當前表項,判斷接收報文對應的識別號是否與當前表項對應的識別號相匹配;若匹配,判斷當前表項是否需要老化;若當前表項需要老化,則更新當前表項中的表項字段及當前表項對應的更新時間;若當前表項不需要老化,則更新當前表項對應的更新時間;若不匹配,判斷當前表項是需要老化;若當前表項需要老化,則將當前表項刪除,將表項鏈表中的下一個表項作為當前表項,直至表項鏈表中全部表項遍歷完畢;若當前表項不需要老化,將表項鏈表中的下一個表項作為當前表項,直至表項鏈表中全部表項遍歷完畢,在這種方式下,實現了在查找表項的過程中完成對表項的老化判別,避免大規模計時器隊列管理的計算量,并且減少了定期遍歷帶來的無用開銷,能夠提升轉發性能,提高設備吞吐量。
為使本發明的上述目的、特征和優點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他相關的附圖。
圖1是本發明實施例提供的終端設備之間交互的示意圖。
圖2是本發明實施例提供的終端設備的結構框圖。
圖3是本發明實施例提供的一種表項處理方法的流程圖。
圖4是本發明實施例提供的一種表項處理裝置的功能模塊示意圖。
具體實施方式
下面將結合本發明實施例中附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發明實施例的組件可以以各種不同的配置來布置和設計。因此,以下對在附圖中提供的本發明的實施例的詳細描述并非旨在限制要求保護的本發明的范圍,而是僅僅表示本發明的選定實施例。基于本發明的實施例,本領域技術人員在沒有做出創造性勞動的前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。同時,在本發明的描述中,術語“第一”、“第二”等僅用于區分描述,而不能理解為指示或暗示相對重要性或時間先后。
圖1示出了本發明實施例提供的多個終端設備之間進行交互的示意圖。多個所述終端設備(圖中所示101至103)之間通過網絡200進行通信連接,以進行數據通信或交互。所述終端設備(圖中所示101至103)可以是路由器,交換機,防火墻,網關等網絡設備。
如圖2所示,是所述終端設備(圖中所示101至103)的方框示意圖。所述終端設備包括存儲器110、處理器120以及網絡模塊130。
存儲器110可用于存儲軟件程序以及模塊,如本發明實施例中的表項處理方法及裝置對應的程序指令/模塊,處理器120通過運行存儲在存儲器110內的軟件程序以及模塊,從而執行各種功能應用以及數據處理,即實現本發明實施例中的應用專題推薦方法。存儲器110可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態存儲器。
網絡模塊130用于接收以及發送網絡信號。上述網絡信號可包括無線信號或者有線信號。
可以理解,圖2所示的結構僅為示意,所述終端設備還可包括比圖2中所示更多或者更少的組件,或者具有與圖2所示不同的配置。圖2中所示的各組件可以采用硬件、軟件或其組合實現。
圖3示出了本發明實施例提供的一種表項處理方法的流程圖,請參閱圖3,本實施例描述的是終端設備的處理流程,所述方法包括:
步驟S301,根據接收報文的頭信息,生成接收報文對應的識別號。
對于不同類型的接收報文,可以根據接收報文的頭信息中的不同部分來生成接收報文對應的識別號。
例如,對于不同類型的接收報文,可以根據接收報文的頭信息中的四元組、五元組、或七元組來生成接收報文對應的識別號。其中,四元組包括:源IP地址、目的IP地址、源端口、目的端口;五元組包括:源IP地址、目的IP地址、協議號、源端口、目的端口;七元組包括:源IP地址、目的IP地址、協議號、源端口、目的端口、服務類型、接口索引。
生成接收報文對應的識別號的實施方式也有多種,例如,可以根據接收報文的頭信息中的四元組、五元組、或七元組生成一個識別號,或者分配為接收報文的頭信息中的四元組、五元組、或七元組預分配一個識別號,根據接收報文的頭信息中的四元組、五元組、或七元組,查詢對應的識別號。
步驟S302,根據所述識別號,查找所述識別號對應的表項鏈表。
將所述識別號作為Hash算法中的Key值,對該Key值進行Hash運算,得到hash值,查找此hash值對應的表項鏈表,將此hash值對應的表項鏈表作為所述識別號對應的表項鏈表。其中,Hash算法的實施方式也有多種,例如,MD5算法(Message-Digest Algorithm 5,摘要算法),CRC32算法(Cyclic Redundancy Check 32,循環冗余校驗算法),SHA算法(Secure Hash Algorithm,安全散列算法)等,此處就不再贅述。
可以理解的是,由于Hash算法會出現沖突,因此,對于不同的接收報文的頭信息生成的Key值,可能會出現經過Hash算法運算后會產生相同的hash值,可以將對應相同hash值的表項關聯起來,形成一條表項鏈表(即hash桶),并與所述相同hash值對應起來,通過查找所述標識號的hash值,即可以獲得與所述識別號對應的表項鏈表。
所述表項鏈表上的表項,可以是會話表表項,連接信息表項,轉發表項等。
步驟S303,將所述表項鏈表中的第一個表項作為當前表項,判斷所述接收報文對應的識別號是否與所述當前表項對應的識別號相匹配。
可以理解的是,當獲取到此表項鏈表時,由于此表項鏈表上的表項對應的識別號可能與接收報文對應的識別號不同,需要將接收報文對應的識別號與當前表項對應的識別號進行匹配查找。
若所述接收報文對應的識別號是否與所述當前表項對應的識別號相匹配,執行步驟S304;否則,執行步驟S307。
步驟S304,判斷當前表項是否需要老化。
作為一種實施方式,可以通過判斷當前時刻與當前表項對應的更新時間之間的時間間隔是否大于預設閾值來判斷當前表項是否需要老化。其中,若當前時刻與當前表項對應的更新時間之間的時間間隔大于預設閾值,則判定當前表項需要老化。
其中,當前表項對應的更新時間為所述當前表項上一次更新的時間,也就是說,對于當前表項而言,每一次進行更新,都將當前表項對應的更新時間更新為當前時刻,則對于當前獲取到的當前表項對應的更新時間而言,即為當前表項上一次更新的時間。可以理解的是,當前時刻與當前表項對應的更新時間之間的時間間隔,即為當前表項相鄰兩次活躍的時間間隔,通過所述時間間隔是否大于預設閾值,即可以判斷當前表項是否需要老化。
若所述當前表項需要老化,執行步驟S305;否則,執行步驟S306。
步驟S305,更新所述當前表項中的表項字段及當前表項對應的更新時間。
當前表項中的表項字段是上一次根據接收報文計算的,此時由于通過計算判斷出當前表項相鄰兩次活躍的時間間隔大于預設閾值,此時需要根據接收報文重新計算轉發路徑等字段,并根據計算結果,更新所述當前表項中的表項字段,并進一步的,將當前表項對應的更新時間更新為當前時刻。
考慮到若重新開啟一個線程專門用于根據接收報文重新計算轉發路徑等字段,則更利于資源管理并且不影響接收報文的轉發速度,作為一種實施方式,將所述報文發送到更新模塊(即更新線程),以使所述更新模塊根據所述報文計算所述報文對應的轉發路徑等字段,并根據計算出的所述報文對應的表項字段,更新當前表項中的表項字段。
步驟S306,更新所述當前表項對應的更新時間。
若當前表項不需要老化,則只需要將當前表項對應的更新時間更新為當前時刻即可。
步驟S307,判斷當前表項是否需要老化。
若所述接收報文對應的識別號與當前表項對應的識別號不匹配,此時也需要判斷當前表項是否需要老化,判斷當前表項是否需要老化的實施方式與步驟S304的實施方式相同,此處不再贅述。
若所述當前表項需要老化,執行步驟S308;否則,執行步驟S309。
步驟S308,將所述當前表項刪除,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢。
考慮到若重新開啟一個線程專門用于對需要老化的當前表項進行刪除,則更利于資源管理并且不影響接收報文的轉發速度,作為一種實施方式,發送老化消息到老化模塊,以使所述老化模塊將所述當前表項刪除。
當將當前表項刪除后,將所述表項鏈表中的下一個表項作為所述當前表項,重復步驟S303,繼續判斷接收報文對應的識別號是否與所述當前表項對應的識別號相匹配,并進行后續操作,直至所述表項鏈表中全部表項遍歷完畢。
當遍歷完表項鏈表,仍未匹配到接收報文對應的識別號,也就是說當前表項鏈表上沒有所述識別號對應的表項(可能是一直沒有,也可能是由于之前的老化判斷刪除了),因此,可以將所述識別號對應的表項加入所述表項鏈表中,以表示所述識別號對應的表項活躍起來。作為一種實施方式,在直至所述表項鏈表中全部表項遍歷完畢之后,所述方法還包括:創建所述接收報文對應的表項,并將所述接收報文對應的表項加入到所述識別號對應的表項鏈表。
考慮到若重新開啟一個線程專門用于創建新的表項,則更利于資源管理并且不影響接收報文的轉發速度,作為一種實施方式,可以發送創建消息到創建模塊,以使所述創建模塊創建所述接收報文對應的表項。
步驟S309,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢。
若當前表項不需要老化,則將所述表項鏈表中的下一個表項作為所述當前表項,重復步驟S303,繼續判斷接收報文對應的識別號是否與所述當前表項對應的識別號相匹配,并進行后續操作,直至所述表項鏈表中全部表項遍歷完畢。
同理,作為一種實施方式,在直至所述表項鏈表中全部表項遍歷完畢之后,所述方法還包括:創建所述接收報文對應的表項,并將所述接收報文對應的表項加入到所述識別號對應的表項鏈表。
進一步的,考慮到若重新開啟一個線程專門用于創建新的表項,則更利于資源管理并且不影響接收報文的轉發速度,作為一種實施方式,可以發送創建消息到創建模塊,以使所述創建模塊創建所述接收報文對應的表項。
進一步的,考慮到有些表項鏈表的命中率較低,即可能出現表項鏈表(即hash桶)分布不均勻,導致有些hash桶為空,其他hash桶掛載了所有可用表項,并且已經長時間沒有不活躍了,屬于非活躍表項,應該被老化,但是沒有報文觸發遍歷這些hash桶,所以也無從在遍歷時判別是否需要老化。因此,優選的,所述方法還包括:定時遍歷多個表項鏈表,判斷各個表項鏈表中的各個表項是否需要老化,若需要,則將需要老化的表項刪除。優選的,定時遍歷的周期可以設置較長,使得不會頻繁觸發定時遍歷,或者,將定時遍歷設置在終端設備的閑時,這樣在遍歷時就不會影響終端設備的正常工作。通過這種方式,能夠更加進一步能夠提升轉發性能,提高設備吞吐量。
優選的,也可以在終端設備中預留一些內存,用來作為應急資源,創建一些空表項,當當前資源不夠用時,將預留內存釋放出來,能夠編碼新建表項失敗。通過這種方式,也能夠更加進一步能夠提升轉發性能,提高設備吞吐量。
本發明實施例提供的一種表項處理方法,根據接收報文的頭信息,生成接收報文對應的識別號,并進一步查找所述識別號對應的表項鏈表,將所述表項鏈表中的第一個表項作為當前表項,判斷接收報文對應的識別號是否與當前表項對應的識別號相匹配;若匹配,判斷當前表項是否需要老化;若當前表項需要老化,則更新當前表項中的表項字段及當前表項對應的更新時間;若當前表項不需要老化,則更新當前表項對應的更新時間;若不匹配,判斷當前表項是需要老化;若當前表項需要老化,則將當前表項刪除,將表項鏈表中的下一個表項作為當前表項,直至表項鏈表中全部表項遍歷完畢;若當前表項不需要老化,將表項鏈表中的下一個表項作為當前表項,直至表項鏈表中全部表項遍歷完畢,在這種方式下,實現了在查找表項的過程中完成對表項的老化判別,避免大規模計時器隊列管理的計算量,并且減少了定期遍歷帶來的無用開銷,能夠提升轉發性能,提高設備吞吐量。
請參閱圖4,是本發明實施例提供的一種表項處理裝置400的功能模塊示意圖。所述表項處理裝置400運行于終端設備(圖1中所示101至103)中。所述表項處理裝置400包括:生成模塊410、查找模塊420、判斷模塊430、第一處理模塊440、以及第二處理模塊450。
生成模塊410,用于根據接收報文的頭信息,生成接收報文對應的識別號。
查找模塊420,用于根據所述識別號,查找所述識別號對應的表項鏈表。
判斷模塊430,用于將所述表項鏈表中的第一個表項作為當前表項,判斷所述接收報文對應的識別號是否與所述當前表項對應的識別號相匹配。
作為一種實施方式,判斷模塊430,具體用于判斷當前時刻與當前表項對應的更新時間之間的時間間隔是否大于預設閾值,若是,則判定當前表項需要老化。
第一處理模塊440,用于若匹配,判斷所述當前表項是否需要老化;若所述當前表項需要老化,則更新所述當前表項中的表項字段及當前表項對應的更新時間;若所述當前表項不需要老化,則更新所述當前表項對應的更新時間。
作為一種實施方式,第一處理模塊440,具體用于將所述報文發送到更新模塊,以使所述更新模塊根據所述報文計算所述報文對應的表項字段,并根據計算出的所述報文對應的表項字段,更新當前表項中的表項字段。
第二處理模塊450,用于若不匹配,判斷所述當前表項是需要老化;若所述當前表項需要老化,則將所述當前表項刪除,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢;若所述當前表項不需要老化,將所述表項鏈表中的下一個表項作為所述當前表項,直至所述表項鏈表中全部表項遍歷完畢。
作為一種實施方式,第二處理模塊450,具體用于發送消息到老化模塊,以使所述老化模塊將所述當前表項刪除。
作為一種實施方式,所述裝置還包括第三處理模塊460,用于定時遍歷多個表項鏈表,判斷各個表項鏈表中的各個表項是否需要老化,若需要,則將需要老化的表項刪除。
作為一種實施方式,所述裝置還包括第四處理模塊470,用于創建所述接收報文對應的表項,并將所述接收報文對應的表項加入到所述識別號對應的表項鏈表。
進一步的,第四處理模塊470,具體用于發送消息到創建模塊,以使所述創建模塊創建所述接收報文對應的表項。
以上各模塊可以是由軟件代碼實現,也同樣可以由硬件例如集成電路芯片實現。
需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本發明實施例所提供的表項處理裝置,其實現原理及產生的技術效果和前述方法實施例相同,為簡要描述,裝置實施例部分未提及之處,可參考前述方法實施例中相應內容。
在本申請所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,也可以通過其它的方式實現。以上所描述的裝置實施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據本發明的多個實施例的裝置、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現方式中,方框中所標注的功能也可以以不同于附圖中所標注的順序發生。例如,兩個連續的方框實際上可以基本并行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或動作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。
另外,在本發明各個實施例中的各功能模塊可以集成在一起形成一個獨立的部分,也可以是各個模塊單獨存在,也可以兩個或兩個以上模塊集成形成一個獨立的部分。
所述功能如果以軟件功能模塊的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
以上所述僅為本發明的優選實施例而已,并不用于限制本發明,對于本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。
以上所述,僅為本發明的具體實施方式,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應所述以權利要求的保護范圍為準。