IPFS

Content Addressing

Content Routing

微討論

InterPlanetary File System (IPFS)

peer-to-peer (p2p) storage network

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

2^{256}-1

peerX

peerA

peerC

peerZ

peerB

peerY

record key

為 peers 創造一個可以定義距離的抽象空間

舉個例子

假設我想要問誰可以提供 hash 為 H 的檔案

0

2^{256}-1

peerX

peerA

peerC

peerZ

peerB

peerY

H

用 SHA256 映射到這個空間

最近的好像是 peerC 跟 peerZ

他們應該要負責存這個資料

就可以問問看他們

SHA256(H)

SHA256

這個資訊的 record key 是 H

整理一下

如果要找某個檔案

  1. 從 CID 裡面取 content hash H
  2. 算 SHA256(H)
  3. 找距離 SHA256(H) 最近的幾個 peers
  4. 想辦法問他們誰有這個檔案
  5. 問到之後去跟那些人要檔案

反過來說 如果要告訴大家自己可以提供某個檔案

也是要告訴距離 SHA256(H) 最近的那幾個 peers

這樣他們就知道你可以提供了

題外話

除了「誰可以提供這個檔案」之外

還有一些其他資訊也是透過這個機制來查詢

例如某個 peer 的地址

或是

「哪些 peers 最靠近這個點」

IPFS 協定有規定 離自己比較近的範圍

需要存比較多其他 peers 的資訊

所以愈靠近那個點的 peers

愈知道有哪些 peers 離那個點最近

也就是說你往那個點附近去問就對了

題外話-2

這個抽象空間裡定義的距離 和實際的距離不一樣

參考資料

Made with Slides.com