IPFS
Content Addressing
Content Routing
微討論
InterPlanetary File System (IPFS)
peer-to-peer (p2p) storage network

%2520Cloud%2520Storage.webp)
centralized
p2p
p2p file system
需要處理的問題很多
今天討論
- 怎麼確定拿到的檔案是對的
- 怎麼拿到想要的檔案
怎麼確定拿到的檔案是對的
(Cryptographic Hash Function)

超多種可能
只有那幾個
任意長度的 data
某個 bucket
hash
碰撞
Cryptographic Hash Function
- 發生碰撞的機會微乎其微
- 沒辦法猜 input
用 hash 值來驗證訊息
如果用 hash 值來做為 id
拿到檔案後 就可以自己 hash 看看
看 hash 值一不一樣
一樣的話 嗯就是這個了
IPFS 的 CID
會包含 content 的 hash
抓資料的時候用 CID 來找
CID 是根據內容而定
(Content Addressing)
題外話 IPFS 怎麼 hash 檔案
Content Routing
有 CID,要怎麼拿到 data
要想辦法知道哪些人可以提供
維持一個 p2p 網路 需要紀錄的資訊很多
- 誰可以提供某個檔案
- 某個人的地址
- ……
這些資訊 很難每個人都有完整一份
要找某項資訊的時候該怎麼辦
問專門負責存這些資訊的 server
把問題廣播出去看有沒有人知道
問問距離那項資訊最近的人
有點中心化、那台掛掉怎辦
訊息爆炸、而且很沒效率
然後把「某項資訊」的 key 映射到這個空間
最靠近的那些人要負責把資訊存下來
0
peerX
peerA
peerC
peerZ
peerB
peerY
record key
為 peers 創造一個可以定義距離的抽象空間
舉個例子
假設我想要問誰可以提供 hash 為 H 的檔案
0
peerX
peerA
peerC
peerZ
peerB
peerY
H
用 SHA256 映射到這個空間
最近的好像是 peerC 跟 peerZ
他們應該要負責存這個資料
就可以問問看他們
SHA256(H)
SHA256
這個資訊的 record key 是 H
整理一下
如果要找某個檔案
- 從 CID 裡面取 content hash H
- 算 SHA256(H)
- 找距離 SHA256(H) 最近的幾個 peers
- 想辦法問他們誰有這個檔案
- 問到之後去跟那些人要檔案
反過來說 如果要告訴大家自己可以提供某個檔案
也是要告訴距離 SHA256(H) 最近的那幾個 peers
這樣他們就知道你可以提供了
題外話
除了「誰可以提供這個檔案」之外
還有一些其他資訊也是透過這個機制來查詢
例如「某個 peer 的地址」
或是
「哪些 peers 最靠近這個點」
IPFS 協定有規定 離自己比較近的範圍
需要存比較多其他 peers 的資訊
所以愈靠近那個點的 peers
愈知道有哪些 peers 離那個點最近
也就是說你往那個點附近去問就對了
題外話-2
這個抽象空間裡定義的距離 和實際的距離不一樣
參考資料
IPFS 微微講
By luyunghsien
IPFS 微微講
- 483