NDN(Named Data Networking)是用來取代當前TCP/IP架構的新的互聯網架構,在2010年被提出。
NDN 的網絡架構如下右圖,它繼承了 IP 架構的沙漏型瘦腰結構:
TCP/IP架構存在的問題
TCP/IP互聯網只提供一個通訊管道,只負責維護管道,不關心傳輸的內容。內容的管理和獲取是有應用和服務管理的。
存在哪些問題呢:
- 效率低。管道是單源單路徑的,容易造成擁塞,比如同一個視頻,要從單個服務器發送無數次。
- 可擴展性差。不斷打補丁,網絡設計管理越來越複雜。IP地址也不夠用了。
- 安全性弱。重視管道保護,但不能保證數據本身的可靠性。比如建立一個信任連接後,對方發的惡意代碼也會照收無誤。
NDN架構基本思想
當前網絡的功能(建立管道)和目的(獲取數據)不匹配。NDN網絡企圖用數據內容取代管道的核心地位。
核心思想是:
- 用戶程序只提供數據的名字,無需目的地址;
- 數據可以來自任何節點;(不用都從服務器拿數據,可以從就近的緩存獲取)
- 每個數據包必須有數字簽名;(保證安全可靠)
優勢有:
- 高效。(多源多路徑,組播發送,有緩存)
- 適合現代場景如移動互聯網、物聯網、災害救援、時延容忍網絡(DTN)等。(無需建立管道連接)
- 安全。(數據有簽名,需要時可加密;應用程序開發時就考慮數據安全,而非事後彌補)
NDN數據包
數據包格式
IP數據包:核心字段是地址。
NDN數據包:分爲興趣包和數據包兩種類型,不包含地址,核心是名字。
數據包命名
名字由程序應用生產,對網絡層透明。它包括:
- 數據包大小。(廢話)
- 多層級。(就像文件夾分層一樣,方便匹配前綴)
- 簽名。(和名字、祕鑰緊密關聯,保證安全可靠)
下面是一個NDN數據包命名的例子:
NDN路由機制
命名驅動
-
服務端註冊名字。數據發佈者需要註冊一個名字前綴(name prefix),比如YouTube註冊了一個YouTube/……
-
路由器根據名字建表。路由器能計算出到達每個名字前綴的路徑,建立起路由表。
-
用戶端拿名字請求數據。數據消費者發送興趣包來請求數據,路由器根據名字和路由表匹配轉發。
路由緩存
每個節點都可以緩存數據,可以被反覆請求使用。
用戶的請求的數據包是沒有收貨地址的,那快遞回來後給誰呢?是這麼解決的:每個路由器都維護一個興趣包緩存表(PIT, Pending Interest Table),就像是淘寶訂單,誰請求過什麼數據都記錄在案!路由器能根據興趣包緩存表,將數據反向傳輸給請求者。
路由轉發
先看反面典型,IP數據包路由轉發。缺點有:
- 單向的。(請求可能有去無回)
- 路由器是無狀態的。(太笨)
- 不會緩存任何數據。(太慢)
再看NDN興趣包和數據包的轉發。優勢是:
- 雙向的。(有請求才有數據,二者一一對應)
- 有狀態的。(路由器記錄多種狀態,信息量大)
- 有緩存。
下面是興趣包和數據包各自的路由機制。
興趣包結構如下,查詢步驟是:
CS:是否已經有緩存了;
PIT:是否已經有其他人請求過了,那就不用再重複發請求了,只需記錄一下,在包回來時給所有請求都分一份就行;
FIB:查詢哪條路徑能滿足請求,把興趣包轉發下去。
數據包結構如下,查詢步驟是:
PIT:若有該數據的請求,發給所有請求列表;若無則直接丟棄。
CS:留一份緩存後,繼續轉發。
雜想
NDN可能取代IP嗎?
新型網絡體系提出多年,爲啥現在仍是老一套呢?不禁想到了鍵盤佈局的例子,當初鍵盤佈局被特意打亂來減低機器打字的效率,防止太快機器出故障,結果這種“亂序”佈局竟然流傳至今,原因就是人們習慣了。
那麼會不會因爲習慣的力量,而同樣使人們放棄更先進的NDN,繼續使用IP呢?
這倒不會。因爲網絡結構作爲底層實現,是不影響人們正常使用的。不論用NDN還是IP,用戶使用習慣絲毫不受影響。NDN由於更靈活、高效、安全,能帶來更好的用戶體驗,還是很有希望取得革命性發展的,就像汽車取代馬車一樣。
現在的IP網絡實在太老舊,在飛速發展的時代面前顯得越來越力不從心。相信不久的將來,新一代網絡體系必將嶄露頭角。