專利名稱:用于在網(wǎng)絡(luò)裝置中執(zhí)行包流查找的流緩存器機(jī)制的制作方法
技術(shù)領(lǐng)域:
本公開涉及一種計(jì)算機(jī)網(wǎng)絡(luò),更具體地,涉及一種計(jì)算機(jī)網(wǎng)絡(luò)內(nèi)的流量(traffic)轉(zhuǎn)發(fā)。
背景技術(shù):
計(jì)算機(jī)網(wǎng)絡(luò)是互相連接的可交換數(shù)據(jù)并共享資源的計(jì)算機(jī)裝置的集合。在基于包的網(wǎng)絡(luò)中,計(jì)算機(jī)裝置通過將數(shù)據(jù)分成叫做包的小塊來交換數(shù)據(jù),將這些小塊單獨(dú)在網(wǎng)絡(luò)上從源裝置發(fā)送至目的裝置。目的裝置從包中提取數(shù)據(jù),并將該數(shù)據(jù)組裝成其原始形式。將數(shù)據(jù)分成包使得源裝置能夠僅重新發(fā)送那些在傳輸過程中可能丟失的單獨(dú)的包。用中間網(wǎng)絡(luò)裝置(例如,網(wǎng)關(guān)、防火墻、交換機(jī)和路由器)在源裝置和目的裝置之間發(fā)送包。當(dāng)網(wǎng)絡(luò)接收進(jìn)入的包或發(fā)送離開的包時(shí),網(wǎng)絡(luò)裝置可能對(duì)包應(yīng)用一個(gè)或多個(gè)過濾器,以在某些條件下在包上執(zhí)行定義的操作。為了識(shí)別過濾器的條件以應(yīng)用于給定的包,網(wǎng)絡(luò)裝置可從包中提取信息,例如,源或目的互聯(lián)網(wǎng)協(xié)議(IP)地址、源或目的端口、以及協(xié)議。然后,網(wǎng)絡(luò)裝置對(duì)安裝于網(wǎng)絡(luò)裝置內(nèi)的過濾器條件執(zhí)行搜索,以確定所提取的信息是否滿足由任何過濾器條件指定的標(biāo)準(zhǔn)。一種傳統(tǒng)的識(shí)別應(yīng)用于包的匹配的過濾器條件的方法包括,對(duì)所提取的信息(SP,關(guān)鍵字)的至少一部分應(yīng)用哈希函數(shù),以在哈希表中對(duì)所提取的信息確定可能的位置。關(guān)鍵字相當(dāng)于具有預(yù)定義長(zhǎng)度的提取信息的一部分(例如,源或目的IP地址的前綴)。即,將一個(gè)或多個(gè)關(guān)鍵字輸入至哈希函數(shù)中,以在哈希表中產(chǎn)生一個(gè)或多個(gè)可能的位置。然后,網(wǎng)絡(luò)裝置查找哈希表中的每個(gè)可能的位置,以確定是否在任何可能的位置中找到該關(guān)鍵字。當(dāng)對(duì)可能的位置定義了一個(gè)或多個(gè)過濾 器條件時(shí),在哈希表中找到關(guān)鍵字。根據(jù)最長(zhǎng)前綴匹配算法,路由器應(yīng)用與最長(zhǎng)前綴相關(guān)的過濾器條件,對(duì)于該最長(zhǎng)前綴,對(duì)哈希表中相應(yīng)的關(guān)鍵字找到匹配的對(duì)象。在哈希表中連續(xù)地對(duì)每個(gè)關(guān)鍵字執(zhí)行查找,使得一次在哈希表中的一個(gè)位置查找所提取的信息的每個(gè)可能的位置。為了提高網(wǎng)絡(luò)裝置識(shí)別應(yīng)用于包的過濾器條件的速度,可將網(wǎng)絡(luò)裝置配置為,將哈希表中的查找數(shù)量減到最小。在一些情況中,網(wǎng)絡(luò)裝置可利用布隆過濾器作為該關(guān)鍵字是否肯定不在哈希表內(nèi)或者可選地該關(guān)鍵字可能被儲(chǔ)存在哈希表中的初始評(píng)估。以此方式,當(dāng)關(guān)鍵字肯定不在哈希表內(nèi)時(shí),布隆過濾器可提供用于避免哈希表的在計(jì)算上昂貴的搜索的有效機(jī)制。傳統(tǒng)地,將布隆過濾器實(shí)現(xiàn)為在數(shù)組的每個(gè)條目?jī)?chǔ)存一個(gè)I位值的位數(shù)組,其中,每個(gè)I位條目可對(duì)應(yīng)于相應(yīng)哈希表的不同“桶(buckle)”,并表示對(duì)于該特定“桶”在哈希表中存在至少一個(gè)條目。當(dāng)在硬件中實(shí)現(xiàn)布隆過濾器時(shí)(例如,當(dāng)在多個(gè)存儲(chǔ)體中儲(chǔ)存位數(shù)組時(shí)),網(wǎng)絡(luò)裝置可并行地在布隆過濾器中對(duì)多個(gè)關(guān)鍵字執(zhí)行查找,減少查找全部對(duì)所提取的信息產(chǎn)生的關(guān)鍵字所需的時(shí)鐘周期的總數(shù)。然而,當(dāng)大量搜索關(guān)鍵字都需要從相同的存儲(chǔ)體讀取時(shí),存儲(chǔ)體的隊(duì)列會(huì)變滿,并迫使路由器的調(diào)度部件停止,使得調(diào)度器不會(huì)對(duì)布隆過濾器的任何存儲(chǔ)體發(fā)送查找請(qǐng)求,直到隊(duì)列不再滿為止。因此,具有滿的隊(duì)列的存儲(chǔ)體會(huì)是限制布隆過濾器查找的總吞吐量和網(wǎng)絡(luò)裝置的操作的瓶頸。
發(fā)明內(nèi)容
總的來說,描述了一種用于識(shí)別包流的技術(shù),其限制網(wǎng)絡(luò)裝置的總吞吐量,并將與有問題的包流相關(guān)的信息選擇性地儲(chǔ)存在網(wǎng)絡(luò)裝置的緩存單元中。描述了一種網(wǎng)絡(luò)裝置,其中,網(wǎng)絡(luò)裝置可被編程地配置為,基于可配置參數(shù)識(shí)別適合于儲(chǔ)存在緩存器內(nèi)的包流,并選擇性地儲(chǔ)存與適合的包流相關(guān)的信息。例如,根據(jù)本公開的技術(shù),流緩存器可被編程地配置為,至少部分地基于服務(wù)屬于流的請(qǐng)求所需的哈希表查找量和/或所需的時(shí)間的量(例如,時(shí)鐘周期的數(shù)量),來識(shí)別適合于儲(chǔ)存在緩存器中的包流。然后,流緩存器可被編程地配置為,確定被識(shí)別為適合于儲(chǔ)存在流緩存器中的包流信息是否儲(chǔ)存在流緩存器中,并確定該信息儲(chǔ)存在流緩存器中的哪個(gè)地方。在一個(gè)實(shí)例中,一種方法,包括,用網(wǎng)絡(luò)裝置的流緩存器接收與包流相關(guān)的查找關(guān)鍵字,其中,該包流是由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一個(gè),其中,流緩存器儲(chǔ)存與由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一部分相關(guān)的信息,并且,其中,流緩存器至少通過對(duì)由網(wǎng)絡(luò)裝置的布隆過濾器(Bloom filter)對(duì)查找關(guān)鍵字進(jìn)行的處理應(yīng)用選擇標(biāo)準(zhǔn),來確定是否儲(chǔ)存與包流相關(guān)的信息。該方法進(jìn)一步包括,用流緩存器確定查找關(guān)鍵字是否儲(chǔ)存在流緩存器中,并且,當(dāng)查找關(guān)鍵字儲(chǔ)存在流緩存器中時(shí),用流緩存器檢索與查找關(guān)鍵字相關(guān)的儲(chǔ)存結(jié)果并輸出儲(chǔ)存結(jié)果。在另一實(shí)例中,一種網(wǎng)絡(luò)裝置,包括:網(wǎng)絡(luò)接口,被配置為接收包流的包,其中,該包流是由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一個(gè);流緩存器,被配置為接收與包流相關(guān)的查找關(guān)鍵字;以及布隆過濾器,被配置為處理查找關(guān)鍵字。流緩存器進(jìn)一步被配置為,儲(chǔ)存與由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一部分相關(guān)的信息,并至少通過對(duì)由布隆過濾器對(duì)查找關(guān)鍵字進(jìn)行的處理應(yīng)用選擇標(biāo)準(zhǔn),來確定是否儲(chǔ)存與包流相關(guān)的信息。流緩存器被配置為,確定查找關(guān)鍵字是否儲(chǔ)存在流緩存器中,并且,當(dāng)查找關(guān)鍵字儲(chǔ)存在流緩存器中時(shí),檢索與查找關(guān)鍵字相關(guān)的儲(chǔ)存結(jié)果并輸出儲(chǔ)存結(jié)果。在另 一實(shí)例中,用指令對(duì)計(jì)算機(jī)可讀的儲(chǔ)存介質(zhì)進(jìn)行編碼,該指令使計(jì)算裝置的一個(gè)或多個(gè)可編程處理器接收與包流相關(guān)的查找關(guān)鍵字,其中,包流是由計(jì)算裝置處理的多個(gè)包流中的一個(gè),其中,計(jì)算裝置的流緩存器儲(chǔ)存與由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一部分相關(guān)的信息,并且,其中,流緩存器至少部分地基于對(duì)由網(wǎng)絡(luò)裝置的布隆過濾器對(duì)查找關(guān)鍵字進(jìn)行的處理應(yīng)用選擇標(biāo)準(zhǔn),來確定是否儲(chǔ)存與包流相關(guān)的信息。該指令進(jìn)一步使一個(gè)或多個(gè)可編程處理器確定查找關(guān)鍵字是否儲(chǔ)存在流緩存器中,并且,當(dāng)將查找關(guān)鍵字儲(chǔ)存在流緩存器中時(shí),檢索與查找關(guān)鍵字相關(guān)的儲(chǔ)存結(jié)果并輸出儲(chǔ)存結(jié)果。本公開的技術(shù)可提供多個(gè)優(yōu)點(diǎn)。例如,該技術(shù)以這樣的方式對(duì)控制器和流緩存器提供程序控制:允許軟件來配置在特定裝置上執(zhí)行緩存機(jī)制的方式。這可允許緩存機(jī)制適應(yīng)其中配置有網(wǎng)絡(luò)裝置的特定環(huán)境。與用布隆過濾器和關(guān)鍵字哈希表處理包流的傳統(tǒng)方法相比,至少部分地基于所需哈希表查找的量和/或所需時(shí)間的量(例如,時(shí)鐘周期的數(shù)量)選擇性地儲(chǔ)存與包流相關(guān)的信息可增加網(wǎng)絡(luò)裝置的吞吐量和性能。當(dāng)大量包流共享相同的目的網(wǎng)絡(luò)地址或幾個(gè)不同的目的網(wǎng)絡(luò)地址時(shí),實(shí)施本公開的技術(shù)而獲得的吞吐量的增加可以最大。此外,本公開的技術(shù)可使得網(wǎng)絡(luò)裝置能夠識(shí)別并緩存與最可能影響網(wǎng)絡(luò)裝置的性能的包流相關(guān)的信息。限制最可能影響性能的包流信息的緩存可減小提高性能所需的緩存器的大小,降低硬件成本。在以下附圖和說明書中闡述了一個(gè)或多個(gè)實(shí)例的細(xì)節(jié)。從說明書和附圖中,從權(quán)利要求書中,其他特征、目的和優(yōu)點(diǎn)將是顯而易見的。
圖1是示出包括多種網(wǎng)絡(luò)裝置的實(shí)例系統(tǒng)的框圖,這些網(wǎng)絡(luò)裝置中的任何一個(gè)都可執(zhí)行本公開的技術(shù)。圖2是示出包括根據(jù)本公開的一個(gè)或多個(gè)技術(shù)配置的過濾器查找塊的實(shí)例路由器的框圖。圖3是更詳細(xì)地示出路由器的實(shí)例過濾器查找塊的框圖。圖4是更詳細(xì)地示出路由器的實(shí)例布隆過濾器的框圖。圖5是更詳細(xì)地示出路由器的實(shí)例流緩存器的框圖。圖6A和圖6B是示出根據(jù)本公開的一個(gè)或多個(gè)技術(shù)執(zhí)行查找的實(shí)例方法的流程圖。
具體實(shí)施例方式圖1是示出包括多種網(wǎng)絡(luò)裝置的實(shí)例系統(tǒng)2的框圖,這些網(wǎng)絡(luò)裝置中的任何一個(gè)都可執(zhí)行本公開的技術(shù)。如圖1所示,系統(tǒng)2包括網(wǎng)絡(luò)10、客戶端裝置14和服務(wù)器裝置16。網(wǎng)絡(luò)10包括路由器12A-12E (統(tǒng)稱為“路由器12”),其便于訪問與網(wǎng)絡(luò)10連接的各種網(wǎng)絡(luò)裝置之間的內(nèi)容,包括客戶端裝置14和服務(wù)器裝置16。雖然示出為包括路由器12,但是,在其他實(shí)例中,系統(tǒng)2可包括另外的或替代的網(wǎng)絡(luò)裝置,例如網(wǎng)關(guān)、交換機(jī)、集線器、防火墻、入侵檢測(cè)/預(yù)防(IDP)裝置,和/或任何其他類型的便于在各種網(wǎng)絡(luò)裝置之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)設(shè)備或裝置。雖然關(guān)于路由器或其他網(wǎng)絡(luò)裝置進(jìn)行了描述,但是,任何包括哈希表和一個(gè)或多個(gè)布隆過濾器的裝置可實(shí)施這里描述的技術(shù),并且,該技術(shù)不應(yīng)限于路由器或其他網(wǎng)絡(luò)裝置。網(wǎng)絡(luò)10使得能夠用一個(gè)或多個(gè)基于包的協(xié)議在網(wǎng)絡(luò)裝置之間傳輸內(nèi)容,例如,傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)。在這方面,網(wǎng)絡(luò)10可經(jīng)由離散數(shù)據(jù)單元(通常叫做“包”)支持?jǐn)?shù)據(jù)的傳輸。結(jié)果,網(wǎng)絡(luò)10可叫做“基于包的”或“包交換的”網(wǎng)絡(luò)。雖然在本公開中描述為傳輸、傳送或以其他方式支持的包,但網(wǎng)絡(luò)10可根據(jù)任何其他由任何其他協(xié)議定義的離散數(shù)據(jù)單元傳輸數(shù)據(jù),例如,由異步傳輸模式(ATM)協(xié)議定義的單元,或由用戶數(shù)據(jù)報(bào)協(xié)議(UDP)定義的數(shù)據(jù)報(bào)。在本實(shí)例中,客戶端裝置14代表對(duì)服務(wù)器裝置16提交服務(wù)請(qǐng)求的裝置。同樣地,服務(wù)器裝置16代表響應(yīng)于請(qǐng)求對(duì)客戶端裝置14提供服務(wù)的裝置的一個(gè)實(shí)例??蛻舳搜b置14和服務(wù)器裝置16還可參與雙向通信會(huì)話,在該會(huì)話中,服務(wù)器裝置16從客戶端裝置14請(qǐng)求服務(wù),并且客戶端裝置14對(duì)服務(wù)器裝置16提供所請(qǐng)求的服務(wù)。以此方式,客戶端裝置14和服務(wù)器裝置16可分別都用作服務(wù)器和客戶端??蛻舳搜b置14可代表終點(diǎn)裝置,例如移動(dòng)裝置(例如,膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、或便攜式電話)、個(gè)人電腦、計(jì)算終端、用于提供基于互聯(lián)網(wǎng)的電視服務(wù)的支持互聯(lián)網(wǎng)的電視或裝置、或其他這種裝置。服務(wù)器裝置16可代表網(wǎng)絡(luò)服務(wù)器、 文件服務(wù)器、對(duì)等裝置(例如,另一用戶的計(jì)算裝置)、數(shù)據(jù)庫(kù)服務(wù)器、打印服務(wù)器、或其他客戶端裝置向其請(qǐng)求服務(wù)的裝置??蛻舳搜b置14經(jīng)由網(wǎng)絡(luò)10對(duì)服務(wù)器裝置16提交請(qǐng)求。在圖1所示的實(shí)例中,客戶端裝置14與路由器12A通信地耦合。在其他實(shí)例中,可經(jīng)由另外的網(wǎng)絡(luò)裝置將客戶端裝置14與路由器12A通信地耦合,例如接入線路,無(wú)線基礎(chǔ)設(shè)施和回運(yùn)(backhaul)網(wǎng)絡(luò),等等。網(wǎng)絡(luò)10的路由器12被配置為確定通過網(wǎng)絡(luò)10到達(dá)各種目的地的路線,例如服務(wù)器裝置16。路由器12執(zhí)行路由選擇協(xié)議,以確定通過網(wǎng)絡(luò)10的路線,并與其他路由器12共享所確定的路線。在圖1的實(shí)例中,路由器12A確定有兩條到達(dá)服務(wù)器裝置16的路線。從路由器12A開始到達(dá)服務(wù)器裝置16的第一條路線包括路由器12D、路由器12E和服務(wù)器裝置16。從路由器12A開始到達(dá)服務(wù)器裝置16的第二條路線包括路由器12B、路由器12C、路由器12E和服務(wù)器裝置16。通常,路由器12A包括控制平面,該控制平面執(zhí)行路由協(xié)議以學(xué)習(xí)網(wǎng)絡(luò)10的拓?fù)洳⑦x擇這些路線中的一條而不是其他條。一旦從以服務(wù)器裝置16為目標(biāo)的客戶端裝置14接收到數(shù)據(jù),路由器12A的數(shù)據(jù)平面對(duì)包內(nèi)的關(guān)鍵字信息執(zhí)行查找功能,并沿著所選擇的路線轉(zhuǎn)發(fā)數(shù)據(jù)。在轉(zhuǎn)發(fā)包之前,路由器12可對(duì)包應(yīng)用一個(gè)或多個(gè)過濾器。在一些實(shí)例中,過濾器規(guī)定一個(gè)或多個(gè)條件和一組將在匹配該條件的包上執(zhí)行的動(dòng)作。在各種實(shí)例中,該條件規(guī)定一個(gè)或多個(gè)源互聯(lián)網(wǎng)協(xié)議(IP)地址、目的IP地址、源端口、目的端口、協(xié)議,和/或包的其他字段。執(zhí)行的動(dòng)作可包括以下動(dòng)作中的一個(gè)或多個(gè):對(duì)包添加標(biāo)簽(進(jìn)行多協(xié)議標(biāo)簽交換(MPLS)以隧道傳輸包),去除或交換包上的標(biāo)簽,對(duì)包檢查病毒,在包上執(zhí)行深度包檢查,在包上執(zhí)行服務(wù)質(zhì)量處理(例如,相對(duì)于其他包而優(yōu)先化該包),阻止或丟棄包(例如,當(dāng)已將與包相關(guān)的源或目的確定為是惡意的時(shí)),或其他服務(wù)。在一些實(shí)例中,當(dāng)轉(zhuǎn)發(fā)單獨(dú)的包以識(shí)別一個(gè)或多個(gè)應(yīng)用于包的過濾器時(shí),數(shù)據(jù)平面執(zhí)行最長(zhǎng)前綴匹配算法。例如,可將過濾器儲(chǔ)存在過濾器表中,并且,過濾器規(guī)定與包匹配的標(biāo)準(zhǔn),例如網(wǎng)絡(luò)前綴。共同地,由過濾器規(guī)定的標(biāo)準(zhǔn)控制將由數(shù)據(jù)平面對(duì)包應(yīng)用哪個(gè)過濾器。作為一個(gè)實(shí)例,路由器12A 可無(wú)需用各服務(wù)器裝置16的特定的源或目的網(wǎng)絡(luò)地址(例如,10.1.1.8)來配置,而是可被配置為使得對(duì)于具有與某一前綴相匹配的源或目的地址(例如,與網(wǎng)絡(luò)前綴10.1/16相應(yīng)的地址的范圍)的包,由路由器12A將某過濾器應(yīng)用于這些包。通常,路由器12A的數(shù)據(jù)平面用最長(zhǎng)前綴匹配算法來識(shí)別與匹配所接收的包的關(guān)鍵字信息的最長(zhǎng)前綴相對(duì)應(yīng)的過濾器表中的條目。路由器12A應(yīng)用被識(shí)別為儲(chǔ)存由所接收的包的關(guān)鍵字信息滿足的最長(zhǎng)匹配前綴的過濾器表的條目中規(guī)定的一組過濾器。在一些實(shí)例中,路由器12用哈希單元來識(shí)別與特定包匹配的過濾器。在一個(gè)實(shí)例中,哈希單元支持從/0到/128的前綴長(zhǎng)度(其用作哈希單元中的關(guān)鍵字值)。在一些實(shí)例中,具有從/0到/64的長(zhǎng)度的前綴占用哈希單元的桶(bucket)的單個(gè)單位,同時(shí),具有從/65到/128的前綴長(zhǎng)度的前綴在哈希單元中占用兩個(gè)連續(xù)單位,稱作雙單位。在一些實(shí)例中,哈希單元的哈希表物理地支持64K的單個(gè)單位,每個(gè)桶具有兩個(gè)單位。在一些實(shí)例中,如果所有前綴具有單個(gè)單位,那么每個(gè)哈希表可支持大約80%至90%(例如,51000至57600個(gè)條目)的負(fù)載。在一些實(shí)例中,如果所有前綴具有雙單位,那么哈希單元的每個(gè)哈希表可支持大約40%至45% (例如,28800個(gè)條目)的負(fù)載。哈希單元的物理哈希表可稱作關(guān)鍵字哈希表。在一些實(shí)例中,每個(gè)關(guān)鍵字哈希表具有大約16K單位和相關(guān)結(jié)果的容量。2011年9月22日由Keen等人提交的名為“動(dòng)態(tài)調(diào)節(jié)哈希表容量”的美國(guó)專利申請(qǐng)第13/239,774號(hào)描述了哈希單元和相應(yīng)哈希表的一個(gè)實(shí)例實(shí)現(xiàn)方式,其全部?jī)?nèi)容結(jié)合于此以供參考。當(dāng)向關(guān)鍵字哈希表添加值時(shí),哈希單元將關(guān)鍵字值和相關(guān)的值儲(chǔ)存在關(guān)鍵字值所映射的桶的單位之一中。例如,相對(duì)于路由器12A的過濾器,源或目的網(wǎng)絡(luò)地址的不同長(zhǎng)度前綴用作關(guān)鍵字值,而每個(gè)相關(guān)的值代表與特定關(guān)鍵字值匹配的過濾器的特定條件(term)。因此,路由器12A將目的地址和相關(guān)的值儲(chǔ)存在桶的單位中,哈希函數(shù)將目的地址映射至該桶。相關(guān)的值可規(guī)定網(wǎng)絡(luò)接口或與目的地址匹配的過濾器的特定條件。通過將前綴儲(chǔ)存在單位中,如果兩個(gè)或更多個(gè)前綴映射至相同的桶,那么路由器12A可確定哪個(gè)單位儲(chǔ)存與特定長(zhǎng)度前綴相關(guān)的值。在一些實(shí)例中,路由器12A包括多個(gè)哈希單元,以實(shí)施布隆過濾器。布隆過濾器通常是用于儲(chǔ)存是否已經(jīng)儲(chǔ)存(或之前已經(jīng)處理)特定值的指示的數(shù)據(jù)結(jié)構(gòu)。在一個(gè)實(shí)例中,布隆過濾器是在數(shù)組的每個(gè)條目?jī)?chǔ)存一個(gè)I位值的位數(shù)組。布隆過濾器數(shù)據(jù)結(jié)構(gòu)通常被設(shè)計(jì)為使得錯(cuò)誤否定被避免,同時(shí)錯(cuò)誤肯定的可能性懸而未決(盡管較小)。即,良好設(shè)計(jì)的布隆過濾器可提供是否尚未儲(chǔ)存特定值的指示,但是,在一些情況下,可能提供錯(cuò)誤的已經(jīng)儲(chǔ)存值(實(shí)際上,當(dāng)尚未儲(chǔ)存值時(shí))的指示。當(dāng)路由器12A在例如關(guān)鍵字哈希表中儲(chǔ)存關(guān)鍵字值時(shí),路由器12A向布隆過濾器添加關(guān)鍵字值。通常,當(dāng)用特定值詢問布隆過濾器時(shí),布隆過濾器提供是否該值被儲(chǔ)存在布隆過濾器中的指示。在一個(gè)實(shí)例中,如果特定值被儲(chǔ)存在布隆過濾器中,那么查找返回值1,如果特定值未儲(chǔ)存在布隆過濾器中,那么返回值O。雖然當(dāng)使用布隆過濾器時(shí)錯(cuò)誤肯定是可能的,但是,由于布隆過濾器的設(shè)計(jì)的原因,錯(cuò)誤否定通常是不可能的。因此,一旦接收到包括用于包的源或目的地址的前綴的關(guān)鍵字值,路由器12A首先確定該關(guān)鍵字值是否儲(chǔ)存在布隆過濾器中,如果是的話,確定該關(guān)鍵字值是否實(shí)際上儲(chǔ)存在關(guān)鍵字哈希表中。在一些實(shí)例中,可在硬件中(例如,當(dāng)位數(shù)組儲(chǔ)存在多個(gè)存儲(chǔ)體中時(shí))或在軟件中實(shí)現(xiàn)布隆過濾器。當(dāng)在硬件中實(shí)現(xiàn)時(shí),路由器12A可并行地對(duì)多個(gè)關(guān)鍵字執(zhí)行查找,這可減小查找關(guān)鍵字所需的時(shí)鐘周期的總數(shù)。然而,當(dāng)大量搜索關(guān)鍵字都需要從相同的存儲(chǔ)體讀取時(shí)(例如,當(dāng)存在大量指向相 同目的網(wǎng)絡(luò)地址的包流時(shí)),存儲(chǔ)體的隊(duì)列可能變滿,防止了對(duì)布隆過濾器的任何存儲(chǔ)體發(fā)布額外的查找請(qǐng)求,直到隊(duì)列不再滿為止。因此,具有滿隊(duì)列的存儲(chǔ)體會(huì)變成限制布隆過濾器查找和路由器的總吞吐量的瓶頸。在本公開中,具有滿隊(duì)列的存儲(chǔ)體可叫做“熱存儲(chǔ)體”。雖然關(guān)于布隆過濾器進(jìn)行描述,但是,本公開的技術(shù)可應(yīng)用于任何存儲(chǔ)結(jié)構(gòu),例如,硬件實(shí)施的哈希表??蓮娜魏未鎯?chǔ)結(jié)構(gòu)的相同存儲(chǔ)體請(qǐng)求大量讀取。因此,任何存儲(chǔ)結(jié)構(gòu)可能遭遇“熱存儲(chǔ)”,其可能限制存儲(chǔ)結(jié)構(gòu)的總吞吐量。根據(jù)本公開的技術(shù),路由器12A可識(shí)別這樣的包流:其要求多于可配置閾值數(shù)量的時(shí)鐘周期來進(jìn)行處理或要求關(guān)鍵字哈希表中的多于可配置閾值數(shù)量的查找。路由器12A配置有管理對(duì)布隆過濾器的查找請(qǐng)求的調(diào)度元件。當(dāng)布隆過濾器的隊(duì)列滿了時(shí),調(diào)度元件可不將額外的關(guān)鍵字引導(dǎo)至隊(duì)列,從而增加處理關(guān)鍵字所需的時(shí)鐘周期的數(shù)量。一旦關(guān)鍵字被處理并從關(guān)鍵字哈希表檢索到結(jié)果,路由器12A的控制器確定在當(dāng)過濾器查找單元首先接收到包信息時(shí)和當(dāng)從關(guān)鍵字哈希表檢索到結(jié)果時(shí)之間過去的時(shí)鐘周期的數(shù)量。如果時(shí)鐘周期的數(shù)量超過可配置閾值,那么控制器將包流信息標(biāo)記為適合于儲(chǔ)存在路由器12A的流緩存器中??刂破鬟€可確定在關(guān)鍵字哈希表中確定未發(fā)現(xiàn)匹配或發(fā)現(xiàn)匹配并檢索結(jié)果所需的查找的數(shù)量。當(dāng)查找的數(shù)量超過查找的可配置閾值數(shù)量時(shí),控制器將包流信息標(biāo)記為適合于儲(chǔ)存在流緩存器中。在一些實(shí)例中,處理包流信息所需的時(shí)鐘周期的數(shù)量和關(guān)鍵字哈希表中的查找的數(shù)量可能均超過各自的可配置閾值。然而,當(dāng)超過任一閾值時(shí),控制器可將包流信息標(biāo)記為適合于儲(chǔ)存在流緩存器中。在各種情況中,路由器12A可被配置為,在控制器將包流信息標(biāo)記為適合于儲(chǔ)存在流緩存器中之前,要求兩個(gè)閾值均被超過。典型地,路由器12A將目的網(wǎng)絡(luò)地址和從關(guān)鍵字哈希表檢索的結(jié)果儲(chǔ)存在流緩存器中。然而,路由器12A可被配置為,儲(chǔ)存關(guān)鍵字和結(jié)果信息的任何組合。例如,路由器12A可用源網(wǎng)絡(luò)地址和目的網(wǎng)絡(luò)地址的組合作為流緩存器中的關(guān)鍵字。在另一實(shí)例中,路由器12A可用目的網(wǎng)絡(luò)地址和端口號(hào)的組合作為流緩存器中的關(guān)鍵字。當(dāng)路由器12A接收后續(xù)的具有與之前處理的包相同的關(guān)鍵字信息(例如,相同的目的網(wǎng)絡(luò)地址)的包或包流時(shí),路由器12A可首先查找流緩存器中的目的網(wǎng)絡(luò)地址或其他關(guān)鍵字。如果在流緩存器中找到該關(guān)鍵字,那么控制器可使用與儲(chǔ)存在流緩存器中的關(guān)鍵字相關(guān)的結(jié)果,并繞過布隆過濾器或關(guān)鍵字哈希表中的查找的執(zhí)行。以此方式,本公開的技術(shù)可減少在布隆過濾器和關(guān)鍵字哈希表中執(zhí)行的查找的數(shù)量,從而減少熱存儲(chǔ)的出現(xiàn)并提高網(wǎng)絡(luò)裝置的吞吐量。雖然主要關(guān)于路由器12A進(jìn)行描述,應(yīng)理解,可用路由器12、客戶端裝置14、服務(wù)器裝置16中的任何一個(gè),或任何其他將執(zhí)行哈希功能的計(jì)算裝置來實(shí)現(xiàn)本公開的技術(shù)。此夕卜,可將本公開的技術(shù)應(yīng)用于其他背景和用于其他用途。例如,當(dāng)執(zhí)行包查找和轉(zhuǎn)發(fā)時(shí),路由器12A也可應(yīng)用本公開的技術(shù)。當(dāng)轉(zhuǎn)發(fā)單獨(dú)的包時(shí),路由器12A的數(shù)據(jù)平面可執(zhí)行最長(zhǎng)前綴匹配算法,以識(shí)別最匹配包的目的地址的數(shù)據(jù)平面的轉(zhuǎn)發(fā)信息庫(kù)(FIB)的條目。在各種情況中,路由器12A將FIB儲(chǔ)存在具有多個(gè)哈希表的哈希單元中,并與哈希表一起執(zhí)行一個(gè)或多個(gè)布隆過濾器。從而,路由器12A可應(yīng)用本公開的技術(shù),以編程地配置FIB的哈希單元,從而動(dòng)態(tài)地繞過一個(gè)或多個(gè)布隆過濾器。圖2是示出包括根據(jù)本公開的一個(gè)或多個(gè)技術(shù)配置的過濾器查找塊40的實(shí)例路由器20的框圖。為了說明的目的,下面可在圖1的實(shí)例所示的系統(tǒng)2的背景下描述路由器20,并且,路由器20可代表任何一個(gè)路由器12。在本實(shí)例實(shí)施方式中,路由器20包括控制單元22、接口卡(IFC) 24A-24N (統(tǒng)稱為“IFC24”)和服務(wù)卡30。路由器20典型地包括機(jī)架(為了易于圖示的目的而未在圖2的實(shí)例中示出),其具有用于容納一組卡的多個(gè)槽,包括IFC24和服務(wù)卡30。可將每個(gè)卡插入機(jī)架的相應(yīng)的槽,以經(jīng)由總線、背板或其他電通信機(jī)制使卡與控制單元22通信地耦合。IFC24經(jīng)由入站網(wǎng)絡(luò)鏈路26A-26N (統(tǒng)稱為“入站鏈路26”)和出站網(wǎng)絡(luò)鏈路28A-28N (統(tǒng)稱為“出站鏈路28”),發(fā)送和接收包流或網(wǎng)絡(luò)流量。在一些實(shí)例中,用于共同IFC的入站鏈路26和出站鏈路28對(duì)于在全雙工模式中操作的IFC形成共同的物理通信介質(zhì)。即,在一些實(shí)例中,每個(gè)IFC24與可基本上同時(shí)發(fā)送和接收數(shù)據(jù)的各通信介質(zhì)耦合。在其他實(shí)例中,入站鏈路26和出站鏈路28對(duì)各自的IFC24形成單獨(dú)的物理介質(zhì)。控制單元22可包括執(zhí)行軟件指令的一個(gè)或多個(gè)處理器(未在圖2中示出),例如,那些用來定義軟件或計(jì)算機(jī)程序的,儲(chǔ)存于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(同樣,未在圖2中示出)上,例如,存儲(chǔ)裝置 (例如,磁盤驅(qū)動(dòng)器,或光驅(qū))、或存儲(chǔ)器(例如,閃存、隨機(jī)存取存儲(chǔ)器或RAM)、或儲(chǔ)存使可編程處理器執(zhí)行這里描述的技術(shù)的指令的任何其他類型的易失性或非易失性存儲(chǔ)器?;蛘撸刂茊卧?2可包括專用硬件,例如,一個(gè)或多個(gè)集成電路、一個(gè)或多個(gè)專用集成電路(ASIC)、一個(gè)或多個(gè)專用特殊處理器(ASSP)、一個(gè)或多個(gè)現(xiàn)場(chǎng)可編程門陣列(FPGA)、或用于執(zhí)行這里描述的技術(shù)的一個(gè)或多個(gè)前述專用硬件實(shí)例的任何組合。還可將控制單元22分成邏輯或物理“平面”,以包括第一控制或路由平面32和第二數(shù)據(jù)或轉(zhuǎn)發(fā)平面34。在一些實(shí)例中,可將控制單元22進(jìn)一步分成第三邏輯或物理“平面”,服務(wù)平面。即,控制單元22可執(zhí)行三個(gè)不同的功能,例如,路由、轉(zhuǎn)發(fā)和服務(wù)功能,這可以以邏輯方式,例如,作為在同一組硬件元件上執(zhí)行的不同的軟件實(shí)例,或物理方式,例如,作為在硬件中靜態(tài)地執(zhí)行功能或動(dòng)態(tài)地執(zhí)行軟件或計(jì)算機(jī)程序以執(zhí)行功能的不同的物理專用硬件元件,或邏輯和物理實(shí)現(xiàn)方式的一些組合??刂茊卧?2的控制平面32可提供路由器20的路由功能。在這方面,控制平面32可代表執(zhí)行路由協(xié)議36的控制單元22的硬件或硬件和軟件的組合。例如,路由協(xié)議36可包括中間系統(tǒng)到中間系統(tǒng)(IS-1S)、開放最短路徑優(yōu)先(0SPF)、路由信息協(xié)議(RIP)、邊界網(wǎng)關(guān)協(xié)議(BGP)或其他路由協(xié)議。通過執(zhí)行路由協(xié)議36,控制平面32識(shí)別通過網(wǎng)絡(luò)的現(xiàn)有路線,并確定新的通過網(wǎng)絡(luò)的路線??刂破矫?2將路由信息儲(chǔ)存在路由信息庫(kù)(RIB)38內(nèi)。路由信息可包括定義網(wǎng)絡(luò)的拓?fù)涞男畔ⅲ?,圖1的網(wǎng)絡(luò)10??刂破矫?2可解析由路由信息定義的拓?fù)?,以選擇或確定一個(gè)或多個(gè)通過網(wǎng)絡(luò)10的路線。然后,控制平面32可根據(jù)這些路線更新數(shù)據(jù)平面34,以用儲(chǔ)存在轉(zhuǎn)發(fā)信息庫(kù)(FIB)46內(nèi)的轉(zhuǎn)發(fā)信息對(duì)數(shù)據(jù)平面34編程。轉(zhuǎn)發(fā)信息將關(guān)鍵字信息(例如,IP地址或IP前綴或標(biāo)簽)與下一跳(例如,相鄰路由器)相關(guān)聯(lián),并最終與和出站鏈路28 f禹合的路由器20的輸出接口相關(guān)聯(lián)。當(dāng)轉(zhuǎn)發(fā)包時(shí),數(shù)據(jù)平面34處理從包的報(bào)頭提取的關(guān)鍵字,以遍歷儲(chǔ)存于FIB46中的轉(zhuǎn)發(fā)信息并選擇將包轉(zhuǎn)發(fā)至其的下一跳。基于所選擇的下一跳,數(shù)據(jù)平面34識(shí)別與該下一跳耦合的一組一個(gè)或多個(gè)出站鏈路28。在經(jīng)由一個(gè)或多個(gè)出站鏈路28轉(zhuǎn)發(fā)包之前,數(shù)據(jù)平面34可對(duì)包應(yīng)用一個(gè)或多個(gè)過濾器。如圖2所示,數(shù)據(jù)平面34包括過濾器查找塊40、過濾器42、和最長(zhǎng)前綴匹配算法模塊(LPM模塊)44。過濾器42包括為一個(gè)或多個(gè)不同的網(wǎng)絡(luò)地址前綴定義的一個(gè)或多個(gè)過濾器。在一些實(shí)例中,過濾器規(guī)定一個(gè)或多個(gè)條件和將在與網(wǎng)絡(luò)地址前綴相匹配的包上執(zhí)行的一組動(dòng)作。該動(dòng)作可包括以下動(dòng)作中的一個(gè)或多個(gè):對(duì)包添加標(biāo)簽,去除或交換包上的標(biāo)簽,對(duì)包檢查病毒,在包上執(zhí)行深度包檢查,在包上執(zhí)行服務(wù)質(zhì)量處理,阻止或丟棄包,或其他服務(wù)。 通常,最長(zhǎng)前綴匹配算法模塊44執(zhí)行最長(zhǎng)前綴匹配算法,并被過濾器查找塊40用來識(shí)別對(duì)于網(wǎng)絡(luò)地址的最長(zhǎng)定義前綴來說匹配于網(wǎng)絡(luò)地址的過濾器42的條件。根據(jù)最長(zhǎng)前綴匹配算法,從網(wǎng)絡(luò)地址中產(chǎn)生一定數(shù)量的前綴。從網(wǎng)絡(luò)地址產(chǎn)生的前綴的數(shù)量可由管理員配置,或者,例如,可基于用于該算法的網(wǎng)絡(luò)地址的類型而改變。在一個(gè)實(shí)例中,基于網(wǎng)絡(luò)地址產(chǎn)生16個(gè)或更少的前綴,每個(gè)具有不同長(zhǎng)度。最長(zhǎng)前綴匹配算法的一個(gè)目的是,找到具有匹配的最長(zhǎng)前綴。按照此目的,執(zhí)行最長(zhǎng)前綴匹配算法的硬件或軟件首先執(zhí)行對(duì)最長(zhǎng)前綴(即,最具體的前綴)的搜索。如果未發(fā)現(xiàn)匹配,那么對(duì)下一個(gè)最長(zhǎng)前綴執(zhí)行搜索。此過程是一個(gè)迭代過程,其繼續(xù)直到發(fā)現(xiàn)匹配為止,或直到已對(duì)所有可能的前綴執(zhí)行搜索為止。過濾器查找塊40儲(chǔ)存為其定義了至少一個(gè)過濾器的前綴。在一些實(shí)例中,可將儲(chǔ)存于過濾器查找塊40中的前綴與前綴長(zhǎng)度連接(例如,可將前綴10.1與前綴長(zhǎng)度/16連接,用于過濾器查找塊40中的條目“10.1/16”)。過濾器查找塊40還對(duì)由路由器20接收的每個(gè)包產(chǎn)生一組前綴,并用最長(zhǎng)前綴匹配算法對(duì)每個(gè)包搜索相關(guān)的值。即,過濾器查找塊40對(duì)每個(gè)所產(chǎn)生的前綴執(zhí)行搜索,從最長(zhǎng)前綴開始并移動(dòng)至最短前綴,直到找到匹配為止。在一個(gè)實(shí)例中,可用過濾器查找塊40對(duì)源地址(例如,源介質(zhì)訪問控制地址、源IP地址、或源標(biāo)識(shí)符)或目的地址(例如,目的介質(zhì)訪問控制地址、目的IP地址、或目的標(biāo)識(shí)符)執(zhí)行最長(zhǎng)前綴匹配。路由器20的管理員可配置策略37,控制平面32可用該策略37編程地配置過濾器查找塊40執(zhí)行過濾器查找的方式。例如,控制平面32可從數(shù)據(jù)平面34接收系統(tǒng)性能信息,其反映過濾器查找塊40的性能?;诓呗?7和系統(tǒng)性能信息,控制平面32以在各種情況下可提高過濾器查找塊40的性能的方式配置過濾器查找塊40。S卩,控制平面32可選擇一種策略37以配置過濾器查找塊40??捎煽刂破矫?2配置的過濾器查找塊40的一個(gè)方面包括由過濾器查找塊40用來確定包何時(shí)適合于儲(chǔ)存在過濾器查找塊40的流緩存器中的閾值以及過濾器查找塊40如何管理儲(chǔ)存于流緩存器中的信息。參考圖3至圖6描述過濾器查找塊40的其他細(xì)節(jié)。圖3是更詳細(xì)地示出路由器20的一個(gè)實(shí)例過濾器查找塊40的框圖。為了圖示的目的,下面可在圖2的實(shí)例中示出的路由器20的背景下描述過濾器查找塊40。在此實(shí)例實(shí)施方式中,過濾器查找塊40包括關(guān)鍵字管理器50、前綴查找模塊52、布隆過濾器54A和54B (統(tǒng)稱為“布隆過濾器54”)、哈??刂破?6、關(guān)鍵字哈希表58和流緩存器60??苫趶呐c路由器20相互作用的 管理員接收的輸入來配置前綴查找模塊52、布隆過濾器54、關(guān)鍵字哈希表58和流緩存器60的條目。例如,如果管理員在路由器20上配置新的過濾器,那么過濾器查找塊40將與該過濾器相關(guān)的一個(gè)或多個(gè)前綴儲(chǔ)存在關(guān)鍵字哈希表58內(nèi),并在每個(gè)布隆過濾器54中添加條目,以表示在關(guān)鍵字哈希表58中存在對(duì)于該前綴相應(yīng)的匹配條目。通常,當(dāng)路由器20接收包時(shí),包括在包中的信息的至少一部分被發(fā)送至過濾器查找塊40。在一個(gè)實(shí)例中,包括在包中的源或目的網(wǎng)絡(luò)地址被發(fā)送至過濾器查找塊40。關(guān)鍵字管理器50接收信息,并基于該信息生成查找關(guān)鍵字。在一些實(shí)例中,查找關(guān)鍵字包括包括在包中的目的網(wǎng)絡(luò)地址。在其他實(shí)例中,查找關(guān)鍵字可包括包括在包的報(bào)頭信息中的源網(wǎng)絡(luò)地址、目的網(wǎng)絡(luò)地址和端口號(hào)的任何組合。關(guān)鍵字管理器50向流緩存器60發(fā)送命令和查找關(guān)鍵字,以使流緩存器60對(duì)查找關(guān)鍵字執(zhí)行查找。在一些實(shí)例中,關(guān)鍵字管理器50以與將查找關(guān)鍵字發(fā)送至流緩存器60并行地向前綴查找模塊52發(fā)送查找關(guān)鍵字。如果流緩存器60在流緩存器60的哈希表中找到查找關(guān)鍵字的匹配,那么流緩存器60檢索與查找關(guān)鍵字相關(guān)的儲(chǔ)存結(jié)果信息,并將結(jié)果信息發(fā)送至前綴查找模塊52。如果流緩存器60未找到關(guān)鍵字的匹配,那么流緩存器60向前綴查找模塊52發(fā)送表示未找到匹配的消息。前綴查找模塊52至少部分地基于從流緩存器60接收的結(jié)果處理查找關(guān)鍵字。例如,當(dāng)流緩存器60找到匹配并將儲(chǔ)存結(jié)果信息作為結(jié)果發(fā)送至前綴查找模塊52時(shí),前綴查找模塊52不產(chǎn)生一組基于查找關(guān)鍵字的前綴。相反,前綴查找模塊52將從流緩存器60接收的結(jié)果信息發(fā)送至哈??刂破?6。
當(dāng)流緩存器60未找到匹配時(shí),前綴查找模塊52向哈??刂破?6發(fā)送消息,該消息指示哈希控制器56至少將查找關(guān)鍵字的時(shí)鐘周期計(jì)數(shù)器初始化至0,并用查找關(guān)鍵字生成一組前綴。在前綴查找模塊52中規(guī)定了從查找關(guān)鍵字產(chǎn)生的前綴的數(shù)量和長(zhǎng)度。對(duì)于在當(dāng)時(shí)鐘周期計(jì)數(shù)器開始時(shí)和當(dāng)在關(guān)鍵字哈希表58中找到匹配或者確定了在關(guān)鍵字哈希表58中沒有查找關(guān)鍵字的匹配(例如,因?yàn)樵陉P(guān)鍵字哈希表58中沒有找到從查找關(guān)鍵字產(chǎn)生的前綴)時(shí)之間過去的每個(gè)時(shí)鐘周期,時(shí)鐘周期計(jì)數(shù)器遞增。在一些實(shí)例中,當(dāng)前綴查找模塊52向布隆過濾器54發(fā)送所生成的一組前綴時(shí),時(shí)鐘周期計(jì)數(shù)器開始。在生成前綴查找模塊52中所規(guī)定的一組前綴之后,過濾塊40在每個(gè)布隆過濾器54中對(duì)所生成的一個(gè)或多個(gè)前綴執(zhí)行查找。即,在布隆過濾器54A和布隆過濾器54B中查找整組所生成的前綴。對(duì)于在每個(gè)布隆過濾器54中查找的每個(gè)前綴,返回表示是否在各布隆過濾器54中找到前綴的值。在一個(gè)實(shí)例中,值I表示找到前綴,值O表示未找到前綴。雖然在圖3中示出為包括兩個(gè)布隆過濾器54A和54B,但是,過濾器查找塊40的其他實(shí)例可包括一個(gè)布隆過濾器或多于兩個(gè)布隆過濾器。哈希控制器56確定是否在關(guān)鍵字哈希表58中對(duì)每個(gè)前綴執(zhí)行查找。哈??刂破?6檢查從對(duì)每個(gè)前綴的布隆過濾器查找返回的值,并識(shí)別可能包括在關(guān)鍵字哈希表58中的最長(zhǎng)前綴。如果從在 布隆過濾器54A和54B中執(zhí)行的查找返回的兩個(gè)值均表示該前綴可能包括在關(guān)鍵字哈希表58中,那么哈??刂破?6確定該前綴可能包括在關(guān)鍵字哈希表58中。如果從在布隆過濾器54A和54B中執(zhí)行的查找返回的任一值表示該前綴不包括在關(guān)鍵字哈希表58中,那么哈??刂破鞔_定該前綴不包括在關(guān)鍵字哈希表58中。從兩個(gè)布隆過濾器中對(duì)單個(gè)前綴得到錯(cuò)誤肯定結(jié)果的可能性比如果僅使用一個(gè)布隆過濾器時(shí)低。因?yàn)?,僅當(dāng)來自兩個(gè)布隆過濾器54的返回值均表示前綴可能在該組中時(shí),哈??刂破?6考慮在關(guān)鍵字哈希表58中對(duì)前綴執(zhí)行查找,所以,與當(dāng)使用一個(gè)布隆過濾器時(shí)相比,當(dāng)使用兩個(gè)布隆過濾器時(shí),可減少在關(guān)鍵字哈希表58上執(zhí)行的不需要的或不成功的查找的數(shù)量。當(dāng)哈希控制器56識(shí)別出可能包括在關(guān)鍵字哈希表58中的至少一個(gè)前綴時(shí),哈??刂破?6初始化計(jì)數(shù)器,該計(jì)數(shù)器對(duì)在關(guān)鍵字哈希表58中執(zhí)行的查找的數(shù)量進(jìn)行計(jì)數(shù),直到已經(jīng)確定結(jié)果為止。哈??刂破?6識(shí)別可能在關(guān)鍵字哈希表58中的最長(zhǎng)前綴,用所識(shí)別的前綴在關(guān)鍵字哈希表58中執(zhí)行查找,并遞增關(guān)鍵字哈希表查找計(jì)數(shù)器。當(dāng)哈希控制器56執(zhí)行查找時(shí),哈??刂破?6對(duì)前綴應(yīng)用哈希函數(shù),以識(shí)別如果前綴被儲(chǔ)存在關(guān)鍵字哈希表58中那么前綴應(yīng)位于關(guān)鍵字哈希表58中的位置。如果未在關(guān)鍵字哈希表58中找到前綴(例如,由于從布隆過濾器接收的錯(cuò)誤肯定指示),那么,哈??刂破?6識(shí)別可能在關(guān)鍵字哈希表58中的下一個(gè)最長(zhǎng)前綴,用該下一個(gè)最長(zhǎng)前綴在關(guān)鍵字哈希表58中執(zhí)行查找,并遞增關(guān)鍵字哈希表查找計(jì)數(shù)器。此過程繼續(xù),直到在關(guān)鍵字哈希表58中找到前綴或在關(guān)鍵字哈希表58中未找到更多前綴為止。當(dāng)找到匹配或在關(guān)鍵字哈希表58中未找到更多前綴時(shí),哈??刂破?6使時(shí)鐘周期計(jì)數(shù)器停止。哈??刂破?6將時(shí)鐘周期計(jì)數(shù)器的值、關(guān)鍵字哈希表查找計(jì)數(shù)器的值、查找關(guān)鍵字、以及與查找關(guān)鍵字相關(guān)的結(jié)果發(fā)送至流緩存器60。與查找關(guān)鍵字相關(guān)的結(jié)果包括當(dāng)找到匹配時(shí)從關(guān)鍵字哈希表58中的查找返回的信息,或當(dāng)未找到匹配時(shí)在關(guān)鍵字哈希表58中未找到查找關(guān)鍵字的指示。流緩存器60確定時(shí)鐘周期計(jì)數(shù)器的值是否大于可配置閾值,或者關(guān)鍵字哈希表查找計(jì)數(shù)器的值是否大于另一可配置閾值。在時(shí)鐘周期計(jì)數(shù)器的值大于可配置閾值或關(guān)鍵字哈希表查找計(jì)數(shù)器的值大于另一可配置閾值的實(shí)例中,流緩存器60識(shí)別出該查找關(guān)鍵字適合于儲(chǔ)存在流緩存器60中。對(duì)于適合于儲(chǔ)存在流緩存器60中的包流,流緩存器60至少通過對(duì)查找關(guān)鍵字應(yīng)用哈希函數(shù),來確定在哪里儲(chǔ)存查找關(guān)鍵字和結(jié)果。哈希結(jié)果與流緩存器60的哈希表內(nèi)的位置(例如桶)相對(duì)應(yīng)。在一個(gè)實(shí)例中,流緩存器60被實(shí)現(xiàn)為具有512個(gè)桶的哈希表,每個(gè)桶具有2個(gè)單位。查找關(guān)鍵字和相關(guān)結(jié)果的組合占用一個(gè)單位。因此,在此實(shí)例中,每個(gè)桶可儲(chǔ)存與兩個(gè)包流相關(guān)的信息,且流緩存器60可儲(chǔ)存與1024個(gè)包流相關(guān)的信息。在一些情況中,查找關(guān)鍵字和相關(guān)結(jié)果可能已被儲(chǔ)存在與由哈希結(jié)果識(shí)別的桶相對(duì)應(yīng)的一個(gè)或兩個(gè)單位中。流緩存器60可被編程地配置為,用任意數(shù)量的不同算法(包括隨機(jī)收回和最近最少使用)來選擇哪個(gè)單位來儲(chǔ)存查找關(guān)鍵字和相關(guān)結(jié)果。在流緩存器60被編程為使用隨機(jī)收回的實(shí)例中,流緩存器60可包括產(chǎn)生隨機(jī)數(shù)(例如O或I)的移位寄存器,該隨機(jī)數(shù)與哈希桶的兩個(gè)單位中的一個(gè)相對(duì)應(yīng)。流緩存器60將查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在與所產(chǎn)生的隨機(jī)數(shù)相對(duì)應(yīng)的單位中。在流緩存器60被編程為用最近最少使用算法來選擇單位以儲(chǔ)存查找關(guān)鍵字和相關(guān)結(jié)果的實(shí)例中,流緩存器60保持訪問信息,并基于何時(shí)最近一次訪問單位來標(biāo)記適合于被替換的單位。流緩存器60識(shí)別包括最近最少被訪問的或由流緩存器60使用的信息的桶的單位,并將新的查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在識(shí)別出的單位中。圖4是更詳細(xì)地示出路由器20的實(shí)例布隆過濾器54A的框圖。為了圖示的目的,下面可在圖3的實(shí)例中示出的過濾器查找塊40和圖2的實(shí)例中示出的路由器20的背景下描述布隆過濾器54A。布隆過濾器54A是路由器20的布隆過濾器的一個(gè)實(shí)例。在其他實(shí)例中,路由器20可包括具有不同結(jié)構(gòu)的布隆過濾器。布隆過濾器54A包括隊(duì)列70A-70N (統(tǒng)稱為“隊(duì)列70”)、哈希函 數(shù)72A-72N (統(tǒng)稱為“哈希函數(shù)72”)、控制器74A-74N (統(tǒng)稱為“控制器74”)和存儲(chǔ)體(memory bank) 76A-76N (統(tǒng)稱為“存儲(chǔ)體76”)。每個(gè)存儲(chǔ)體76是獨(dú)立的硬件存儲(chǔ)體,可與其他的存儲(chǔ)體76 —起被并行地訪問。布隆過濾器54A的數(shù)據(jù)結(jié)構(gòu)被儲(chǔ)存在存儲(chǔ)體76中,從而基于對(duì)每個(gè)與過濾器相關(guān)的前綴應(yīng)用哈希函數(shù)的結(jié)果,將表示前綴是否可能儲(chǔ)存在關(guān)鍵字哈希表58中或肯定不儲(chǔ)存在關(guān)鍵字哈希表58中的值跨多個(gè)存儲(chǔ)體76儲(chǔ)存。在一個(gè)實(shí)例中,存儲(chǔ)體76的數(shù)量與隊(duì)列70的數(shù)量相同。在另一實(shí)例中,存儲(chǔ)體76的數(shù)量比隊(duì)列70的數(shù)量大(例如,當(dāng)具有16個(gè)隊(duì)列時(shí)具有32個(gè)存儲(chǔ)體)。通過具有比隊(duì)列70多的存儲(chǔ)體76,可跨更多存儲(chǔ)體散布值,從而減小兩個(gè)不同前綴將需要從同一存儲(chǔ)體76中查找的可能性。減少需要從同一存儲(chǔ)體76查找的前綴的數(shù)量可增加查找操作的并行性,并可減小前綴在一個(gè)或多個(gè)隊(duì)列70中的堆積。布隆過濾器54A從前綴查找模塊52接收一組前綴,并將前綴暫時(shí)儲(chǔ)存在隊(duì)列70中。每個(gè)隊(duì)列70被配置為儲(chǔ)存一定長(zhǎng)度的前綴。在一個(gè)實(shí)例中,隊(duì)列70包括16個(gè)隊(duì)列,其中,每個(gè)隊(duì)列被配置為儲(chǔ)存包括在從前綴查找模塊52接收的一組前綴中的16個(gè)不同長(zhǎng)度前綴中的一個(gè)。例如,隊(duì)列70A可被配置為儲(chǔ)存一組16個(gè)前綴長(zhǎng)度中的最長(zhǎng)前綴長(zhǎng)度(例如,長(zhǎng)度/32的前綴),隊(duì)列70B可被配置為儲(chǔ)存這組16個(gè)前綴長(zhǎng)度中的第二最長(zhǎng)前綴長(zhǎng)度(例如,長(zhǎng)度/24的前綴),并且,隊(duì)列70N可被配置為儲(chǔ)存這組16個(gè)前綴長(zhǎng)度中的最短前綴長(zhǎng)度(例如,長(zhǎng)度/2的前綴)。雖然示出每個(gè)隊(duì)列70具有5個(gè)用于儲(chǔ)存前綴的“塊”,但是,隊(duì)列70可被配置有能夠具有任意數(shù)量的用于儲(chǔ)存前綴(例如,4個(gè)、8個(gè)或12個(gè)塊)的任意量的存儲(chǔ)(例如,任意數(shù)量的字節(jié))。在各種情況中,塊的數(shù)量等于前綴查找模塊52的相應(yīng)信用計(jì)數(shù)器的初始值。當(dāng)布隆過濾器54A執(zhí)行查找時(shí),布隆過濾器54A從隊(duì)列70去除一組前綴。在一個(gè)實(shí)例中,隊(duì)列70被配置為先進(jìn)先出隊(duì)列,從而當(dāng)布隆過濾器54A從一個(gè)隊(duì)列70去除前綴時(shí),布隆過濾器54A去除先被添加至該隊(duì)列的前綴(B卩,在隊(duì)列中達(dá)最長(zhǎng)時(shí)間的前綴)。一旦從各隊(duì)列70去除一前綴,布隆過濾器54A對(duì)該前綴應(yīng)用相應(yīng)的一個(gè)哈希函數(shù)72,以在在其中查找前綴的存儲(chǔ)體76內(nèi)生成一個(gè)位置(例如,存儲(chǔ)地址)??稍谟布袌?zhí)行哈希函數(shù)72,使得哈希函數(shù)72包括相同哈希函數(shù)的N種不同的硬件實(shí)現(xiàn)方式。在一些實(shí)例中,用硬件執(zhí)行的哈希函數(shù)的數(shù)量等于隊(duì)列70的數(shù)量。每個(gè)哈希函數(shù)72在一個(gè)布隆過濾器內(nèi)是相同的哈希函數(shù),但在布隆過濾器之間可以是不同的。例如,在布隆過濾器54A中執(zhí)行的哈希函數(shù)可與在布隆過濾器54B中執(zhí)行的哈希函數(shù)不同。通過在不同的布隆過濾器中執(zhí)行不同的哈希函數(shù),與在多個(gè)布隆過濾器中執(zhí)行一個(gè)哈希函數(shù)相比,減小了所有布隆過濾器將返回錯(cuò)誤肯定的可能性。通過為每個(gè)隊(duì)列70在硬件中執(zhí)行一個(gè)哈希函數(shù)72,哈希函數(shù)72可并行地雜湊(hash)這組前綴中的每個(gè)。通過雜湊前綴來產(chǎn)生的值是布隆過濾器的索引(index)。將該索引傳遞至相應(yīng)的一個(gè)控制器74。該索引用作存儲(chǔ)地址??刂破?4基于該索引從存儲(chǔ)體76執(zhí)行讀取。在一個(gè)實(shí)例中,控制器74檢查索引的前五位,以確定哪一個(gè)存儲(chǔ)體76用于查找??刂破?4也可在硬件中實(shí)施,并且,控制器74的數(shù)量可與隊(duì)列70的數(shù)量相同。通過在硬件中實(shí)施控制器74并實(shí)施與隊(duì)列70的數(shù)量相同的數(shù)量的控制器74,控制器74可確定多個(gè)存儲(chǔ)體76中的適當(dāng)?shù)囊粋€(gè),在這些存儲(chǔ)體76中,對(duì)這組前綴中的每個(gè)的索引值并行地從存儲(chǔ)體76執(zhí)行讀取。在一些情況下,一組前綴中的兩個(gè)或更多個(gè)前綴可能需要在同一個(gè)存儲(chǔ)體76中查找。在這些情況下,典型地,在一個(gè)時(shí)鐘周期中,在一個(gè)存儲(chǔ)體76上執(zhí)行一次查找,并在下一個(gè)時(shí)鐘周期中,在該一個(gè)存儲(chǔ)體7`6上執(zhí)行第二查找。例如,如果從隊(duì)列70A檢索第一前綴并從隊(duì)列70B檢索第二前綴,且兩個(gè)前綴都需要在存儲(chǔ)體76B中查找。在此實(shí)例中,控制器74A可在第一時(shí)鐘周期中在存儲(chǔ)體76B中查找第一前綴,控制器74B可在第二時(shí)鐘周期中在存儲(chǔ)體76B中查找第二前綴。在第二時(shí)鐘周期期間,布隆過濾器54A可從隊(duì)列70A檢索另一前綴,因?yàn)椴檎以谥皺z索的前綴上執(zhí)行。以此方式,每個(gè)隊(duì)列70的長(zhǎng)度可以是不同的。在第二時(shí)鐘周期期間,前綴查找模塊52可向布隆過濾器54A發(fā)送額外的一組前綴,然后將其儲(chǔ)存在隊(duì)列70中。如果幾個(gè)前綴需要從同一存儲(chǔ)體76中查找,那么一個(gè)或多個(gè)隊(duì)列70可能填滿(S卩,熱存儲(chǔ))。在由每個(gè)控制器74執(zhí)行查找之后,控制器74將查找結(jié)果發(fā)送至過濾器查找塊40的哈希控制器56。例如,當(dāng)控制器74A對(duì)從隊(duì)列70A檢索的前綴完成查找時(shí),控制器74A將查找結(jié)果發(fā)送至哈??刂破?6。查找結(jié)果表示前綴是否可能儲(chǔ)存在關(guān)鍵字哈希表58中或肯定不儲(chǔ)存在關(guān)鍵字哈希表58中。圖5是更詳細(xì)地示出路由器20的實(shí)例流緩存器60的框圖。為了圖示的目的,下面可在圖3的實(shí)例中示出的過濾器查找塊40和圖2的實(shí)例中示出的路由器20的背景下描述流緩存器60。流緩存器60是路由器20的流緩存器的一個(gè)實(shí)例。流緩存器60包括緩存器控制器80和流信息82。緩存器控制器80進(jìn)一步包括策略84和哈希函數(shù)86。流緩存器60是可編程的(例如,由路由器20的控制平面32),以配置策略84,緩存器控制器80對(duì)查找關(guān)鍵字應(yīng)用策略84,以確定與查找關(guān)鍵字相關(guān)的包流是否適合于儲(chǔ)存在流緩存器60內(nèi)。策略84包括用來確定查找關(guān)鍵字是否適合于儲(chǔ)存在流緩存器60內(nèi)的閾值,還可包括識(shí)別當(dāng)將查找關(guān)鍵字及其相關(guān)結(jié)果儲(chǔ)存在流信息82中時(shí)使用的置換算法的配置信息。在一些實(shí)例中,過濾器查找塊40將統(tǒng)計(jì)信息(例如,吞吐量、緩存命中、等等)輸出至控制平面32。控制平面32可至少部分地基于從流緩存器60接收的統(tǒng)計(jì)信息,自動(dòng)地調(diào)節(jié)儲(chǔ)存于策略84中的閾值。一旦從哈??刂破?6接收到查找關(guān)鍵字和相關(guān)結(jié)果,緩存器控制器80確定查找關(guān)鍵字和相關(guān)結(jié)果是否適合于儲(chǔ)存在流信息82內(nèi)。如上所述,哈??刂破?6保持時(shí)鐘周期計(jì)數(shù)器和關(guān)鍵字哈希表查找計(jì)數(shù)器,并將每個(gè)計(jì)數(shù)器的值發(fā)送至流緩存器60。緩存器控制器80從策略84檢索每個(gè)計(jì)數(shù)器的閾值,并確定任一計(jì)數(shù)器的值是否超過各自的閾值。當(dāng)計(jì)數(shù)器的值都不超過各自閾值時(shí),緩存器控制器80丟棄查找關(guān)鍵字和相關(guān)結(jié)果,不將查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在流信息82中。當(dāng)任一計(jì)數(shù)器的值超過各自閾值時(shí),緩存器控制器80將查找關(guān)鍵字和相關(guān)結(jié)果標(biāo)記為適合于儲(chǔ)存在流信息82中。緩存器控制器80對(duì)查找關(guān)鍵字應(yīng)用哈希函數(shù)86,以在流信息82內(nèi)產(chǎn)生儲(chǔ)存查找關(guān)鍵字和相關(guān)結(jié)果的位置。流信息82可被實(shí)現(xiàn)為包括512個(gè)桶的硬件哈希表,每個(gè)桶具有兩個(gè)單位。每個(gè)單位儲(chǔ)存一個(gè)包流的查找關(guān)鍵字和相關(guān)結(jié)果。在一個(gè)實(shí)例中,查找關(guān)鍵字是包流的目的網(wǎng)絡(luò)地址,其包括在包流的每個(gè)包的報(bào)頭信息中。通過對(duì)查找關(guān)鍵字應(yīng)用哈希函數(shù)86來產(chǎn)生的位置對(duì)應(yīng)于包括在流信息82中的一個(gè)桶的位置。緩存器控制器80將查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在識(shí)別出的桶的兩個(gè)單位中的一個(gè)中。如果桶的兩個(gè)單位均包括之前儲(chǔ)存的信息,那么緩存器控制器80可選擇將用查找關(guān)鍵字和相關(guān)結(jié)果重寫哪個(gè)單位。在一個(gè)實(shí)例中,緩存器控制器80至少通過以下方式使用隨機(jī)收回算法:產(chǎn)生隨機(jī)數(shù) ,并將查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在與所產(chǎn)生的隨機(jī)數(shù)相對(duì)應(yīng)的單位中(例如,O對(duì)應(yīng)于第一單位,I對(duì)應(yīng)于第二單位)。在另一實(shí)例中,緩存器控制器80至少通過以下方式使用最近最少使用算法:保持與每個(gè)單位相關(guān)的狀態(tài)信息,并將查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在包括最近最少使用的信息的單位中。雖然在具有兩個(gè)單位的桶的背景下進(jìn)行描述,但是,上述技術(shù)也可應(yīng)用于具有任意數(shù)量的單位(例如,4個(gè)、10個(gè)或50個(gè))的桶。流緩存器60還從關(guān)鍵字管理器50接收查找關(guān)鍵字。當(dāng)路由器20接收需要由過濾器查找塊40處理的包時(shí),關(guān)鍵字管理器50接收包括在包中的網(wǎng)絡(luò)地址信息,并將網(wǎng)絡(luò)地址信息的至少一部分傳遞至流緩存器60。在一些實(shí)例中,傳遞至流緩存器60的網(wǎng)絡(luò)地址信息是包的目的網(wǎng)絡(luò)地址。通常,由關(guān)鍵字管理器50發(fā)送至流緩存器60的網(wǎng)絡(luò)地址信息對(duì)應(yīng)于儲(chǔ)存在流信息82中的查找關(guān)鍵字。緩存器控制器80對(duì)所接收的網(wǎng)絡(luò)地址信息應(yīng)用哈希函數(shù)86,以識(shí)別流信息82內(nèi)的位置并在該位置執(zhí)行查找。如果在與該位置相關(guān)的桶的任一單位處未找到與所接收的網(wǎng)絡(luò)地址的匹配,則緩存器控制器80確定包流的信息未儲(chǔ)存在流緩存器60內(nèi),并向前綴查找模塊52發(fā)送表示未找到匹配的消息。如果對(duì)所接收的地址找到匹配,則緩存器控制器80從流信息82檢索查找關(guān)鍵字和相關(guān)結(jié)果,并將查找關(guān)鍵字和相關(guān)結(jié)果輸出至前綴查找模塊52。緩存器控制器80可被配置為刷新儲(chǔ)存于流信息82中的信息。例如,如果控制平面32改變與包流相關(guān)的路線,則控制平面32可向流緩存器60發(fā)送使緩存器控制器80刷新儲(chǔ)存于流信息82中的信息的命令。通過刷新儲(chǔ)存于流信息82中的信息,流緩存器60自動(dòng)地開始重新學(xué)習(xí)與被識(shí)別為適合于儲(chǔ)存在流緩存器60中的包流相關(guān)的信息。圖6A和圖6B是示出根據(jù)本公開的一個(gè)或多個(gè)技術(shù)執(zhí)行查找的實(shí)例方法的流程圖。為了清楚的目的,將關(guān)于圖1的系統(tǒng)2、圖2的路由器20、圖3的過濾器查找塊40和圖5的流緩存器60來描述圖6A和圖6B所示的方法。路由器20經(jīng)由一個(gè)IFC24和入站鏈路26從裝置(例如,圖1的客戶端裝置14)接收包(90)。數(shù)據(jù)平面34從包提取信息(92),并將關(guān)鍵字信息發(fā)送至過濾器查找塊40。在一些實(shí)例中,從包的報(bào)頭提取信息,并且,該信息可包括源或目的網(wǎng)絡(luò)地址、源或目的端口、或協(xié)議。路由器20的過濾器查找塊40的關(guān)鍵字管理器50接收該信息,基于該信息產(chǎn)生查找關(guān)鍵字,并將查找關(guān)鍵字發(fā)送至流緩存器60,以確定查找關(guān)鍵字是否位于流緩存器60中
(94)。流緩存器60在流信息82內(nèi)執(zhí)行查找,以確定與通過查找關(guān)鍵字識(shí)別的包流相關(guān)的信息是否儲(chǔ)存在流緩存器60內(nèi)。如果在流信息82中找到查找關(guān)鍵字的匹配(94的“是”分支),則流緩存器60將查找關(guān)鍵字和相關(guān)結(jié)果輸出至前綴查找模塊52,且前綴查找模塊52將該信息輸出至哈??刂破?6,以輸出至控制平面32或數(shù)據(jù)平面34 (96)。S卩,當(dāng)找到匹配時(shí),過濾器查找塊40將緩存的結(jié)果信息返回至路由器20的適當(dāng)?shù)挠布蜍浖?。如果在流信?2中未找到查找關(guān)鍵字的匹配(94的“否”分支),則前綴查找模塊52至少部分地基于由關(guān)鍵字管理器50產(chǎn)生的查找關(guān)鍵字產(chǎn)生一組前綴(98)。前綴查找模塊52中規(guī)定了從查找關(guān)鍵字產(chǎn)生的前綴的數(shù)量和長(zhǎng)度。在一個(gè)實(shí)例中,儲(chǔ)存在前綴查找模塊52中的前綴信息表示,對(duì)于32位IP地址應(yīng)產(chǎn)生16個(gè)前綴,并且前綴長(zhǎng)度應(yīng)是/2、/4、/6、/8、/10、一直到/32。當(dāng)從關(guān)鍵字信息產(chǎn)生前綴時(shí),前綴查找模塊52基于前綴長(zhǎng)度屏蔽關(guān)鍵字信息的較低部分的一些位。例如,如果前綴長(zhǎng)度是/8且關(guān)鍵字信息是32位IP地址192.168.1.43,那么前綴是192/8,因?yàn)橛肙屏蔽IP地址的低24位。如果前綴長(zhǎng)度是/24,那么前綴是192.168.1/24。前綴查找模塊52向哈希控制器56發(fā)送消息,以初始化查找關(guān)鍵字的時(shí)鐘周期計(jì)數(shù)器(100),并將所產(chǎn)生的這組前綴發(fā)送至每個(gè)布隆過濾器54以進(jìn)行查找(102)。對(duì)于在當(dāng)時(shí)鐘周期計(jì)數(shù)器被初始化時(shí)和當(dāng)獲得關(guān)鍵字哈希表查找結(jié)果時(shí)之間過去的每個(gè)時(shí)鐘周期遞增時(shí)鐘周期計(jì)數(shù)器。布隆過濾器54將每個(gè)前綴儲(chǔ)存在相應(yīng)隊(duì)列中,當(dāng)執(zhí)行查找時(shí),從每個(gè)隊(duì)列去除前綴,并對(duì)前綴應(yīng)用一個(gè)哈希函數(shù)72,以對(duì)布隆過濾器54的數(shù)據(jù)結(jié)構(gòu)生成索引
(102)。在一個(gè)實(shí)例中,該索引是布隆過濾器的存儲(chǔ)體中的位置的存儲(chǔ)地址。每個(gè)布隆過濾器54實(shí)施不同的哈希函數(shù),其與在其他布隆過濾器54中實(shí)施的哈希函數(shù)無(wú)關(guān)。使用不同的哈希函數(shù)可減小在兩個(gè)布隆過濾器54中與相同前綴長(zhǎng)度相對(duì)應(yīng)的隊(duì)列滿了的可能性。在在存儲(chǔ)體76中查找前綴之后,布隆過濾器54A將查找結(jié)果發(fā)送至哈??刂破?6。一旦哈??刂破?6接收到根據(jù)關(guān)鍵字信息生成的每個(gè)前綴的以及每個(gè)布隆過濾器54的查找結(jié) 果,哈??刂破?6便確定前綴中的被指示為在兩個(gè)布隆過濾器54中被找到的最長(zhǎng)前綴。如果前綴的任一布隆過濾器查找結(jié)果指示在布隆過濾器中未找到前綴,那么前綴不在關(guān)鍵字哈希表58中且哈??刂破?6丟棄該前綴而不考慮。然后,哈??刂破?6在關(guān)鍵字哈希表58中對(duì)最長(zhǎng)前綴執(zhí)行查找(104),并確定在關(guān)鍵字哈希表58中是否找到最長(zhǎng)前綴(106)。哈??刂破?6保持關(guān)鍵字哈希表查找計(jì)數(shù)器,其對(duì)在獲得結(jié)果之前對(duì)特定查找關(guān)鍵字執(zhí)行的在關(guān)鍵字哈希表58中的查找的數(shù)量進(jìn)行計(jì)數(shù)。如果在關(guān)鍵字哈希表58中未找到最長(zhǎng)前綴(106的“否”分支),那么哈希控制器56遞增關(guān)鍵字哈希表查找計(jì)數(shù)器,并確定在關(guān)鍵字哈希表58中是否查找任何其他前綴(108)。如果存在要查找的其他前綴(108的“是”分支),則哈??刂破?6確定被指示為在兩個(gè)布隆過濾器54中被找到的下一個(gè)最長(zhǎng)前綴(110),并用該下一個(gè)最長(zhǎng)前綴在關(guān)鍵字哈希表58中執(zhí)行查找(104),以確定是否在關(guān)鍵字哈希表58中找到該下一個(gè)最長(zhǎng)前綴(106)??刂破?6繼續(xù)確定該下一個(gè)最長(zhǎng)前綴(110),遞增關(guān)鍵字哈希表查找計(jì)數(shù)器,并在關(guān)鍵字哈希表58中執(zhí)行查找(104),直到在關(guān)鍵字哈希表58中找到前綴為止(106的“是”分支),或直到在關(guān)鍵字哈希表58中查找了所有可能的前綴為止(108的“否”分支)??刂破?6從時(shí)鐘周期計(jì)數(shù)器和關(guān)鍵字哈希表查找計(jì)數(shù)器檢索值,以確定自從前綴查找模塊52開始處理關(guān)鍵字信息開始已經(jīng)過去多少個(gè)時(shí)鐘周期(112),并確定在關(guān)鍵字哈希表58中執(zhí)行了多少次查找(114)。控制器56將查找關(guān)鍵字、從關(guān)鍵字哈希表58獲得的相關(guān)結(jié)果、時(shí)鐘周期計(jì)數(shù)器的值和關(guān)鍵字哈希表計(jì)數(shù)器的值發(fā)送至流緩存器60。流緩存器60的緩存器控制器80對(duì)時(shí)鐘周期計(jì)數(shù)器的值和關(guān)鍵字哈希表查找計(jì)數(shù)器的值應(yīng)用策略84,以確定包流是否適合于儲(chǔ)存在流緩存器60內(nèi)(116)。策略84包括時(shí)鐘周期計(jì)數(shù)器的可配置閾值和關(guān)鍵字哈希表查找計(jì)數(shù)器的可配置閾值。如果時(shí)鐘周期計(jì)數(shù)器的值大于相應(yīng)閾值或者如果關(guān)鍵字哈希表查找計(jì)數(shù)器的值大于相應(yīng)閾值,則緩存器控制器80將包流識(shí)別為適合于儲(chǔ)存在流信息82中(116的“是”分支),并將查找關(guān)鍵字和相關(guān)結(jié)果儲(chǔ)存在流信息82中(118)。如果時(shí)鐘周期計(jì)數(shù)器的值不大于相應(yīng)閾值并且如果關(guān)鍵字哈希表查找計(jì)數(shù)器的值不大于相應(yīng)閾值,則緩存器控制器80將包流識(shí)別為不適合于儲(chǔ)存在流緩存器60中(116的“否”分支)。在任一種情況下,哈??刂破?6將關(guān)鍵字哈希表查找結(jié)果輸出至數(shù)據(jù)平面34 (120)。以此方式,網(wǎng)絡(luò)裝置的一個(gè)實(shí)例包括被配置為接收包流的包的一個(gè)或多個(gè)網(wǎng)絡(luò)接口,其中,該包流是由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一個(gè)。網(wǎng)絡(luò)裝置進(jìn)一步包括被配置為接收與包流相關(guān)的查找關(guān)鍵字的流緩存器和被配置為處理查找關(guān)鍵字的布隆過濾器。流緩存器可被進(jìn)一步配置為儲(chǔ)存與由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一部分相關(guān)的信息,至少通過用布隆過濾器對(duì)查找關(guān)鍵字的處理應(yīng)用選擇標(biāo)準(zhǔn)來確定是否儲(chǔ)存與包流相關(guān)的信息,確定查找關(guān)鍵字是否儲(chǔ)存在流緩存器中,并且,當(dāng)查找關(guān)鍵字儲(chǔ)存在流緩存器中時(shí),檢索與查找關(guān)鍵字相關(guān)的儲(chǔ)存結(jié)果并輸出儲(chǔ)存結(jié)果。網(wǎng)絡(luò)裝置可進(jìn)一步包括:前綴查找模塊,被配置為接收查找關(guān)鍵字,并基于查找關(guān)鍵字產(chǎn)生一組前綴;以及哈希表,被配置為儲(chǔ)存與包流相關(guān)的信息;以及控制器。布隆過濾器可被配置為,處理這組前綴中的每個(gè)前綴,以識(shí)別這組前綴中的一部分,以用于搜索哈希表??刂破骺杀慌渲脼?,用這組前綴的一個(gè)或多個(gè)識(shí)別出的部分搜索哈希表,并從哈希表接收搜索結(jié)果。流緩存器 可被配置為,至少通過對(duì)由布隆過濾器進(jìn)行的每個(gè)前綴的處理和由控制器進(jìn)行的哈希表的搜索中的一個(gè)或多個(gè)應(yīng)用選擇標(biāo)準(zhǔn)來確定是否儲(chǔ)存查找關(guān)鍵字和結(jié)果。前綴查找模塊可被配置為,向布隆過濾器發(fā)送這組前綴,以由布隆過濾器處理,并向控制器發(fā)送消息,以使控制器啟動(dòng)時(shí)鐘周期計(jì)數(shù)器??刂破骺杀慌渲脼椋邮赵撓⒉r(shí)鐘周期計(jì)數(shù)器初始化為一個(gè)值,對(duì)于逝去的每個(gè)時(shí)鐘周期,遞增時(shí)鐘周期計(jì)數(shù)器的值,直到控制器接收到搜索結(jié)果為止,并且,一旦接收到結(jié)果,將查找關(guān)鍵字、結(jié)果和時(shí)鐘周期計(jì)數(shù)器的值發(fā)送至流緩存器。流緩存器可被配置為,確定時(shí)鐘周期計(jì)數(shù)器的值是否超過閾值,并且,當(dāng)時(shí)鐘周期計(jì)數(shù)器的值超過閾值時(shí),儲(chǔ)存查找關(guān)鍵字和結(jié)果。流緩存器可包括具有多個(gè)桶的流緩存器哈希表,每個(gè)桶具有多個(gè)單位,其中,多個(gè)單位中的每個(gè)被配置為儲(chǔ)存相應(yīng)的查找關(guān)鍵字和結(jié)果對(duì)。流緩存器被配置為,對(duì)查找關(guān)鍵字應(yīng)用哈希函數(shù),以識(shí)別流緩存器哈希表的多個(gè)桶中的一個(gè),確定識(shí)別出的桶的所有多個(gè)單位目前是否儲(chǔ)存之前的查找關(guān)鍵字和結(jié)果對(duì),當(dāng)所有多個(gè)單位目前儲(chǔ)存之前的查找關(guān)鍵字和結(jié)果對(duì)時(shí),選擇多個(gè)單位中的一個(gè)來儲(chǔ)存查找關(guān)鍵字和結(jié)果,并用查找關(guān)鍵字和結(jié)果重寫多個(gè)單位中的所選擇的一個(gè)。流緩存器可被配置為,至少通過被配置為產(chǎn)生隨機(jī)數(shù)并基于所產(chǎn)生的隨機(jī)數(shù)選擇多個(gè)單位中的一個(gè),來選擇多個(gè)單位中的一個(gè)以儲(chǔ)存查找關(guān)鍵字和結(jié)果。流緩存器可被配置為,至少通過被配置為檢索多個(gè)單位中的每個(gè)的會(huì)話(session)信息、基于多個(gè)單位的每個(gè)相應(yīng)單位的會(huì)話信息確定最近最少使用多個(gè)單位中的哪個(gè)單位、并基于最近最少使用哪個(gè)單位來選擇多個(gè)單位中的一個(gè),來選擇多個(gè)單位中的一個(gè)以儲(chǔ)存查找關(guān)鍵字和結(jié)果??刂破骺杀慌渲脼?,將查找計(jì)數(shù)器初始化為一個(gè)值,選擇這組前綴的所識(shí)別的部分的第一前綴,基于第一前綴搜索哈希表,接收搜索的第一結(jié)果,并且,當(dāng)?shù)谝唤Y(jié)果表示在哈希表中找到匹配時(shí),將查找關(guān)鍵字、第一結(jié)果和查找計(jì)數(shù)器的值發(fā)送至流緩存器。流緩存器可被配置為,將查找計(jì)數(shù)器的值與閾值進(jìn)行比較,當(dāng)查找計(jì)數(shù)器的值大于閾值時(shí),儲(chǔ)存查找關(guān)鍵字和第一結(jié)果,并且,當(dāng)查找計(jì)數(shù)器的值不大于閾值時(shí),確定不將查找關(guān)鍵字和第一結(jié)果儲(chǔ)存在流緩存器中。當(dāng)?shù)谝唤Y(jié)果表示未在哈希表中找到匹配時(shí),控制器可被配置為,遞增查找計(jì)數(shù)器的值,選擇這組前綴的所識(shí)別的部分的第二前綴,其中,第二前綴與第一前綴不同,基于第二前綴搜索哈希表,接收搜索的第二結(jié)果,并且,當(dāng)?shù)诙Y(jié)果表示在哈希表中找到匹配時(shí),將查找關(guān)鍵字、第二結(jié)果和查找計(jì)數(shù)器的值發(fā)送至流緩存器。可至少部分地在硬件、軟件、固件或其任何組合中實(shí)施本公開中描述的技術(shù)。例如,可在一個(gè)或多個(gè)處理器內(nèi)實(shí)施所述技術(shù)的各種方面,該一個(gè)或多個(gè)處理器包括一個(gè)或多個(gè)微處理器、數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA),或任何其他等效集成或離散 邏輯電路,以及這種元件的任何組合。術(shù)語(yǔ)“處理器”或“處理電路”通??芍复魏紊鲜鲞壿嬰娐?,單獨(dú)或與其他邏輯電路組合,或任何其他等效電路。包括硬件的控制單元也可執(zhí)行本公開的一個(gè)或多個(gè)技術(shù)??稍谙嗤难b置內(nèi)或在分離的裝置內(nèi)實(shí)現(xiàn)這種硬件、軟件和固件,以支持在本公開中描述的各種操作和功能。另外,可將任何所述單元、模塊或部件一起實(shí)施或分開地實(shí)施為離散的但是可共同操作的邏輯裝置。不同特征作為模塊或單元的描述旨在突出不同的功能方面,并且不表示必須用分離的硬件或軟件部件來實(shí)現(xiàn)這樣的模塊或單元。相反,可用分離的硬件或軟件部件來執(zhí)行與一個(gè)或多個(gè)模塊或單元相關(guān)的功能,或可將所述功能集成在公共的或分離的硬件或軟件部件內(nèi)。本公開中描述的技術(shù)可被包含或編碼在包含指令的計(jì)算機(jī)可讀介質(zhì)中,例如,當(dāng)執(zhí)行該指令時(shí),計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。嵌在或編碼在計(jì)算機(jī)可讀介質(zhì)中的指令可使可編程處理器或其他處理器執(zhí)行該方法。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可包括隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可編程只讀存儲(chǔ)器(PROM)、可擦可編程只讀存儲(chǔ)器(EPROM)、電可擦可編程只讀存儲(chǔ)器(EEPR0M)、閃存、硬盤、CD-ROM、軟盤、盒式磁帶、磁性介質(zhì)、光學(xué)介質(zhì),或其他計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。應(yīng)理解,術(shù)語(yǔ)“計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”指代物理存儲(chǔ)介質(zhì),(例如非瞬態(tài)介質(zhì))而不是信號(hào)、載波或其他瞬態(tài)介質(zhì)。已經(jīng)描述了本發(fā)明的各種實(shí)施方式。這些和其他實(shí)施方式在所附權(quán)利要求書的范圍內(nèi) 。
權(quán)利要求
1.一種方法,包括: 利用網(wǎng)絡(luò)裝置的流緩存器接收與包流相關(guān)聯(lián)的查找關(guān)鍵字,其中,所述包流是由所述網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一個(gè),其中,所述流緩存器儲(chǔ)存與由所述網(wǎng)絡(luò)裝置處理的所述多個(gè)包流中的一部分相關(guān)的信息,并且其中,所述流緩存器至少通過對(duì)由所述網(wǎng)絡(luò)裝置的布隆過濾器對(duì)所述查找關(guān)鍵字進(jìn)行的處理應(yīng)用選擇標(biāo)準(zhǔn),來確定是否儲(chǔ)存與包流相關(guān)的信息; 利用所述流緩存器確定所述查找關(guān)鍵字是否儲(chǔ)存在所述流緩存器中;以及當(dāng)所述查找關(guān)鍵字儲(chǔ)存在所述流緩存器中時(shí),利用所述流緩存器檢索與所述查找關(guān)鍵字相關(guān)聯(lián)的儲(chǔ)存結(jié)果并輸出所述儲(chǔ)存結(jié)果。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括,當(dāng)所述查找關(guān)鍵字未儲(chǔ)存在所述流緩存器中時(shí): 利用所述網(wǎng)絡(luò)裝置的前綴查找模塊接收所述查找關(guān)鍵字; 利用所述前綴查找模塊基于所述查找關(guān)鍵字來生成一組前綴; 利用所述布隆過濾器處理該組前綴中的每個(gè)前綴,以識(shí)別該組前綴中的一部分以用于搜索所述網(wǎng)絡(luò)裝置的哈希表; 利用所述網(wǎng)絡(luò)裝置的控制器,使用該組前綴中的一個(gè)或多個(gè)識(shí)別出的部分搜索所述哈希表; 利用所述控制器從所述哈希表接收搜索的結(jié)果;以及 利用所述網(wǎng)絡(luò)裝置的流緩存器,至少通過對(duì)每個(gè)前綴的處理和所述哈希表的搜索中的一個(gè)或多個(gè)應(yīng)用選擇標(biāo)準(zhǔn),來確定是否將所述查找關(guān)鍵字和所述結(jié)果儲(chǔ)存在所述流緩存器中。
3.根據(jù)權(quán)利要求1至2中任一項(xiàng)所述的方法,進(jìn)一步包括: 將該組前綴從所述前綴查找模塊發(fā)送至所述布隆過濾器,以利用所述布隆過濾器進(jìn)行處理; 利用所述控制器將時(shí)鐘周期計(jì)數(shù)器初始化為一個(gè)值; 對(duì)于直到所述控制器接收到搜索結(jié)果為止逝去的每個(gè)時(shí)鐘周期,利用所述控制器遞增所述時(shí)鐘周期計(jì)數(shù)器的值; 利用所述流緩存器確定所述時(shí)鐘周期計(jì)數(shù)器的值是否超過閾值;以及當(dāng)所述時(shí)鐘周期計(jì)數(shù)器的值超過所述閾值時(shí),利用所述流緩存器儲(chǔ)存所述查找關(guān)鍵字和所述結(jié)果。
4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的方法,其中,儲(chǔ)存所述查找關(guān)鍵字和所述結(jié)果包括: 對(duì)所述查找關(guān)鍵字應(yīng)用哈希函數(shù),以識(shí)別所述流緩存器內(nèi)的位置,其中,所述位置包括多個(gè)單位,并且其中,所述多個(gè)單位中的每個(gè)被配置為儲(chǔ)存各自的查找關(guān)鍵字和結(jié)果對(duì);確定所述位置的所有多個(gè)單位是否當(dāng)前儲(chǔ)存有之前的查找關(guān)鍵字和結(jié)果對(duì); 當(dāng)所有多個(gè)單位當(dāng)前儲(chǔ)存有之前的查找關(guān)鍵字和結(jié)果對(duì)時(shí),選擇所述多個(gè)單位中的一個(gè)來儲(chǔ)存所述查找關(guān)鍵字和所述結(jié)果;以及 用所述查找關(guān)鍵字和所述結(jié)果重寫所述多個(gè)單位中的所選擇的一個(gè)。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其中,選擇所述多個(gè)單位中的一個(gè)來儲(chǔ)存所述查找關(guān)鍵字和所述結(jié)果包括: 生成隨機(jī)數(shù);以及 基于所生成的隨機(jī)數(shù)來選擇所述多個(gè)單位中的一個(gè)。
6.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其中,選擇所述多個(gè)單位中的一個(gè)來儲(chǔ)存所述查找關(guān)鍵字和所述結(jié)果包括: 檢索所述多個(gè)單位中的每個(gè)的會(huì)話信息; 基于所述多個(gè)單位中的每個(gè)相應(yīng)單位的會(huì)話信息,確定所述多個(gè)單位中的哪個(gè)單位最近最少被使用;以及 基于哪個(gè)單位最近最少被使用,選擇所述多個(gè)單位中的一個(gè)。
7.根據(jù)權(quán)利要求2至3中任一項(xiàng)所述的方法,其中,搜索所述哈希表進(jìn)一步包括: 利用所述控制器將查找計(jì)數(shù)器初始化為一個(gè)值; 利用所述控制器選擇該組前綴的識(shí)別出的部分中的第一前綴; 利用所述控制器基于所述第一前綴搜索所述哈希表; 接收對(duì)所述第一前綴的搜索的第一結(jié)果;以及 當(dāng)所述第一結(jié)果表示在所述哈希表中找到匹配時(shí),將所述查找關(guān)鍵字、所述第一結(jié)果和所述查找計(jì)數(shù)器的值從所述控制器發(fā)送至所述流緩存器。
8.根據(jù)權(quán)利要求7所述的方法,進(jìn)一步包括: 利用所述流緩存器將所述查找計(jì)數(shù)器的值與閾值進(jìn)行比較; 當(dāng)所述查找計(jì)數(shù)器的值大于所述閾值時(shí),利用所述流緩存器儲(chǔ)存所述查找關(guān)鍵字和所述第一結(jié)果;以及 當(dāng)所述查找計(jì)數(shù)器的值不大于所述閾值時(shí),利用所述流緩存器確定不將所述查找關(guān)鍵字和所述第一結(jié)果儲(chǔ)存在所述流緩存器中。
9.根據(jù)權(quán)利要求7至8中任一項(xiàng)所述的方法,進(jìn)一步包括,當(dāng)所述第一結(jié)果表示在所述哈希表中未找到匹配時(shí): 遞增所述查找計(jì)數(shù)器的值; 選擇該組前綴的識(shí)別出的部分中的第二前綴,其中,所述第二前綴與所述第一前綴不同; 利用所述控制器基于所述第二前綴搜索所述哈希表; 接收對(duì)所述第二前綴的搜索的第二結(jié)果;以及 當(dāng)所述第二結(jié)果表示在所述哈希表中找到匹配時(shí),將所述查找關(guān)鍵字、所述第二結(jié)果和所述查找計(jì)數(shù)器的值從所述控制器發(fā)送至所述流緩存器。
10.根據(jù)權(quán)利要求1至9中任一項(xiàng)所述的方法,其中,確定所述查找關(guān)鍵字是否儲(chǔ)存在所述流緩存器中包括: 利用所述流緩存器對(duì)所述查找關(guān)鍵字應(yīng)用哈希函數(shù),以生成哈希結(jié)果; 基于所述哈希結(jié)果識(shí)別所述流緩存器的哈希表內(nèi)的位置;以及 檢索儲(chǔ)存在識(shí)別出的位置處的值, 其中,當(dāng)儲(chǔ)存在識(shí)別出的位置處的值與所述查找關(guān)鍵字的值相匹配時(shí),所述流緩存器確定所述查找關(guān)鍵字儲(chǔ)存在所述流緩存器中,并且 其中,當(dāng)儲(chǔ)存在識(shí)別出的位置處的值與所述查找關(guān)鍵字的值不匹配時(shí),所述流緩存器確定所述查找關(guān)鍵字未儲(chǔ)存在所述流緩存器中。
11.一種網(wǎng)絡(luò)裝置,包括: 一個(gè)或多個(gè)網(wǎng)絡(luò)接口,被配置為接收包流的包,其中,所述包流是由所述網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一個(gè); 流緩存器,被配置為接收與包流相關(guān)聯(lián)的查找關(guān)鍵字;以及 布隆過濾器,被配置為處理所述查找關(guān)鍵字, 其中,所述流緩存器被進(jìn)一步配置為,儲(chǔ)存與由所述網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一部分相關(guān)的信息,至少通過對(duì)由所述布隆過濾器對(duì)所述查找關(guān)鍵字進(jìn)行的處理應(yīng)用選擇標(biāo)準(zhǔn),來確定是否儲(chǔ)存與包流相關(guān)的信息,確定所述查找關(guān)鍵字是否儲(chǔ)存在所述流緩存器中,并且,當(dāng)所述查找關(guān)鍵字儲(chǔ)存在所述流緩存器中時(shí),檢索與所述查找關(guān)鍵字相關(guān)聯(lián)的儲(chǔ)存結(jié)果并輸出所述儲(chǔ)存結(jié)果。
12.根據(jù)權(quán)利要求11所述的網(wǎng)絡(luò)裝置,進(jìn)一步包括用于執(zhí)行權(quán)利要求1至10中任一項(xiàng)所述的方法的裝置 。
全文摘要
本發(fā)明涉及一種用于在網(wǎng)絡(luò)裝置中執(zhí)行包流查找的流緩存器機(jī)制。一種實(shí)例網(wǎng)絡(luò)裝置,包括網(wǎng)絡(luò)接口,被配置為接收包流的包,其中,該包流是由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一個(gè);流緩存器,被配置為接收與包流相關(guān)的查找關(guān)鍵字;以及布隆過濾器,被配置為處理查找關(guān)鍵字。流緩存器被進(jìn)一步配置為,儲(chǔ)存與由網(wǎng)絡(luò)裝置處理的多個(gè)包流中的一部分相關(guān)的信息,并至少通過對(duì)由布隆過濾器對(duì)查找關(guān)鍵字進(jìn)行的處理應(yīng)用選擇標(biāo)準(zhǔn),來確定是否儲(chǔ)存與包流相關(guān)的信息。流緩存器被配置為,確定查找關(guān)鍵字是否儲(chǔ)存在流緩存器中,并且,當(dāng)查找關(guān)鍵字儲(chǔ)存在流緩存器中時(shí),檢索與查找關(guān)鍵字相關(guān)的儲(chǔ)存結(jié)果并輸出儲(chǔ)存結(jié)果。
文檔編號(hào)H04L12/861GK103248582SQ20121058729
公開日2013年8月14日 申請(qǐng)日期2012年12月28日 優(yōu)先權(quán)日2012年2月13日
發(fā)明者迪帕克·格爾, 約翰·基恩, 文卡塔蘇布拉馬尼亞恩·斯瓦米納坦 申請(qǐng)人:叢林網(wǎng)絡(luò)公司