1. 程式人生 > >NDN全棧: 一、命名資料網路(Named Data Networking)背景介紹

NDN全棧: 一、命名資料網路(Named Data Networking)背景介紹

最近轉到 NDN 方向進行一些研究,中文資料太少,特整理本人部分經驗供廣大愛好者參考。

一:背景

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

在這裡插入圖片描述 命名資料網路的基本元素是是具有名稱的資料內容,有別於IP架構中是以IP地址識別兩端點的點對點通訊。

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

二:架構概述

2.1 封包型別:

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

Overview of the Packet Contents for NDN Packet 興趣封包:消費者將希望得到資料的名字放入興趣封包中,並在網路上傳送。路由器會依據該名字將興趣封包轉發給資料產生者。 資料封包:當興趣封包抵達某一節點,而該節點有相符的資料時,該節點就會將其資料封包以相反路徑回傳給請求者,其中,資料封包內除了有名字和內容外,並在名字與內容外加上資料產生者的金鑰當作簽署資訊。 更完整的NDN封包格式請看: NDN Packet Format Specification.

2.2 路由器架構:

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

  1. 待定興趣表:儲存了路由器轉發但還沒有被滿足的興趣封包,每個PIT條目記錄了興趣封包中攜帶的資料名,以及封包進來和出去的介面。

  2. 轉發訊息表:FIB本身由名字字首的路由協定填充,而且每個字首可以有多個介面。

  3. 內容暫存:是用來暫存路由器收到的資料封包,因為NDN資料封包的來源及轉發路徑是獨立的,它可以被暫存以滿足未來的興趣封包。

  4. 轉發策略模組:是一系列用來轉發封包的策略和規則。在特殊情況下可能會決定扔掉興趣封包,例如:當所有上游連結髮生擁塞或興趣封包被當作DoS攻擊的一部分。對於每個興趣封包,轉發策略是從FIB中取得最長的字首相符的條目,並決定何時轉發興趣封包到何地。

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

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

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

三:名字

3.1 設計原理:

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

3.2 結構:

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

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

3.3 指定名字:

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

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

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

3.4 名稱空間:

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

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

**

四:路由

**

4.1:解決IP問題的方法

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

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

**

4.2: 協定

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

**

4.3:PIT狀態

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

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

**

4.4: 興趣封包

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

**

五: 安全

** **

5.1: 概述

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

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

**

5.2: 應用層的安全

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

**

5.3: 路由安全

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

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