CCNx協議

源數據地址:http://www.ccnx.org/releases/latest/doc/technical/CCNxProtocol.html

最近在學習,看得很慢,翻譯一下,以茲鼓勵,與君共勉~

CCNx協議
摘要
本文檔講解CCNx協議——一種基於命名數據的通信體系結構(稱爲內容中心網絡(CCN))的傳輸協議。CCN的底層沒有主機的概念——將內容,而非位置作爲其“地址”。CCNx協議直接快速交付命名內容,不需要將主機與另一臺主機相連。每一個數據包都有可能存在任意CCNx路由器的緩衝中,結合其支持的組播或廣播交付數據,就使得當所有人對相同的數據感興趣的時候,網絡的使用效率很高。

介紹
文檔介紹CCNx協議,它爲命名數據包提供位置獨立的交付服務。這些服務包括:端到端傳送的多反射轉發,流量控制,使用網絡中的緩衝存儲器進行透明的自動廣播,無迴環多路徑轉發,與路徑無關的內容完整性驗證,對任意應用程序數據的傳輸。應用程序的CCNx協議運行在一些底層轉發數據包的通信服務之上。對底層服務本身沒有限制:它可以是物理傳輸,跨網傳輸或點對點傳輸協議。例如,應用程序可以利用現有IP的連通性,在UDP上運行CCNx協議。由於在CCNx協議中,內容的命名與地址無關,這些內容可以永久地存在於網絡中,這就提供了一種有效地分佈式文件系統服務。

CCNx協議是通用的,支持很多網絡應用程序。它本身支持存儲內容的應用程序,如視頻、文檔文件的分佈,但CCNx模型也支持實時通信和發現協議,足以支持主機之間的會話,像TCP連接。CCNx協議將命名約定的選擇權交給應用程序,從而能夠支持大範圍的應用程序。本文檔講述與交換的數據內容無關的通用函數。所以,本文檔不僅有CCNx協議針對一個特定應用程序的完整說明,還有命名規則、數據格式和信息語義的說明。這種基於CCNx協議的應用程序協議說明(加上必要的API說明),稱爲配置文件。
CCNx協議用來實現應用程序之間的端到端通信,所以需要集成到應用程序中,而不是作爲一個獨立的模塊。

定義
節點node:一個CCNx網絡實體,可實現轉發和緩存。
參與者party:網絡中使用CCNx協議通信的任意實體。注意,參與者不僅僅是機器,也可以是使用

CCNx協議的應用程序。
信息message:一個CCNx數據包。使用這個術語,避免與底層數據包(可能攜帶CCNx信息)混淆。一個底層數據包(例如一個UDP數據包)可能包含有不止一個CCNx信息。

信息格式和編碼
不同與許多其他的協議,CCNx協議沒有固定長度的域。CCNx數據格式由XML schema定義,且編碼中定義有明確的域邊界。這種設計使得字段值的長度不受限制,可選域在忽略的時候不佔包空間,還可實現嵌套結構。使用XML結構並不意味着字段值必須是文本串,也不要求信息編碼成可直接讀的文本形式。大部分域包含有任意的二進制值,包括鑑別內容的域。
CCNx信息的數據傳輸格式是一種高效的XML結構的二進制編碼,稱爲ccnb(定義字節順序等)。也有一種文本XML編碼,可用於調試、測試、文件描述等,但絕不能用於數據傳輸。

內容鑑別
CCNx協議用名字實現內容的轉發,不考慮機器的id與物理位置。
CCNx內容的名字是分級結構的,包括若干組件。這種分級結構類似於IP地址,但CCNx的名字和名字組件是任意長度的,且組件的劃分是明確定義的,不似IP地址那樣,沒有階層的概念。本協議只依賴名字的分級結構,所以,這些名字可以包含任意二進制數據,像加密數據。
一個CCNx名字識別一個特定的數據塊,但有時候,也可以用名稱樹的頂部來識別數據塊,而不考慮下層的多條數據。識別數據塊的一個名字類似於主機列表中的IP表示的網站地址(可識別與網絡連接的主機羣)。爲了命名數據塊,CCNx名字可作爲數據塊中,每條內容的名字的一個前綴,就像一個IPv4網絡地址作爲成員主機的IP地址的前綴一樣。所以,一個CCNx名字可看做一個名字前綴,或僅僅是一個前綴。
CCNx名字的結構和表現詳情見http://www.ccnx.org/releases/latest/doc/technical/Name.html。一個數據塊的CCNx名字總是包含數據中最特別的有決定性的組件,即摘要組件。由於摘要組件是從數據中摘取的,是冗餘數據,所以不被轉發。

CCNx信息類型
在CCNx協議中,有兩種數據類型:興趣包和數據(或者叫數據和數據對象)。

興趣包是用名字來請求數據。一個興趣包可以定義一個數據塊,所以可以精確檢索。或者說,一個興趣包可以提供一個前綴名和規則,判斷帶有此前綴名的數據可否通過。

數據對象用來裝載數據。一個數據對象不僅包含有有效數據,還有數據的識別名字(不包括摘要組件)、一個加密簽名、簽名證書(發佈者)以及其他關於簽名的信息。一般的,一個數據對象信息唯一綁定一個名字、一個發佈者和一個數據塊。每個數據對象信息必須有一個有效的簽名。這樣,所有與CCNx協議通信的數據都是可證明的。
任何CCNx參與者都可以驗證它收到的任何數據對象信息的簽名。應用程序在使用數據之前必須先驗證簽名。驗證過程可能需要數據對象信息中包含的公鑰,而參與者沒有這些公鑰。若數據對象信息沒有通過驗證,CCNx參與者必須丟棄它。
由於密鑰的分佈與其他使用協議通用特徵的數據一樣,CCNx協議並沒有爲密鑰的分佈提供一個單獨的機制。密鑰分佈的配置文件是單獨的說明,而非CCNx協議的一部分。由於簽名驗證一開始就被識別的發佈者標記,所以簽名驗證可以保證一個數據對象信息在傳輸過程中沒有被毀壞。但是這些驗證與那些因爲應用程序的特定需求,需要驗證發佈者是否是一個值得信賴的數據源的驗證是不一樣。CCNx參與者因爲某些原因,需要使用可靠的管理實踐來確定某些發佈者發佈的數據是否值得信任,但這些管理實踐並沒有在CCNx協議中給出說明。CCNx協議用來確保數據的正確性,不考慮密鑰的分佈和依賴管理。

基本交換
使用CCNx協議通信是由接收方控制的。數據請求者通過可用的連接發送興趣包,任何參與者收到信息或者有匹配的數據,請求者(由興趣包中的說明可獲得)可能發送一個匹配的內容對象信息。數據只能作爲對符合該數據的興趣包的迴應被髮送出去。興趣包可以通過底層傳輸的廣播或多播設備發送出去,以便用最小的帶寬耗費找到很多潛在的數據源。
一個參與者迴應收到的一個興趣包時,最多隻能發送一個內容對象信息,即使這個參與者有很多內容對象匹配。興趣包和數據包之間的一一映射保持動態平衡,使得接收者可以控制數據從發送者處發送的速率,避免耗費帶寬將數據發送到不需要它的地方。

節點應該實現抑制機制,以降低兩個不同的節點回應它們收到的同一個興趣包(例如通過廣播或多播)時,發送兩個內容對象信息的可能性。抑制機制應該含有隨機響應次數並探測是否有另一個節點已經廣播或多播響應,以便刪除興趣包。本版的CCNx協議不提供這樣的抑制規則。

若接收者需要檢索一個需要多個內容對象信息的數據塊時,必須發送一系列興趣包。管道傳輸時,接收者在發送興趣包時,不需要等待上一個興趣包的相應數據。當然,只有當接收者知道內容對象的信息,並能提前構造不同的興趣包時,才能這麼做。發送多個具有相同請求的興趣包時,經常會引起內容對象的重複發送,因爲發送者必須基於它們當前擁有的內容來回應興趣包,而不是基於它們之前轉發過的內容對象的記錄。
CCNx協議並不假定底層的信息傳輸是可靠的。爲了提供可靠的交付,興趣包在合理期限內不滿足時,要被轉發出去。當不滿足的興趣包仍然想要數據時,接收者必須爲其設定一個計時器,並在過期時將其轉發出去。本版的CNNx協議沒有指定計數器的值。
上述的管理本地通信的基本興趣包和數據包交換的規則,就是節點(相互間可以接收和發送信息)之間的通信。雖然CCNx協議基於數據包傳輸,但本地的定義仍然比較寬泛,包括物理上相距甚遠,但維持一個長距離連接的一對節點,例如一個作爲直接發送CCNx信息的通道的TCP連接。
多次反射CCNx協議通信需要轉發CCNx信息。CCNx信息依據下一部分描述的節點模型來說明。

CCNx節點模型
一個完整的CCNx節點(對照一個受限CCNx參與者,如一個應用程序)包含以下的數據結構來提供緩存和無環路路由。
內容存儲CS:
一個用來根據前綴名檢索的緩衝存儲器。由於CNNx內容對象是自識別和自驗證的,每條信息都可能對很多客戶有用。CS應該實現一個替換策略來最大限度的實現重用,如最近使用的和最常使用的。CS也應該有一個標識過期的位。CS中可能會保存永不過期的內容對象信息,但不需要採取任何特定措施來維持它。CS是一個緩存,而不是永久存儲地。
接口:
face是接口的一般化概念:一個face可以是與一個網絡的連接,也可以是直接與一個應用程序參與者的連接。一個face可通過配置來向一個特定的網絡接口發送和接收廣播或多播包,或者發送或接收底層P2P地址包或通道包(如TCP通道)。一個face也可以是與本地運行的應用程序進程的連接,通過一個封裝像UDP或者一個操作系統特定的進程間通信路徑。所有信息都通過一個face接收,並由一個face發送出去。(個人加:以下face稱爲接口)
轉發信息庫FIB:
一個興趣的輸出接口,根據匹配的最長前綴名來檢索信息。每一個FIB記錄可能指向一個接口列表,而不是一個接口。
掛起興趣表:
不滿足興趣包的源列表,根據匹配的最長前綴名來檢索信息。每一個PIT記錄可能指向一個源列表。PIT的記錄必須設定超時,不能永久維護。
注意,以上列出的各表可能只通過一個索引連接,以便把CCNx信息處理和轉發的代價降至最低。此索引必須優先提高以下列出的按順序查找操作的效率。


興趣包處理
一個興趣包按照以下順序進行處理:
1、查看是否存在於CS中。如果發現匹配的內容對象,則將其從接收興趣包的接口轉發出去,作爲對興趣包的應答。注意,在匹配內容對象的時候,必須符合興趣包中的所有說明。若是多個內容對象同時匹配,則興趣包中的說明將決定返回哪一個對象。當在CS中發現匹配對象時,處理就結束了,而興趣包也符合要求,就可以丟棄這個興趣包了。
2、查看是否存在與PIT。若在PIT中發現一個匹配的興趣包,就說明一個等價的興趣包已經被轉發出去,並處於掛起狀態。興趣包的接收接口加入到PIT記錄中的不滿足興趣源列表中,並丟棄興趣包。
3、查看是否存在與FIB中。若在FIB中發現匹配的前綴,則在FIB中增加一個記錄,來定義興趣包的接收接口,並根據策略規則將信息發送到FIB中註冊到該前綴的一個或多個輸出接口。注意,可能有一個與本地代理連接的輸出接口使用名字的語義來動態配置新接口。
4、若前三步中都沒有發現匹配項,則說明節點目前無法滿足興趣包。節點在刪除興趣包之前會將之保留一段時間,因爲創建一條新的FIB記錄可能會提供滿足興趣包的方法。

內容信息的處理
一個內容對象按如下順序進行處理:
1、查看是否存在與CS中。如果發現了一個匹配的內容對象,就說明新收到的內容對象是一個副本,可以放心刪除了,因爲已經有興趣包符合要求了,新收到的與CS中一致的也必然符合要求。
2、產看是否存在與PIT中。若發現匹配對象,則此內容對象因爲PIT中代表的興趣,已被所有源節點轉發。一個節點在轉發內容對象之前可能先驗證此對象,並提供多個策略限制條件。
3、若前兩步均沒發現匹配項,說明這個內容是主動推送過來的。節點不能轉發主動推送的數據,必須丟棄它,但可以將之存在CS中,以便之後被請求時調用。

策略規則
與IP不同,CCNx的FIB條目會同時指出多個下一跳目的地。興趣包和數據對象的自識別特性意味着在任意節點,爲任意前綴,都不會形成迴環,也不會生成只有一個目的地址的生成樹。多輸出也意味着,在轉發信息的時候,不同的策略會選擇不同的路徑。一個節點必須實現若干策略規則,即使它依次在所列出的輸出接口上傳遞興趣包。一個節點也可能有不同的策略。策略規則應該用FIB條目來進行說明,所以,FIB條目可能含有一個有效的約束程序,用以轉發尋址某一前綴的興趣包。

若PIT記錄在興趣包超時前,沒被其刷新,則節點必須丟棄該PIT記錄。新的興趣包確保潛在的接受者仍然對收到的內容感興趣。節點必須定時重傳興趣包,以確定PIT記錄。節點可能使用不用的超時來刷新收到的用於確認的重傳興趣包,也可能對不同的接口使用不同的超時。所以,每一個節點都應該與上游部分和下游部分匹配。


發佈了37 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章