IPFS(星際文件系統)
星際文件系統(InterPlanetary File System,縮寫為IPFS)是一個旨在實現文件的分佈式存儲、共享和持久化的網絡傳輸協議[1]。它是一種內容可尋址的對等超媒體分發協議,用於在分佈式哈希表中存儲和共享數據。通過使用內容尋址,IPFS 在連接 IPFS 主機的全局命名空間中唯一標識每個文件,從而創建了一個彈性的文件存儲和共享系統。
在 IPFS 網絡中的節點構成一個分佈式文件系統。它是一個開放原始碼項目,自 2014 年開始由協議實驗室在開源社區的幫助下發展。其最初由 Juan Benet 設計[2]。IPFS 允許用戶以類似於 BitTorrent 的方式託管和接收內容。與以中央伺服器為中心的傳統協議(如 HTTP 和 HTTPS)相反,IPFS 圍繞用戶運營商的去中心化系統構建,這些運營商持有部分總體數據。網絡中的任何用戶都可以通過其內容地址提供文件,網絡中的其他對等節點可以使用分佈式哈希表 (DHT) 從擁有該文件的任何節點查找和請求該內容。
與傳統的基於位置的協議(如 HTTP 和 HTTPS)相比,IPFS 使用基於內容的尋址來提供一種去中心化的替代方案來分發萬維網。IPFS 用於去中心化應用程式和內容存檔。
開發者 | Protocol Labs |
---|---|
當前版本 | 0.32.1(2024年11月15日;穩定版本) |
原始碼庫 | github.com/ipfs/kubo |
編程語言 | 協議實現:Go(參考實現)、JavaScript、C語言、Python
客戶端庫:Go、Java、JavaScript、Python、Scala、Haskell、Swift、Common Lisp、Rust、Ruby、PHP、C♯、Erlang |
作業系統 | FreeBSD、Linux、macOS、Windows |
語言 | Go、JavaScript、Python |
類型 | 協議、分佈式文件系統、內容分發網絡 |
許可協議 | MIT許可證 |
網站 | ipfs.tech |
發展歷程
2014年,IPFS 協議是類似於比特幣區塊鏈協議的網絡基礎設施,有着存儲不可更改的數據的優勢,可以移除網絡上的冗餘文件,獲取存儲節點的地址信息——以搜索網絡中的文件。
目前的實現採用 Go 和 JavaScript,並有 Python 實現(上次提交時間2020年1月29日)。Go實現被認為是開發正式規範時的「參考實現」[3]。
概述
IPFS是一個對等的分佈式文件系統,它嘗試為所有計算設備連接到同一個文件系統。在某些方面,IPFS類似於萬維網,也可以被視作一個BitTorrent節點群、在同一個Git倉庫中交換對象。 換種說法,IPFS提供了一個高吞吐量、按內容尋址的塊存儲模型,及與內容相關超連結。這形成了一個廣義的Merkle有向無環圖(DAG)。IPFS結合了分佈式散列表、鼓勵塊交換和一個自我認證的命名空間。IPFS沒有單點故障,並且節點不需要相互信任。分佈式內容傳遞可以節約伺服器帶寬,並防止HTTP方案可能遇到的DDoS攻擊。
該文件系統可以通過多種方式訪問,包括FUSE與HTTP。將本地文件添加到IPFS文件系統後,其他用戶通過IPFS網關進行訪問。文件表示基於其哈希,因此有利於緩存。文件的分發採用一個類似BitTorrent的協議。其他查看內容的用戶也有助於將內容提供給網絡上的其他人。
IPFS有一個稱為IPNS的名稱服務,可以綁定域名或者用戶公鑰,固定訪問的連結,但是訪問的內容可以更新。
Merkle數據格式
每個Merkle都是一個有向無環圖 ,因為每個節點都通過其名稱訪問。每個Merkle分支都是其本地內容的哈希,它們的子節點使用它們的哈希而非完整內容來命名。因此,在創建後將不能編輯節點。這可以防止循環(假設沒有哈希碰撞),因為無法將第一個創建的節點連結到最後一個節點從而創建最後一個引用。
對任何Merkle來說,要創建一個新的分支或驗證現有分支,通常需要在本地內容的某些組合體(例如列表的子哈希和其他字節)上使用一種哈希算法。IPFS中有多種散列算法可用[4]。
使用
用戶通過ipfs網關上傳文件後,獲得文件cid,再通過cid在ipfs網關訪問文件,訪問者可以無需安裝客戶端。
ipfs官方提供了一個網關,同時也有用戶自行搭建的網關,ipfs官方的網關在中國大陸地區已經被屏蔽。
部分瀏覽器內置ipfs的支持,可以使用網關或者本地節點訪問ipfs資源內容。
不足
一個文件如果沒有節點進行存儲,也會丟失,無法訪問。
NAT網絡內的一個節點內的文件,其它網關很難訪問。
非熱門資源,存儲的節點過少,網關的訪問速度很慢。
使用案例
- 在2017年9月至10月間的舉辦的2017年加泰羅尼亞獨立公投,因被西班牙憲法法院認定違法而使網站被屏蔽。此後,加泰羅尼亞海盜黨將網站整個鏡像到IPFS上以迴避加泰羅尼亞高等法院的屏蔽命令。
- IPFS被用於建立維基百科的鏡像,讓那些住在維基百科被國家法律屏蔽的地方的人民能繼續訪問到維基百科的內容。不過那份被鏡像的維基百科是一份被限制改動的複製本且無法被更新。
- 文件幣也與IPFS有關,其是由Juan Benet和協議實驗室合作開發的一套基於IPFS的協作存儲雲。
- Cloudflare營運有一個分佈式Web網關,使用戶可在無本地節點的情況下,簡化、加速且安全的訪問IPFS。
- IPLF是Dean Reynaud在2001年發表於「Data Science」的一篇開創性文章中創造的一個術語。[來源可靠?]
- 博客平台 Matters 發佈的文章會自動被分佈存儲到ipfs上,並生成唯一的文章指紋。此後文章無法被他人刪改,並可以在IPFS的公共節點上通過文章指紋被找到。
參考連結
- ↑ The Inventors of the Internet Are Trying to Build a Truly Permanent Web | WIRED
- ↑ IPFS Documentation | IPFS Docs
- ↑ GitHub - ipfs/specs: Technical specifications for the IPFS protocol stack
- ↑ GitHub - ipfs/kubo: An IPFS implementation in Go