命名資料網路

命名資料網路（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節點（例如：消費者）之間透過兩種封包溝通：

- 興趣封包（Interest Packet）：消費者將請求的資料名稱放入興趣封包，並發送至網路。路由器依據該名稱轉發興趣封包給資料產生者。
- 資料封包（Data Packet）：當興趣封包抵達某一節點，而該節點有相符的資料時，該節點將此資料封包以相反路徑回傳給消費者。其中，資料封包內除了名稱和內容外，還包含資料產生者的密鑰作為簽署資訊。

### 路由器架構

為了實現興趣封包和資料封包的轉發功能，每個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條目中到達的介面訊息能夠支持推回計畫，讓下游的路由器可以被告知未服務的興趣封包，這有助於檢測攻擊。

## 參見

- 網際協議（Internet Protocol，IP）
- 資訊中心網路（Information-centric networking，ICN）
- 內容中心網路（Content-Centric Networking，CCN）
- 未來網際網路
- 未來網際網路研究與實驗

## 延伸閱讀

- 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