本申請涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種管理索引表的方法及裝置。
背景技術(shù):
在現(xiàn)有技術(shù)中,使用哈希表來實(shí)現(xiàn)快速查找表項(xiàng)。當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,根據(jù)該報文的哈希值對應(yīng)的結(jié)點(diǎn)(該結(jié)點(diǎn)下配置有固定數(shù)量的索引表),匹配對應(yīng)的索引表,若沒有匹配到對應(yīng)的索引表,則收集必要的轉(zhuǎn)發(fā)信息,生成會話轉(zhuǎn)發(fā)表項(xiàng),并在該結(jié)點(diǎn)下查找出一個可用的索引表,將上述會話轉(zhuǎn)發(fā)表項(xiàng)的指針存儲在該可用的索引表中,以用于后續(xù)的報文轉(zhuǎn)發(fā)操作。
然而,索引表的數(shù)量是有限的,當(dāng)轉(zhuǎn)發(fā)設(shè)備接收到大量五元組不同的報文,且哈希表中不存在與這些報文對應(yīng)的索引表時,由于在同一結(jié)點(diǎn)下(不同的五元組計算出同一哈希值),一個五元組對應(yīng)于一個索引表,所以如果不同的五元組(計算出的哈希值相同)的數(shù)量超過該結(jié)點(diǎn)下索引表的數(shù)量,就會導(dǎo)致沒有可用的索引表來存儲對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,進(jìn)一步導(dǎo)致當(dāng)后續(xù)轉(zhuǎn)發(fā)設(shè)備接收相同的報文時,不能快速查找到對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),進(jìn)而極大降低了轉(zhuǎn)發(fā)設(shè)備對報文的轉(zhuǎn)發(fā)效率。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請?zhí)峁┮环N管理索引表的方法及裝置,可以解決當(dāng)轉(zhuǎn)發(fā)設(shè)備接收到大量五元組不同的報文,且哈希表中不存在與這些報文對應(yīng)的索引表時,由于沒有可用的索引表來存儲對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,導(dǎo)致降低了轉(zhuǎn)發(fā)設(shè)備對報文的轉(zhuǎn)發(fā)效率的問題。
為實(shí)現(xiàn)上述目的,本申請?zhí)峁┘夹g(shù)方案如下:
根據(jù)本申請的第一方面,提出了一種管理索引表的方法,應(yīng)用于轉(zhuǎn)發(fā)設(shè)備,所述轉(zhuǎn)發(fā)設(shè)備維護(hù)了包含固定數(shù)量靜態(tài)索引表的第一哈希表,以及包含不定數(shù)量動態(tài)索引表的第二哈希表;其中,所述靜態(tài)索引表和所述動態(tài)索引表中記錄了對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針;所述方法包括:
當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,根據(jù)所述報文的哈希值對應(yīng)的結(jié)點(diǎn),分別在所述第一哈希表和所述第二哈希表中匹配對應(yīng)的靜態(tài)索引表和動態(tài)索引表;
當(dāng)沒有匹配到對應(yīng)的靜態(tài)索引表和動態(tài)索引表時,生成對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng);
若所述第一哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下,所有靜態(tài)索引表均已處于不可用的狀態(tài),則在所述第二哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下創(chuàng)建動態(tài)索引表,并在創(chuàng)建的動態(tài)索引表中記錄所述報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
根據(jù)本申請的第二方面,提出了一種管理索引表的裝置,應(yīng)用于轉(zhuǎn)發(fā)設(shè)備,所述轉(zhuǎn)發(fā)設(shè)備維護(hù)了包含固定數(shù)量靜態(tài)索引表的第一哈希表,以及包含不定數(shù)量動態(tài)索引表的第二哈希表;其中,所述靜態(tài)索引表和所述動態(tài)索引表中記錄了對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針;所述裝置包括:
匹配單元,當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,根據(jù)所述報文的哈希值對應(yīng)的結(jié)點(diǎn),分別在所述第一哈希表和所述第二哈希表中匹配對應(yīng)的靜態(tài)索引表和動態(tài)索引表;
生成單元,當(dāng)沒有匹配到對應(yīng)的靜態(tài)索引表和動態(tài)索引表時,生成對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng);
創(chuàng)建單元,若所述第一哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下,所有靜態(tài)索引表均已處于不可用的狀態(tài),則在所述第二哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下創(chuàng)建動態(tài)索引表,并在創(chuàng)建的動態(tài)索引表中記錄所述報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
由以上技術(shù)方案可見,本申請通過在轉(zhuǎn)發(fā)設(shè)備中配置包含固定數(shù)量靜態(tài)索引表的第一哈希表,以及包含不定數(shù)量動態(tài)索引表的第二哈希表,當(dāng)?shù)谝还1碇心骋唤Y(jié)點(diǎn)下的靜態(tài)索引表都已經(jīng)記錄了相應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的指針,但此時存在將其他會話轉(zhuǎn)發(fā)表項(xiàng)的指針記錄于該結(jié)點(diǎn)下的需求時,可以通過在第二哈希表的對應(yīng)結(jié)點(diǎn)下創(chuàng)建動態(tài)索引表并記錄相應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,從而在滿足了上述需求的同時,可以確??偸谴嬖诳捎玫乃饕韥泶鎯?yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,有助于提升轉(zhuǎn)發(fā)設(shè)備對報文的轉(zhuǎn)發(fā)效率。
附圖說明
圖1是相關(guān)技術(shù)中利用索引表記錄對應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的指針,以及后續(xù)查找該會話轉(zhuǎn)發(fā)表項(xiàng)過程的示意圖。
圖2是相關(guān)技術(shù)中將索引表置為可用狀態(tài)的過程的流程圖。
圖3是相關(guān)技術(shù)中將索引表置為可用狀態(tài)的示意圖。
圖4是本申請一示例性實(shí)施例提供的一種管理索引表的方法的流程圖。
圖5是本申請一示例性實(shí)施例提供的動態(tài)索引表的創(chuàng)建過程的示意圖。
圖6是本申請一示例性實(shí)施例提供的刪除動態(tài)索引表的過程的流程圖。
圖7是本申請一示例性實(shí)施例提供的刪除動態(tài)索引表的示意圖。
圖8是本申請一示例性實(shí)施例提供的一種電子設(shè)備的結(jié)構(gòu)示意圖。
圖9是本申請一示例性實(shí)施例提供的一種管理索引表的裝置的框圖。
具體實(shí)施方式
這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
圖1是相關(guān)技術(shù)中利用索引表記錄對應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的指針,以及后續(xù)查找該會話轉(zhuǎn)發(fā)表項(xiàng)過程的示意圖。如圖1所示,當(dāng)轉(zhuǎn)發(fā)設(shè)備初始化時,預(yù)申請分配連續(xù)的內(nèi)存作為哈希表的儲存空間,假定該哈希表中包含N個結(jié)點(diǎn),為Node0~NodeN-1,并且每個結(jié)點(diǎn)下固定包含4個索引表。當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,根據(jù)該報文的五元組(源IP地址,源端口,目的IP地址,目的端口和傳輸層協(xié)議)計算哈希值,按照該哈希值匹配對應(yīng)的結(jié)點(diǎn)(每一結(jié)點(diǎn)分別存在對應(yīng)的哈希值,例如結(jié)點(diǎn)Node1對應(yīng)于哈希值1,那么當(dāng)上述報文的五元組計算出的哈希值為1時,表明匹配到結(jié)點(diǎn)Node1);以結(jié)點(diǎn)Node1為例,分別根據(jù)該結(jié)點(diǎn)Node1下的各個索引表記錄的相應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的指針,查找是否存在與該報文的五元組對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)。
當(dāng)不存在與該報文的五元組對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)時,轉(zhuǎn)發(fā)設(shè)備收集該報文的五元組、所做業(yè)務(wù)等必要的轉(zhuǎn)發(fā)信息,生成會話轉(zhuǎn)發(fā)表項(xiàng),然后在結(jié)點(diǎn)Node1下從索引表1開始依次往下查找可用的索引表(假定索引表1和索引表2已經(jīng)記錄了相應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的指針,即索引表1和索引表2為不可用的狀態(tài);而索引表3中未記錄指針時,該索引表3為可用的狀態(tài));假定查找到索引表3為可用狀態(tài),可以在索引表3與該報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)之間互相記錄對方的指針,使該索引表3從可用狀態(tài)切換至不可用狀態(tài),并且該索引表3可用于后續(xù)的報文轉(zhuǎn)發(fā)操作。例如,當(dāng)轉(zhuǎn)發(fā)設(shè)備后續(xù)轉(zhuǎn)發(fā)具有相同五元組信息的報文時,可以通過該報文的五元組計算出哈希值1匹配到結(jié)點(diǎn)Node1,再根據(jù)該報文的五元組在結(jié)點(diǎn)Node1下匹配到索引表3對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),即可按照該會話轉(zhuǎn)發(fā)表項(xiàng)對該報文進(jìn)行轉(zhuǎn)發(fā)。
由于每個結(jié)點(diǎn)下的索引表數(shù)量有限,比如上述實(shí)施例中每個結(jié)點(diǎn)下僅固定包含4個索引表,以避免長期占用大量內(nèi)存,因而需要及時對各個索引表進(jìn)行狀態(tài)變更。比如,當(dāng)任一會話轉(zhuǎn)發(fā)表項(xiàng)在預(yù)設(shè)老化時間內(nèi)未被使用時,該任一會話轉(zhuǎn)發(fā)表項(xiàng)會被及時刪除,使得與該會話轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的索引表會被置為可用狀態(tài)。請參見圖2,將索引表置為可用狀態(tài)的過程可以包括以下步驟:
步驟201,遍歷會話轉(zhuǎn)發(fā)表中的所有表項(xiàng)。
步驟202,判斷是否達(dá)到刪除條件,若達(dá)到則轉(zhuǎn)入步驟203,否則轉(zhuǎn)入步驟201。
其中,若在預(yù)設(shè)老化時間內(nèi)轉(zhuǎn)發(fā)設(shè)備未利用任一會話轉(zhuǎn)發(fā)表項(xiàng)轉(zhuǎn)發(fā)報文,則需要刪除該任一表項(xiàng);若在預(yù)設(shè)老化時間內(nèi)轉(zhuǎn)發(fā)設(shè)備利用了該任一會話轉(zhuǎn)發(fā)表項(xiàng)轉(zhuǎn)發(fā)報文,則不需要刪除該任一表項(xiàng)。
步驟203,將對應(yīng)的索引表置為可用狀態(tài),然后轉(zhuǎn)入步驟201。
其中,根據(jù)需要刪除的會話轉(zhuǎn)發(fā)表項(xiàng)中記錄的指針,將對應(yīng)的索引表置為可用的狀態(tài),即刪除索引表中的指針,該索引表在后續(xù)需要記錄指針的時候可以使用。
舉例而言,請參見圖3,假定在預(yù)設(shè)老化時間內(nèi)轉(zhuǎn)發(fā)設(shè)備未利用圖3中的會話轉(zhuǎn)發(fā)表項(xiàng)轉(zhuǎn)發(fā)報文,該會話轉(zhuǎn)發(fā)表項(xiàng)將被刪除,從而根據(jù)該會話轉(zhuǎn)發(fā)表項(xiàng)中記錄的指針查詢到索引表3,將索引表3置為可用狀態(tài),即刪除索引表3中該會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
可見,在相關(guān)技術(shù)中,通過對索引表的狀態(tài)進(jìn)行及時切換,可以在一定程度內(nèi)確保對索引表的有效復(fù)用,以及對報文收發(fā)的有效支持。但是,當(dāng)轉(zhuǎn)發(fā)設(shè)備同時或短時間內(nèi)接收到大量五元組不同的報文,且哈希表中不存在與這些報文對應(yīng)的索引表時,由于在同一結(jié)點(diǎn)下(不同的五元組計算出同一哈希值),一個五元組對應(yīng)于一個索引表,所以如果不同的五元組(計算出的哈希值相同)的數(shù)量超過該結(jié)點(diǎn)下索引表的數(shù)量,就會導(dǎo)致沒有可用的索引表來存儲對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,只能等待該結(jié)點(diǎn)下的索引表通過諸如圖2所示的實(shí)施例進(jìn)行狀態(tài)變更,導(dǎo)致大量報文無法通過索引表快速查找對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),極大降低了轉(zhuǎn)發(fā)設(shè)備對報文的轉(zhuǎn)發(fā)效率。
圖4是本申請一示例性實(shí)施例示出的一種管理索引表的方法的流程圖,如圖1所示,該方法應(yīng)用于轉(zhuǎn)發(fā)設(shè)備,所述轉(zhuǎn)發(fā)設(shè)備維護(hù)了包含固定數(shù)量靜態(tài)索引表的第一哈希表,以及包含不定數(shù)量動態(tài)索引表的第二哈希表;其中,所述靜態(tài)索引表和所述動態(tài)索引表中記錄了對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,該方法可以包括以下步驟:
步驟401,當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,根據(jù)所述報文的哈希值對應(yīng)的結(jié)點(diǎn),分別在所述第一哈希表和所述第二哈希表中匹配對應(yīng)的靜態(tài)索引表和動態(tài)索引表。
在本實(shí)施例中,可以優(yōu)先在所述第一哈希表中匹配靜態(tài)索引表,并當(dāng)在所述第一哈希表中沒有匹配到對應(yīng)的靜態(tài)索引表時,進(jìn)一步在所述第二哈希表中匹配對應(yīng)的動態(tài)索引表。
在本實(shí)施例中,可以通過循環(huán)遍歷所述第二哈希表中的所有動態(tài)索引表,確定被置為可用狀態(tài)的動態(tài)索引表,例如當(dāng)任一會話轉(zhuǎn)發(fā)表項(xiàng)在預(yù)設(shè)老化時長內(nèi)未被使用時,刪除所述任一會話轉(zhuǎn)發(fā)表項(xiàng),并將所述任一會話轉(zhuǎn)發(fā)表項(xiàng)的指針從所屬動態(tài)索引表中刪除,以使得所述所屬動態(tài)索引表被置為可用狀態(tài)。然后,可以通過刪除被置為可用狀態(tài)的動態(tài)索引表,以及時釋放相應(yīng)的內(nèi)存空間,避免對大量內(nèi)存空間的長期占用,防止影響轉(zhuǎn)發(fā)設(shè)備的性能。
步驟402,當(dāng)沒有匹配到對應(yīng)的靜態(tài)索引表和動態(tài)索引表時,生成對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)。
步驟403,若所述第一哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下,所有靜態(tài)索引表均已處于不可用的狀態(tài),則在所述第二哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下創(chuàng)建動態(tài)索引表,并在創(chuàng)建的動態(tài)索引表中記錄所述報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
在本實(shí)施例中,當(dāng)沒有匹配到對應(yīng)的靜態(tài)索引表和動態(tài)索引表時,若所述第一哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下,存在處于可用狀態(tài)的靜態(tài)索引表,則可以使用所述處于可用狀態(tài)的靜態(tài)索引表記錄所述報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
由以上技術(shù)方案可見,本申請通過在轉(zhuǎn)發(fā)設(shè)備中配置包含固定數(shù)量靜態(tài)索引表的第一哈希表,以及包含不定數(shù)量動態(tài)索引表的第二哈希表,當(dāng)?shù)谝还1碇心骋唤Y(jié)點(diǎn)下的靜態(tài)索引表都已經(jīng)記錄了相應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的指針,而此時需要在該結(jié)點(diǎn)下再記錄其他會話轉(zhuǎn)發(fā)表項(xiàng)的指針時,在第二哈希表的對應(yīng)結(jié)點(diǎn)下創(chuàng)建動態(tài)索引表來記錄相應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,解決了由于沒有可用的索引表來存儲對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針,導(dǎo)致降低了轉(zhuǎn)發(fā)設(shè)備對報文的轉(zhuǎn)發(fā)效率的問題。
為了便于理解,下面結(jié)合圖5-7對本申請的技術(shù)方案進(jìn)行詳細(xì)說明。
圖5是本申請一示例性實(shí)施例的動態(tài)索引表的創(chuàng)建過程的示意圖。如圖5所示,當(dāng)轉(zhuǎn)發(fā)設(shè)備初始化時,預(yù)申請分配連續(xù)的第一部分內(nèi)存,作為第一哈希表的儲存空間,以及預(yù)申請分配連續(xù)的第二部分內(nèi)存,作為第二哈希表的儲存空間。其中,第一哈希表相當(dāng)于圖1所示相關(guān)技術(shù)中的哈希表,該第一哈希表中包含若干結(jié)點(diǎn)如Node0~NodeN-1,且每一結(jié)點(diǎn)下包含固定數(shù)量的靜態(tài)索引表;而第二哈希表中包含與第一哈希表中相同數(shù)量的結(jié)點(diǎn),且結(jié)點(diǎn)的序號也相同,比如也為Node0~NodeN-1。
當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文(假定依次接收到報文a、報文b、報文c、報文d)時,根據(jù)報文的五元組計算哈希值(假定報文a的哈希值為0,報文b的哈希值為0,報文c的哈希值為3,報文d的哈希值為4),根據(jù)報文對應(yīng)的結(jié)點(diǎn)(報文a對應(yīng)于結(jié)點(diǎn)Node0,報文b對應(yīng)于結(jié)點(diǎn)Node0,報文c對應(yīng)于結(jié)點(diǎn)Node3,報文d對應(yīng)于結(jié)點(diǎn)Node4),優(yōu)先在第一哈希表中匹配對應(yīng)的靜態(tài)索引表,即根據(jù)相應(yīng)結(jié)點(diǎn)下的靜態(tài)索引表對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),確定是否存在匹配于當(dāng)前報文的會話轉(zhuǎn)發(fā)表項(xiàng)(當(dāng)存在匹配于當(dāng)前報文的會話轉(zhuǎn)發(fā)表項(xiàng)時,表明相應(yīng)的靜態(tài)索引表匹配于該當(dāng)前報文,否則表明不匹配);當(dāng)在第一哈希表中沒有匹配到對應(yīng)的靜態(tài)索引表時,進(jìn)一步在第二哈希表中匹配對應(yīng)的動態(tài)索引表。按照先第一哈希表后第二哈希表的匹配順序,可以保證轉(zhuǎn)發(fā)設(shè)備快速查找到相應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)(靜態(tài)索引表的數(shù)量是固定的,而動態(tài)索引表的數(shù)量是不定的,大部分情況下,由于同一結(jié)點(diǎn)下動態(tài)索引表被刪除,第一哈希表內(nèi)相同結(jié)點(diǎn)下的靜態(tài)索引表的數(shù)量,會多于第二哈希表內(nèi)相同結(jié)點(diǎn)下動態(tài)索引表的數(shù)量,即第一哈希表內(nèi)相同結(jié)點(diǎn)下所記錄的會話轉(zhuǎn)發(fā)表項(xiàng)的數(shù)量,會多于第二哈希表內(nèi)相同結(jié)點(diǎn)下所記錄的會話轉(zhuǎn)發(fā)表項(xiàng)的數(shù)量),從而不影響到轉(zhuǎn)發(fā)設(shè)備對報文的正常轉(zhuǎn)發(fā)。
此時,假定在第一哈希表中沒有匹配到與結(jié)點(diǎn)Node0、結(jié)點(diǎn)Node3、結(jié)點(diǎn)Node4對應(yīng)的靜態(tài)索引表,在第二哈希表中也沒有匹配到與結(jié)點(diǎn)Node0、結(jié)點(diǎn)Node3、結(jié)點(diǎn)Node4對應(yīng)的動態(tài)索引表,那么,收集報文a、報文b、報文c、報文d的必要轉(zhuǎn)發(fā)信息,分別存儲在會話轉(zhuǎn)發(fā)表項(xiàng)1(對應(yīng)于報文a)、會話轉(zhuǎn)發(fā)表項(xiàng)2(對應(yīng)于報文b)、會話轉(zhuǎn)發(fā)表項(xiàng)3(對應(yīng)于報文c)、會話轉(zhuǎn)發(fā)表項(xiàng)4(對應(yīng)于報文d)中。
假定,在第一哈希表中,結(jié)點(diǎn)Node0和結(jié)點(diǎn)Node3下的所有靜態(tài)索引表都不可用(即都記錄了相應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針),結(jié)點(diǎn)Node4下還存在可用的靜態(tài)索引表,按照上述相關(guān)技術(shù),在第一哈希表的結(jié)點(diǎn)Node4下,將會話轉(zhuǎn)發(fā)表項(xiàng)4的指針存儲在可用的靜態(tài)索引表中(例如靜態(tài)索引表4),進(jìn)而完成利用靜態(tài)索引表記錄會話轉(zhuǎn)發(fā)表項(xiàng)4的指針的過程。而由于第一哈希表的結(jié)點(diǎn)Node0和結(jié)點(diǎn)Node3下的所有靜態(tài)索引表都不可用,所以在第一哈希表中,沒有可用的靜態(tài)索引表來存儲會話轉(zhuǎn)發(fā)表項(xiàng)1-3的指針。
當(dāng)?shù)谝还1碇袥]有可用的靜態(tài)索引表來存儲會話轉(zhuǎn)發(fā)表項(xiàng)1-3的指針時,先在第二哈希表的結(jié)點(diǎn)Node0下,先創(chuàng)建動態(tài)索引表1,該動態(tài)索引表1用于存儲會話轉(zhuǎn)發(fā)表項(xiàng)1的指針(因?yàn)檗D(zhuǎn)發(fā)設(shè)備最先接收到報文a),并將該動態(tài)索引表1掛到以結(jié)點(diǎn)Node0為表頭的鏈表上,然后,再創(chuàng)建動態(tài)索引表2,該動態(tài)索引表2用于存儲會話轉(zhuǎn)發(fā)表項(xiàng)2的指針,并將該動態(tài)索引表2掛在動態(tài)索引表1之后;接著,在動態(tài)哈希表的結(jié)點(diǎn)Node3下,創(chuàng)建動態(tài)索引表3,該動態(tài)索引表3用于存儲會話轉(zhuǎn)發(fā)表項(xiàng)3的指針,并將該動態(tài)索引表3掛到以結(jié)點(diǎn)Node3為表頭的鏈表上。而當(dāng)后續(xù)轉(zhuǎn)發(fā)設(shè)備在第二哈希表中對應(yīng)結(jié)點(diǎn)下匹配對應(yīng)的動態(tài)索引表時,按照以該結(jié)點(diǎn)為表頭的鏈表結(jié)構(gòu),從前向后依次匹配。例如,當(dāng)轉(zhuǎn)發(fā)設(shè)備在第二哈希表的結(jié)點(diǎn)Node0下匹配對應(yīng)的動態(tài)索引表時,從動態(tài)索引表1開始依次往后匹配。
當(dāng)轉(zhuǎn)發(fā)設(shè)備后續(xù)轉(zhuǎn)發(fā)與報文a具有相同五元組信息的報文時,優(yōu)先在第一哈希表中,可以通過該報文的五元組計算出哈希值0匹配到結(jié)點(diǎn)Node0,再根據(jù)該報文的五元組在結(jié)點(diǎn)Node0下匹配各個靜態(tài)索引表對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),此時,由于第一哈希表中并不包含與該報文五元組對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)(即會話轉(zhuǎn)發(fā)表項(xiàng)1),所以不能匹配到對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),于是,進(jìn)一步在第二哈希表的結(jié)點(diǎn)Node0下,按照以結(jié)點(diǎn)Node0為表頭的鏈表結(jié)構(gòu),從動態(tài)索引表1開始依次往后匹配,此時轉(zhuǎn)發(fā)設(shè)備可以匹配到與動態(tài)索引表1對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)1,進(jìn)而根據(jù)該會話轉(zhuǎn)發(fā)表項(xiàng)1記錄的轉(zhuǎn)發(fā)信息轉(zhuǎn)發(fā)該報文。
當(dāng)轉(zhuǎn)發(fā)設(shè)備后續(xù)轉(zhuǎn)發(fā)與報文b具有相同五元組信息的報文時,其匹配過程,與上述匹配與報文a具有相同五元組信息的報文的會話轉(zhuǎn)發(fā)表項(xiàng)的過程類似。最終轉(zhuǎn)發(fā)設(shè)備可以在第二哈希表的結(jié)點(diǎn)Node0下,匹配到動態(tài)索引表2對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)2,進(jìn)而根據(jù)該會話轉(zhuǎn)發(fā)表項(xiàng)2記錄的轉(zhuǎn)發(fā)信息轉(zhuǎn)發(fā)該報文。
當(dāng)轉(zhuǎn)發(fā)設(shè)備后續(xù)轉(zhuǎn)發(fā)與報文c具有相同五元組信息的報文時,優(yōu)先在第一哈希表中,可以通過該報文的五元組計算出哈希值3匹配到結(jié)點(diǎn)Node3,再根據(jù)該報文的五元組在結(jié)點(diǎn)Node3下匹配各個靜態(tài)索引表對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),此時,由于第一哈希表中并不包含與該報文五元組對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)(即會話轉(zhuǎn)發(fā)表項(xiàng)3),所以不能匹配到對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),于是,進(jìn)一步在第二哈希表的結(jié)點(diǎn)Node3下,按照以結(jié)點(diǎn)Node3為表頭的鏈表結(jié)構(gòu),從動態(tài)索引表3開始依次往后匹配,此時轉(zhuǎn)發(fā)設(shè)備可以匹配到與動態(tài)索引表3對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)3,進(jìn)而根據(jù)該會話轉(zhuǎn)發(fā)表項(xiàng)3記錄的轉(zhuǎn)發(fā)信息轉(zhuǎn)發(fā)該報文。
當(dāng)轉(zhuǎn)發(fā)設(shè)備后續(xù)轉(zhuǎn)發(fā)與報文d具有相同五元組信息的報文時,優(yōu)先在第一哈希表中,可以通過該報文的五元組計算出哈希值4匹配到結(jié)點(diǎn)Node4,再根據(jù)該報文的五元組在結(jié)點(diǎn)Node4下,從靜態(tài)索引表1開始,依次匹配各個靜態(tài)索引表對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng),最終,轉(zhuǎn)發(fā)設(shè)備匹配到靜態(tài)索引表4對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)4,進(jìn)而根據(jù)該會話轉(zhuǎn)發(fā)表項(xiàng)4記錄的轉(zhuǎn)發(fā)信息轉(zhuǎn)發(fā)該報文。
在本實(shí)施例中,第二哈希表中的動態(tài)索引表不是一直存在的,當(dāng)任一動態(tài)索引表對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)被老化刪除時,該任一動態(tài)索引表也會被刪除。此處結(jié)合圖6所示的流程圖,詳細(xì)描述刪除動態(tài)索引表的過程。請參見圖6,刪除動態(tài)索引表的過程可以包括以下步驟:
步驟601,遍歷第二哈希表中的所有動態(tài)索引表。
步驟602,判斷動態(tài)索引表是否被置為可用狀態(tài),若被置為可用狀態(tài)了,則轉(zhuǎn)入步驟603,否則轉(zhuǎn)入步驟601。
在本實(shí)施例中,當(dāng)?shù)诙1碇腥我粍討B(tài)索引表對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)在預(yù)設(shè)老化時間內(nèi)未被使用時,該會話轉(zhuǎn)發(fā)表項(xiàng)將被刪除,該任一動態(tài)索引表被置為可用狀態(tài)。
步驟603,刪除被置為可用狀態(tài)的動態(tài)索引表,然后轉(zhuǎn)入步驟601。
在本實(shí)施例中,以圖7為例,假定在預(yù)設(shè)老化時間內(nèi)轉(zhuǎn)發(fā)設(shè)備未利用圖7中的會話轉(zhuǎn)發(fā)表項(xiàng)2轉(zhuǎn)發(fā)報文,會話轉(zhuǎn)發(fā)表項(xiàng)2將被刪除,而根據(jù)會話轉(zhuǎn)發(fā)表項(xiàng)2中記錄的指針,可以查詢到動態(tài)索引表2,并刪除該動態(tài)索引表2。
通過循環(huán)遍歷第二哈希表中的所有動態(tài)索引表,及時查找并刪除被置為可用狀態(tài)的動態(tài)索引表,可使這些動態(tài)索引表占用的內(nèi)存空間被及時釋放,并使得第二哈希表內(nèi)同時存在的動態(tài)索引表得到數(shù)量控制,防止大量的動態(tài)索引表導(dǎo)致長期占用大量的內(nèi)存空間,避免影響轉(zhuǎn)發(fā)設(shè)備的運(yùn)行性能。
綜上所述,第一哈希表中靜態(tài)索引表與相應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的對應(yīng)關(guān)系,和第二哈希表中動態(tài)索引表與相應(yīng)會話轉(zhuǎn)發(fā)表項(xiàng)的對應(yīng)關(guān)系相同,即均是通過互相記錄對方的指針來將對方與自身聯(lián)系起來,從而保證了當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,可以正常查找到相應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)。
圖8示出了根據(jù)本申請的一示例性實(shí)施例的電子設(shè)備的示意結(jié)構(gòu)圖。請參考圖8,在硬件層面,該電子設(shè)備包括處理器802、內(nèi)部總線804、網(wǎng)絡(luò)接口806、內(nèi)存808以及非易失性存儲器810,當(dāng)然還可能包括其他業(yè)務(wù)所需要的硬件。處理器802從非易失性存儲器810中讀取對應(yīng)的計算機(jī)程序到內(nèi)存802中然后運(yùn)行,在邏輯層面上形成管理索引表的裝置。當(dāng)然,除了軟件實(shí)現(xiàn)方式之外,本申請并不排除其他實(shí)現(xiàn)方式,比如邏輯器件抑或軟硬件結(jié)合的方式等等,也就是說以下處理流程的執(zhí)行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。
請參考圖9,在軟件實(shí)施方式中,該管理索引表的裝置可以包括匹配單元901、生成單元902、創(chuàng)建單元903、確定單元904、刪除單元905和記錄單元906。其中:
匹配單元901,當(dāng)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)接收到的報文時,根據(jù)所述報文的哈希值對應(yīng)的結(jié)點(diǎn),分別在所述第一哈希表和所述第二哈希表中匹配對應(yīng)的靜態(tài)索引表和動態(tài)索引表;
生成單元902,當(dāng)沒有匹配到對應(yīng)的靜態(tài)索引表和動態(tài)索引表時,生成對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng);
創(chuàng)建單元903,若所述第一哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下,所有靜態(tài)索引表均已處于不可用的狀態(tài),則在所述第二哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下創(chuàng)建動態(tài)索引表,并在創(chuàng)建的動態(tài)索引表中記錄所述報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
可選的,還包括:
確定單元904,通過循環(huán)遍歷所述第二哈希表中的所有動態(tài)索引表,確定被置為可用狀態(tài)的動態(tài)索引表;
刪除單元905,刪除被置為可用狀態(tài)的動態(tài)索引表。
可選的,所述確定單元904具體用于:
當(dāng)任一會話轉(zhuǎn)發(fā)表項(xiàng)在預(yù)設(shè)老化時長內(nèi)未被使用時,刪除所述任一會話轉(zhuǎn)發(fā)表項(xiàng),并將所述任一會話轉(zhuǎn)發(fā)表項(xiàng)的指針從所屬動態(tài)索引表中刪除,以使得所述所屬動態(tài)索引表被置為可用狀態(tài)。
可選的,所述匹配單元901具體用于:
優(yōu)先在所述第一哈希表中匹配靜態(tài)索引表;
當(dāng)在所述第一哈希表中沒有匹配到對應(yīng)的靜態(tài)索引表時,進(jìn)一步在所述第二哈希表中匹配對應(yīng)的動態(tài)索引表。
可選的,還包括:
記錄單元906,當(dāng)沒有匹配到對應(yīng)的靜態(tài)索引表和動態(tài)索引表時,若所述第一哈希表中對應(yīng)于所述報文的哈希值的結(jié)點(diǎn)下,存在處于可用狀態(tài)的靜態(tài)索引表,則使用所述處于可用狀態(tài)的靜態(tài)索引表記錄所述報文對應(yīng)的會話轉(zhuǎn)發(fā)表項(xiàng)的指針。
上述裝置中各個單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
對于裝置實(shí)施例而言,由于其基本對應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。
以上所述僅為本申請的較佳實(shí)施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請保護(hù)的范圍之內(nèi)。