聲明:
博主這裏參考的是NDN-lite 格式規範的0.3版本,不同版本中的數據包和興趣包中所包含的參數會有細微的差異。
關於NDN網絡
命名數據網絡(Named-Data Networking,NDN)早前也被稱爲內容中心網絡(Content Centric Networking,CCN),由於其特殊的傳輸方式,其協議架構設計上可以徹底解決TCP/IP設計上的諸多不適應性,但依舊保留了細腰沙漏模型。
NDN網絡也中有十分靈活的路由選擇策略,可以自動同時支持各種路由協定,以及較高的基於數據本身的安全機制。NDN不僅從原理上避免了網絡衝突和堵塞,還徹底實現了多鏈路路由,同時基於網絡內緩存(Content Store,CS)實現了就近獲取、負載均衡和容斷能力,從而提高了大規模的內容分部的性能、效率和可靠性。
什麼是興趣包、數據包
興趣包:
消費者希望得到的東西的name放入興趣包中,並在網絡上傳遞。路由器全依據該名字將興趣包轉發給資料生產者。
數據包:
當興趣包在網絡上傳送時抵達某一基點的時候,當該基點有與之相符的數據後,該基點就將所需要的數據進行封裝,以相反的路徑回傳給請求者。其中,數據包中除了有名字和內容以外,還要在名字和內容的基礎上加上資料生產者的密鑰當做前述資訊。
關於興趣包和數據包的結構
關於興趣包和數據包的結構大致如下圖所示:
興趣包內:
Name:
限制獲得的數據包是具體的哪一個
CanBePrefix:
當有這個屬性的時候,傳回來的數據包中的name可以和興趣包中的name相同,也可以是以興趣包中的name爲前綴的name
MustBeFresh:
存在這個參數的時候,則節點不得返回“非新鮮”的數據包以響應此興趣包。效果與“非新鮮”數據不存在的情況相同(即,興趣可能與商店中的某些其他數據匹配,或者,如果失敗,則轉發到其他節點)。當具有正值的“非新鮮”數據包的精確副本FreshnessPeriod到達節點時,節點應該在指定的持續時間內將其重新標記爲“新鮮”。
ForwardingHint:
ForwardingHint元素包含名稱委託列表,每個委託意味着可以通過沿委託路徑轉發興趣來檢索所請求的數據分組。每個委託都還對應着一個相關的優先級priority,在link content裏面會按照優先級,按照升序的方式去進行排列。(及從小到大)
Nonce:
Nonce攜帶一個隨機生成的4個八位字節長字節串。Name和Nonce的組合應唯一標識Interest數據包。這用於檢測循環興趣包。
InterestLifeTime:
InterestLifetime表示興趣包超時前的剩餘(近似)時間。該值是毫秒數。超時是相對於當前節點的興趣包的到達時間。轉發興趣包的節點可能會縮短生命週期以計算轉發前在節點上花費的時間。如果InterestLifetime省略該元素,則使用默認值4秒(4000)。可以在轉發之前添加缺少的元素。
Hoplimit:
可選HopLimit元素指示允許轉發興趣包的次數。該值被編碼爲0到255範圍內的1字節無符號整數值。如果該HopLimit值大於或等於1,則節點應接受該數據包並將編碼值減1。如果HopLimit值變爲0,若節點可以在本地滿足此興趣包(緩存或綁定到本地面的應用程序),則可以依舊發送數據包回去,但不能將興趣包轉發;若本地不能滿足,則只能將其丟棄。
ApplicationParameters[InterestSignature]:
ApplicationParameters元素可以攜帶任何參數化Data請求的任意數據。興趣包的名稱必須包含興趣包中參數的摘要組件,以確保參數化興趣的唯一性和完整性。
數據包內:
Name:
這裏與上方興趣包中的name爲同一個類型的東西。
MetaInfo:其中有三個組成部分
ContentType:
當ContentType爲0的時候,數據類型爲BLOB。是由數據名稱標識的有效負載; 這是默認的ContentType
當它爲1的時候,數據類型爲LinkObject,是一個授權列表。
當爲2的時候,數據類型爲Key,爲公鑰。
當爲3的時候,數據類型爲NACK,是應用程序級NACK
FreshnessPeriod:
可選項FreshnessPeriod指示節點在到達此數據包之後應等待多長時間,然後將其標記爲“非新鮮”。編碼值是毫秒數。請注意,“非新鮮”數據包的數據仍然是有效數據; 到期只意味着生產者可能產生了更新的數據。
如果數據包攜帶的FreshnessPeriod大於零,則節點應該首先將其視爲“新鮮”。數據包在節點中駐留了FreshnessPeriod幾毫秒後,它將被標記爲“非新鮮”。如果數據包中沒有FreshnessPeriod或如果它FreshnessPeriod等於零,則必須立即標記爲“非新鮮”。
FinalBlockID:
選的FinalBlockId標識片段序列中的最後一個塊。它應該存在於FinalBlock本身中,並且還可以存在於其他片段中以向消費者提供結束的高級警告。此處的值應等於最後一個Block的最後一個顯式名稱組件。
Content:
Content元素可以攜帶任意字節序列。
結束語
關於興趣包和數據包裏面的內容就講到這裏,其實如果沒有一定的NDN基礎的話,看這篇文章可能會有點雲裏霧裏的,因爲這牽扯到這些參數的運用以及數據包和興趣包的傳遞方式和命名方法,下一章會繼續講解這一部分的知識。