網(wǎng)絡(luò)交換機(jī)設(shè)備中的準(zhǔn)確匹配哈希查找數(shù)據(jù)庫(kù)的制作方法
【專利摘要】本發(fā)明的各實(shí)施例涉及網(wǎng)絡(luò)交換機(jī)設(shè)備中的準(zhǔn)確匹配哈希查找數(shù)據(jù)庫(kù)。在一種用于在網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)發(fā)包的方法中,基于查找關(guān)鍵字生成多個(gè)哈希值。多個(gè)哈希值至少包括使用第一哈希函數(shù)生成的第一哈希值、使用第二哈希函數(shù)生成的第二哈希值和使用第三哈希函數(shù)生成的第三哈希值。第三哈希函數(shù)不同于第一哈希函數(shù)和第二哈希函數(shù)。使用第一哈希值和第二哈希值搜索查找表以確定用于查找關(guān)鍵字的偏移。然后,使用第三哈希值和為查找關(guān)鍵字確定的偏移搜索轉(zhuǎn)發(fā)表以選擇與查找關(guān)鍵字對(duì)應(yīng)的轉(zhuǎn)發(fā)條目?;谶x擇的轉(zhuǎn)發(fā)條目向網(wǎng)絡(luò)設(shè)備的一個(gè)或者多個(gè)端口轉(zhuǎn)發(fā)包。
【專利說(shuō)明】網(wǎng)絡(luò)交換機(jī)設(shè)備中的準(zhǔn)確匹配哈希查找數(shù)據(jù)庫(kù)
[0001] 相關(guān)申請(qǐng)的奪叉引用
[0002] 本申請(qǐng)要求對(duì)通過(guò)完全引用將其公開內(nèi)容明確地結(jié)合于此、于2013年4月4日提 交、名稱為"Exact Match Hash Algorithm For Very Large Table in Switches"的第 61/808,323號(hào)美國(guó)臨時(shí)申請(qǐng)的優(yōu)先權(quán)。
【技術(shù)領(lǐng)域】
[0003] 本公開內(nèi)容總體上涉及網(wǎng)絡(luò)設(shè)備,并且更具體地涉及網(wǎng)絡(luò)設(shè)備中的哈希查找表。
【背景技術(shù)】
[0004] 這里提供的背景描述是出于總體上呈現(xiàn)公開內(nèi)容的背景的目的。當(dāng)前具名的發(fā)明 人的工作在【背景技術(shù)】這一節(jié)中描述的程度上以及該描述的可能在提交時(shí)未以其他方式符 合現(xiàn)有技術(shù)的方面既未被明示地也未被暗示地承認(rèn)為針對(duì)本公開內(nèi)容的現(xiàn)有技術(shù)。
[0005] 網(wǎng)絡(luò)設(shè)備(比如網(wǎng)絡(luò)交換機(jī)、路由器、邊緣設(shè)備等)經(jīng)常運(yùn)用如下查找表,這些查 找表存儲(chǔ)與由網(wǎng)絡(luò)設(shè)備處理的包關(guān)聯(lián)的各種信息,并且網(wǎng)絡(luò)設(shè)備在查找表中執(zhí)行查找以用 于在網(wǎng)絡(luò)設(shè)備處理包期間做出各種處理判決。例如,可以執(zhí)行查找操作以用于包分類、轉(zhuǎn)發(fā) 判決、服務(wù)質(zhì)量分類、策略控制列表應(yīng)用和一般由網(wǎng)絡(luò)設(shè)備執(zhí)行的其他處理操作。一般而 言,根據(jù)與包關(guān)聯(lián)的或者為包生成的關(guān)鍵字執(zhí)行對(duì)于包的查找。關(guān)鍵字例如被用來(lái)搜索表, 并且從由表中的由關(guān)鍵字標(biāo)識(shí)的條目取回與包相關(guān)的信息(例如,用于包的轉(zhuǎn)發(fā)信息)。
[0006] 使用內(nèi)容可尋址存儲(chǔ)器(CAM)來(lái)實(shí)施一些查找表。基于CAM的表一般允許通常在 單個(gè)比較循環(huán)中比較向表提供的關(guān)鍵字與表的所有條目,并且返回指示哪些條目與關(guān)鍵字 匹配的結(jié)果。然而,尤其在運(yùn)用大規(guī)模查找表時(shí),基于CAM的表一般在面積和功率消耗方面 成本高。
[0007] 查找表的備選實(shí)現(xiàn)方式利用基于哈希的方案,在該方案中,將哈希函數(shù)應(yīng)用于關(guān) 鍵字以確定哈希表中的其中存儲(chǔ)關(guān)鍵字和與關(guān)鍵字關(guān)聯(lián)的信息(例如,轉(zhuǎn)發(fā)信息)的位置。 盡管哈希表與CAM實(shí)現(xiàn)方式相比一般更小并且更高效,但是哈希表在哈希函數(shù)為向哈希函 數(shù)提供的兩個(gè)或者更多不同關(guān)鍵字生成相同哈希值時(shí)表現(xiàn)固有沖突,并且作為結(jié)果,無(wú)法 向哈希表中插入向哈希表提供的一些關(guān)鍵字。因此,即使關(guān)鍵字可以與條目匹配,對(duì)于向哈 希表提供的一些關(guān)鍵字的查找操作仍然不會(huì)產(chǎn)生匹配。因此,難以在運(yùn)用哈希表時(shí)實(shí)現(xiàn)準(zhǔn) 確匹配查找性能。
【發(fā)明內(nèi)容】
[0008] 在一個(gè)實(shí)施例中,一種用于在網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)發(fā)包的方法包括在哈希值生成器并且 基于與包對(duì)應(yīng)的查找關(guān)鍵字生成多個(gè)哈希值,至少包括使用第一哈希函數(shù)生成第一哈希 值、使用第二哈希函數(shù)生成第二哈希值和使用第三哈希函數(shù)生成第三哈希值,第三哈希函 數(shù)不同于第一哈希函數(shù)和第二哈希函數(shù)。該方法也包括使用第一哈希值和第二哈希值搜索 查找表以確定用于查找關(guān)鍵字的偏移,以及使用第三哈希值和為查找關(guān)鍵字確定的偏移搜 索轉(zhuǎn)發(fā)表以選擇與查找關(guān)鍵字對(duì)應(yīng)的轉(zhuǎn)發(fā)條目。該方法還包括基于選擇的轉(zhuǎn)發(fā)條目向網(wǎng)絡(luò) 設(shè)備的一個(gè)或者多個(gè)端口轉(zhuǎn)發(fā)包。
[0009] 在另一實(shí)施例中,一種用于在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)包的網(wǎng)絡(luò)設(shè)備包括多個(gè)端口和耦合到多 個(gè)端口的包處理器,包處理器被配置用于向多個(gè)端口中的一個(gè)或者多個(gè)適當(dāng)端口傳送經(jīng)由 多個(gè)端口中的至少一些端口接收的包。包處理器包括:哈希值生成器,被配置用于基于與包 對(duì)應(yīng)的查找關(guān)鍵字生成多個(gè)哈希值,多個(gè)哈希值至少包括使用第一哈希函數(shù)生成的第一哈 希值、使用第二哈希函數(shù)生成的第二哈希值和使用第三哈希函數(shù)生成的第三哈希值,第三 哈希函數(shù)不同于第一哈希函數(shù)和第二哈希函數(shù)。包處理器也包括耦合到查找表和轉(zhuǎn)發(fā)表的 查找單元。查找單元被配置用于使用第一哈希值和第二哈希值搜索查找表以確定用于查找 關(guān)鍵字的偏移,以及使用第三哈希值和為查找關(guān)鍵字確定的偏移搜索轉(zhuǎn)發(fā)表以選擇與查找 關(guān)鍵字對(duì)應(yīng)的轉(zhuǎn)發(fā)條目。包處理器還包括被配置用于基于選擇的轉(zhuǎn)發(fā)條目向多個(gè)端口中的 一個(gè)或者多個(gè)端口轉(zhuǎn)發(fā)包的轉(zhuǎn)發(fā)引擎。
[0010] 在又另一實(shí)施例中,一種用于在網(wǎng)絡(luò)設(shè)備中填充轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)的方法包括在哈希值 生成器并且基于查找關(guān)鍵字生成與包對(duì)應(yīng)的多個(gè)哈希值,至少包括使用第一哈希函數(shù)生成 第一哈希值、使用第二哈希函數(shù)生成第二哈希值和使用第三哈希函數(shù)生成第三哈希值,第 三哈希函數(shù)不同于第一哈希函數(shù)和第二哈希函數(shù)。該方法也包括用網(wǎng)絡(luò)設(shè)備并且至少基于 第一哈希值和第二哈希值為查找關(guān)鍵字確定進(jìn)入轉(zhuǎn)發(fā)表的偏移。該方法還包括用網(wǎng)絡(luò)設(shè)備 并且基于第三哈希值和偏移確定轉(zhuǎn)發(fā)表中的用于插入查找關(guān)鍵字的位置。該方法還包括用 網(wǎng)絡(luò)設(shè)備確定是否可以在確定的位置向轉(zhuǎn)發(fā)表中插入查找關(guān)鍵字而未與在確定的位置先 前存儲(chǔ)的關(guān)鍵字沖突。該方法還包括在確定可以向轉(zhuǎn)發(fā)表中插入查找關(guān)鍵字時(shí),在確定的 位置向轉(zhuǎn)發(fā)表中插入查找關(guān)鍵字和與查找關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息。
[0011] 在再一實(shí)施例中,一種用于在網(wǎng)絡(luò)設(shè)備中填充轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)的裝置包括:哈希值生 成器,被配置用于基于查找關(guān)鍵字生成多個(gè)哈希值,至少包括使用第一哈希函數(shù)生成的第 一哈希值、使用第二哈希函數(shù)生成的第二哈希值和使用第三哈希函數(shù)生成的第三哈希值, 第三哈希函數(shù)不同于第一哈希函數(shù)和第二哈希函數(shù)。該裝置也包括:更新單元,被配置用 于:至少基于第一哈希值和第二哈希值為查找關(guān)鍵字確定進(jìn)入轉(zhuǎn)發(fā)表的偏移,以及基于第 三哈希值和為查找關(guān)鍵字確定的偏移確定轉(zhuǎn)發(fā)表中的用于插入查找關(guān)鍵字的位置。更新單 元也被配置用于確定是否可以在確定的位置向轉(zhuǎn)發(fā)表中插入查找關(guān)鍵字而未與在確定的 位置先前存儲(chǔ)的關(guān)鍵字沖突、并且在確定可以向轉(zhuǎn)發(fā)表中插入查找關(guān)鍵字時(shí),在確定的位 置向轉(zhuǎn)發(fā)表中插入查找關(guān)鍵字和與查找關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息。
【專利附圖】
【附圖說(shuō)明】
[0012] 圖1是根據(jù)本公開內(nèi)容的一個(gè)實(shí)施例的能夠使用多哈希函數(shù)方案高效解決基于 哈希的查找數(shù)據(jù)庫(kù)中的沖突的示例切換設(shè)備的簡(jiǎn)化框圖;
[0013] 圖2圖不根據(jù)一個(gè)實(shí)施例的查找表的不例條目;
[0014] 圖3A-圖3B是圖示根據(jù)一個(gè)實(shí)施例的用于在數(shù)據(jù)庫(kù)中對(duì)查找關(guān)鍵字定位并且從 數(shù)據(jù)庫(kù)取回與查找關(guān)鍵字關(guān)聯(lián)的信息的示例查找方案的流程圖;
[0015] 圖4A-圖4B是圖示根據(jù)一個(gè)實(shí)施例的用于向數(shù)據(jù)庫(kù)中插入查找關(guān)鍵字和與查找 關(guān)鍵字關(guān)聯(lián)的信息的示例更新方案400的流程圖;
[0016] 圖4C是圖示根據(jù)一個(gè)實(shí)施例的與圖4A-圖4B的更新技術(shù)結(jié)合實(shí)施的沖突解決方 案的流程圖;
[0017] 圖5A-圖5B是圖示根據(jù)一個(gè)示例實(shí)施例的應(yīng)用于數(shù)據(jù)庫(kù)表的條目重排技術(shù)的示 圖;
[0018] 圖6是根據(jù)一個(gè)實(shí)施例的用于在網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)發(fā)包的示例方法的流程圖;
[0019] 圖7是根據(jù)一個(gè)實(shí)施例的用于在網(wǎng)絡(luò)設(shè)備中填充轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)的示例方法的流程 圖。
【具體實(shí)施方式】
[0020] 圖1是根據(jù)本公開內(nèi)容的一個(gè)實(shí)施例的能夠使用多哈希函數(shù)方案高效解決基于 哈希的查找數(shù)據(jù)庫(kù)中的沖突的示例切換設(shè)備100的簡(jiǎn)化框圖。切換設(shè)備100 -般是連接兩 個(gè)或者更多計(jì)算機(jī)系統(tǒng)、網(wǎng)絡(luò)段、子網(wǎng)等的計(jì)算機(jī)聯(lián)網(wǎng)設(shè)備。例如,在一個(gè)實(shí)施例中,切換設(shè) 備100是路由器。然而,注意,切換設(shè)備100未必限于特定協(xié)議層或者特定聯(lián)網(wǎng)技術(shù)(例如, 以太網(wǎng))。例如,切換設(shè)備100也可以是橋接器、VPN集中器等。
[0021] 切換設(shè)備100包括耦合到多個(gè)端口 112的包處理器102,并且端口 112中的每個(gè) 端口耦合到通信網(wǎng)絡(luò)(例如,通信網(wǎng)絡(luò)內(nèi)的網(wǎng)絡(luò)設(shè)備)。一般而言,包處理器102被配置用 于處理經(jīng)由入站端口 112接收的包、確定應(yīng)當(dāng)經(jīng)由其傳輸包的相應(yīng)出戰(zhàn)端口 112并且經(jīng)由 確定的出站端口 112傳輸包。在一些實(shí)施例中,包處理器102被配置用于在入站端口 112 接收包、在存儲(chǔ)器中存儲(chǔ)包、在包存儲(chǔ)于存儲(chǔ)器中之時(shí)執(zhí)行包的處理、確定應(yīng)當(dāng)經(jīng)由其傳輸 包的一個(gè)或者多個(gè)出站端口 112并且在做出轉(zhuǎn)發(fā)判決之后從存儲(chǔ)器取回包并且經(jīng)由該一 個(gè)或者多個(gè)出站端口 112傳輸包。在一些實(shí)施例中,包處理器102為包生成包描述符,并且 包描述符而不是包本身隨后由包處理器102處理。在一個(gè)實(shí)施例中,包描述符包括來(lái)自包 的一些信息,比如包的頭部信息中的一些或者所有頭部信息。在一些實(shí)施例中,包描述符附 加地包括其他信息,比如包在存儲(chǔ)器中存儲(chǔ)于何處的指示符。為了易于說(shuō)明,下文使用術(shù)語(yǔ) "包"以指代包本身或者與包關(guān)聯(lián)的包描述符。
[0022] 包處理器102包括耦合到轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)105的轉(zhuǎn)發(fā)引擎104。在一個(gè)實(shí)施例中,轉(zhuǎn)發(fā) 數(shù)據(jù)庫(kù)105存儲(chǔ)在與連接到端口 112的網(wǎng)絡(luò)設(shè)備對(duì)應(yīng)的目的地地址(例如,介質(zhì)訪問(wèn)控制 (MAC)地址、網(wǎng)際協(xié)議(IP)地址、VLAN、多播地址等)與網(wǎng)絡(luò)設(shè)備連接到的特定端口 112之 間的關(guān)聯(lián)。根據(jù)一個(gè)實(shí)施例,轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)105包括轉(zhuǎn)發(fā)表106、查找表107和內(nèi)容可尋址存 儲(chǔ)器(CAM)108(例如,二進(jìn)制CAM(BCAM)或者三進(jìn)制CAM(TCAM))。在一個(gè)實(shí)施例中,轉(zhuǎn)發(fā) 表106被實(shí)施為基于查找關(guān)鍵字生成的由哈希值編索引的哈希表(如這里使用的術(shù)語(yǔ)"關(guān) 鍵字"和"查找關(guān)鍵字"可互換)。由于哈希值一般比查找關(guān)鍵字更短,所以在兩個(gè)或者更 多查找關(guān)鍵字之間的沖突可能在哈希函數(shù)為該兩個(gè)或者更多查找關(guān)鍵字生成相同哈希值 時(shí)產(chǎn)生。在這樣的系統(tǒng)中,由于在哈希成相同哈希值的不同關(guān)鍵字之間的沖突而無(wú)法向哈 希表中插入一些查找關(guān)鍵字,因此,未充分利用一些哈希表。在各種實(shí)施例中,轉(zhuǎn)發(fā)引擎104 被配置用于利用為每個(gè)查找關(guān)鍵字生成的多個(gè)哈希值以解決轉(zhuǎn)發(fā)表106中的沖突,由此提 高轉(zhuǎn)發(fā)表106的存儲(chǔ)器利用率。
[0023] 根據(jù)一個(gè)實(shí)施例,轉(zhuǎn)發(fā)引擎104被配置用于使用三個(gè)不同哈希函數(shù)為每個(gè)查找關(guān) 鍵字生成三個(gè)哈希值,并且有選擇地利用該三個(gè)哈希值以確定在轉(zhuǎn)發(fā)表106中存儲(chǔ)查找關(guān) 鍵字的存儲(chǔ)器位置。在這一實(shí)施例中,第一哈希值HI用來(lái)訪問(wèn)查找表107以標(biāo)識(shí)查找表107 中的與第一哈希值對(duì)應(yīng)的條目。第二哈希值H2用來(lái)從查找表107的標(biāo)識(shí)的條目中的與第 一哈希值關(guān)聯(lián)的一個(gè)或者多個(gè)偏移選擇偏移。選擇的偏移然后被應(yīng)用于第三哈希值H3以 確定用于訪問(wèn)轉(zhuǎn)發(fā)表106的索引,并且取回在確定的索引存儲(chǔ)的轉(zhuǎn)發(fā)條目。由于為查找關(guān) 鍵字生成的第三哈希值用來(lái)對(duì)轉(zhuǎn)發(fā)表106編索引,其中根據(jù)與用來(lái)為查找關(guān)鍵字生成第一 哈希值和第二哈希值的哈希函數(shù)不同的哈希函數(shù)生成第三哈希值,所以在查找關(guān)鍵字未共 享相同第三哈希值時(shí)的至少一些情形中避免了在哈希成相同第一哈希值和相同第二哈希 值的不同查找關(guān)鍵字之間的沖突。另外,由于操作表107在至少一些情形中關(guān)聯(lián)多個(gè)偏移 與第一哈希值,所以在至少一些情形中,即使在哈希成相同第一哈希值的不同關(guān)鍵字哈希 成第三相同關(guān)鍵字時(shí),仍然在該不同關(guān)鍵字之間避免了沖突。附加地,在一些實(shí)施例中,在 其中查找表107無(wú)法解決在哈希成相同第一哈希值的不同關(guān)鍵字之間的沖突的情形中,例 如,在存儲(chǔ)于轉(zhuǎn)發(fā)表106中的這樣的關(guān)鍵字的數(shù)目超過(guò)由查找表107的條目支持的最大偏 移數(shù)目時(shí),如以下將更具體說(shuō)明的那樣,仍然使用默認(rèn)偏移來(lái)向轉(zhuǎn)發(fā)表106中插入這樣的 關(guān)鍵字。
[0024] 由于這里描述的這些和其他沖突解決技術(shù),在至少一些實(shí)施例中,與不能解決這 樣的沖突的已知系統(tǒng)相比,一般提高了數(shù)據(jù)庫(kù)利用率。例如,在一些實(shí)施例中,本公開內(nèi)容 的查找關(guān)鍵字插入技術(shù)促成提高的如通過(guò)"第一未命中"標(biāo)準(zhǔn)測(cè)量的存儲(chǔ)器利用率。第一未 命中標(biāo)準(zhǔn)一般被定義為基于哈希的數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)中遇到關(guān)鍵字的第一未命中插入時(shí)的 利用率(即存儲(chǔ)于數(shù)據(jù)庫(kù)中的條目相對(duì)于由數(shù)據(jù)庫(kù)支持的最大條目數(shù)目的百分比)。因而, 等于或者接近100%的根據(jù)第一未命中標(biāo)準(zhǔn)的存儲(chǔ)器利用率產(chǎn)生高度地利用并且高效的基 于哈希的數(shù)據(jù)庫(kù)。在至少一些實(shí)施例中,這里描述的多哈希值數(shù)據(jù)庫(kù)結(jié)構(gòu)極大地提高如通 過(guò)第一未命中標(biāo)準(zhǔn)測(cè)量的存儲(chǔ)器利用率。附加地,在一些實(shí)施例中,也提高了如通過(guò)其他適 當(dāng)標(biāo)準(zhǔn)(比如存儲(chǔ)器容量標(biāo)準(zhǔn)(或者與由數(shù)據(jù)庫(kù)支持的最大條目數(shù)目對(duì)應(yīng)的、由多個(gè)嘗試 的插入產(chǎn)生的成功插入的百分比))測(cè)量的存儲(chǔ)器利用率。應(yīng)當(dāng)注意,根據(jù)一個(gè)實(shí)施例,轉(zhuǎn) 發(fā)條目的取回僅需用于從查找表107取回偏移的第一存儲(chǔ)器訪問(wèn)和用于從轉(zhuǎn)發(fā)表106取回 轉(zhuǎn)發(fā)條目的第二存儲(chǔ)器訪問(wèn)這兩個(gè)存儲(chǔ)器訪問(wèn)。作為結(jié)果,通過(guò)使對(duì)存儲(chǔ)器的訪問(wèn)數(shù)目限 于相對(duì)小的訪問(wèn)數(shù)目(例如,2個(gè)),與需要更大數(shù)目的存儲(chǔ)器訪問(wèn)以取回關(guān)鍵字的已知多 哈希數(shù)據(jù)庫(kù)相比,這里描述的技術(shù)允許從數(shù)據(jù)庫(kù)更高效地取回信息(例如,在從存儲(chǔ)器取 回關(guān)鍵字時(shí)的存儲(chǔ)器帶寬方面)。作為示例,常規(guī)多哈希系統(tǒng)可以通過(guò)使用對(duì)應(yīng)數(shù)目的相 應(yīng)哈希函數(shù)為關(guān)鍵字生成多個(gè)哈希值(例如,4個(gè)哈希值)并且用多個(gè)哈希值中的每個(gè)哈 希值訪問(wèn)存儲(chǔ)器以在哈希表中對(duì)將允許插入關(guān)鍵字的條目定位來(lái)增加存儲(chǔ)器利用率。在這 一情況下,關(guān)鍵字的插入并且相應(yīng)地關(guān)鍵字的后續(xù)取回需要對(duì)應(yīng)數(shù)目(例如,4個(gè))的查找 操作。另一方面,本公開內(nèi)容的技術(shù)保證需要有限數(shù)目(例如,僅2個(gè))的查找操作以插入 和/或取回關(guān)鍵字。作為結(jié)果,本公開內(nèi)容的技術(shù)通過(guò)限制為了取回信息而需要的對(duì)存儲(chǔ) 器的訪問(wèn)數(shù)目來(lái)提供高效插入和例如從相對(duì)大的基于哈希的數(shù)據(jù)庫(kù)和/或在切換設(shè)備外 部的存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)庫(kù)取回關(guān)鍵字而又維持?jǐn)?shù)據(jù)庫(kù)的高存儲(chǔ)器利用率。
[0025] 在一些實(shí)施例中,轉(zhuǎn)發(fā)引擎104包括處理器120和存儲(chǔ)在處理器120上可執(zhí)行的 指令的存儲(chǔ)器122。在一些這樣的實(shí)施例中,處理器120執(zhí)行轉(zhuǎn)發(fā)表106的優(yōu)化以進(jìn)一步增 加轉(zhuǎn)發(fā)表106的利用率。備選地或者附加地,在一些實(shí)施例中,處理器102用來(lái)在其中查找 表107不能解決在具有相同第一哈希值的不同關(guān)鍵字之間的沖突的至少一些情形中輔助 解決這樣的沖突。例如,如以下將更具體說(shuō)明的那樣,在一些實(shí)施例中,處理器120在這樣 的沖突的數(shù)目超過(guò)由查找表107支持的這樣的沖突的最大數(shù)目時(shí)輔助解決這樣的沖突。另 夕卜,在一個(gè)實(shí)施例中,轉(zhuǎn)發(fā)引擎104被配置用于利用附加存儲(chǔ)器(比如CAM108)以用于存儲(chǔ) 不能解決其沖突的關(guān)鍵字。
[0026] 盡管數(shù)據(jù)庫(kù)105在這里一般被描述為如下轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù),該轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)存儲(chǔ)在網(wǎng)絡(luò) 設(shè)備100的端口 112與連接到端口 112的網(wǎng)絡(luò)設(shè)備的地址(例如,MAC地址)之間的關(guān)聯(lián), 但是數(shù)據(jù)庫(kù)105 -般可以是存儲(chǔ)在查找關(guān)鍵字和與查找關(guān)鍵字關(guān)聯(lián)的屬性之間的關(guān)聯(lián)的 任何查找數(shù)據(jù)庫(kù)。例如,在一些實(shí)施例中,數(shù)據(jù)庫(kù)105是存儲(chǔ)在關(guān)鍵字與將對(duì)與關(guān)鍵字對(duì)應(yīng) 的包執(zhí)行的一個(gè)或者多個(gè)策略控制動(dòng)作(例如,關(guān)于訪問(wèn)控制、服務(wù)質(zhì)量、流量測(cè)量、VLAN 指派等)之間的關(guān)聯(lián)的策略控制數(shù)據(jù)庫(kù)。在其他實(shí)施例中,數(shù)據(jù)庫(kù)105存儲(chǔ)如下其他信息, 該其他信息一般由網(wǎng)絡(luò)設(shè)備100用來(lái)處理由網(wǎng)絡(luò)設(shè)備100接收的包。另外,盡管數(shù)據(jù)庫(kù)105 被圖示為在轉(zhuǎn)發(fā)引擎104外部,但是在一些實(shí)施例中,在轉(zhuǎn)發(fā)引擎104中包括數(shù)據(jù)庫(kù)105。 備選地,在一些實(shí)施例中,數(shù)據(jù)庫(kù)105在包處理器102外部和/或在切換設(shè)備100外部。另 夕卜,在一些實(shí)施例中,數(shù)據(jù)庫(kù)105的表106是具有一百萬(wàn)或者數(shù)百萬(wàn)條目的相對(duì)大的表。在 一個(gè)實(shí)施例中,在經(jīng)由適當(dāng)接口(例如,雙數(shù)據(jù)速率(DDR)接口、單數(shù)據(jù)速率(SDR)接口或 者其他適當(dāng)接口)耦合到轉(zhuǎn)發(fā)引擎104的外部(例如,設(shè)置于在切換設(shè)備100外部的集成 設(shè)備上)動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器中實(shí)施表106。然而,一般而言,在各種實(shí)施例中,數(shù)據(jù)庫(kù)105 是任何適當(dāng)大小的數(shù)據(jù)庫(kù)并且被使用任何適當(dāng)類型的存儲(chǔ)器(例如,靜態(tài)隨機(jī)存取存儲(chǔ)器 (SRAM)或者另一適當(dāng)類型的存儲(chǔ)器)來(lái)實(shí)施。也注意,這里描述的數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)查找操 作并不限于網(wǎng)絡(luò)設(shè)備并且在其他實(shí)施例中在其他適當(dāng)計(jì)算設(shè)備中被利用。
[0027] 繼續(xù)參照?qǐng)D1,轉(zhuǎn)發(fā)引擎104包括耦合到哈希值生成器110的關(guān)鍵字生成器109。 在一個(gè)實(shí)施例中,關(guān)鍵字生成器109接收包或者包描述符并且基于在包的頭部中或者在包 描述符中包括的信息生成查找關(guān)鍵字。例如,關(guān)鍵字生成器單元109基于在包中包括的或 者與包關(guān)聯(lián)的目的地地址(單播、多播或者廣播)、虛擬局域網(wǎng)(VLAN)標(biāo)簽等中的一項(xiàng)或者 多項(xiàng)為包生成查找關(guān)鍵字。在其他實(shí)施例中,關(guān)鍵字生成器109基于在包中包括的或者與 包關(guān)聯(lián)的其他信息為包生成查找關(guān)鍵字。
[0028] 關(guān)鍵字生成器109向哈希值生成器110提供查找關(guān)鍵字。哈希值生成器110接收 查找關(guān)鍵字,并且為查找關(guān)鍵字生成多個(gè)哈希值。在一個(gè)實(shí)施例中,哈希值生成器使用三個(gè) 相異哈希函數(shù)(例如,使用不同生成器多項(xiàng)式(比如32位CRC哈希多項(xiàng)式)或者其他適當(dāng) 哈希多項(xiàng)式)為查找關(guān)鍵字生成三個(gè)哈希值。哈希值生成器110向數(shù)據(jù)庫(kù)控制器單元114 提供生成的哈希值(例如,H1、H2和H3)。在一個(gè)實(shí)施例中,數(shù)據(jù)庫(kù)控制器單元114包括查 找單元114a和更新單元114b。例如,在需要轉(zhuǎn)發(fā)信息以做出轉(zhuǎn)發(fā)判決時(shí),查找單元114a在 數(shù)據(jù)庫(kù)105中執(zhí)行查找操作以從數(shù)據(jù)庫(kù)105取回這一信息。在一個(gè)實(shí)施例中,在學(xué)習(xí)新轉(zhuǎn) 發(fā)信息時(shí),更新單元114b例如通過(guò)向數(shù)據(jù)庫(kù)105中插入查找關(guān)鍵字和與查找關(guān)鍵字關(guān)聯(lián)的 信息更新數(shù)據(jù)庫(kù)105。附加地,在一些實(shí)施例中,例如在尚未訪問(wèn)條目持續(xù)某一時(shí)間段時(shí),更 新單元114b從數(shù)據(jù)庫(kù)105刪除條目。
[0029] 仍然參照?qǐng)D1,在一個(gè)實(shí)施例中,查找表107包括根據(jù)第一哈希值H1編索引的多 個(gè)條目,并且每個(gè)條目包括與每個(gè)第一哈希值H1關(guān)聯(lián)的多個(gè)偏移。附加地,在一個(gè)實(shí)施例 中,在查找表107的條目中的偏移中的每個(gè)偏移還與偏移對(duì)應(yīng)于的特定查找關(guān)鍵字的第二 哈希值H2關(guān)聯(lián)。在操作中,查找單元114a基于為查找關(guān)鍵字生成的第一哈希值H1標(biāo)識(shí)查 找表107中的與查找關(guān)鍵字對(duì)應(yīng)的條目。查找單元114a然后基于為查找關(guān)鍵字生成的第二 哈希值H2從在查找表107的標(biāo)識(shí)的條目中包括的多個(gè)偏移選擇與查找關(guān)鍵字對(duì)應(yīng)的偏移。 查找單元114a然后將選擇的偏移應(yīng)用于第三哈希值H3以確定轉(zhuǎn)發(fā)表106中的與查找關(guān)鍵 字對(duì)應(yīng)的位置,并且從轉(zhuǎn)發(fā)表106中的確定的位置取回轉(zhuǎn)發(fā)條目。在一個(gè)實(shí)施例中,在從轉(zhuǎn) 發(fā)表106取回轉(zhuǎn)發(fā)條目時(shí),查找單元114a比較從轉(zhuǎn)發(fā)條目取回的查找關(guān)鍵字與用來(lái)確定條 目的位置的查找關(guān)鍵字(即,為由轉(zhuǎn)發(fā)引擎104處理的包生成的查找關(guān)鍵字)。如果取回的 關(guān)鍵字與查找關(guān)鍵字匹配,則已經(jīng)執(zhí)行了成功的查找,并且取回的轉(zhuǎn)發(fā)信息用來(lái)向由轉(zhuǎn)發(fā) 信息指示的一個(gè)或者多個(gè)端口 112轉(zhuǎn)發(fā)被轉(zhuǎn)發(fā)引擎104處理的包。另一方面,在一個(gè)實(shí)施 例中,如果取回的關(guān)鍵字未與查找關(guān)鍵字匹配,則在轉(zhuǎn)發(fā)表106中的查找失敗。在這一情況 下,在一個(gè)實(shí)施例中,查找單元114a利用查找關(guān)鍵字以搜索CAM108,并且如果在CAM108中 發(fā)現(xiàn)用于查找關(guān)鍵字的匹配,則基于CAM108的對(duì)應(yīng)條目獲得轉(zhuǎn)發(fā)信息。在一個(gè)實(shí)施例中, 如果在CAM108中未發(fā)現(xiàn)用于查找關(guān)鍵字的匹配,則轉(zhuǎn)發(fā)引擎114向(例如,在第2層橋接 設(shè)備中的)端口 112中的所有端口或者子集"傳涌(flood)"包,或者執(zhí)行另一默認(rèn)或者預(yù) 定操作。
[0030] 以下與圖3A-圖3B結(jié)合描述根據(jù)一個(gè)實(shí)施例的由查找單元114a實(shí)施的示例查找 方案。以下與圖4A-圖4B結(jié)合描述根據(jù)一個(gè)實(shí)施例的由更新單元114b實(shí)施的示例更新方 案。在描述示例查找方案和示例更新方案之前,首先與圖2結(jié)合描述根據(jù)一個(gè)實(shí)施例的查 找表17的示例條目。
[0031] 圖2圖示根據(jù)一個(gè)實(shí)施例的圖1的查找表107的示例條目200。在其他實(shí)施例中, 圖1的查找表107包括具有除了條目200之外的適當(dāng)結(jié)構(gòu)的條目。條目200包括多個(gè)子條 目或者沖突桶(collision bucket)("桶")201。沖突桶201-般通過(guò)允許不同偏移用于 多個(gè)查找關(guān)鍵字來(lái)為哈希成相同第一哈希值H1的多個(gè)查找關(guān)鍵字提供沖突解決。在圖2 的實(shí)施例中,每個(gè)桶201包括相應(yīng)簽名字段202、相應(yīng)沖突計(jì)數(shù)器字段204和相應(yīng)偏移字段 206。偏移字段206用來(lái)為哈希成相同第一哈希值H1的不同查找關(guān)鍵字存儲(chǔ)相應(yīng)偏移,并 且簽名字段202用來(lái)關(guān)聯(lián)偏移與偏移對(duì)應(yīng)于的特定查找關(guān)鍵字。在一個(gè)實(shí)施例中,簽名字 段202將與關(guān)鍵字對(duì)應(yīng)的第二哈希值H2存儲(chǔ)為用于為關(guān)鍵字選擇適當(dāng)偏移的簽名。在這 一實(shí)施例中,在基于為關(guān)鍵字生成的第一哈希值H1從查找表107取回條目200時(shí),查找單 元114a比較從條目200的簽名字段202取回的簽名與為關(guān)鍵字生成的第二哈希值H2。在 從簽名字段202取回的簽名與為關(guān)鍵字生成的第二哈希值H2匹配的情況下,查找單元114a 選擇從對(duì)應(yīng)偏移字段206取回的偏移。在圖2的實(shí)施例中,條目200包括四個(gè)沖突桶201并 且能夠存儲(chǔ)與單個(gè)第一哈希值H1關(guān)聯(lián)的四個(gè)不同偏移和簽名。在其他實(shí)施例中,條目200 包括其他適當(dāng)數(shù)目(例如,1個(gè)、2個(gè)、3個(gè)、5個(gè)、6個(gè)等)的沖突桶,并且相應(yīng)地能夠存儲(chǔ)與 單個(gè)哈希值H1關(guān)聯(lián)的其他對(duì)應(yīng)數(shù)目的偏移和簽名。
[0032] 附加地,在一些實(shí)施例中,條目200被構(gòu)造用于支持解決在共享第一哈希值H1和 第二哈希值H2二者、但是具有不同第三哈希值H3的多個(gè)關(guān)鍵字之間的沖突。在這樣的情 形中,從條目200中的多個(gè)偏移為多個(gè)關(guān)鍵字選擇相同偏移,但是選擇的偏移被應(yīng)用于不 同第三哈希值H3從而產(chǎn)生轉(zhuǎn)發(fā)表106中的不同存儲(chǔ)器位置。在一個(gè)實(shí)施例中,沖突計(jì)數(shù)器 字段203被用來(lái)統(tǒng)計(jì)(account for)對(duì)應(yīng)偏移字段206中的偏移被用于的多個(gè)關(guān)鍵字。如 以下將更具體說(shuō)明的那樣,在從轉(zhuǎn)發(fā)表106刪除偏移被用于的多個(gè)查找關(guān)鍵字時(shí)利用多個(gè) 關(guān)鍵字的這樣的統(tǒng)計(jì),從而使得沖突桶保持有效,直至去除多個(gè)查找關(guān)鍵字中的最后查找 關(guān)鍵字。在一個(gè)實(shí)施例中,每個(gè)沖突計(jì)數(shù)器字段204包括兩位并且能夠統(tǒng)計(jì)最多四個(gè)查找 關(guān)鍵字。在其他實(shí)施例中,利用其他適當(dāng)長(zhǎng)度的沖突計(jì)數(shù)器字段。例如,每個(gè)沖突計(jì)數(shù)器字 段204包括除了兩位之外的適當(dāng)數(shù)目的位(例如,1、3、4、5位等),并且相應(yīng)地能夠統(tǒng)計(jì)共 享對(duì)應(yīng)偏移的不同對(duì)應(yīng)數(shù)目的查找關(guān)鍵字。
[0033] 圖3A-圖3B是圖示根據(jù)一個(gè)實(shí)施例的用于在數(shù)據(jù)庫(kù)中對(duì)查證關(guān)鍵字定位并且從 數(shù)據(jù)庫(kù)取回與查找關(guān)鍵字關(guān)聯(lián)的信息的示例查找方案300的流程圖。在一個(gè)實(shí)施例中,在 圖1的網(wǎng)絡(luò)設(shè)備100中實(shí)施查找方案300。例如在一個(gè)實(shí)施例中,查找方案300由圖1的查 找單元114a實(shí)施。在其他實(shí)施例中,在其他適當(dāng)網(wǎng)絡(luò)設(shè)備中實(shí)施查找方案300。類似地,在 其他實(shí)施例中,圖1的網(wǎng)絡(luò)設(shè)備100(例如,網(wǎng)絡(luò)設(shè)備100的查找114a)實(shí)施除了技術(shù)300 之外的適當(dāng)查找技術(shù)。為了易于說(shuō)明,以下將查找方案300描述為與圖1的查找表107、轉(zhuǎn) 發(fā)表106和CAM108結(jié)合由查找單元114a實(shí)施。
[0034] 在塊302,獲得查找關(guān)鍵字X。在一個(gè)實(shí)施例中,基于在包中包括的或者與包關(guān)聯(lián) 的信息生成查找關(guān)鍵字X。例如,在一個(gè)實(shí)施例中,查找關(guān)鍵字由與包關(guān)聯(lián)的目的地MAC地 址和VLAN標(biāo)簽組成。在其他實(shí)施例中,關(guān)鍵字X包括與包關(guān)聯(lián)的其他適當(dāng)信息。
[0035] 在塊304,生成用于關(guān)鍵字X的多個(gè)哈希值。在一個(gè)實(shí)施例中,在塊304生成的哈 希值包括第一哈希值Hl=hl (X)、第二哈希值H2=h2 (X)和第三哈希值H3=h3 (X),其中hl、h2 和h3是相異哈希函數(shù)。例如,在一個(gè)實(shí)施例中,使用相異生成器多項(xiàng)式(比如32CRC多項(xiàng) 式)實(shí)施哈希函數(shù)111、112、113。在一個(gè)示例實(shí)施例中,第三哈希值!13=!11+!12+113(乂)。在其他 實(shí)施例中,以其他適當(dāng)方式生成第三哈希值H3。在一些實(shí)施例中,與第一哈希值H1和/或 第二哈希值H2獨(dú)立地生成第三哈希值H3。一般而言,任何適當(dāng)哈希值生成方案可以用來(lái)在 塊304為關(guān)鍵字X生成多個(gè)哈希值。
[0036] 在塊306,查找單元114a使用在塊304生成的第一哈希值H1執(zhí)行第一存儲(chǔ)器訪 問(wèn)。具體而言,在塊306的第一存儲(chǔ)器訪問(wèn)中,查找單元114a使用值H1作為進(jìn)入查找表 107的索引訪問(wèn)查找表107,并且從查找表107取回對(duì)應(yīng)條目。在一個(gè)實(shí)施例中,取回的查 找條目被構(gòu)造為圖2的條目200。在這一實(shí)施例中,取回的查找表包括四個(gè)沖突桶,并且每 個(gè)沖突桶包括相應(yīng)簽名字段、相應(yīng)沖突計(jì)數(shù)器字段和相應(yīng)偏移字段。在另一實(shí)施例中,以另 一適當(dāng)方式構(gòu)造取回的查找表?xiàng)l目。
[0037] 在塊308,查找單元114a分析取回的條目以確定取回的條目的沖突桶是否包括與 在塊304為關(guān)鍵字生成的第二哈希值匹配的簽名。另外,在標(biāo)識(shí)具有與H2匹配的簽名的沖 突桶時(shí),查找單元114a確定標(biāo)識(shí)的沖突桶是否在沖突桶的偏移字段中包括有效偏移。例 如,在一個(gè)實(shí)施例中,在沖突桶的偏移字段中的全一(即,偏移字段的每個(gè)位被設(shè)置成邏輯 一(1))指示偏移無(wú)效,并且在沖突桶的偏移字段中的任何其他值(即,偏移字段的位中的 一位或者多位被設(shè)置成邏輯零(〇))是有效偏移。在其他實(shí)施例中,偏移字段的其他適當(dāng)值 指不在標(biāo)識(shí)的沖突桶中的偏移不是有效偏移。
[0038] 如果在塊308標(biāo)識(shí)具有與H2匹配的簽名并且具有有效偏移的沖突桶,則查找方案 在塊310繼續(xù),查找單元114a在該塊執(zhí)行第二存儲(chǔ)器訪問(wèn),從而訪問(wèn)轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)106。在第 二存儲(chǔ)器訪問(wèn)中,查找單元114a使用H3和從在塊308標(biāo)識(shí)的沖突桶的偏移字段取回的偏 移訪問(wèn)轉(zhuǎn)發(fā)表106。另一方面,如果在塊308未標(biāo)識(shí)具有與H2匹配的簽名的有效沖突桶, 則方案300在塊312繼續(xù),查找單元114a在該塊使用H3和默認(rèn)偏移執(zhí)行第二存儲(chǔ)器訪問(wèn)。 在一些實(shí)施例中,默認(rèn)偏移可配置。在其他實(shí)施例中,默認(rèn)偏移被預(yù)設(shè)或者預(yù)定并且不可配 置。
[0039] 在任何情況下,在第二存儲(chǔ)器訪問(wèn)(在塊310或者在塊312)中,查找單元114a從 轉(zhuǎn)發(fā)表106取回轉(zhuǎn)發(fā)條目。在一個(gè)實(shí)施例中,從轉(zhuǎn)發(fā)表106取回的轉(zhuǎn)發(fā)條目包括關(guān)鍵字和 與關(guān)鍵字關(guān)聯(lián)的信息?,F(xiàn)在參照?qǐng)D3B,方案300在塊314繼續(xù)。在塊314,查找單元114a 比較在塊310或者在塊312從轉(zhuǎn)發(fā)表106取回的轉(zhuǎn)發(fā)條目中的關(guān)鍵字與在塊302獲得的查 找關(guān)鍵字X。在一個(gè)實(shí)施例中,在塊314的在取回的條目中的關(guān)鍵字與關(guān)鍵字X匹配這樣 的確定表明成功查找已經(jīng)出現(xiàn)。在這一情況下,根據(jù)一個(gè)實(shí)施例,與關(guān)鍵字關(guān)聯(lián)的取回的信 息(例如,標(biāo)識(shí)應(yīng)當(dāng)經(jīng)由其傳輸包的一個(gè)端口(或者多個(gè)端口)112的轉(zhuǎn)發(fā)信息)用來(lái)例如 對(duì)包執(zhí)行一個(gè)或者多個(gè)動(dòng)作,比如向標(biāo)識(shí)的一個(gè)端口(或者多個(gè)端口)112轉(zhuǎn)發(fā)包。然而, 在一些情況下,在決314確定在決310或者在塊312從轉(zhuǎn)發(fā)表106取回的轉(zhuǎn)發(fā)條目中的關(guān) 鍵字未與在塊302獲得的關(guān)鍵字X匹配。在這一情況下,方案300在塊316繼續(xù),查找單元 114a在該塊使用關(guān)鍵字X搜索CAM108以嘗試在CAM108中發(fā)現(xiàn)用于關(guān)鍵字X的匹配。備選 地,在另一實(shí)施例中,查找單元114a在至少一些情形中與訪問(wèn)轉(zhuǎn)發(fā)表106和/或訪問(wèn)查找 表107并行地搜索CAM108,這造成在其中關(guān)鍵字位于CAM108中的情況下的更低延時(shí)。在 通過(guò)完全引用而結(jié)合于此、Levi等人、于2012年8月31日提交、名稱為"Efficient TCAM Architecture"的第61/695,520號(hào)美國(guó)臨時(shí)專利申請(qǐng)中更具體描述在一些實(shí)施例中利用 的用于與基于CAM的數(shù)據(jù)庫(kù)中的搜索并行執(zhí)行基于哈希的數(shù)據(jù)庫(kù)中的搜索的示例技術(shù)。
[0040] 在任何情況下,當(dāng)在CAM108中發(fā)現(xiàn)用于關(guān)鍵字X的匹配(在塊318為"是")時(shí), 則在CAM108中的成功查找已經(jīng)出現(xiàn)。在這一情況下,在一個(gè)實(shí)施例中,查找單元114a例如 從由與關(guān)鍵字X匹配的條目指示的存儲(chǔ)器位置取回與關(guān)鍵字關(guān)聯(lián)的信息,比如轉(zhuǎn)發(fā)條目。 在一個(gè)實(shí)施例中,由與關(guān)鍵字X匹配的條目指示的存儲(chǔ)器位置是在轉(zhuǎn)發(fā)表106中的存儲(chǔ)器 位置。例如,在一個(gè)實(shí)施例中,在CAM108中的每個(gè)條目指示進(jìn)入轉(zhuǎn)發(fā)表106的索引。在另 一實(shí)施例中,由與關(guān)鍵字X匹配的CAM條目指示的存儲(chǔ)器位置是在除了轉(zhuǎn)發(fā)表106之外的 存儲(chǔ)器中的存儲(chǔ)器位置。
[0041] 另一方面,如果在CAM108中未發(fā)現(xiàn)匹配(在塊318為"否"),則查找已經(jīng)失敗,即, 在數(shù)據(jù)庫(kù)中未發(fā)現(xiàn)查找關(guān)鍵字X。在這一情況下,采取用于失敗查找的適當(dāng)動(dòng)作。將在失敗 查找情形中采取的特定動(dòng)作依賴于具體實(shí)施例和/或場(chǎng)景。例如,在一個(gè)實(shí)施例和/或場(chǎng) 景中,轉(zhuǎn)發(fā)引擎104向(例如,在第2層橋接設(shè)備中的)端口 112中的所有的端口傳涌包。 作為另一示例,在另一實(shí)施例和/或場(chǎng)景中,發(fā)起用于向數(shù)據(jù)庫(kù)中插入關(guān)鍵字X和與關(guān)鍵字 X關(guān)聯(lián)的信息的過(guò)程。附加地或者備選地,在其他實(shí)施例中,在失敗查找的情況下執(zhí)行其他 適當(dāng)默認(rèn)或者預(yù)定操作。
[0042] 圖4A-圖4B是圖示根據(jù)一個(gè)實(shí)施例的用于向數(shù)據(jù)庫(kù)中插入查找關(guān)鍵字和與關(guān)鍵 字關(guān)聯(lián)的信息的示例更新方案400的流程圖。在一個(gè)實(shí)施例中,在圖1的網(wǎng)絡(luò)設(shè)備100中 實(shí)施更新方案400。例如,在一個(gè)實(shí)施例中,圖1的更新單元114b完全或者部分實(shí)施更新方 案400。在其他實(shí)施例中,在其他適當(dāng)網(wǎng)絡(luò)設(shè)備中實(shí)施更新方案400。類似地,在一些實(shí)施 例中,圖1的網(wǎng)絡(luò)設(shè)備100(例如,網(wǎng)絡(luò)設(shè)備100的更新單元114b)實(shí)施除了更新方案400 之外的適當(dāng)更新方案。為了易于說(shuō)明,以下將更新方案400描述為與圖1的轉(zhuǎn)發(fā)表106、查 找表107和CAM108結(jié)合由更新單元114b執(zhí)行。
[0043] 在塊402,獲得將向數(shù)據(jù)庫(kù)中插入的查找關(guān)鍵字X。在一個(gè)實(shí)施例中,基于在如下 包中包括的或者與該包關(guān)聯(lián)的信息生成查找關(guān)鍵字X,已經(jīng)為該包將目的地地址鏈接到特 定的一個(gè)端口或者(多個(gè)端口)112。在一個(gè)實(shí)施例中,查找關(guān)鍵字X例如由已經(jīng)被鏈接到 特定的一個(gè)端口或者(多個(gè)端口)112的目的地MAC地址和VLAN標(biāo)簽中的一項(xiàng)或者多項(xiàng)組 成。在其他實(shí)施例中,關(guān)鍵字X包括在包中包括的或者與包關(guān)聯(lián)的其他適當(dāng)信息。
[0044] 在塊404,生成用于關(guān)鍵字X的多個(gè)哈希值。在一個(gè)實(shí)施例中,在塊304生成的哈 希值包括第一哈希值Hl=hl (X)、第二哈希值H2=h2 (X)和第三哈希值H3=h3 (X),其中hl、h2 和h3是相異哈希函數(shù)。在一些實(shí)施例中,使用相異或者有關(guān)生成器多項(xiàng)式(比如32CRC多 項(xiàng)式)實(shí)施哈希函數(shù)hl、h2和h3。在一個(gè)示例實(shí)施例中,第三哈希值H3=HI+H2+h3(X)。在 其他實(shí)施例中,以其他適當(dāng)方式生成第三哈希值H3。在一些實(shí)施例中,與第一哈希值H1和 /或第二哈希值H2獨(dú)立地生成第三哈希值H3。一般而言,任何適當(dāng)哈希值生成方案可以用 來(lái)在塊404為關(guān)鍵字X生成多個(gè)哈希值。
[0045] 在塊406,更新單元使用第一哈希值H1作為進(jìn)入查找表107的索引訪問(wèn)查找表 107。在塊408,更新單元114b確定具有與關(guān)鍵字X對(duì)應(yīng)的簽名的有效沖突桶是否已經(jīng)在查 找表107中存在于在塊406訪問(wèn)的條目中。在一個(gè)實(shí)施例中,為了確定具有與關(guān)鍵字X對(duì) 應(yīng)的簽名的有效沖突桶是否存在于在塊406訪問(wèn)的條目中,更新單元114b比較查找表?xiàng)l目 中的沖突桶的簽名字段與第二哈希值H2。在標(biāo)識(shí)具有與第二哈希值H2匹配的簽名的沖突 桶時(shí),更新單兀114b確定標(biāo)識(shí)的沖突桶是否在沖突桶的偏移字段中包括有效偏移。例如, 在一個(gè)實(shí)施例中,在沖突桶的偏移字段中的全一(即,偏移字段的每個(gè)位被設(shè)置成邏輯一 (1))指示偏移無(wú)效,并且在沖突桶的偏移字段中的任何其他值(即,偏移字段的位中的一 位或者多位被設(shè)置成邏輯零(〇))對(duì)應(yīng)于有效偏移。在其他實(shí)施例中,偏移字段的其他適當(dāng) 值指不在標(biāo)識(shí)的沖突桶中的偏移不是有效偏移。
[0046] 當(dāng)在塊408標(biāo)識(shí)具有與第二哈希值H2匹配的簽名的沖突桶時(shí),方案400在塊410 繼續(xù),更新單元114b在該塊確定對(duì)應(yīng)偏移是否可以用于向轉(zhuǎn)發(fā)表106中插入附加關(guān)鍵字。 在一個(gè)實(shí)施例中,更新單元114b檢查在塊408標(biāo)識(shí)的沖突桶的沖突計(jì)數(shù)器字段,并且如果 沖突計(jì)數(shù)器未超過(guò)某個(gè)最大值則確定對(duì)應(yīng)偏移可以用于向轉(zhuǎn)發(fā)表106中插入附加關(guān)鍵字。 例如,在一個(gè)實(shí)施例中,每個(gè)沖突計(jì)數(shù)器字段包括兩位并且能夠支持最多四個(gè)關(guān)鍵字。在這 一實(shí)施例中,更新單元114b在沖突計(jì)數(shù)器指示三個(gè)或者更少關(guān)鍵字當(dāng)前利用偏移時(shí)確定 附加關(guān)鍵字可以利用偏移。另一方面,在沖突計(jì)數(shù)器字段指示已經(jīng)向轉(zhuǎn)發(fā)表106中插入沖 突桶可以容納的關(guān)鍵字的最大數(shù)目(例如,在沖突計(jì)數(shù)器字段中為四的值)時(shí),更新單元 114b確定無(wú)法向轉(zhuǎn)發(fā)表106中插入附加關(guān)鍵字。
[0047] 在塊412,在確定可以插入附加關(guān)鍵字時(shí),更新單元114b將對(duì)應(yīng)偏移應(yīng)用于在塊 404生成的第三哈希值,并且利用具有偏移的第三哈希值作為進(jìn)入轉(zhuǎn)發(fā)表106的索引。在 塊414,更新單元114b確定在轉(zhuǎn)發(fā)表106中的編索引的條目是否為空(即,可用)。參照?qǐng)D 4B,在確定編索引的條目可用時(shí),方案400在塊424繼續(xù),更新單元114b在該塊向轉(zhuǎn)發(fā)表 106中的條目中插入關(guān)鍵字X (和與關(guān)鍵字X關(guān)聯(lián)的信息)。在這一情況下,由于具有大于零 (0)的沖突計(jì)數(shù)器值的、已經(jīng)與有效沖突桶關(guān)聯(lián)的偏移用來(lái)插入關(guān)鍵字,所以無(wú)需更新查找 表以指示新偏移。因而,在這一情況下,方案400跳過(guò)塊426并且在塊428繼續(xù),更新單元 114b在該塊遞增在塊408標(biāo)識(shí)的沖突桶的沖突計(jì)數(shù)器字段(例如,在關(guān)鍵字X是將與沖突 桶關(guān)聯(lián)的第一關(guān)鍵字的情況下,更新單元114b將計(jì)數(shù)器字段的值從-1改變成0)以統(tǒng)計(jì)在 塊424中向轉(zhuǎn)發(fā)表106中插入的關(guān)鍵字X。
[0048] 現(xiàn)在返回到圖4A的塊408,當(dāng)在塊408未標(biāo)識(shí)具有與第二哈希值H2匹配的簽名的 沖突桶時(shí),方案400然后在塊418繼續(xù),更新單元114b在該塊確定未占用的沖突桶是否存 在于在塊406訪問(wèn)的查找表?xiàng)l目中。如果在塊418確定未占用的沖突桶存在,則更新單元 114b使用第三哈希值H3訪問(wèn)轉(zhuǎn)發(fā)表106,并且搜索轉(zhuǎn)發(fā)表106以從由第三哈希值H3編索 引的條目發(fā)現(xiàn)可用偏移。換言之,在一個(gè)實(shí)施例中,更新單元114b搜索轉(zhuǎn)發(fā)表106以尋找 未占用的條目,其中該搜索開始于由H3編索引的條目并且結(jié)束于與由查找表107支持的最 大偏移對(duì)應(yīng)的條目。如果標(biāo)識(shí)了這樣的條目,則更新單元114b在塊424向標(biāo)識(shí)的條目中插 入關(guān)鍵字X(和與關(guān)鍵字X關(guān)聯(lián)的信息)。然后,在塊426,更新單元114b用與在塊422標(biāo) 識(shí)的條目對(duì)應(yīng)的偏移更新在塊418(圖4A)標(biāo)識(shí)的沖突桶。此外,更新單元114b遞增在塊 418標(biāo)識(shí)的沖突桶的沖突計(jì)數(shù)器以統(tǒng)計(jì)在塊424向轉(zhuǎn)發(fā)106中插入的關(guān)鍵字X。
[0049] 再次參照?qǐng)D4A,塊410、414和418中的每個(gè)塊的"否"分支通向塊416,更新單元 114b在該塊訪問(wèn)CAM108以嘗試向CAM108中插入關(guān)鍵字X。在塊430(圖4B)確定是否可 以向CAM108中插入關(guān)鍵字X。在確定可以向CAM108中插入關(guān)鍵字時(shí),更新單元114b向 CAM108中插入關(guān)鍵字(圖4B的塊432)。另一方面,在確定無(wú)法向CAM108中插入關(guān)鍵字時(shí) (例如,當(dāng)在CAM中無(wú)空的空間時(shí)),關(guān)鍵字X的插入已經(jīng)失敗。
[0050] 圖4C是圖示在一些實(shí)施例中與圖4A-圖4B的更新技術(shù)400結(jié)合實(shí)施的沖突解決 方案450的流程圖。方案450包括如下一些塊,這些塊是技術(shù)400的公共塊,并且這些塊相 對(duì)于圖4A-圖4B的對(duì)應(yīng)塊由相似編號(hào)的塊引用(例如,塊432)。在方案450中,在一個(gè)實(shí) 施例中,支持使用默認(rèn)偏移向轉(zhuǎn)發(fā)表107中的插入。在一個(gè)實(shí)施例中,默認(rèn)偏移可配置。在 其他實(shí)施例中,默認(rèn)偏移被預(yù)設(shè)或者預(yù)定并且不可配置。
[0051] 沖突解決方案450開始于與圖4A的塊418對(duì)應(yīng)的塊418。當(dāng)在塊418確定無(wú)可用 (未使用)沖突桶存在于在塊408標(biāo)識(shí)的查找表?xiàng)l目中時(shí),取代如根據(jù)方案400完成的那樣 前進(jìn)到塊432,方案450前進(jìn)到塊434,在該塊確定是否啟用默認(rèn)偏移。如果在塊434確定 未啟用默認(rèn)偏移,則方案450前進(jìn)到塊432,在該塊根據(jù)方案400嘗試向CAM108中插入關(guān)鍵 字。另一方面,當(dāng)在塊434確定啟用默認(rèn)偏移時(shí),則方案450在塊436繼續(xù),在該塊將默認(rèn) 偏移應(yīng)用于第三哈希值H3以確定用于轉(zhuǎn)發(fā)表106的索引,并且使用確定的索引訪問(wèn)轉(zhuǎn)發(fā)表 106。
[0052] 在塊438確定是否占用了在塊436訪問(wèn)的條目。當(dāng)在塊438確定條目被占用時(shí), 則方案350在塊432繼續(xù),在該塊嘗試向CAM108中插入。然而,當(dāng)在塊438確定未占用在 塊436訪問(wèn)的條目時(shí),在塊436訪問(wèn)的條目向轉(zhuǎn)發(fā)表106中插入關(guān)鍵字X。在這一情況下, 根據(jù)方案450,在至少一些情形中,即使具有未與關(guān)鍵字X匹配的簽名的關(guān)鍵字已經(jīng)占用了 與用于關(guān)鍵字X的第一哈希值關(guān)聯(lián)的所有沖突桶,仍然向轉(zhuǎn)發(fā)表106中插入關(guān)鍵字X。在一 個(gè)實(shí)施例中,在效果上,在查找表106 "以外"學(xué)習(xí)這樣的關(guān)鍵字。
[0053] 在一個(gè)實(shí)施例中,由圖1的處理器120和存儲(chǔ)器122輔助方案450的實(shí)現(xiàn)方式。 具體而言,為了防止對(duì)于在查找表106以外學(xué)習(xí)的關(guān)鍵字的后續(xù)查找錯(cuò)誤,在這一實(shí)施例 中,處理器120在存儲(chǔ)器中(例如,在存儲(chǔ)器122中或者在耦合到處理器120的另一存儲(chǔ)器 中)存儲(chǔ)這樣的關(guān)鍵字的簽名。后續(xù)查找錯(cuò)誤可以例如出現(xiàn)于查找表107中的與關(guān)鍵字X 的第一哈希值H1對(duì)應(yīng)的沖突桶隨后變成可用(例如,由于刪除與這一沖突桶先前關(guān)聯(lián)的關(guān) 鍵字),并且然后用于具有與關(guān)鍵字X的第二哈希值H2匹配的第二哈希值H2的其他關(guān)鍵 字時(shí)。這將造成為關(guān)鍵字X后續(xù)執(zhí)行的未成功查找,因?yàn)閷⒃诓檎移陂g不再訪問(wèn)其中存儲(chǔ) X的轉(zhuǎn)發(fā)表?xiàng)l目。為了防止這一場(chǎng)景,在一個(gè)實(shí)施例中,處理器120檢查在查找表106以外 學(xué)習(xí)的關(guān)鍵字的存儲(chǔ)的簽名并且防止隨后向查找表106中寫入與存儲(chǔ)的簽名匹配的簽名。 例如,在一個(gè)實(shí)施例中,取而代之,在這樣的情形中,處理器120使更新單元114b使用與關(guān) 鍵字對(duì)應(yīng)的第三哈希值H3訪問(wèn)轉(zhuǎn)發(fā)表106。
[0054] 再次參照?qǐng)D1,在一些實(shí)施例中,為了進(jìn)一步提高轉(zhuǎn)發(fā)表107的存儲(chǔ)器利用率,處 理器120執(zhí)行存儲(chǔ)器122中存儲(chǔ)的指令以在一些情形中實(shí)施如下技術(shù),比如基于跳房子哈 希化(hopscotch hasing)的技術(shù),該技術(shù)重排轉(zhuǎn)發(fā)表106中的條目以由此允許插入原本不 能向轉(zhuǎn)發(fā)表106中插入的至少一些查找關(guān)鍵字。圖5A-圖5B是圖示根據(jù)一個(gè)示例實(shí)施例 的用于重排數(shù)據(jù)庫(kù)表510中的條目的方案500的示圖。在一個(gè)實(shí)施例中,(例如,由處理器 120)在轉(zhuǎn)發(fā)引擎104中實(shí)施方案500以重排轉(zhuǎn)發(fā)表106中的條目。在這一實(shí)施例中,與圖 1的查找表107結(jié)合實(shí)施方案500。在一個(gè)實(shí)施例中,與圖4A-圖4B的更新方案400結(jié)合 利用方案500以重排轉(zhuǎn)發(fā)表106中的條目以在更新方案400由于轉(zhuǎn)發(fā)表106中的沖突而不 能向轉(zhuǎn)發(fā)表106中插入查找關(guān)鍵字時(shí)允許向轉(zhuǎn)發(fā)表106中插入查找關(guān)鍵字。
[0055] 在圖5A-圖5B中所示的實(shí)施例中,將表510示出為具有五個(gè)條目512-1至512-5。 雖然將表510圖示為具有五個(gè)條目,但是表510 -般包括任何適當(dāng)數(shù)目的條目,并且在一些 實(shí)施例中,在表510中的條目數(shù)目多于五個(gè)條目或者少于五個(gè)條目。根據(jù)所示實(shí)施例,在圖 5A-圖5B中在條目512的右側(cè)指示條目索引。一般而言,使用為查找關(guān)鍵字生成的第三哈 希值H3和為查找關(guān)鍵字選擇或者確定的偏移向表500中插入查找關(guān)鍵字。在一個(gè)實(shí)施例 中,偏移的值受最大偏移限制。在圖5A-圖5B的示例實(shí)施例中,最大偏移等于三。因而,在 這一實(shí)施例中,可以在具有在X與x+3之間的索引的可用(未占用)表?xiàng)l目向表510中插 入具有等于 x的第三哈希值H3的查找關(guān)鍵字。在其他實(shí)施例中,利用最大偏移的其他適當(dāng) 值。
[0056] 首先參照?qǐng)D5A,表510的所有條目512初始地為空。將向表510中插入的第一查 找關(guān)鍵字514-1對(duì)應(yīng)于第三哈希值H3=x,并且用偏移0(即,在由值X編索引的表?xiàng)l目)向 表510中插入。將向表510中插入的第二查找關(guān)鍵字514-2對(duì)應(yīng)于第三哈希值H3=x,并且 用偏移1(即,在由值x+1編索引的表?xiàng)l目)向表510中插入。將向表510中插入的第三查 找關(guān)鍵字514-3對(duì)應(yīng)于第三哈希值H3=x+1,并且由于第二查找關(guān)鍵字514-2已經(jīng)占用了由 值x+1編索引的條目,因此用偏移1(即,在由值x+2編索引的表?xiàng)l目)向表510中插入。將 向表510中插入的第四查找關(guān)鍵字514-4對(duì)應(yīng)于第三哈希值H3=x,并且用偏移3(即,在由 值x+2編索引的條目)向表510中插入。
[0057] 將向表510中插入的第五查找關(guān)鍵字514-5對(duì)應(yīng)于第三哈希值H3=x。無(wú)法向表 510中插入查找關(guān)鍵字514-5,因?yàn)槠渌P(guān)鍵字當(dāng)前占用在可以向其中插入具有H3=x的關(guān) 鍵字的條目范圍內(nèi)的所有條目(即,在X與x+3之間的條目)。如圖5B中所示,在一個(gè)實(shí) 施例中,第三查找關(guān)鍵字514-3然后移向由x+4編索引的空條目,并且與第三查找關(guān)鍵字 514-3關(guān)聯(lián)的偏移被改變成值3,由此允許在由x+2編索引的位置向表510中插入第五查找 關(guān)鍵字514-5。因而,然后在由x+2編索引的位置用偏移向3向表510中插入第五查找關(guān)鍵 字514-5。另外,在一個(gè)實(shí)施例中,更新與查找關(guān)鍵字514-3關(guān)聯(lián)的查找表?xiàng)l目(例如,在圖 1的查找表107中的沖突桶中)以反映用于查找關(guān)鍵字514-3的新偏移。
[0058] 在一個(gè)實(shí)施例中,為了避免更新其他查找關(guān)鍵字也與之關(guān)聯(lián)的偏移,在移動(dòng)查找 關(guān)鍵字514-3之前,檢查與查找關(guān)鍵字514-3關(guān)聯(lián)的沖突桶以保證無(wú)其他查找關(guān)鍵字與對(duì) 應(yīng)偏移關(guān)聯(lián)。例如,在與查找關(guān)鍵字514-3關(guān)聯(lián)的沖突計(jì)數(shù)器的值指示查找關(guān)鍵字514-3是 與對(duì)應(yīng)偏移關(guān)聯(lián)的僅有關(guān)鍵字(例如,沖突計(jì)數(shù)器的值等于〇)時(shí),查找關(guān)鍵字514-3被移 向由x+4編索引的位置,并且相應(yīng)地更新偏移字段以對(duì)應(yīng)于由x+4編索引的新位置。然而, 在一個(gè)實(shí)施例中,在沖突計(jì)數(shù)器的值指示一個(gè)或者多個(gè)其他關(guān)鍵字與對(duì)應(yīng)偏移關(guān)聯(lián)(例 如,沖突計(jì)數(shù)器的值大于0)時(shí),則查找關(guān)鍵字514-3未被移向新位置。在一些實(shí)施例和/ 或場(chǎng)景中,在這一情況下,不同查找關(guān)鍵字(與指示查找關(guān)鍵字是與對(duì)應(yīng)偏移關(guān)聯(lián)的僅有 關(guān)鍵字的沖突計(jì)數(shù)器關(guān)聯(lián)的查找關(guān)鍵字)被移向新位置以允許插入查找關(guān)鍵字515-5。也 就是說(shuō),在這一實(shí)施例中,查找關(guān)鍵字的重定位僅限于如果查找關(guān)鍵字例如如由與特定沖 突桶關(guān)聯(lián)的對(duì)應(yīng)沖突計(jì)數(shù)器的值〇指示的那樣是與沖突桶關(guān)聯(lián)的僅有查找關(guān)鍵字,則對(duì)查 找關(guān)鍵字重定位。
[0059] 備選地,在其中查找關(guān)鍵字514-3與之關(guān)聯(lián)的沖突計(jì)數(shù)器的值指示一個(gè)或者多個(gè) 其他關(guān)鍵字與對(duì)應(yīng)偏移關(guān)聯(lián)(例如,沖突計(jì)數(shù)器的值大于〇)的另一實(shí)施例中,包括查找關(guān) 鍵字514-3的與沖突桶關(guān)聯(lián)的所有查找關(guān)鍵字被移向新位置,并且在查找關(guān)鍵字514-3的 先前位置向表510中插入查找關(guān)鍵字514-5。另外,在這一實(shí)施例中,例如在圖1的查找表 107中更新與重定位的查找關(guān)鍵字關(guān)聯(lián)的相應(yīng)偏移以恰當(dāng)反映重定位的查找關(guān)鍵字的新位 置。
[0060] 圖6是根據(jù)一個(gè)實(shí)施例的用于在網(wǎng)絡(luò)設(shè)備中對(duì)包執(zhí)行動(dòng)作或者動(dòng)作集(比如轉(zhuǎn)發(fā) 包)的示例方法600的流程圖。在一個(gè)實(shí)施例中,方法600由圖1的切換設(shè)備100實(shí)施。例 如,在一個(gè)實(shí)施例中,方法600至少部分由圖1的轉(zhuǎn)發(fā)引擎104實(shí)施。在其他實(shí)施例中,方 法600由切換設(shè)備100的其他適當(dāng)部件或者由另一適當(dāng)網(wǎng)絡(luò)設(shè)備實(shí)施。
[0061] 在塊602,基于與包對(duì)應(yīng)的查找關(guān)鍵字生成多個(gè)哈希值。在一個(gè)實(shí)施例中,哈希值 由圖1的哈希值生成器110生成。在其他實(shí)施例中,哈希值由切換設(shè)備100的其他適當(dāng)部 件或者由另一適當(dāng)切換設(shè)備生成。在一個(gè)實(shí)施例中,與包對(duì)應(yīng)的查找關(guān)鍵字包括在包中包 括的或者與包關(guān)聯(lián)的各種信息。例如,查找關(guān)鍵字包括目的地MAC地址和VLAN標(biāo)簽等中的 一項(xiàng)或者多項(xiàng)。在其他實(shí)施例中,查找關(guān)鍵字包括在包中包括的或者與包關(guān)聯(lián)的其他適當(dāng) 信息。
[0062] 在塊604,使用在塊602生成的第一哈希值和第二哈希值搜索查找表。在一個(gè)實(shí)施 例中,搜索圖1的查找表107。在另一實(shí)施例中,搜索另一適當(dāng)查找表。在一個(gè)實(shí)施例中,查 找表包括構(gòu)造為圖2的條目200的條目。在其他實(shí)施例中,查找表包括以其他適當(dāng)方式構(gòu) 造的條目。在一個(gè)實(shí)施例中,基于第一哈希值標(biāo)識(shí)查找表中的條目,并且使用第二哈希值搜 索標(biāo)識(shí)的條目以選擇標(biāo)識(shí)的條目的與第二哈希值對(duì)應(yīng)的子條目。
[0063] 在塊606,使用第三哈希值和在塊604確定的偏移搜索適當(dāng)網(wǎng)絡(luò)設(shè)備數(shù)據(jù)庫(kù),比如 轉(zhuǎn)發(fā)表。在一個(gè)實(shí)施例中,搜索轉(zhuǎn)發(fā)表106。在另一實(shí)施例中,搜索另一轉(zhuǎn)發(fā)表或者除了轉(zhuǎn) 發(fā)表之外的適當(dāng)數(shù)據(jù)庫(kù)。在一個(gè)實(shí)施例中,搜索數(shù)據(jù)庫(kù)包括將偏移應(yīng)用于第三哈希值以確 定進(jìn)入數(shù)據(jù)庫(kù)的索引,從而訪問(wèn)數(shù)據(jù)庫(kù)以取回與確定的索引對(duì)應(yīng)的條目。在一個(gè)實(shí)施例中, 取回的條目包括用于對(duì)包執(zhí)行一個(gè)或者多個(gè)動(dòng)作的信息。例如,在一個(gè)實(shí)施例中,取回的條 目是指示應(yīng)當(dāng)如何(例如,向哪個(gè)端口)轉(zhuǎn)發(fā)包的轉(zhuǎn)發(fā)條目。在其他實(shí)施例中,取回的條 目指示關(guān)于除了轉(zhuǎn)發(fā)包之外的一個(gè)或者多個(gè)動(dòng)作的信息,比如關(guān)于將向包應(yīng)用的過(guò)濾的信 息、關(guān)于與包的服務(wù)質(zhì)量(QoS)處理關(guān)聯(lián)的動(dòng)作或者動(dòng)作集的信息、與在網(wǎng)絡(luò)設(shè)備中收集 統(tǒng)計(jì)量有關(guān)的信息等。在塊608,將由在塊606取回的條目指示的一個(gè)或者多個(gè)動(dòng)作應(yīng)用于 包。例如,在一個(gè)實(shí)施例中,在轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)應(yīng)用中,基于在塊606選擇的轉(zhuǎn)發(fā)條目向網(wǎng)絡(luò)設(shè) 備的端口轉(zhuǎn)發(fā)包。在其他實(shí)施例中,在塊608將基于在塊606取回的條目的其他適當(dāng)?shù)囊?個(gè)或者多個(gè)動(dòng)作應(yīng)用于包。
[0064] 圖7是根據(jù)一個(gè)實(shí)施例的用于在網(wǎng)絡(luò)設(shè)備中填充轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)的示例方法700的流 程圖。在一個(gè)實(shí)施例中,方法700由圖1的切換設(shè)備100實(shí)施。例如,在一個(gè)實(shí)施例中,方 法700至少部分由圖1的轉(zhuǎn)發(fā)引擎104實(shí)施。在其他實(shí)施例中,方法700由切換設(shè)備100 的其他適當(dāng)部件或者由另一適當(dāng)網(wǎng)絡(luò)設(shè)備實(shí)施。
[0065] 在塊702,基于與包對(duì)應(yīng)的查找關(guān)鍵字生成多個(gè)哈希值。在一個(gè)實(shí)施例中,哈希值 由圖1的哈希值生成器110生成。在其他實(shí)施例中,哈希值由切換設(shè)備100的其他適當(dāng)部 件或者由另一適當(dāng)切換設(shè)備生成。在一個(gè)實(shí)施例中,與包對(duì)應(yīng)的查找關(guān)鍵字包括在包中包 括的或者與包關(guān)聯(lián)的各種信息。例如,查找關(guān)鍵字包括目的地MAC地址和VLAN標(biāo)簽等中的 一項(xiàng)或者多項(xiàng)。在其他實(shí)施例中,查找關(guān)鍵字包括在包中包括的或者與包關(guān)聯(lián)的其他適當(dāng) 信息。
[0066] 在塊704,至少基于第一哈希值和第二哈希值確定進(jìn)入轉(zhuǎn)發(fā)表的偏移。在一個(gè)實(shí) 施例中,確定偏移包括訪問(wèn)查找表以確定與第一哈希值和第二哈希值關(guān)聯(lián)的偏移是否已經(jīng) 存在于查找表中。在一個(gè)實(shí)施例中,確定偏移包括訪問(wèn)圖1的查找表107,該查找表107具 有被構(gòu)造為圖2的條目200的條目。在另一實(shí)施例中,確定偏移包括訪問(wèn)另一適當(dāng)查找表。 在一個(gè)實(shí)施例中,在與第一哈希值和第二哈希值關(guān)聯(lián)的偏移已經(jīng)存在于查找表中時(shí),將偏 移設(shè)置成從查找表取回的偏移。然后將偏移應(yīng)用于第三哈希值以確定進(jìn)入轉(zhuǎn)發(fā)表(例如, 圖1的轉(zhuǎn)發(fā)表106或者另一適當(dāng)轉(zhuǎn)發(fā)表)的索引。如果與第一哈希值和第二哈希值關(guān)聯(lián)的 偏移尚未存在于查找表中,則使用第三哈希值訪問(wèn)轉(zhuǎn)發(fā)表,并且在可用偏移存在于轉(zhuǎn)發(fā)表 中時(shí)確定轉(zhuǎn)發(fā)表中的這樣的可用偏移。在一個(gè)實(shí)施例中,如果可用偏移未存在于(例如,受 最大偏移值限制的)轉(zhuǎn)發(fā)表中,則根據(jù)適當(dāng)重排技術(shù)(比如圖5A-圖5B的技術(shù)500)重排 轉(zhuǎn)發(fā)表中的條目。在一個(gè)實(shí)施例中,在這一情況下,確定偏移為作為重排的結(jié)果而變成可用 的偏移。在一個(gè)實(shí)施例中,在查找表無(wú)法支持插入具有第一哈希值的附加關(guān)鍵字時(shí),將偏移 設(shè)置成默認(rèn)偏移。在至少一些實(shí)施例中,這些數(shù)據(jù)庫(kù)填充技術(shù)高效地解決可能在向轉(zhuǎn)發(fā)表 中插入關(guān)鍵字期間產(chǎn)生的各種沖突,由此增加查找表的存儲(chǔ)器利用率。
[0067] 在塊706,基于第三哈希和在塊706確定的偏移確定轉(zhuǎn)發(fā)表中的位置。在塊708, 確定是否可以向確定的位置上插入查找關(guān)鍵字而未與先前存儲(chǔ)于轉(zhuǎn)發(fā)表中的另一查找關(guān) 鍵字沖突。在確定可以在轉(zhuǎn)發(fā)表中的確定的位置插入查找關(guān)鍵字時(shí),在塊710在確定的位 置插入查找關(guān)鍵字和與查找關(guān)鍵字關(guān)聯(lián)的信息。
[0068] 在一個(gè)實(shí)施例中,當(dāng)在塊708確定無(wú)法向確定的位置上插入查找關(guān)鍵字而未與先 前存儲(chǔ)于轉(zhuǎn)發(fā)表中的另一查找關(guān)鍵字沖突時(shí),訪問(wèn)附加存儲(chǔ)器(比如CAM(例如,圖1的 CAM108))以確定附加存儲(chǔ)器是否可以容納查找關(guān)鍵字。在確定附加存儲(chǔ)器可以容納查找 關(guān)鍵字時(shí),查找關(guān)鍵字(并且在一些實(shí)施例中與查找關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息)被存儲(chǔ)于附 加存儲(chǔ)器中。在一些實(shí)施例中,在附加存儲(chǔ)器無(wú)法容納查找關(guān)鍵字時(shí),查找關(guān)鍵字的插入失 敗。在一個(gè)實(shí)施例中,根據(jù)方法700的插入技術(shù)在至少一些情形中增加轉(zhuǎn)發(fā)表的利用率并 且減少失敗插入的概率。
[0069] 可以在硬件中(比如在一個(gè)或者定制集成電路、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編 程門陣列(FPGA)等中)實(shí)施以上關(guān)于圖2-圖4描述的各種塊、操作等??梢匀炕蛘卟?分使用執(zhí)行機(jī)器可讀軟件和/或固件指令的處理器實(shí)施以上關(guān)于圖5描述的各種塊、操作 等。
[0070] 盡管已經(jīng)參照如下具體示例描述了本發(fā)明(這些具體示例旨在于僅為舉例說(shuō)明 而不是限制本發(fā)明),但是本領(lǐng)域普通技術(shù)人員將清楚,還可以對(duì)公開的實(shí)施例進(jìn)行除了以 上明確描述的改變、添加或者修改之外的改變、添加或者修改而不脫離本發(fā)明的精神實(shí)質(zhì) 和范圍。
【權(quán)利要求】
1. 一種用于在網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)發(fā)包的方法,所述方法包括: 在哈希值生成器并且基于與包對(duì)應(yīng)的查找關(guān)鍵字生成多個(gè)哈希值,至少包括使用第一 哈希函數(shù)生成第一哈希值、使用第二哈希函數(shù)生成第二哈希值和使用第三哈希函數(shù)生成第 三哈希值,所述第三哈希函數(shù)不同于所述第一哈希函數(shù)和所述第二哈希函數(shù); 使用所述第一哈希值和所述第二哈希值搜索查找表以確定用于所述查找關(guān)鍵字的偏 移;以及 使用所述第三哈希值和為所述查找關(guān)鍵字確定的所述偏移搜索轉(zhuǎn)發(fā)表以選擇與所述 查找關(guān)鍵字對(duì)應(yīng)的轉(zhuǎn)發(fā)條目;以及 基于選擇的所述轉(zhuǎn)發(fā)條目向所述網(wǎng)絡(luò)設(shè)備的一個(gè)或者多個(gè)端口轉(zhuǎn)發(fā)所述包。
2. 根據(jù)權(quán)利要求1所述的方法,其中使用所述第一哈希值和所述第二哈希值搜索所述 查找表以確定用于所述查找關(guān)鍵字的所述偏移包括: 使用所述第一哈希值作為進(jìn)入所述查找表的索引以標(biāo)識(shí)所述查找表中的對(duì)應(yīng)條目,其 中標(biāo)識(shí)的所述條目包括與所述第一哈希值關(guān)聯(lián)的多個(gè)沖突桶,以及 用所述第二哈希值從與所述第一哈希值關(guān)聯(lián)的所述多個(gè)沖突桶選擇沖突桶以確定所 述偏移。
3. 根據(jù)權(quán)利要求1所述的方法,其中使用所述第一哈希值和所述第二哈希值搜索所述 查找表以確定用于所述查找關(guān)鍵字的所述偏移包括: 使用所述第一哈希值作為進(jìn)入所述查找表的索引以標(biāo)識(shí)所述查找表中的對(duì)應(yīng)條目,其 中標(biāo)識(shí)的所述條目包括與所述第一哈希值關(guān)聯(lián)的多個(gè)沖突桶; 使用所述第二哈希值搜索所述多個(gè)沖突桶以標(biāo)識(shí)所述多個(gè)沖突桶中的與所述第二哈 希值關(guān)聯(lián)的沖突桶;以及 在標(biāo)識(shí)與所述第二哈希值關(guān)聯(lián)的沖突桶時(shí),選擇標(biāo)識(shí)的所述沖突桶以確定所述偏移, 以及 在未標(biāo)識(shí)與所述第二哈希值關(guān)聯(lián)的沖突桶時(shí),使用默認(rèn)偏移作為所述偏移。
4. 根據(jù)權(quán)利要求2所述的方法,其中所述多個(gè)沖突桶中的每個(gè)沖突桶包括相應(yīng)簽名字 段和相應(yīng)偏移字段,并且其中確定所述偏移包括: 比較所述第二哈希值與所述多個(gè)沖突桶中的至少一些沖突桶的相應(yīng)簽名字段, 在所述第二哈希值與所述沖突桶中的一個(gè)沖突桶的簽名字段的值匹配時(shí),將所述偏移 設(shè)置成所述一個(gè)沖突桶的所述偏移字段的值,以及 在所述第二哈希值不與所述多個(gè)沖突桶的所述簽名字段的任何值匹配時(shí),將所述偏移 設(shè)置成預(yù)定全局偏移值。
5. 根據(jù)權(quán)利要求1所述的方法,其中使用所述第三哈希值和為所述查找關(guān)鍵字確定的 所述偏移搜索所述轉(zhuǎn)發(fā)表以選擇與所述查找關(guān)鍵字對(duì)應(yīng)的轉(zhuǎn)發(fā)條目包括: 將確定的所述偏移應(yīng)用于所述第三哈希值以獲得進(jìn)入所述轉(zhuǎn)發(fā)表的索引,以及 選擇具有獲得的所述索引的所述轉(zhuǎn)發(fā)條目。
6. 根據(jù)權(quán)利要求4所述的方法,其中所述轉(zhuǎn)發(fā)表的每個(gè)條目包括用于存儲(chǔ)關(guān)鍵字的關(guān) 鍵字字段和用于存儲(chǔ)與所述關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息的信息字段,其中向所述網(wǎng)絡(luò)設(shè)備的所 述端口轉(zhuǎn)發(fā)所述包包括: 比較選擇的所述轉(zhuǎn)發(fā)條目的所述關(guān)鍵字字段的值與所述查找關(guān)鍵字,以及 如果所述關(guān)鍵字字段的所述值與所述查找關(guān)鍵字匹配,則基于選擇的所述轉(zhuǎn)發(fā)條目的 信息字段轉(zhuǎn)發(fā)所述包。
7. 根據(jù)權(quán)利要求5所述的方法,其中所述網(wǎng)絡(luò)設(shè)備包括用于存儲(chǔ)無(wú)法被向所述轉(zhuǎn)發(fā)表 中插入的查找關(guān)鍵字的內(nèi)容可尋址存儲(chǔ)器(CAM)表,所述方法還包括,如果所述關(guān)鍵字字 段的所述值不與所述查找關(guān)鍵字匹配,則: 使用所述查找關(guān)鍵字以搜索所述CAM表,并且其中: 如果在所述CAM表中發(fā)現(xiàn)用于所述查找關(guān)鍵字的匹配,則向所述端口轉(zhuǎn)發(fā)所述包包括 基于所述CAM表?xiàng)l目轉(zhuǎn)發(fā)所述包,以及 如果在所述CAM表中未發(fā)現(xiàn)用于所述查找關(guān)鍵字的匹配,則向所述端口轉(zhuǎn)發(fā)所述包包 括向所述網(wǎng)絡(luò)設(shè)備的多個(gè)端口傳涌所述包。
8. -種用于在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)包的網(wǎng)絡(luò)設(shè)備,包括: 多個(gè)端口; 耦合到所述多個(gè)端口的包處理器,所述包處理器被配置用于向所述多個(gè)端口中的一 個(gè)或者多個(gè)適當(dāng)端口傳送經(jīng)由所述多個(gè)端口中的至少一些端口接收的包,所述包處理器包 括: 哈希值生成器,被配置用于基于與包對(duì)應(yīng)的查找關(guān)鍵字生成多個(gè)哈希值,所述多個(gè)哈 希值至少包括使用第一哈希函數(shù)生成的第一哈希值、使用第二哈希函數(shù)生成的第二哈希值 和使用第三哈希函數(shù)生成的第三哈希值,所述第三哈希函數(shù)不同于所述第一哈希函數(shù)和所 述第二哈希函數(shù);以及 耦合到查找表和轉(zhuǎn)發(fā)表的查找單元,所述查找單元被配置用于: 使用所述第一哈希值和所述第二哈希值搜索所述查找表以確定用于所述查找關(guān)鍵字 的偏移;以及 使用所述第三哈希值和為所述查找關(guān)鍵字確定的所述偏移搜索所述轉(zhuǎn)發(fā)表以選擇與 所述查找關(guān)鍵字對(duì)應(yīng)的轉(zhuǎn)發(fā)條目;以及 轉(zhuǎn)發(fā)引擎,被配置用于基于選擇的所述轉(zhuǎn)發(fā)條目向所述多個(gè)端口中的一個(gè)或者多個(gè)端 口轉(zhuǎn)發(fā)所述包。
9. 根據(jù)權(quán)利要求8所述的裝置,其中所述查找單元被配置用于: 使用所述第一哈希值作為進(jìn)入所述查找表的索引標(biāo)識(shí)所述查找表的條目,其中標(biāo)識(shí)的 所述條目包括與所述第一哈希值關(guān)聯(lián)的多個(gè)沖突桶,以及 使用所述第二哈希值選擇所述多個(gè)沖突桶中的沖突桶以用于為所述查找關(guān)鍵字確定 所述偏移。
10. 根據(jù)權(quán)利要求9所述的裝置,其中每個(gè)沖突桶包括相應(yīng)簽名字段和相應(yīng)偏移字段, 并且其中所述查找單元被配置用于: 比較所述第二哈希值與所述多個(gè)沖突桶中的至少一些沖突桶的相應(yīng)簽名字段; 在所述第二哈希值與所述沖突桶中的一個(gè)沖突桶的簽名字段的值匹配時(shí),將所述偏移 設(shè)置成所述一個(gè)沖突桶的所述偏移字段的值;以及 在所述第二哈希值不與所述多個(gè)沖突桶的所述簽名字段的任何值匹配時(shí),將所述偏移 設(shè)置成預(yù)定全局偏移值。
11. 根據(jù)權(quán)利要求8所述的裝置,其中所述查找單元被配置用于: 將確定的所述偏移應(yīng)用于所述第三哈希值以獲得進(jìn)入所述轉(zhuǎn)發(fā)表的索引,以及 選擇具有進(jìn)入所述轉(zhuǎn)發(fā)表的獲得的所述索引的所述轉(zhuǎn)發(fā)條目。
12. 根據(jù)權(quán)利要求11所述的裝置,其中所述轉(zhuǎn)發(fā)表的每個(gè)條目包括用于存儲(chǔ)關(guān)鍵字的 關(guān)鍵字字段和用于存儲(chǔ)與所述關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息的信息字段,并且其中: 所述查找單元被配置用于比較選擇的所述轉(zhuǎn)發(fā)條目的所述關(guān)鍵字字段中存儲(chǔ)的值與 所述查找關(guān)鍵字,以及 所述轉(zhuǎn)發(fā)引擎被配置用于在所述關(guān)鍵字字段的所述值與所述查找關(guān)鍵字匹配時(shí),基于 選擇的所述轉(zhuǎn)發(fā)條目的所述信息字段執(zhí)行轉(zhuǎn)發(fā)動(dòng)作。
13. 根據(jù)權(quán)利要求12所述的裝置,還包括被配置用于存儲(chǔ)與無(wú)法被向所述轉(zhuǎn)發(fā)表中插 入的查找關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息的內(nèi)容可尋址存儲(chǔ)器(CAM),其中所述轉(zhuǎn)發(fā)查找單元被配 置用于在所述關(guān)鍵字字段的所述值不與所述查找關(guān)鍵字匹配時(shí),使用所述查找關(guān)鍵字搜索 所述CAM。
14. 一種用于在網(wǎng)絡(luò)設(shè)備中填充轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)的方法,所述方法包括: 在哈希值生成器并且基于查找關(guān)鍵字生成與包對(duì)應(yīng)的多個(gè)哈希值,至少包括使用第一 哈希函數(shù)生成第一哈希值、使用第二哈希函數(shù)生成第二哈希值和使用第三哈希函數(shù)生成第 三哈希值,所述第三哈希函數(shù)不同于所述第一哈希函數(shù)和所述第二哈希函數(shù); 用所述網(wǎng)絡(luò)設(shè)備并且至少基于所述第一哈希值和所述第二哈希值為所述查找關(guān)鍵字 確定進(jìn)入轉(zhuǎn)發(fā)表的偏移; 用所述網(wǎng)絡(luò)設(shè)備并且基于所述第三哈希值和所述偏移確定所述轉(zhuǎn)發(fā)表中的用于插入 所述查找關(guān)鍵字的位置; 用所述網(wǎng)絡(luò)設(shè)備確定是否可以在確定的所述位置向所述轉(zhuǎn)發(fā)表中插入所述查找關(guān)鍵 字而不與在確定的所述位置先前存儲(chǔ)的關(guān)鍵字沖突;以及 在確定可以向所述轉(zhuǎn)發(fā)表中插入所述查找關(guān)鍵字時(shí),在確定的所述位置向所述轉(zhuǎn)發(fā)表 中插入所述查找關(guān)鍵字和與所述查找關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息。
15. 根據(jù)權(quán)利要求14所述的方法,其中基于所述第一哈希值和所述第二哈希值為所述 查找關(guān)鍵字確定進(jìn)入所述轉(zhuǎn)發(fā)表的所述偏移包括: 基于所述第一哈希值標(biāo)識(shí)查找表?xiàng)l目,其中所述查找表?xiàng)l目包括與所述第一哈希值關(guān) 聯(lián)的多個(gè)沖突桶;以及 使用所述第二哈希值以選擇所述多個(gè)沖突桶中的一個(gè)沖突桶以用于確定所述偏移。
16. 根據(jù)權(quán)利要求15所述的方法,其中所述查找表?xiàng)l目中的每個(gè)沖突桶包括相應(yīng)簽名 字段和相應(yīng)偏移字段,并且其中確定所述偏移包括: 比較所述第二哈希值與標(biāo)識(shí)的所述查找表?xiàng)l目中的至少一些沖突桶的相應(yīng)簽名字 段; 在所述第二哈希值與所述沖突桶中的一個(gè)沖突桶的簽名字段的值匹配時(shí),從所述一個(gè) 沖突桶的所述偏移字段取回所述偏移;以及 在所述第二哈希值不與標(biāo)識(shí)的所述查找表?xiàng)l目中的所述簽名字段中的任何簽名字段 匹配時(shí),使用所述第三哈希函數(shù)作為進(jìn)入所述轉(zhuǎn)發(fā)表的索引搜索所述轉(zhuǎn)發(fā)表以對(duì)所述轉(zhuǎn)發(fā) 表中的可用條目定位并且執(zhí)行以下各項(xiàng)之一: (i)在搜索所述轉(zhuǎn)發(fā)表對(duì)所述轉(zhuǎn)發(fā)表中的可用條目定位時(shí),將所述偏移設(shè)置成所述轉(zhuǎn) 發(fā)表中的所述可用條目相對(duì)于由所述第三哈希函數(shù)值編索引的表?xiàng)l目的偏移的值,或者 (ii)在搜索所述轉(zhuǎn)發(fā)表未對(duì)所述轉(zhuǎn)發(fā)表中的可用條目定位時(shí),將所述偏移設(shè)置成默認(rèn) 偏移值。
17. 根據(jù)權(quán)利要求16所述的方法,其中使用所述第三哈希函數(shù)作為進(jìn)入所述轉(zhuǎn)發(fā)表的 所述索引搜索所述轉(zhuǎn)發(fā)表以對(duì)所述轉(zhuǎn)發(fā)表中的所述可用條目定位包括對(duì)在從所述索引的 最大偏移內(nèi)的所述可用條目定位,并且其中確定所述偏移還包括在搜索所述轉(zhuǎn)發(fā)表未對(duì)所 述轉(zhuǎn)發(fā)表中的所述可用條目定位時(shí)重排所述轉(zhuǎn)發(fā)表中的條目,其中重排條目產(chǎn)生在所述最 大偏移內(nèi)的可用條目。
18. -種用于在網(wǎng)絡(luò)設(shè)備中填充轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)的裝置,包括: 哈希值生成器,被配置用于基于查找關(guān)鍵字生成多個(gè)哈希值,至少包括使用第一哈希 函數(shù)生成的第一哈希值、使用第二哈希函數(shù)生成的第二哈希值和使用第三哈希函數(shù)來(lái)生成 的第三哈希值,所述第三哈希函數(shù)不同于所述第一哈希函數(shù)和所述第二哈希函數(shù);以及 更新單元,被配置用于: 至少基于所述第一哈希值和所述第二哈希值為所述查找關(guān)鍵字確定進(jìn)入轉(zhuǎn)發(fā)表的偏 移, 基于所述第三哈希值和為所述查找關(guān)鍵字確定的所述偏移確定所述轉(zhuǎn)發(fā)表中的用于 插入所述查找關(guān)鍵字的位置, 確定是否可以在確定的所述位置向所述轉(zhuǎn)發(fā)表中插入所述查找關(guān)鍵字而不與在確定 的所述位置先前存儲(chǔ)的關(guān)鍵字沖突,以及 在確定可以向所述轉(zhuǎn)發(fā)表中插入所述查找關(guān)鍵字時(shí),在確定的所述位置向所述轉(zhuǎn)發(fā)表 中插入所述查找關(guān)鍵字和與所述查找關(guān)鍵字關(guān)聯(lián)的轉(zhuǎn)發(fā)信息。
19. 根據(jù)權(quán)利要求18所述的裝置,其中所述更新單元被配置用于: 基于所述第一哈希值標(biāo)識(shí)查找表?xiàng)l目,其中所述查找表?xiàng)l目包括與所述第一哈希值關(guān) 聯(lián)的多個(gè)沖突桶,以及 基于所述第二哈希值選擇所述沖突桶中的一個(gè)沖突桶以用于確定所述偏移。
20. 根據(jù)權(quán)利要求18所述的裝置,其中所述查找表?xiàng)l目中的每個(gè)沖突桶包括簽名字段 和偏移字段,并且其中所述更新單元被配置用于: 比較所述第二哈希值與標(biāo)識(shí)的所述查找表?xiàng)l目中的至少一些沖突桶的相應(yīng)簽名字段, 在所述第二哈希值與所述沖突桶中的一個(gè)沖突桶的簽名字段的值匹配時(shí),將所述偏移 設(shè)置成所述一個(gè)沖突桶的所述偏移字段的值,以及 在所述第二哈希值不與標(biāo)識(shí)的所述查找表?xiàng)l目中的所述簽名字段中的任何簽名字段 匹配時(shí),使用所述第三哈希函數(shù)作為進(jìn)入所述轉(zhuǎn)發(fā)表的索引搜索所述轉(zhuǎn)發(fā)表,以對(duì)所述轉(zhuǎn) 發(fā)表中的可用條目定位,并且執(zhí)行以下各項(xiàng)之一: (i) 在搜索所述轉(zhuǎn)發(fā)表對(duì)所述轉(zhuǎn)發(fā)表中的可用條目定位時(shí),將所述偏移設(shè)置成所述轉(zhuǎn) 發(fā)表中的所述可用條目相對(duì)于由所述第三哈希函數(shù)值編索引的表?xiàng)l目的偏移的值,或者 (ii) 在搜索所述轉(zhuǎn)發(fā)表未對(duì)所述轉(zhuǎn)發(fā)表中的可用條目定位時(shí),將所述偏移設(shè)置成預(yù)定 全局偏移值。
21. 根據(jù)權(quán)利要求20所述的裝置,其中所述更新單元被配置用于對(duì)在從所述索引的最 大偏移內(nèi)的所述可用條目定位,并且其中所述轉(zhuǎn)發(fā)引擎還被配置用于在搜索所述轉(zhuǎn)發(fā)表未 對(duì)所述轉(zhuǎn)發(fā)表中的所述可用條目定位時(shí)重排所述轉(zhuǎn)發(fā)表中的條目,其中重排條目產(chǎn)生在所 述最大偏移內(nèi)的可用條目。
【文檔編號(hào)】G06F17/30GK104104604SQ201310394776
【公開日】2014年10月15日 申請(qǐng)日期:2013年8月30日 優(yōu)先權(quán)日:2013年4月4日
【發(fā)明者】C·阿拉德, G·利維 申請(qǐng)人:馬維爾以色列(M.I.S.L.)有限公司