摘要: 精通IPFS系列之一:IPFS入門簡介,包括IPFS是什麼、Merkle DAG、節點和網絡模型,以及協義棧。
1、IPFS 是什麼
IPFS 是一個可快速索引的版本化的點對點文件系統。
- IPFS是一個協議
- 定義了基於內容的尋址文件系統
- 協助內容分發
- 結合了分佈式哈希、p2p傳輸、版本管理系統
- IPFS是一個文件系統
- 有文件夾和文件
- 可掛載文件系統(通過 FUSE)
- IPFS是一個web
- 可以像 web 那樣查看文檔
- 可能通過 https://ipfs.io/ 訪問文件
- 瀏覽器或擴展可以直接支持 ipfs:/ 或者 dweb:/ipfs/
- 基於哈希確保內容真實性
- IPFS是個模塊化
- 通過任何網絡協議的連接層
- 路由層,尋找/定位文件所在位置
- 使用路由層的 DHT (kademlia/coral)
- 使用基於路徑的命名服務
- 使用 bittorrent-inspired 的區塊交換
- IPFS 使用加密
- 加密哈希內容尋址
- 區塊級的去重
- 文件完整性和版本控制
- 文件系統級的加密和簽名支持
- IPFS是一個p2p系統
- 世界範圍內的 p2p 文件傳輸網絡
- 完全分散的架構
- 沒有單點失效問題
- IPFS天生是一個CDN
- 文件添加到本地文件系統,將會在全世界可用
- 緩存友好(內容哈希命名)
- 基於 bittorrent 的帶寬管理
- IPFS有一個命名服務
- IPNS,一個受SFS啟發的名稱系統
- 基於PKI的全局命名空間
- 有助於建立信任鏈
- 與其他NSes兼容
- 可以將DNS,.onion,.bit等映射到IPNS
2、Merkle DAG
IPFS 的核心是 MerkleDAG,一個有向無環圖,其鏈接是哈希。 這為 IPFS 中的所有對象提供了有用的屬性:
- 認證可以對內容進行哈希處理並根據鏈接進行驗證
- 持久化一旦獲取,對象可以永久緩存
- 通用任何數據結構都可以表示為merkledag
- 分佈式對象可以由任何人創建,沒有集中的編寫者
IPFS 是一個網絡協義棧,用於組織代理網絡以創建,發佈,分發,提供和下載merkledag。 它是經過身份驗證的,分散的,永久性的網絡。
3、節點和網絡模型
IPFS網絡使用基於身份的 PKI。 IPFS 節點是一個可以查找、發佈和複製 merkledag 對象的程序。 其身份由私鑰定義。 特別:
privateKey, publicKey := keygen
nodeID := multihash(publicKey)
3.1、multihash和可升級的哈希
IPFS 中的所有哈希都使用 multihash 進行編碼,multihash 是一種自描述哈希格式。使用的實際哈希函數取決於安全性要求。IPFS的密碼系統是可升級的,這意味著當哈希函數被破壞時,網絡可以轉移到更強的哈希值。
目前 IPFS 節點必須支持:
- sha2-256
- sha2-512
- sha3
4、協義棧
IPFS 有一個模塊化的協義棧,每一個模塊都有多種實現,全部在不同的模塊中。 此規範僅解決層之間的接口,並簡要提及可能的實現。 詳細信息留待其他規格。
IPFS 有5層:
- 命名自我認證的PKI命名空間(IPNS)
- merkledag數據結構格式
- 交換區塊傳輸和複製
- 路由定位對等體和對象
- 網絡在對等體之間建立連接
摘要: 精通IPFS系列之一:IPFS入門簡介,包括IPFS是什麼、Merkle DAG、節點和網絡模型,以及協義棧。
1、IPFS 是什麼
IPFS 是一個可快速索引的版本化的點對點文件系統。
- IPFS是一個協議
- 定義了基於內容的尋址文件系統
- 協助內容分發
- 結合了分佈式哈希、p2p傳輸、版本管理系統
- IPFS是一個文件系統
- 有文件夾和文件
- 可掛載文件系統(通過 FUSE)
- IPFS是一個web
- 可以像 web 那樣查看文檔
- 可能通過 https://ipfs.io/ 訪問文件
- 瀏覽器或擴展可以直接支持 ipfs:/ 或者 dweb:/ipfs/
- 基於哈希確保內容真實性
- IPFS是個模塊化
- 通過任何網絡協議的連接層
- 路由層,尋找/定位文件所在位置
- 使用路由層的 DHT (kademlia/coral)
- 使用基於路徑的命名服務
- 使用 bittorrent-inspired 的區塊交換
- IPFS 使用加密
- 加密哈希內容尋址
- 區塊級的去重
- 文件完整性和版本控制
- 文件系統級的加密和簽名支持
- IPFS是一個p2p系統
- 世界範圍內的 p2p 文件傳輸網絡
- 完全分散的架構
- 沒有單點失效問題
- IPFS天生是一個CDN
- 文件添加到本地文件系統,將會在全世界可用
- 緩存友好(內容哈希命名)
- 基於 bittorrent 的帶寬管理
- IPFS有一個命名服務
- IPNS,一個受SFS啟發的名稱系統
- 基於PKI的全局命名空間
- 有助於建立信任鏈
- 與其他NSes兼容
- 可以將DNS,.onion,.bit等映射到IPNS
2、Merkle DAG
IPFS 的核心是 MerkleDAG,一個有向無環圖,其鏈接是哈希。 這為 IPFS 中的所有對象提供了有用的屬性:
- 認證可以對內容進行哈希處理並根據鏈接進行驗證
- 持久化一旦獲取,對象可以永久緩存
- 通用任何數據結構都可以表示為merkledag
- 分佈式對象可以由任何人創建,沒有集中的編寫者
IPFS 是一個網絡協義棧,用於組織代理網絡以創建,發佈,分發,提供和下載merkledag。 它是經過身份驗證的,分散的,永久性的網絡。
3、節點和網絡模型
IPFS網絡使用基於身份的 PKI。 IPFS 節點是一個可以查找、發佈和複製 merkledag 對象的程序。 其身份由私鑰定義。 特別:
privateKey, publicKey := keygen
nodeID := multihash(publicKey)
3.1、multihash和可升級的哈希
IPFS 中的所有哈希都使用 multihash 進行編碼,multihash 是一種自描述哈希格式。使用的實際哈希函數取決於安全性要求。IPFS的密碼系統是可升級的,這意味著當哈希函數被破壞時,網絡可以轉移到更強的哈希值。
目前 IPFS 節點必須支持:
- sha2-256
- sha2-512
- sha3
4、協義棧
IPFS 有一個模塊化的協義棧,每一個模塊都有多種實現,全部在不同的模塊中。 此規範僅解決層之間的接口,並簡要提及可能的實現。 詳細信息留待其他規格。
IPFS 有5層:
- 命名自我認證的PKI命名空間(IPNS)
- merkledag數據結構格式
- 交換區塊傳輸和複製
- 路由定位對等體和對象
- 網絡在對等體之間建立連接
4.1 網絡層
網絡層在網絡中的任何兩個 IPFS 節點之間提供點對點傳輸。 它處理:
- NAT遍歷
- 支持多種傳輸
- 支持加密,簽名或清除通信
- 多路複用
具體參考 libp2p。
4.2、路由
路由層有兩個重要的目標:
- 節點路由發現其他的節點
- 內容路由發現發佈到 IPFS 上的數據
路由系統是一種滿足各種實現的接口。 例如:
- DHTs
- mdns
- snr
- dns
具體參考 libp2p。
4.3、區塊交換
區塊交換負責協商批量數據傳輸。 一旦節點彼此瞭解,並且連接,交換協議就會控制內容尋址塊的傳輸方式。
區塊交換是一種滿足各種實現的接口。 例如:
- Bitswap
- HTTP
4.4、Merkledag
理解數據。merkledag 數據結構是:
message MDagLink {
bytes Hash = 1; // multihash of the target object
string Name = 2; // utf string name. should be unique per object
uint64 Tsize = 3; // cumulative size of target object
}
message MDagNode {
MDagLink Links = 2; // refs to other objects
bytes Data = 1; // opaque user data
}
參考 merkledag 規範和路徑解析規範。
4.5、命名-PKI命名空間和可變指針
IPFS 主要關注內容尋址數據,這些數據本質上是不可變的:更改對象會改變其哈希值,從而改變其地址,使其成為一個完全不同的對象。 (將其視為寫時複製文件系統)。
IPFS命名層(或 IPNS )處理以下內容的創建:
- 可變指向對象的指針
- 人類可讀的名字
IPNS基於SFS。 它是PKI命名空間,名稱只是公鑰的哈希。 控制私鑰的人控制名稱。記錄由私鑰簽名並分佈在任何地方(在 IPFS 中,通過路由系統)。 這是一種在互聯網上分配可變名稱的平等主義方式,沒有任何集中化或證書頒發機構。
參考命名規範。
作者:喬瘋,加密貨幣愛好者,ipfs 愛好者,黑螢科技CTO。
(作者:黑螢科技,內容來自鏈得得內容開放平臺“得得號”;本文僅代表作者觀點,不代表鏈得得官方立場)
"