流識別和過濾的制作方法
【專利摘要】一種方法獲得第一數(shù)據(jù)項的第一數(shù)據(jù)項簽名,第一數(shù)據(jù)項簽名包括第一數(shù)據(jù)項中的多個同步點與對應(yīng)的多個塊簽名之間的關(guān)聯(lián)。處理嘗試在第二數(shù)據(jù)項中找到所述多個同步點中的一個;并且,如果找到這樣的同步點,則通過將哈希函數(shù)應(yīng)用于第二數(shù)據(jù)項中對應(yīng)的比特塊來確定第二數(shù)據(jù)項中的所述對應(yīng)的比特塊的塊簽名。所述處理查明來自第二數(shù)據(jù)項的所述同步點和所述對應(yīng)的塊簽名是否對應(yīng)于第一數(shù)據(jù)項簽名中的同步點和塊簽名。如果預(yù)定數(shù)量的同步點和對應(yīng)的塊簽名匹配,則第一和第二數(shù)據(jù)項被認為匹配。
【專利說明】流識別和過濾
[0001]版權(quán)聲明
[0002]本專利文檔包含受版權(quán)保護的資料。版權(quán)所有人不反對美國專利商標(biāo)局的文件中的本專利文檔或任何相關(guān)資料的復(fù)制,但在其它方面保留任何所有的版權(quán)。
【技術(shù)領(lǐng)域】
[0003]本發(fā)明涉及流識別和過濾。
【專利附圖】
【附圖說明】
[0004]當(dāng)參照附圖考慮以下描述和所附權(quán)利要求時,本發(fā)明的其它目的、特征和特性、以及結(jié)構(gòu)的相關(guān)元件的功能和操作的方法、以及部件的結(jié)合和制造的經(jīng)濟性將變得更清楚,所有的附圖形成本說明書的一部分。
[0005]圖1 (a)描繪數(shù)據(jù)流;
[0006]圖1 (b)描繪同步點和對應(yīng)的比特塊;
[0007]圖1 (c)描繪圖1 (A)的數(shù)據(jù)流的流簽名;
[0008]圖2 (a) -2 (d)描繪數(shù)據(jù)流的處理;
[0009]圖3 (a) -3 (b)示出用于對多個流進行處理的結(jié)構(gòu);
[0010]圖4 (a) -4 (b)描繪多個流的處理;
[0011]圖5示出用于對流進行處理的示例性數(shù)據(jù)結(jié)構(gòu);
[0012]圖6 (a) -6 (c)示出使用圖5的數(shù)據(jù)結(jié)構(gòu)處理的示例流;
[0013]圖7示出典型的分組;
[0014]圖8是計算機系統(tǒng)的示意圖。
【具體實施方式】
[0015]背景和概述
[0016]檢查存儲在設(shè)備上或者在設(shè)備之間傳輸?shù)臄?shù)據(jù)以便試圖確定該數(shù)據(jù)是否對應(yīng)于其它已知的數(shù)據(jù)通常是有用的且期望的。例如,確定存儲在設(shè)備上的數(shù)據(jù)是否對應(yīng)于或者是其它數(shù)據(jù)的整個或部分副本可能是有用的或期望的。作為另一個示例,確定在兩個設(shè)備之間發(fā)送的數(shù)據(jù)流是否對應(yīng)于(或者是)其它數(shù)據(jù)(的整個或部分副本)可能是有用的或期望的。
[0017]描述
[0018]數(shù)據(jù)流(或流)包括比特序列。流中的比特序列可以表示某一類型的數(shù)據(jù)項(例如,電影或圖像或音樂、數(shù)據(jù)庫等)或者對某一類型的數(shù)據(jù)項進行編碼。可以對流中的比特序列進行加密和/或壓縮。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,本發(fā)明不受底層比特序列所表示的內(nèi)容限制。
[0019]如本文中所使用的,數(shù)據(jù)指的是任何任意的數(shù)據(jù),而不管底層數(shù)據(jù)表示什么,也不管如何對底層數(shù)據(jù)進行格式化、編碼或存儲。
[0020]參照圖1 (a)_l (b),流100包括多個同步點(在圖中該流被示出具有i個同步點,這些同步點被表示為SP1, SP2, SP3,…,SPi,其統(tǒng)稱為SPp。在該流中跟在每個同步點后面的是比特塊(在圖中第j個塊被表示為Bj)。
[0021]如圖1(b)中所示,第i個同步點(SPi)由k個比特(Kb1-K)組成,并且第i個比特塊(Bi)由j個比特(Ctl(VCj)組成。
[0022]盡管第j個比特塊在圖中被示為緊跟在第j個同步點的后面,但是應(yīng)當(dāng)明白,第j個比特塊可以與第j個同步點間隔某個已知量。
[0023]在目前優(yōu)選的實現(xiàn)中,存在十六(16)個同步點,每個同步點由32個比特組成,并且每個比特塊由256個字節(jié)組成。在另一實現(xiàn)中,存在十(10)個同步點,每個同步點由64個比特組成,并且每個比特塊由256個字節(jié)組成。如本文中所使用的,流中的比特的數(shù)量被稱為流的大小,同步點中的比特的數(shù)量被稱為同步點的大小,并且比特塊中的比特的數(shù)量被稱為比特塊的大小。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,可以使用除以上示出的數(shù)量之外的不同的和/或其它的數(shù)量的同步點,同步點可以具有與以上示出的數(shù)量不同的大小,比特塊可以具有與以上示出的數(shù)量不同的大小。
[0024]本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,同步點的數(shù)量在某些情況下可以被確定為比特流的大小的函數(shù)。
[0025]與每個比特塊Bj對應(yīng)的是通過將函數(shù)(h)應(yīng)用于該比特塊而確定的值H」,以使得:
[0026]Hj = h (Bj)
[0027]值%在本文中也被稱為第j個比特塊的塊簽名。
[0028]函數(shù)h應(yīng)當(dāng)具有以下性質(zhì):對于任何兩個任意的比特塊Ba和Bb,如果Ba等于Bb,貝丨J h (Ba) = h (Bb) ο
[0029]函數(shù)h的其它可期望性質(zhì)包括:
[0030](a)Bi中的小變化有可能導(dǎo)致Ii(Bi)的不同值;
[0031](b)函數(shù)h相對簡單并且快速地計算。
[0032]函數(shù)h可以是任何哈希函數(shù)。在一些實現(xiàn)中,可以使用諸如MD5或SHA-1等的消息摘要函數(shù),盡管優(yōu)選地可以使用更簡單并且更輕量的函數(shù)。優(yōu)選地,哈希函數(shù)生成32比特值。
[0033]本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,函數(shù)h不需要(并且可能將不會)對于每一個比特塊生成唯一值。
[0034]每個流具有對應(yīng)的流簽名?,F(xiàn)在參照圖l(a)-l(c),具有i個同步點(SP1, SP2,SP3,…,SPi)的流的簽名由i對〈SPj,h(Bj)>組成,j = 1-1o圖1(c)中的示圖示出了圖1(a)的流100的簽名102的邏輯表示。
[0035]參照圖2(a)和圖2(b)描述數(shù)據(jù)流的流簽名的創(chuàng)建。如圖2(a)中所示,初始設(shè)定200對流S進行處理以生成流簽名202。參照圖2(b)中的流程圖更詳細地描述初始設(shè)定200的處理。初始設(shè)定處理200將創(chuàng)建由一定數(shù)量(k)的對〈SPj,h (Bj) >組成的流簽名202,j = I…k,k為某個值。k的值優(yōu)選地被預(yù)設(shè)(例如,10、15、20等),但是,如以上所提到的,還可以將k的值確定為流S的大小的函數(shù)。
[0036]在對流200進行處理中,初始設(shè)定202可以首先確定流S的大小(在204處)。該大小信息可以被用于例如確定該流所需的同步點的數(shù)量(k)和/或該流內(nèi)的同步點的間隔。如當(dāng)閱讀本描述時將變得清楚的,對于任何給定的流(S),優(yōu)選的是使同步點分布在整個流⑶上。
[0037]處理202然后(在206處)確定流S中的下一個(第i個)同步點(SPi)以及對應(yīng)的比特塊(Bi)15對于比特塊Bi確定值H (Bi)(在208處),并且將對<SPj,H (Bj) >存儲在流S的簽名中(在210處)。在208處計算的函數(shù)“H”對應(yīng)于以上所描述的函數(shù)h,并且優(yōu)選為諸如MD5或SHA等的哈希函數(shù)的消息摘要。
[0038]處理202然后確定對于該流S是否已經(jīng)確定了充分的〈同步點,值〉對(在212處)。如果是,則存儲該流的簽名(SS)(在214處),否則確定另一個同步點(在206處)。在對流(S)處理的結(jié)束時,生成(例如,圖1(c)中所示的形式的)流簽名,并且將該流簽名與流S)相關(guān)聯(lián)地存儲。
[0039]如在閱讀本描述時對于本領(lǐng)域技術(shù)人員將清楚的,兩個流具有同樣的流簽名(使用本文中所描述的處理而確定)的事實不一定暗示這兩個流是同樣的。例如,第一個流可以由數(shù)百萬個比特組成,而流簽名可以僅由十個或二十個〈同步點,比特塊值〉對組成,其中,同步點隨機地分布在該流上,并且其中,每個同步點僅使用128個比特,并且每個比特塊僅使用512個比特。在這種情況下,如果第二個流具有完全相同的〈同步點,比特塊值〉對,則它可能對應(yīng)于第一個流,但是它可能不對應(yīng)于第一個流。然而,如果第二個流不具有與第一個流相同的〈同步點,比特塊值 > 對,則它不對應(yīng)于第一個流。
[0040]發(fā)明人認識到,對于一些應(yīng)用,確定數(shù)據(jù)流是否充分地對應(yīng)于另一個已知數(shù)據(jù)流可能是足夠的。他們認識到,在一些應(yīng)用中,以某種程度的確定性確定兩個流可能相等可能是足夠的。這樣的信息可以被用于觸發(fā)流的更廣泛的(而且可能更昂貴的)處理以確定對應(yīng)或相等。
[0041]現(xiàn)在參照圖2(c),在已確定并存儲流S的簽名(SS)之后,可以對任意的流進行處理以確定它是否充分地對應(yīng)于流S。流S’被提供給比較處理216 (以下參照圖2(d)進行描述),比較處理216使用先前存儲的流簽名(SS)來確定輸入流S’是否對應(yīng)于流S。
[0042]比較處理216確定是否存在任何更多的流要處理(在218處)。如果不是,則沒有找到匹配,因此這些流不匹配。如果存在更多的輸入流要處理,則所述處理查找同步點(在220處)。應(yīng)當(dāng)意識到,所述處理將查找流簽名SS中的同步點的任何一個(SP),并且不需要按順序查找它們。如在閱讀本描述時對于本領(lǐng)域技術(shù)人員將清楚的,這允許輸入流以片(piece)或分組(packet)被處理,這些片或分組可以不按順序到達比較處理216。
[0043]在已找到同步點(SP)之后,比較處理216然后尋找與該同步點相關(guān)聯(lián)的對應(yīng)的比特塊(B)(在220處),并且確定該比特塊B的簽名H(B)。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,比較處理216中所使用的函數(shù)H必須與用于產(chǎn)生流簽名的函數(shù)相同。
[0044]接著(在226處),將對<SP,H(B)>與流簽名SS中的同步點SP的對應(yīng)的對進行比較。如果該對不匹配(在228處),則對流的其余部分(如果有的話)進行處理(在218處,…)。另一方面,如果(在228處)對〈SP,H (B)〉與流簽名SS中的同步點SP的對應(yīng)的對匹配,則(在230處)比較處理216確定是否已存在認為流匹配的充分的對匹配。對于“充分匹配”的測試(在230處)可以使用到目前為止流中匹配的數(shù)量的計數(shù),并且可以使用該計數(shù)值來確定流簽名的〈同步點,塊簽名〉對的百分比匹配。在一些優(yōu)選的實現(xiàn)中,認為70%匹配(例如,十分之七匹配)是認為流匹配的充分匹配(在232處)。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,所需的百分比匹配(高達并且包括100%)是比較處理所需的精度的函數(shù)。因為,如以上所解釋的,當(dāng)找到匹配(在232處)時,可以使用比較處理216來觸發(fā)附加的(而且代價更高的)比較,所以本領(lǐng)域技術(shù)人員將知道并且理解如何權(quán)衡錯誤的肯定匹配(在232處)與充分匹配流的隨后處理的代價。
[0045]到目前為止,我們已經(jīng)描述了將輸入流(S’ )與單個先前處理的流(S)進行比較,并且與其進行可能匹配。在一些實施例中,可以將輸入流與多于一個的先前處理的流進行比較。
[0046]圖3 (a)中的示圖示出了多個(k個)流簽名的邏輯組織300,k個流SI,…Sk中的每一個有一個流簽名??梢匀缫陨蠀⒄請D2(a)_2(b)所描述的那樣確定流簽名中的每一個。
[0047]現(xiàn)在參照圖3 (a) -3 (b)和圖4 (a) _4 (b)描述將任意的輸入流(S)與這k個流中的每一個進行比較的處理。與多個可能的流進行比較的一個流的比較處理可以在輸入流中尋找多個流簽名的同步點,并且它還可以尋找多于一個的簽名的匹配〈同步點,哈希值〉對??傊鎏幚韮?yōu)選地跟蹤它對于k個流(Sl-Sk)中的每一個找到的匹配〈同步點,哈希值 > 對的數(shù)量,并且宣告輸入流S與這k個流中的第一個流之間的匹配為充分匹配(如以上所討論的,基于對于充分性的某一預(yù)定閾值)。
[0048]參照圖4(a)_4(b)中的流程圖,如果存在更多的流S要處理(在400處),則處理繼續(xù)(在402處)查找S中與流SP"Sk中的一個的同步點中的至少一個對應(yīng)的同步點(SP)。在該流程圖中,流Sb-Sk被稱為流集合,其被表示為S’。如果沒有找到同步點(在402處),則處理繼續(xù)(在400處)對輸入流S的任何其余部分進行處理。如果(在402處)在S中找到與流SP"Sk( S卩,流集合S’)中的任何一個對應(yīng)的同步點(SP),則處理繼續(xù)(在404處)確定與所找到的同步點(SP)相關(guān)聯(lián)的比特塊B的對應(yīng)的簽名H(B)。
[0049]接著(在406處),將簽名對〈SP,H (B)〉與S’中的所有流的與同步點SP相關(guān)聯(lián)的簽名進行比較(其中,SP是在S中找到的與流SP-Sk中的至少一個中的同步點中的至少一個對應(yīng)的同步點);并且H(B)是與該同步點(SP)對應(yīng)的比特塊B的簽名。再次參照圖3(a),流SP-Sk中的每一個的流簽名被存儲并且對于所述處理是可用的,以使得可以檢查<同步點,簽名〉對。
[0050]如果對于S’中的流的任何一個對于對<SP,H(B) >沒有找到匹配簽名對(在408處),則處理繼續(xù)(在400處)對輸入流S的任何其余部分進行處理。如果找到一個或多個匹配對<SP,H(B)>(在408處),則處理繼續(xù)(在410處),對于S’中的所有匹配流的〈SP,H (B)〉對的計數(shù)。
[0051]一旦計數(shù)被更新(在410中),所述處理就確定(在412處)S’中的任何一個流(Sm)是否具有充分的匹配對。如果確定(在412處)S’中沒有流具有充分的匹配對,則處理繼續(xù)(在400處)對輸入流S的任何其余部分進行處理。如果任何流Sm具有充分的匹配對,則所述處理完成(在414處),并且認為輸入流S與具有充分的匹配對的流匹配。
[0052]應(yīng)當(dāng)意識到,以上所描述的處理可以導(dǎo)致輸入流S與集合S’中的多于一個的流匹配。
[0053]在一些實現(xiàn)中,數(shù)據(jù)結(jié)構(gòu)302(圖3(b))為每個流簽名維護一個檢查列表(checklist),以使得每次〈同步點,簽名 > 對對于該流匹配時,所述處理可以劃掉(或打勾)。該列表允許系統(tǒng)確定(例如,計數(shù))對于該流的匹配對的數(shù)量。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,檢查列表可以以任何數(shù)量的方式實現(xiàn),包括,例如,被實現(xiàn)為其中對應(yīng)的〈同步點,簽名 > 對中的每一個為一個比特的位圖。在處理輸入流的開始時,檢查列表中的所有比特都被設(shè)置為O,并且當(dāng)找到匹配時,對應(yīng)的比特值被設(shè)置為I。用于流Sj的位圖檢查列表中的比特的和于是將給出對于該流Sj的輸入流中的匹配對的數(shù)量。如將意識到的,可以使用不同的和/或其它的方案來跟蹤匹配數(shù)量。
[0054]本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,相對于兩個流的術(shù)語“匹配”(或“不匹配”)的使用這里不一定暗示它們是同樣的。如果對于兩個流的充分?jǐn)?shù)量的<同步點,簽名 > 對相同,則這兩個流匹配。
[0055]如先前所討論的,本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,可以使用充分性的不同度量來確定兩個流是否具有充分匹配。在一些實施例中,70%匹配將被認為是充分的,而在其它實施例中,可能需要更高的匹配(高達100%)。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,如何基于例如處理的應(yīng)用以及對于錯誤的肯定匹配的容限來選擇匹配充分性的度量。如早先所提到的,在一些應(yīng)用中,一旦通過這里所描述的處理找到兩個流匹配,就可以使用進一步的測試來確定這些流是否匹配。
[0056]數(shù)據(jù)結(jié)構(gòu)和實現(xiàn)
[0057]本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,可以應(yīng)用各種優(yōu)化來實現(xiàn)匹配處理。數(shù)據(jù)結(jié)構(gòu)優(yōu)選地應(yīng)當(dāng)是:
[0058].可擴展的:應(yīng)當(dāng)初始處理數(shù)百個到數(shù)百萬個條目,如果需要,具有增長的選擇。
[0059].存儲器高效的:應(yīng)當(dāng)使用盡可能少的存儲器。
[0060].搜索高效的:對于給定模式的搜索應(yīng)當(dāng)不超過O (η)。
[0061]參照圖5描述用于流匹配處理的實現(xiàn)的示例性數(shù)據(jù)結(jié)構(gòu)。對于該示例,假定每個同步點是六至八個字節(jié)的序列,并且每個指紋是兩字節(jié)長的值。附加的(可選的)數(shù)據(jù)也可以被存儲在所述數(shù)據(jù)結(jié)構(gòu)中。參照圖5,所述數(shù)據(jù)結(jié)構(gòu)(被稱為同步指紋數(shù)據(jù)結(jié)構(gòu)(SFDS))包括一組數(shù)組:
[0062]rowl—256比特長的數(shù)組,其中,每個比特對應(yīng)于ASCII代碼(可以出現(xiàn)在同步點中的代碼)
[0063]row2一2562比特長的數(shù)組,其中,256個比特與rowl中的比特的每一個相關(guān)
[0064]row3—2563比特長的數(shù)組,其中,256個比特與row3中的比特的每一個相關(guān)
[0065]row4一與row3中的特定條目對應(yīng)的樹的列表
[0066]在初始化處理中,將同步點¢-8個字節(jié)的序列)和指紋(2字節(jié)長的哈希值,其具有附加的可選數(shù)據(jù)集)的對如下存儲在數(shù)據(jù)結(jié)構(gòu)中:
[0067]1.同步的第I個字節(jié)將設(shè)置rowl中的相關(guān)比特(如果它還未被設(shè)置)。
[0068]2.同步的第2個字節(jié)將設(shè)置與在rowl中設(shè)置的比特相關(guān)的row2的256個比特中的相關(guān)比特(如果它還未被設(shè)置)。
[0069]3.同步的第3個字節(jié)將設(shè)置與在row2中設(shè)置的比特相關(guān)的row3的256個比特中的相關(guān)比特(如果它還未被設(shè)置)。
[0070]4.將同步字節(jié)的剩余部分存儲在與在步驟3處設(shè)置的比特對應(yīng)的樹中。(如果樹尚不存在,則將創(chuàng)建該樹。)
[0071]5.將指紋和任何附加的數(shù)據(jù)連接到來自以上步驟4的樹的相關(guān)葉子。
[0072]示例
[0073]以下示例示出以上(在圖5中)所描述的示例性數(shù)據(jù)結(jié)構(gòu)的使用?,F(xiàn)在參照圖6 (a) -6 (c)中的圖,考慮具有同步點SPl =“2,254,1,A,A,C” (該模式在這里以ASCII示出)、具與對應(yīng)的指紋值0x23a9的流。將意識到,這意味著與同步點SPl相關(guān)聯(lián)的比特塊的哈希為0x23a9。為了該示例,假定該流具有流id 1000和同步索引5。
[0074]可以如下將該對< “2,254,I, A, A, C,,,0x23a9>添加到數(shù)據(jù)結(jié)構(gòu):
[0075]1.同步點中的第I個字符是“2”,所以將rowl中的比特2設(shè)置為I。
[0076]2.同步點中的第2個字符為254,所以將與rowl的比特2對應(yīng)的row2的256個比特中的比特254設(shè)置為I。也就是說,將row2[2] [254]設(shè)置為I。
[0077]3.同步點中的第3個字符為1,所以設(shè)置與在步驟2中設(shè)置的比特對應(yīng)的ι.ο?3的256個比特中的第I比特。也就是說,將row3[2,254] [I]設(shè)置為I。
[0078]4.假定在步驟3中設(shè)置的比特已經(jīng)具有與它對應(yīng)的樹,并且該樹已經(jīng)具有’ A’作為第I個字符,則不對’A’(同步點中的第4個字符)進行處理。
[0079]5.同步點中的第5個字符也為’ A’ 一將它添加到樹作為第2個字母。
[0080]6.同步點中的第6個字符為“C”,所以將它添加到樹作為第3個字母,并且在它下面創(chuàng)建新的空的葉子。
[0081]7.將指紋值(0x23a9)和附加的數(shù)據(jù)(流id 1000和同步索引5)存儲在記錄中,并且將它與在步驟6中創(chuàng)建的葉子相關(guān)聯(lián)。
[0082]一旦數(shù)據(jù)結(jié)構(gòu)被設(shè)定(如上所述),就可以例如如這里參照圖6 (a)-6 (C)描述的那樣處理輸入流。匹配處理使用兩個輔助的數(shù)據(jù)結(jié)構(gòu),即,匹配同步列表(MSL)數(shù)據(jù)結(jié)構(gòu)(圖6(b))和匹配簽名矢量列表(MSLoV)數(shù)據(jù)結(jié)構(gòu)(圖6(c))。
[0083]匹配同步列表(MSL)結(jié)構(gòu)是具有多達η個條目的列表(其中,η是同步的長度)。在該示例中,同步長度為8,并且MSL具有8個條目。該列表保存正被處理的同步的地址(SFDS,圖5)。矢量的條目i保存頭i個字節(jié)與SFDS中的同步匹配且其第(i+Ι)個字節(jié)還未被比較的同步的地址。值-1代表在該長度中“沒有匹配”。
[0084]匹配簽名矢量列表(MSLoV)結(jié)構(gòu)是矢量列表。MSLoV列表中的每個矢量保存與給定流的同步匹配的同步和該流的流id的列表。矢量的第j個條目保存找到的與該流的同步匹配的第j個同步的同步索引(從SFDS獲取)。
[0085]使用這些數(shù)據(jù)結(jié)構(gòu)的搜索流程如下:
[0086]1.每次新的分組被讀取時,逐個字節(jié)地掃描該分組中的所有字節(jié)。每個字節(jié)與SFDS的rowl中的字節(jié)進行比較。如果存在匹配,則將MSL的條目I設(shè)置為與SFDS的rowl中的相關(guān)條目相關(guān)的SFDS的row2的部分。
[0087]2.對跟在具有匹配的字節(jié)后面的字節(jié)進行數(shù)次比較。假定前一字節(jié)是匹配中的第i個,則將對當(dāng)前的字節(jié)檢查i次(檢查按以下描述的逆序進行。也就是說,首先,進行步驟e中的檢查,然后進行d中的檢查,然后…,最后一次是在步驟a中描述的檢查):
[0088]a.作為匹配中的第I (如步驟I中所描述的)
[0089]b.作為以MSL的條目I指向的部分同步開始的匹配中的第2字節(jié)一對照MSL的條目I指向的SFDS的1.0?2的相關(guān)部分對該匹配進行檢查。如果找到匹配,則將條目I設(shè)置為“-1”,并且利用到目前為止找到的部分匹配的地址(其是SFDS的ι.ο?2中的相關(guān)條目)來更新條目2。
[0090]c.作為以MSL的條目2指向的部分同步開始的匹配中的第3字節(jié)一對照MSL的條目I指向的SFDS的ι.ο?3的相關(guān)部分對該匹配進行檢查。如果找到匹配,則將條目2設(shè)置為“-1”,并且利用到目前為止找到的部分匹配的地址(其是SFDS的ι.ο?2中的相關(guān)條目)來更新條目3。
[0091]d____
[0092]e.作為以MSL的條目i_l指向的部分同步開始的匹配中的第i字節(jié)一對照MSL的條目i_l指向的SFDS的相關(guān)部分對該匹配進行檢查。如果找到匹配,則將條目i_l設(shè)置為“-1”,并且利用到目前為止找到的部分匹配的地址(其是SFDS中的相關(guān)條目)來更新條目
1
[0093]3.每次找到完整同步(也就是說,步驟2中的i等于完整同步的長度,并且步驟
2.e成功)時,計算指紋。計算的指紋與MSL的最后一個條目中的SFDF部分指向的SFDF的樹葉所指向的指紋進行比較。如果找到匹配指紋,則獲取其流Id和同步索引,并且更新MSLoV:
[0094]a.如果MSLoV對于該流Id不具有矢量,則創(chuàng)建一個新矢量,并將該新矢量添加到MSLoV的開頭。該新矢量的流Id被設(shè)置為從SFDS獲取的流Id。該新矢量的條目I被設(shè)置為從SFDS獲取的同步索引。
[0095]b.如果MSLoV對于該流Id已經(jīng)具有矢量,則將其第I個空條目設(shè)置為從SFDS獲取的同步索引。
[0096]c.注意,如果匹配同步具有MSLoV中的數(shù)個葉子,則分別對這些葉子中的每一個進行以上步驟a/b。
[0097]4.一旦MSLoV矢量中的索引的數(shù)量超過給定的量(例如,十分之八),則定義輸入流與其id根據(jù)該矢量的流Id而存儲的流之間的匹配。
[0098]5.注意,對于同步,僅搜索具有預(yù)定義長度的流的部分。如果搜索超過識別匹配流的該部分,則假定為未知流,并且對MSL和MSLoV 二者進行清除。
[0099]結(jié)束示例
[0100]本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,可以使用不同的和/或其它的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)這里描述的處理。應(yīng)當(dāng)意識到,對于所使用的數(shù)據(jù)結(jié)構(gòu),一些效率是優(yōu)選的。作為目標(biāo),數(shù)據(jù)結(jié)構(gòu)應(yīng)當(dāng)存儲多達I百萬個同步點(每個6-8個字節(jié))與和同步模式中的每一個相關(guān)的指紋。如所指出的,數(shù)據(jù)結(jié)構(gòu)優(yōu)選地提前離線創(chuàng)建(它將被準(zhǔn)備用于初始數(shù)據(jù)集,并且然后每當(dāng)需要時被遞增地更新),而搜索本身將實時地進行。
[0101]通過使用以上示例(圖6(a)-6(C))中描述的數(shù)據(jù)結(jié)構(gòu),對于一百萬個同步條目:
[0102].頭3個字節(jié)將被添加到3行,每行256個條目(28的3次等于224,等于1600萬個條目)。后面的字節(jié)將被唯一地添加到每個前綴的最后一行(小于1%將具有相同的前綴,并且列表結(jié)構(gòu)將是足夠高效的,如果不是,則可以對新添加的流考慮不同的同步模式)。
[0103].添加新同步被離線進行,并且它為同步長度的階(order)。
[0104]?搜索數(shù)據(jù)結(jié)構(gòu)中的同步可以實時地進行,并且為同步長度的階0(1)。
[0105]分組化(packetize)的數(shù)據(jù)流
[0106]在一些情況下,輸入數(shù)據(jù)流可以是以分組化的數(shù)據(jù)的形式。例如,如果比較處理在諸如路由器的設(shè)備中發(fā)生,則這可以出現(xiàn)。在這樣的情況下,執(zhí)行處理的設(shè)備可能需要緩沖來自多于一個的分組的有效載荷數(shù)據(jù),以便執(zhí)行處理。
[0107]眾所周知,在基于分組的網(wǎng)絡(luò)(諸如TCP/IP網(wǎng)絡(luò),例如,因特網(wǎng))中,要從一個位置發(fā)送到另一個位置的數(shù)據(jù)被分組化(分割成多個分組)。參照圖7,典型的分組包括地址信息和有效載荷。有效載荷包括要被傳輸?shù)臄?shù)據(jù),地址信息包括允許網(wǎng)絡(luò)將分組路由到其目的地的信息。本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,可以使用許多形式的分組化,并且分組的形式和類型不限于本發(fā)明。另外,應(yīng)當(dāng)意識到,一些網(wǎng)絡(luò)可以使用協(xié)議的多個層級,以使得有效載荷本身可以是包括其它地址信息的分組。不管所使用的協(xié)議如何,本領(lǐng)域技術(shù)人員都將知道如何從特定的分組提取與數(shù)據(jù)項對應(yīng)的數(shù)據(jù)。
[0108]如果預(yù)先知道分組化的類型,則優(yōu)選的是選擇同步點,以使得每個同步點適合放入單個分組的有效載荷內(nèi)。然而,由于這也許是不可能的,所以可能有必要獲得并且緩沖多個順序分組的有效載荷,以便執(zhí)行上述處理(查找同步點,并然后對其對應(yīng)的比特塊進行處理)。
[0109]本領(lǐng)域技術(shù)人員在閱讀本描述時將認識并理解到,與當(dāng)前使用的方法相比,所描述的處理和系統(tǒng)支持兩個內(nèi)容流之間的快得多的并且更高效方式的比較。另外,本文中所描述的方法可以處理加密內(nèi)容。
[0110]計算
[0111]實現(xiàn)這樣的方法的程序(以及其它類型的數(shù)據(jù))可以以許多方式使用各種介質(zhì)(例如,計算機可讀介質(zhì))傳輸和存儲??梢允褂糜策B線電路或定制硬件代替可以實現(xiàn)各種實施例的處理的軟件指令中的一些或全部、或者與這些軟件指令中的一些或全部結(jié)合。因此,可以使用硬件和軟件的各種結(jié)合,而不是僅使用軟件。
[0112]圖8是其上可以實現(xiàn)并且執(zhí)行本公開的實施例的計算機系統(tǒng)800的示意圖。
[0113]根據(jù)本示例,計算機系統(tǒng)800包括總線801 (即,互連)、至少一個處理器802、至少一個通信端口 803、主存儲器804、可移動存儲介質(zhì)805、只讀存儲器806、以及大容量儲存器807。
[0114]處理器802可以是任何已知的處理器,諸如,但不限于,Intel? Itanium?或 Itanium 2? 處理器、AMD? Opteron? 或 Athlon MP? 處理器、或Motorola?處理器線(lines)等。通信端口 903可以是以下端口中的任何一個:與基于調(diào)制解調(diào)器的撥號連接一起使用的RS-232端口、10/100以太網(wǎng)端口、使用銅或光纖的吉比特端口、或USB端口等。通信端口 803可以根據(jù)網(wǎng)絡(luò)(諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、⑶N、或計算機系統(tǒng)800連接的任何網(wǎng)絡(luò))而選擇。計算機系統(tǒng)800可以經(jīng)由輸入/輸出(1/0)端口 809與外圍設(shè)備(例如,顯示屏幕830、輸入設(shè)備816)通信。
[0115]主存儲器804可以是隨機存取存儲器(RAM)、或本領(lǐng)域中公知的其它動態(tài)存儲設(shè)備。只讀存儲器806可以是用于存儲靜態(tài)信息(諸如用于處理器802的指令)的任何靜態(tài)存儲設(shè)備(諸如可編程只讀存儲器(PROM)芯片)。大容量儲存器807可以被用于存儲信息和指令。例如,可以使用硬盤(諸如Adaptec?小型計算機串行接口(scsi)驅(qū)動器族)、光盤、磁盤陣列(諸如獨立磁盤冗余陣列(RAID),諸如Adaptec? RAID驅(qū)動器族)、或任何其它大容量存儲設(shè)備。
[0116]總線801將處理器802與其它存儲器、儲存器和通信塊通信地耦合。根據(jù)所使用的存儲設(shè)備等,總線801可以是PCI/PC1-X、SCS1、基于通用串行總線(USB)的系統(tǒng)總線(或其它)。可移動存儲介質(zhì)805可以是任何類型的外部硬盤驅(qū)動器、軟盤驅(qū)動器、1MEGA? Zip驅(qū)動器、緊湊盤-只讀存儲器(CD-ROM)、緊湊盤-可重寫(CD-RW)、數(shù)字視頻盤-只讀存儲器(DVD-ROM)等。
[0117]本文中的實施例可以被提供作為計算機程序產(chǎn)品,該計算機程序產(chǎn)品可以包括其上存儲指令的機器可讀介質(zhì),所述指令可以被用于對計算機(或其它電子設(shè)備)編程以執(zhí)行處理。如本文中所使用的,術(shù)語“機器可讀介質(zhì)”指的是任何介質(zhì)、多個相同介質(zhì)、或不同介質(zhì)的結(jié)合,這些介質(zhì)參與提供可以被計算機、處理器或類似設(shè)備讀取的數(shù)據(jù)(例如,指令、數(shù)據(jù)結(jié)構(gòu))。這樣的介質(zhì)可以采取許多形式,包括但不限于,非易失性介質(zhì)、易失性介質(zhì)、以及傳輸介質(zhì)。非易失性介質(zhì)包括,例如,光盤或磁盤以及其它持久存儲器。易失性介質(zhì)包括通常構(gòu)成計算機的主存儲器的動態(tài)隨機存取存儲器。傳輸介質(zhì)包括同軸電纜、銅線和光纖,其包括包含耦合到處理器的系統(tǒng)總線的線。傳輸介質(zhì)可以包括或傳送聲波、光波以及電磁發(fā)射,諸如射頻(RF)和紅外(IR)數(shù)據(jù)通信期間產(chǎn)生的那些。
[0118]機器可讀介質(zhì)可以包括,但不限于,軟盤、光盤、⑶-ROM、磁光盤、ROM、RAM、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、磁卡或光學(xué)卡、閃存、或適合于存儲電指令的其它類型的介質(zhì)/機器可讀介質(zhì)。而且,本文中的實施例還可以被作為計算機程序產(chǎn)品下載,其中,所述程序可以經(jīng)由通信鏈路(例如,調(diào)制解調(diào)器或網(wǎng)絡(luò)連接)通過載波或其它傳播介質(zhì)中所包含的數(shù)據(jù)信號從遠程計算機傳遞到請求計算機。
[0119]在將數(shù)據(jù)(例如,指令序列)傳載到處理器中可以涉及各種形式的計算機可讀介質(zhì)。例如,數(shù)據(jù)可以⑴從RAM遞送到處理器;(ii)通過無線傳輸介質(zhì)傳載;(iii)根據(jù)大量的格式、標(biāo)準(zhǔn)或協(xié)議進行格式化和/或傳輸;和/或(iv)以本領(lǐng)域中眾所周知的各種方式中的任何一種進行加密。
[0120]計算機可讀介質(zhì)可以(以任何適當(dāng)?shù)母袷?存儲適于執(zhí)行方法的那些程序元素。
[0121]如所示的,主存儲器804被編碼有支持本文中所討論的功能性的應(yīng)用850-1 (應(yīng)用850-1可以是例如初始設(shè)定200或比較應(yīng)用216)。應(yīng)用850-1 (和/或本文中描述的其它資源)可以體現(xiàn)為支持根據(jù)本文中描述的不同實施例的處理功能性的軟件代碼,諸如數(shù)據(jù)和/或邏輯指令(例如,存儲在存儲器中或另一計算機可讀存儲介質(zhì)(諸如盤)上的代碼)。
[0122]在一個實施例的操作期間,處理器802經(jīng)由總線801的使用訪問主存儲器804,以便啟動、運行、執(zhí)行、解釋或以其它方式執(zhí)行應(yīng)用850-1的邏輯指令。應(yīng)用850-1的執(zhí)行生成處理850-2中的處理功能性。換句話講,處理950-2表示在計算機系統(tǒng)800中的處理器802內(nèi)或上執(zhí)行的應(yīng)用850-1的一個或多個部分。
[0123]應(yīng)當(dāng)注意,除了執(zhí)行本文中所討論的操作的處理850-2之外,本文中的其它實施例包括應(yīng)用850-1本身(即,未執(zhí)行的或非執(zhí)行的邏輯指令和/或數(shù)據(jù))。應(yīng)用850-1可以被存儲在計算機可讀介質(zhì)(例如,儲存庫)(諸如盤、硬盤)上或光學(xué)介質(zhì)中。根據(jù)其它實施例,應(yīng)用850-1還可以被存儲在存儲器類型系統(tǒng)中,諸如固件、只讀存儲器(ROM)中,或者如該示例中那樣,作為主存儲器804內(nèi)的(例如,隨機存取存儲器或RAM內(nèi)的)可執(zhí)行代碼。例如,應(yīng)用850-1還可以被存儲在可移動存儲介質(zhì)805、只讀存儲器806、和/或大容量存儲設(shè)備807中。
[0124]以上參照圖2(a)_2(d)和圖4(a)_4(b)討論了計算機系統(tǒng)800支持的示例功能性,更具體地,與應(yīng)用850-1相關(guān)聯(lián)的功能性。
[0125]本領(lǐng)域技術(shù)人員將理解,計算機系統(tǒng)800可以包括其它處理和/或軟件和硬件組件,諸如控制硬件資源的分配和使用的操作系統(tǒng)。
[0126]如本文中所討論的,本發(fā)明的實施例包括各種步驟或操作。各個這些步驟可以由硬件組件執(zhí)行,或者可以包含在機器可執(zhí)行指令中,這些指令可以被用于使通用或?qū)S锰幚砥鞅痪幊逃袌?zhí)行操作的指令??商娲兀襟E可以由硬件、軟件和/或固件的結(jié)合執(zhí)行。術(shù)語“模塊”指的是自包含功能組件,其可以包括硬件、軟件、固件或它們的任何結(jié)合。
[0127]本領(lǐng)域普通技術(shù)人員在閱讀本描述時將容易意識并理解到,裝置的實施例可以包括可操作為執(zhí)行所描述的處理中的一些(而不必是全部)的計算機/計算設(shè)備。
[0128]存儲程序或數(shù)據(jù)結(jié)構(gòu)的計算機可讀介質(zhì)的實施例包括存儲程序的計算機可讀介質(zhì),該程序在被執(zhí)行時可以使處理器執(zhí)行所描述的處理中的一些(而不必是全部)。
[0129]在本文中描述處理的情況下,本領(lǐng)域技術(shù)人員將意識到,該處理可以在沒有任何用戶干預(yù)的情況下進行操作。在另一實施例中,該處理包括一些人類干預(yù)(例如,步驟由人執(zhí)行或者通過人的幫助執(zhí)行)。
[0130]應(yīng)當(dāng)意識到,權(quán)利要求中的詞“第一”和“第二”被用于區(qū)分或識別,而非表示順序或數(shù)字限制。類似地,字母或數(shù)字標(biāo)記(諸如“(a)”、“(b)”等)的使用被用于幫助區(qū)分和/或識別,而非表示任何順序或數(shù)字限制或排序。
[0131]盡管已經(jīng)結(jié)合目前認為是最實用且優(yōu)選的實施例的實施例對本發(fā)明進行了描述,但要理解,本發(fā)明不限于所公開的實施例,而是相反,旨在涵蓋包括在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等同布置。
【權(quán)利要求】
1.一種由硬件結(jié)合軟件實現(xiàn)的計算機實現(xiàn)的方法,所述方法包括: 確定數(shù)據(jù)項中的多個同步點,所述數(shù)據(jù)項由任意的比特序列組成,并且每個同步點由所述數(shù)據(jù)項中的比特序列組成; 對于所述多個同步點中的每一個,確定所述數(shù)據(jù)項中對應(yīng)的比特塊; 對于每個比特塊,通過將哈希函數(shù)或消息摘要函數(shù)應(yīng)用于所述比特塊來確定對應(yīng)的塊簽名; 通過將所述多個同步點中的每一個與所述對應(yīng)的比特塊的對應(yīng)的塊簽名相關(guān)聯(lián)來形成數(shù)據(jù)項簽名。
2.根據(jù)權(quán)利要求1所述的方法,其中,每個特定的同步點的對應(yīng)的比特塊與所述特定的同步點直接相鄰。
3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述哈希函數(shù)從包括以下函數(shù)的函數(shù)中選擇:SHA 和 MD5。
4.根據(jù)權(quán)利要求1、2和3中的任何一項所述的方法,其中,每個同步點由32個比特組成。
5.根據(jù)權(quán)利要求1、2、3和4中的任何一項所述的方法,其中,每個比特塊由256個字節(jié)組成。
6.一種設(shè)備,所述設(shè)備包括用于實現(xiàn)權(quán)利要求1-5中的任何一項的方法的硬件和軟件。
7.一種由硬件結(jié)合軟件實現(xiàn)的計算機實現(xiàn)的方法,所述方法包括: (A)獲得第一數(shù)據(jù)項的第一數(shù)據(jù)項簽名,所述第一數(shù)據(jù)項簽名包括所述第一數(shù)據(jù)項中的多個同步點與對應(yīng)的多個塊簽名之間的關(guān)聯(lián); (B)嘗試在第二數(shù)據(jù)項中尋找所述多個同步點中的同步點;以及 (C)如果在所述第二數(shù)據(jù)項中找到所述多個同步點中的同步點,則: (C) (I)確定所述第二數(shù)據(jù)項中對應(yīng)的比特塊的塊簽名,其中,所述塊簽名通過將哈希函數(shù)或消息摘要函數(shù)應(yīng)用于所述第二數(shù)據(jù)項中所述對應(yīng)的比特塊來確定;和 (C) (2)查明來自所述第二數(shù)據(jù)項的所述同步點和所述對應(yīng)的塊簽名是否對應(yīng)于所述第一數(shù)據(jù)項簽名中的同步點和塊簽名;以及 (C)(3)當(dāng)來自所述第二數(shù)據(jù)項的所述同步點和所述對應(yīng)的塊簽名對應(yīng)于所述第一數(shù)據(jù)項簽名中的同步點和塊簽名時,維護指示該對應(yīng)的信息; (D)在所述第二數(shù)據(jù)項中的至少一些仍未被處理時,重復(fù)步驟(B)和(C),直到來自所述第二數(shù)據(jù)項的預(yù)定數(shù)量的同步點和對應(yīng)的塊簽名與所述第一數(shù)據(jù)項簽名中的同步點和對應(yīng)的塊簽名匹配為止; (E)當(dāng)來自所述第二數(shù)據(jù)項的所述預(yù)定數(shù)量的同步點和對應(yīng)的塊簽名與所述第一數(shù)據(jù)項簽名中的同步點和對應(yīng)的塊簽名匹配時,指示所述第一數(shù)據(jù)項與所述第二數(shù)據(jù)項之間匹配。
8.根據(jù)權(quán)利要求7所述的方法,其中,對于所述第二數(shù)據(jù)項的多個不同部分,并行地重復(fù)步驟⑶和(C)。
9.根據(jù)權(quán)利要求7或8所述的方法,還包括: (F)在(E)中所確定的第一數(shù)據(jù)項與第二數(shù)據(jù)項之間匹配的情況下,選擇性地拒絕對所述第二數(shù)據(jù)項的訪問。
10.根據(jù)權(quán)利要求7、8和9中的任何一項所述的方法,還包括: (G)在(E)中所確定的第一數(shù)據(jù)項與第二數(shù)據(jù)項之間匹配的情況下,維護關(guān)于第二數(shù)據(jù)項的信息。
11.根據(jù)權(quán)利要求10所述的方法,其中,處理的至少一些在特定的設(shè)備中發(fā)生,并且其中,所維護的信息包括關(guān)于所述特定的設(shè)備的信息。
12.根據(jù)權(quán)利要求11所述的方法,其中,所述設(shè)備是網(wǎng)絡(luò)中的路由器。
13.根據(jù)權(quán)利要求7-12中的任何一項所述的方法,還包括: 獲得多個分組;和 從所述多個分組提取有效載荷信息,以獲得所述第二數(shù)據(jù)項中的至少一些。
14.根據(jù)權(quán)利要求7-13中的任何一項所述的方法,還包括: (H)在(E)中所確定的第一數(shù)據(jù)項與第二數(shù)據(jù)項之間匹配的情況下,使所述第二數(shù)據(jù)項經(jīng)受附加的檢查以確定它是否與所述第一數(shù)據(jù)項相同。
15.根據(jù)權(quán)利要求7-14中的任何一項所述的方法,其中,每個特定的同步點的對應(yīng)的比特塊與所述特定的同步點直接相鄰。
16.根據(jù)權(quán)利要求7-15中的任何一項所述的方法,其中,所述哈希函數(shù)從包括以下函數(shù)的函數(shù)中選擇:SHA和MD5。
17.根據(jù)權(quán)利要求7-16中的任何一項所述的方法,其中,每個同步點由32個比特組成。
18.根據(jù)權(quán)利要求7-17中的任何一項所述的方法,其中,每個比特塊由256個字節(jié)組成。
19.一種由硬件結(jié)合軟件實現(xiàn)的計算機實現(xiàn)的方法,所述方法包括: (A)獲得多個數(shù)據(jù)項簽名,多個數(shù)據(jù)項中的每一個具有至少一個簽名,所述多個數(shù)據(jù)項中的每一個特定的數(shù)據(jù)項的數(shù)據(jù)項簽名包括所述特定的數(shù)據(jù)項中的多個同步點與所述特定的數(shù)據(jù)項的對應(yīng)的多個塊簽名之間的關(guān)聯(lián); (B)嘗試在第二數(shù)據(jù)項中尋找所述多個數(shù)據(jù)項簽名的同步點;以及 (C)如果在所述第二數(shù)據(jù)項中找到所述多個數(shù)據(jù)項簽名的同步點,則: (C) (I)確定所述第二數(shù)據(jù)項中對應(yīng)的比特塊的塊簽名,其中,所述塊簽名通過將哈希函數(shù)或消息摘要函數(shù)應(yīng)用于所述第二數(shù)據(jù)項中所述對應(yīng)的比特塊來確定;和 (C) (2)查明所述第二數(shù)據(jù)項的所述同步點和所述對應(yīng)的塊簽名是否對應(yīng)于所述多個數(shù)據(jù)項簽名的任何一個中的同步點和塊簽名;以及 (C)(3)當(dāng)所述第二數(shù)據(jù)項的所述同步點和所述對應(yīng)的塊簽名對應(yīng)于所述多個數(shù)據(jù)項簽名的一個或多個中的同步點和塊簽名時,維護指示該對應(yīng)的信息; (D)在所述第二數(shù)據(jù)項中的至少一些仍未被處理時,重復(fù)步驟(B)和(C),直到來自所述第二數(shù)據(jù)項的預(yù)定數(shù)量的同步點和對應(yīng)的塊簽名與所述多個數(shù)據(jù)項簽名的至少一個中的同步點和對應(yīng)的塊簽名匹配為止; (E)當(dāng)來自所述第二數(shù)據(jù)項的預(yù)定數(shù)量的同步點和對應(yīng)的塊簽名與所述多個數(shù)據(jù)項的第一數(shù)據(jù)項簽名中的所述預(yù)定數(shù)量的同步點和塊簽名匹配時,指示第一數(shù)據(jù)項與第二數(shù)據(jù)項之間匹配。
【文檔編號】G06F17/00GK104205089SQ201380011606
【公開日】2014年12月10日 申請日期:2013年2月15日 優(yōu)先權(quán)日:2012年2月29日
【發(fā)明者】R·薩吉, N·梅約米 申請人:阿爾特耐特股份有限公司