命名資料網路

**命名資料網路**（**Named Data Networking**，**NDN**）是一個未來的網際網路架構（Future Internet Architecture），靈感來自多年在網路使用上的實證研究，導致人們逐漸意識到，現今的網際網路架構中在舊有的 IP 協定上懸而未決的問題 。
NDN 根源於一個 Van Jacobson 在 2006 年首次公開展示的專案計畫「內容中心網路」(CCN)。NDN 的目標在於檢視如何依據 Jacobson 的提議，從現今以主機為中心的網路架構 IP 演進到以資料為中心的網路架構 NDN。一般相信這項概念上的簡單轉變，將對人們如何設計、開發、部署和使用網路以及應用程式產生深遠的影響
。

網際網路目前主要用作信息散佈的平台，但這並非 IP 的強項。因此，未來網際網路的「瘦腰」（thin waist）架構應當基於命名資料，而非以數字定址的主機。基本原則是，通信網路應該允許用戶專注於他或她需要的資料，也就是所謂的「內容」（content），而不必指定資料要取自哪個實際位置，也就是所謂的「主機」（host）。由於當前的網際網路中，絕大多數（「高達流量的 90％」）的網路使用方式都是由單一來源傳播到多個用戶，命名資料網路的許多機制均具有廣泛的優勢潛力，例如內容快取，以減少擁塞並提高傳遞速度，簡化網路設備配置，以及在資料層級就直接內建網路安全性。

## 背景

現今的網際網路沙漏架構（hourglass architecture）以一個普世通用的網路層（network layer）為中心，也就是 IP。在 1970 年代設計 IP 時的基本概念，是要能允許分散在各個不同地理區域的使用者都能順利存取少數巨大而不會移動的電腦，因此當代的網際網路架構也都是圍繞著這種以主機對主機的會話模式而設計。 IP 中實作了要達成全球互聯所需的最少功能，這種細腰架構促成了網際網路爆炸性的成長，使得下層與上層的技術可以獨立發展與創新。然而，IP 當初只是設計來建立一個通訊網路，因此它的封包是以通訊的端點來進行命名。

 
隨著電子商務、數位媒體、社交網路、智慧手機等應用逐步地成長，網際網路不再只是一個（像電話網路一般）點對點的通訊網路；目前互連網上大多數的用途是作為一個散佈網路（distribution network）。散佈網路比起通訊網路在功能上更加地一般化，因此藉由傳統點對點對點的通訊協定來試圖解決散佈的問題，不但複雜而且容易出錯。

命名資料網路這個專案計畫試圖改進 IP 架構，讓細腰角色更加一般化，讓它在處理封包是依據資料而非通訊端點來命名。更明確地說，之前的 IP 網路提供的服務是將封包遞送到指定的位址，而命名資料網路所提供的網路服務，是依據所指定的名稱來獲取資料。命名資料網路中的「名稱」可以是任何東西 －－ 一個端點、一部電影或一本書中的一段資料內容、一個開啟燈光的指令等等。期望這個概念上的簡單改變的可以讓網際網路除了現有點對點的通訊外，更佳地應用在更廣泛的應用上。 命名資料網路的設計中，融合了過去三十年在網路工程上所習得的經驗，在一開始就將許多重要的功能整合到協定中，像是利用興趣封包（Interest packet）與資料封包（Data packet）的流量平衡來進行網路流量的自我調控，並對所有網路上傳送的資料進行數位簽章以確保安全性。

## 歷史

### 先期研究

命名資料網路的哲學始於 1979 年由 Ted Nelson 率先提出，其後 Brent Baccala 在 2002 年持續發揚光大。在 1999 年時，史丹佛在 TRIAD 計畫（頁面存檔備份，存於網際網路檔案館） 中提出，使用一個物件的名稱直接繞送到一個鄰近的複本，即可避免再去名稱伺服器（DNS server）查詢。在 2006 年，柏克萊的「資料導向網路架構」（Data Oriented Network Architecture，DONA）計畫提出一個以內容為中心的網路架構，它進一步改善了 TRIAD，在架構中加入了安全性（認證）的機制。Van Jacobson 在 2006 年至 Google 演講有關網路的演進 A New Way to Look at Networking，主張命名資料網路將是網路發展的下一步。在 2009 年，PARC 在 CCNx 計畫內宣布了他們的內容中心架構，該計畫是由當時身為 PARC 研究院士的 Jacobson 所領導。2009 年 9 月 21 日，PARC 發佈了他們內容中心網路研究計畫的互操作性規格，並且以 GPL 首次釋出公開原始碼（見 CCNx 計畫網站（頁面存檔備份，存於網際網路檔案館））。有一個更加廣義的網路研究方向叫「資訊中心網路」（information-centric networking ，ICN），許多不同的架構設計都由此發展出來，命名資料網路只是其中的一例。網際網路研究任務小組（Internet Research Task Force，IRTF）在 2012 年成立了研究 ICN 的工作小組。

### 現狀

命名資料網路包含國家科學基本所贊助的 16 個計畫主持人，涵蓋 12 個校園，以及來自學術界與產業界研究社群與日漸增的興趣 。 目前有許多關於命名資料網路的 研究成果（頁面存檔備份，存於網際網路檔案館） 被陸續發表，以及迅速成長的 程式碼（頁面存檔備份，存於網際網路檔案館） 被貢獻至相關社群。

## 架構上的關鍵原則

* 端點至端點原則：應用程式的開發只需兩端點的支援，不需顧慮到中間的路由器等節點（路由器只需要支援 IP 即可）。命名資料網路保有此一原則。
* 路由學習與封包轉發之機制分離：這個原則已被證實對網際網路的發展有其必要，它允許路由學習的演算法可以自由改變和嘗試，而不影響到封包轉發的穩定運作。命名資料網路採用同樣的原則，使得現有最佳的封包轉發技術可被佈建，同時新的路由研究也可易於進行。
* 全狀態的轉發機制（Stateful forwarding）: 命名資料網路會記錄最近轉發的封包狀態，以進行迴路偵測、流量平衡、普遍暫存（ubiquitous caching）等智慧型的轉發機制。
* 內建安全性：在命名資料網路中，任何有名稱的資料，在傳送時都必須進行簽章及驗證，以在網路層（network layer）確保其安全。
* 提供使用者選擇以促進競爭：雖然這不是網際網路一開始設計時就存在的概念（一開始的互聯單位只限於學術單位之間，商業的引進與電信業者的競爭是 1990 年代以後的事），但目前全球的網路佈建已展現出電信網路的基礎架構並不中立，命名資料網路在技術上提供機制讓終端使用者可自由選擇的權利，以促進競爭。

## 架構概述

### 封包類型：

在 NDN 的通訊中是由接收端 (例如：資料消費者) 透過兩種不同類型的封包來溝通，分別是興趣封包和資料封包。

* 興趣封包：消費者將希望得到資料的名字放入興趣封包中，並在網路上傳送。路由器會依據該名字將興趣封包轉發給資料產生者。
* 資料封包：當興趣封包抵達某一節點，而該節點有相符的資料時，該節點就會將其資料封包以相反路徑回傳給請求者，其中，資料封包內除了有名字和內容外，並在名字與內容外加上資料產生者的密鑰當作簽署資訊。

更完整的 NDN 封包格式請看： NDN Packet Format Specification（頁面存檔備份，存於網際網路檔案館）.

### 路由器架構

為了實現興趣封包和資料封包的轉發功能，每個 NDN 路由器有三個資料結構和一個轉發策略。

* 待定興趣表：儲存了路由器轉發但還沒有被滿足的興趣封包，每個 PIT 條目記錄了興趣封包中攜帶的資料名，以及封包進來和出去的介面。
* 轉發訊息表：FIB 本身由名字前綴的路由協定填充，而且每個前綴可以有多個介面。
* 內容暫存：是用來暫存路由器收到的資料封包，因為 NDN 資料封包的來源及轉發路徑是獨立的，它可以被暫存以滿足未來的興趣封包。
* 轉發策略模組：是一系列用來轉發封包的策略和規則。在特殊情況下可能會決定扔掉興趣封包，例如：當所有上游連結發生擁塞或興趣封包被當作 DoS 攻擊的一部分。對於每個興趣封包，轉發策略是從 FIB 中取得最長的前綴相符的條目，並決定何時轉發興趣封包到何地。

當興趣封包到達時，NDN 路由器會先查詢內容暫存中是否有符合的資料，如果有相符的資料的話，路由器會直接透過興趣封包傳來的介面回傳資料封包，否則路由器會在 PIT 中查詢興趣封包的名字，如果有相同的條目在 PIT 中的話，路由器會在該 PIT 的條目中簡單記錄興趣封包的來源介面，但如果在 PIT 中沒有相同的條目的話，路由器將會基於 FIB 中的訊息和路由器的轉發策略向資料生產者轉發興趣封包，當路由器收到很多來自下游節點中相同名字的興趣封包時，它只會向上游的資料生產者轉發第一個興趣封包。

當資料封包到達時，NDN 路由器會先查詢相符的 PIT 條目並向列在 PIT 條目所有的下游介面轉發資料，然後在 PIT 中移除該條目並將此資料暫存在內容暫存中，資料封包總是沿著興趣封包的相反路徑回傳，而且不會遺失封包。在每條連結中，一個興趣封包會返回一個資料封包，提供了流平衡的機制。為了取得包含多個封包的大物件，興趣封包提供了一個類似 TCP ACKs 用來控制流量的角色：被資料消費者控制的細粒度的反饋迴路。

興趣封包和資料封包都不攜帶任何主機或介面位置，路由器是基於封包中攜帶的名字來轉發興趣封包給資料生產者，並基於興趣包在每個節點所建立的 PIT 狀態訊息向消費者轉發資料封包。興趣封包與資料封包交換的對稱性減少了 hop-by-hop 的控制迴路（不要與對稱路由或路由搞混），並消除了在資料傳輸中任何需要來源與目的節點的概念，不像 IP 的端到端的封包傳送方式。.

## 名字

### 設計原理

NDN 的名字在網路中是不透明的，這可以讓每個應用程式去選擇適合的命名方式。因此，命名能夠隨網路獨立地演進。

### 結構

NDN 的設計假設為有層次化的結構命名，例如，由 UCLA 生產的影片可能被命名為 /ucla/videos/demo.mpg，其中「/」以文本表示法描繪了名字的構件，與 URL 相似，這種層次化的結構有很多的潛在好處：

* 關係規範：讓應用程式去表示內容和資料元素的關係，例如，UCLA 影片版本一中的第三段可能被名為 /ucla/videos/demo.mpg/1/3。
* 名字集合：可以用 /ucla 與產生影片的自動化系統通訊。
* 路由：允許擴展路由系統及幫助提供有必要的資料上下文。

### 指定名字

為了得到動態產生的資料，消費者必須能夠為想要的資料建構名字，而不是用先前看過的名字或資料。方法有以下兩種：

* 一個演算法允許生產者和消費者去達到相同有效訊息的名字。
* 興趣封包選擇器與最長前綴匹配的結合，透過一個或多個疊代器去取得期待的資料。

目前研究正在探索如何讓應用程式去選擇名字，讓這個名字可以促進應用程式的開發和網路的傳遞。研究的目標是去發展和精進目前存在的原理及命名的指導方針，在系統庫中將其加入命名的方式，用來實行簡化未來應用程式的開發。

### 命名空間

可以被全球得到的資料一定有全球唯一的名字，但用於當地通訊的名字只需要當地路由 (或當地廣播) 來尋找符合的資料。單獨的資料名稱在很多範圍和上下文中是有意義的，範圍從「房間裡的電燈開關」到「世界上所有的國家名字」。
命名空間的管理不是 NDN 架構中的一部分，就像位址空間的管理也不是 IP 架構中的一部分。然而，命名則是 NDN 應用程式設計中最重要的部分，讓應用程式開發者和使用者去設計他們自己的命名空間作為資料交換有幾項好處：

* 增加應用程式資料和其使用的網路之間的映射密度。
* 減少次要符號的需求 (保持記錄可以將應用程式的配置映射到網路的配置)。
* 將抽象可用的範圍擴展到開發者。.

## 路由

### 解決 IP 問題的方法

NDN 路由器和轉發封包都是以名字為基礎運作，也因此而解決了三個由 IP 架構中位址所產生的問題：

* 位址空間耗盡：NDN 命名空間是無邊界的
* NAT 轉發：NDN 不使用位址，所以無論是對內還是對外的，都不存在有 NAT 轉換的問題
* 位址管理：位址的分配及管理不再需要在區域網路中

### 協定

NDN 網路可以使用傳統的路由演算法，例如：鏈狀路由演算法和距離向量演算法。代替宣告 IP 的前綴中，NDN 路由器宣告名字的前綴讓他可以覆蓋路由器願意服務的資料。傳統的路由協定，比如 OSPF 和 BGP，都可以適用於將名字視為不透明的序列組件來對名字前綴進行路由，並對興趣封包中的名字針對 FIB 表做出基於組件的最長前綴匹配。

### PIT 狀態

每個路由器的 PIT 表支援跨越 NDN 資料面的轉發，記錄了每個待定的興趣封包和來源介面，並在收到相符的資料或超時發生後移除興趣封包。這種每跳每個封包狀態與 IP 的無狀態資料面不同，基於 FIB 中的訊息和效能測量，在每個路由器中的轉發策略模組會做出以下正確的決定：

* 控制流：由於每個興趣封包最多只會收到一個資料封包，路由器可以直接透過控制待定興趣封包的數量來控制流量負載，因而達到流平衝
* 多播的資料轉發：在 PIT 表中記錄了相同資料名字的興趣封包的來源介面，自然就支援多播的資料轉發
* 更新路徑以適應其對網路的觀點
* 轉發：路由器可以判斷哪些興趣封包被轉發到哪個介面，在 PIT 表中有多少未滿足的興趣封包及不同興趣封包的相對優先權，

### 興趣封包

如果路由器決定興趣封包不能被滿足，例如：上游連結是關閉的，FIB 表中也沒有轉發的條目或極端的塞車情況發生，路由器會發送一個 NACK 給傳送興趣封包的下游鄰居。這樣的 NACK 可能觸發接收路由器去轉發興趣封包到其它介面來尋找替代的路徑。PIT 狀態使路由器可以去辨認和丟棄循環的封包，允許他們自由地向相同資料產生者使用多樣的路徑。封包不能在 NDN 中循環，代表不需要在 IP 中有生存時間或其它措施和位址的相關協定來解決這些問題。

## 安全

### 概述

相對於 TCP/IP 將安全的責任交給端節點，NDN 本身就可以透過資料生產者對每個資料封包簽名來確保資料的安全，資料生產者的簽名能確保資料的完整性，並可以知道資料來源，讓消費者可以藉由如何得到資料及哪裡得到資料來提高對資料的信任度。NDN 網路也支援細粒度 (fine-grained) 的信任，允許消費者推測關於公鑰的擁有者是否是在特定環境中特定資料的一個可接受的發佈者。第二個主要的研究是設計和開發可用的機制來管理使用者的信任，這裡有兩個不同類型的信任機制：

* 層次化信任模組：在此模組中密鑰命名空間授權使用密鑰。意思是說，一個資料封包會攜帶一個公鑰當作有效的證書，既是由第三方簽名並，用來簽名特定資料
* 網路信任:：啟動對話安全而不需要預先同意的信任.

### 應用層的安全

NDN 的資料中心安全有固定的應用程在內容訪問控制及其礎建設的安全方面，應用程可以加密資料和分配密鑰當命名封包使用相同命名架構去分配密鑰時，有效的限制資料安全周長在單個應用程式中。為了驗證資料封包的簽名，應用程式可以取得適當的密鑰，確認封包中密鑰的位置區域，就像任何其它的內容。但信任管理，例如，如何確認在應用程式中特定的封包所提供的密鑰的真實性，是一個主要的研究挑戰。 一致的實驗方法，NDN 的信任管理研究由應用層的開發和使用來驅動：先解決特定問題，然後定義出共同模式。例如，NLSR 的安任需求需要開發一個簡單的層次化信任模組，利用最低層級的密鑰 (接近 root)，密鑰用名字發布來當作最高層級中的密鑰，該名字反應了他們之間的關係。在這個信任模組中，命名空間與層次結構的信任代表的相配，例如，/root/site/operator/router/process。在分層架構中特定命名發布的密鑰，授權他們可以簽名特定的資料封包並限制他們的範圍。這個範例可以簡單地延伸到其它真實世界信任趨向於層次化模式的應用程式，像我們建構的管理系統 (BMS) 中。因為 NDN 在控制應用程式中留下了信任模組，更有彈性和表現力的信任關係，比如 ChronoChat，激發了信任網路模組實驗的積極性，這個安全模組是在目前的聊天室中參與者可以透過新的簽名來介紹新的參與。未來的應用程式將實現一個交叉驗證模組 (SDSI)，這個模組將提供更多的驗證，讓資料和密鑰名字可以是獨立的，這將更簡單地適應各種真實世界的信任關係。

### 路由安全

此外，NDN 處理網路路由和控制訊息，比如所有 NDN 的資料或要求簽名，這些為安全路由協定抵抗攻擊提供了堅固的基礎，例如，欺騙和篡改。NDN 使用多路徑的轉發和自適轉發策略模組，減緩了前綴被劫持的攻擊，因為路由可以偵測到劫持後的異常現象，並透過替代路徑來取得資料，由於 NDN 封包引用的是內容而不是設備，所以惡意地指向特定設備變得更加棘手，雖然減緩機制可以針對其他 NDN 的特定攻擊，例如，興趣封包泛洪的 DoS 攻擊。此外，待定興趣表中關於先前的要求封包，可以為如何處理興趣封包做出明智的決定，有以下幾個安全的優點：

* 流量平衡：PIT 條目的數量是路由器負載的指引器，對 PIT 大小的約束限制了 DDoS 的攻擊。
* 興趣封包超時：PIT 條目超時提供了相對容易的攻擊檢測，並每個 PIT 條目中到達的介面訊息能夠支持推回計畫，讓下游的路由器可以被告知未服務的興趣封包，這有助於檢測攻擊。

## 參見

* 內容中心網路（Content-Centric Networking，CCN）
* Internet Protocol｜網際網路通訊協定（Internet Protocol，IP）
* 未來網路
* 未來網路研究與實驗 (歐盟計畫)

## 延伸閱讀

* DEATH TO TCP/IP cry Cisco, Intel, US gov and boffins galore（頁面存檔備份，存於網際網路檔案館）
* 命名資料網路的下一階段 Named Data Networking Next Phase (NDN-NP)（頁面存檔備份，存於網際網路檔案館）
* 命名資料網路研究計畫首頁（頁面存檔備份，存於網際網路檔案館）
* NSF Awards for NDN-NP（頁面存檔備份，存於網際網路檔案館）
* FIA: Collaborative Research: Named Data Networking (NDN)（頁面存檔備份，存於網際網路檔案館）
* Named Function Networking (NFN)
* NDN on Galileo（頁面存檔備份，存於網際網路檔案館）

## 參考資料