名綁定在一起的內(nèi)容有效載荷??蛇x地,所有的內(nèi)容對象都具有由內(nèi)容對象的SHA-256摘要組成的隱式終端名稱組成。在一個實施例中,隱式摘要不在線上傳輸,但需要時在每一跳上計算。注意,內(nèi)容對象與內(nèi)容組成是不同的。內(nèi)容對象具有根據(jù)CCN協(xié)議特別定義的結構,其大小通常是網(wǎng)絡包的大小(對于廣域網(wǎng)大約1500字節(jié),對于局域網(wǎng)8000字字,具有碎片),而內(nèi)容組成是用來指任何類型的文件的通用詞語,它可以是網(wǎng)頁的嵌入式對象。例如,網(wǎng)頁可以包括許多個嵌入式對象,諸如圖像、視頻文件或交互式組件。每個嵌入式對象是一個內(nèi)容組成,可以跨越多個內(nèi)容對象。
[0035]如之前提到的,HSVLI指示一項內(nèi)容,是分層結構的,包括從最概括級到最具體級排序的連續(xù)組成。相應的HSVLI的長度是不固定的。在內(nèi)容中心網(wǎng)絡中,與傳統(tǒng)的IP網(wǎng)絡不同,包可以由HSVLI標識。例如,“abcd/bob/papers/ccn/news”可以是內(nèi)容的名稱,標識相應的(若干)包,即,來自名稱為“ABCD”的機構的名字為“Bob”的用戶的報紙“ccn”集的“news”文章。為了請求一項內(nèi)容,節(jié)點通過內(nèi)容的名稱表達(例如廣播)對該內(nèi)容的興趣。對一項內(nèi)容的興趣可以是根據(jù)內(nèi)容的名稱或標識符對內(nèi)容集的查詢。內(nèi)容如果在網(wǎng)絡上可用,貝從存儲該內(nèi)容的任何節(jié)點發(fā)送回請求節(jié)點。路由架構智能地將興趣傳播到可能具有信息的潛在節(jié)點,然后攜帶可用內(nèi)容沿與興趣消息行進的路徑相反的路徑返回?;旧?,內(nèi)容對象遵循興趣消息留下的碎肩痕跡(breadcrumbs),因此到達請求節(jié)點。
[0036]圖1圖解說明根據(jù)本發(fā)明的實施例的網(wǎng)絡的示例性架構。在此示例中,網(wǎng)絡180包括節(jié)點100-145。網(wǎng)絡中的每個節(jié)點耦連到一個或多個其它節(jié)點。網(wǎng)絡連接185是這種連接的一個示例。網(wǎng)絡連接顯示為實線,但每條線還可以代表子網(wǎng)絡或超級網(wǎng)絡,子網(wǎng)絡或超級網(wǎng)絡可以將一個節(jié)點耦連到另一節(jié)點。網(wǎng)絡180可以是內(nèi)容中心的、局域網(wǎng)、超級網(wǎng)絡或子網(wǎng)絡。這些網(wǎng)絡中的每一個網(wǎng)絡可以互聯(lián),使得一個網(wǎng)絡中的節(jié)點可以到達其它網(wǎng)絡中的節(jié)點。網(wǎng)絡連接可以是寬帶、無線、電話、衛(wèi)星或任何類型的網(wǎng)絡連接。節(jié)點可以是計算機系統(tǒng)、代表用戶的端點和/或可以生成興趣或發(fā)起內(nèi)容的裝置。
[0037]根據(jù)本發(fā)明的實施例,消費者可以生成對一項內(nèi)容的興趣,向網(wǎng)絡180中的節(jié)點轉發(fā)該興趣。該項內(nèi)容可以由發(fā)布者或內(nèi)容提供者存儲在網(wǎng)絡180中的節(jié)點上,發(fā)布者或內(nèi)容提供者可以位于網(wǎng)絡內(nèi)部或外部。例如,在圖1中,對一項內(nèi)容的興趣在節(jié)點105上發(fā)起。如果內(nèi)容在該節(jié)點上不可用,貝興趣流向親連到第一節(jié)點的一個或多個節(jié)點。例如,在圖1中,興趣流向節(jié)點115(興趣流150),節(jié)點115也沒有可用的內(nèi)容。接著,興趣從節(jié)點115流向節(jié)點125 (興趣流155),節(jié)點125也沒有該內(nèi)容。興趣然后流向節(jié)點130 (興趣流160),節(jié)點130具有可用的內(nèi)容。內(nèi)容對象流然后反向折回其路徑(內(nèi)容流165、170和175),直到到達節(jié)點105,在此傳送內(nèi)容。諸如認證的其它過程可以包括于內(nèi)容流中。
[0038]在網(wǎng)絡180中,在內(nèi)容持有者(節(jié)點130)和興趣生成節(jié)點(節(jié)點105)之間的路徑中的任何數(shù)目的中間節(jié)點(節(jié)點100-145)可以在內(nèi)容在網(wǎng)絡上行進時參與緩存內(nèi)容的本地副本。通過隱式地共享對本地緩存內(nèi)容的訪問,緩存降低了位于其它訂閱者附近的第二訂閱者的網(wǎng)絡負載。
[0039]在CCN中,清單(也稱作目錄)用來表示數(shù)據(jù)的集合。例如,CCN節(jié)點可以包含視頻集合,視頻集合包括大量的視頻文件,視頻集合的清單可以是標識與視頻文件對應的內(nèi)容對象的排序列表。注意,由于內(nèi)容對象的大小限制,視頻文件可以跨越多個內(nèi)容對象。而且,CCN節(jié)點可以存儲網(wǎng)頁的內(nèi)容,網(wǎng)頁的清單標識網(wǎng)頁的不同組成,諸如標記文檔和嵌入式對象(包括Javascript、圖像文件、音頻文件、視頻文件等)。
[0040]在清單中,每個內(nèi)容對象由其名稱和相應摘要標識,其中,摘要是內(nèi)容對象的散列值(通常是使用諸如散列函數(shù)SHA-256的加密散列函數(shù)計算的)。在一些實施例中,每個內(nèi)容對象還由指示內(nèi)容被修改的時間的修改時間標識。圖2呈現(xiàn)對傳統(tǒng)清單(現(xiàn)有技術)的格式進行圖解說明的圖。
[0041]在圖2中,清單200包括由集合名稱204和一個或多個下列項標識的內(nèi)容對象的排序列表:內(nèi)容對象名稱230.1-230.η ;摘要232.1-232.η和修改時間234.1-234.η。摘要232.1-232.η包括分別由名稱230.1-230.η標識的內(nèi)容對象的散列值。清單200還包括根散列202,它是基于集合中各個內(nèi)容對象的散列值232.1-232.η的相加散列值。清單200的根散列202是清單200的唯一標識符。
[0042]如圖2中所示,清單200可以指示集合中表示的每個內(nèi)容對象的名稱和相應摘要??蛇x地,清單200還可以包括集合中表示的每個內(nèi)容對象的修改時間。修改時間字段的使用取決于所執(zhí)行的底層應用或服務。除了排序列表之外,清單還可以被構造為同步樹,其包含內(nèi)容對象以及內(nèi)容對象的嵌套集合。
[0043]在傳統(tǒng)的CCN中,當內(nèi)容請求者請求內(nèi)容集合(諸如網(wǎng)頁)時,請求者需要發(fā)布興趣消息的初始集合來讀一項內(nèi)容。圖3Α呈現(xiàn)對網(wǎng)頁中包括的各個組成進行圖解說明的圖。在圖3Α中,網(wǎng)頁300包括標記文檔302和由標記文檔302引用的許多個對象,標記文檔 302 諸如 JavaScript 文件 304 (Filel.js)和 306(File2.js)和嵌入式圖像 308(圖像 1)和310 (圖像N)。為了下載整個網(wǎng)頁300,請求者首先需要請求標記文檔302,然后需要解析標記文檔302來得到關于嵌入式對象的信息,以便請求這些對象,諸如JavaScript文件304和306或圖像308和310。
[0044]圖3B呈現(xiàn)對下載帶嵌入式對象的網(wǎng)頁的傳統(tǒng)過程進行圖解說明的圖。在圖3B中,請求者312正在從一個或多個響應者314上下載包括多個嵌入式對象的網(wǎng)頁。操作中,請求者312通過向響應者314發(fā)布請求標記文檔的興趣消息集合316來開始下載過程。一接收標記文檔,請求者312解析標記文檔,然后一個接一個地請求嵌入式對象(可以是JavaScript文件或圖像)。這導致交錯請求和下載嵌入式對象,因此增加了延遲。而且,因為請求者312不知道請求一個嵌入式對象要多少塊的先驗知識,它可能發(fā)送估計數(shù)目的興趣來請求對象,此數(shù)目可能太少或者太多。例如,在圖3B中,標記文檔的興趣集合316包括四個興趣,每個興趣有相同的名稱前綴,但有不同的塊數(shù)(諸如/foo/page/sO,/foo/page/si,...,/foo/page/s3)。然而,所發(fā)布的興趣的數(shù)目小于標記文檔302中包括的分段(塊)的數(shù)目。一旦接收初始分段,請求者312發(fā)布對剩下的標記文檔302的附加興趣。一旦接收標記文檔302的所有分段(包括內(nèi)容對象集合318和內(nèi)容對象集合320),請求者312讀標記文檔,并請求嵌入式對象(操作322)。
[0045]為了請求JavaScript文件304 (Filel.js),請求者312發(fā)送興趣消息集合324。事先不知道Filel.js的大小,請求者312可能通過發(fā)布太多的興趣打開太大的窗口。在圖3B中,請求者312請求Filel.js的四個興趣,每個有相同的名稱前綴但有不同的塊數(shù)(諸如 /foo/Filel.js/sO, /foo/Filel.js/sl,..., /foo/Filel.js/s3)。然而,F(xiàn)ilel.js只包含兩個片斷,并返回只包括兩個內(nèi)容對象的內(nèi)容對象集合326。因此,從請求者312發(fā)送的Filel.js的額外的兩個興趣被浪費,本可以用來請求有用的內(nèi)容,諸如用來開始下載JavaScript文件306(File2.js)。類似地,請求者312可以再次發(fā)布對JavaScript文件306(File2.js)的四個興趣,其只有一個分段,意味著三個興趣浪費。對于包括許多小對象的內(nèi)容集合,這種過度請求可能顯著地降低網(wǎng)絡的總吞吐量(throughput)。
[0046]為了降低下載延遲并提高吞吐量,在一些實施例中,系統(tǒng)將所有必需的內(nèi)容(包括標記文檔和所有的嵌入式對象)對象聚合到單個的命名流中,并允許請求者使用單個命名流(也稱作一體化流)下載所有必需的內(nèi)容。在一些實施例中,內(nèi)容集合的此單個命名流(一體化流)包括一體化清單,之后是嵌入式對象。注意,為了促進用一體化流進行下載,需要改變傳統(tǒng)的清單(如圖2中所示)以獲得一體化清單。更具體地,一體化清單需要規(guī)定每個嵌入式對象中包含的分段的數(shù)目。
[0047]圖4呈現(xiàn)對根據(jù)本發(fā)明的實施例的示例性一體化清單的格式進行圖解說明的圖。在圖4中,內(nèi)容集合(可以包括網(wǎng)頁的所有內(nèi)容)400包括清單402、標記文檔404、JavaScript 文件(Filel.js)406、JavaScript 文件(File2.js)408 和其它組成。清單 402包括內(nèi)容組成的排序列表,每個表項對應于一個內(nèi)容組成,其可以是標記文檔或嵌入式對象。每個表項包括對內(nèi)容組成的CCN名稱進行規(guī)定的內(nèi)容對象字段、列出一體化流中的內(nèi)容組成的塊序列的塊數(shù)字段和列出所有塊的散列值的塊-散列字段。
[0048]例如,在圖4中,清單402中包括的表項410對應于標記文檔404。更具體地,表項410包括對象名稱字段412.1、塊數(shù)字段414.1和塊散列字段416.1。對象名稱字段412.1規(guī)定標記文檔404的CCN基本名稱(/foo/markup)。塊數(shù)字段414.1規(guī)定占據(jù)一體化流的塊s3-s9(總共七個塊,每個塊是單個的內(nèi)容對象)的標記文檔404(由CCN名稱412.1標識)。注意,在一些實施例中,每個塊(或每個內(nèi)容對象)的CCN名稱可以構造為內(nèi)容組成的CCN基本名稱加上塊數(shù)。例如,假定標記文檔404有七個塊,標記文檔404的第一塊可以具有CCN名稱/foo/markup/s0,最后一塊可以具有CCN名稱/foo/markup/s6。塊散列字段416.1列出所有七個塊的內(nèi)容對象散列值(諸如0xl2AB、0x7798等)。注意,在圖4所示的示例中,內(nèi)容對象散列值顯示為2字節(jié)散列,便于查看簡單。實際上,內(nèi)容對象的內(nèi)容對象散列