四、IPFS: BitSwap協(xié)議(數(shù)據(jù)塊交換)

BitSwap協(xié)議

IPFS節(jié)點(diǎn)之間是如何進(jìn)行數(shù)據(jù)交換的?本文來講一下這個問題。

IPFS在BitTorrent的基礎(chǔ)上實(shí)現(xiàn)了p2p數(shù)據(jù)交換協(xié)議:BitSwap協(xié)議

IPFS每一個節(jié)點(diǎn)都維護(hù)了兩個列表:

  • 已有的數(shù)據(jù)塊(have_list)
  • 想要的數(shù)據(jù)塊(want_list)

當(dāng)兩個節(jié)點(diǎn)建立連接后,他們會根據(jù)hava_list和want_list互通有無。跟BitTorrent不一樣的是:BitSwap獲取數(shù)據(jù)塊的時候不限于從同一個torrent里面。也就是說BitSwap可以從不屬于本文件的其他文件獲取數(shù)據(jù)塊(只要數(shù)據(jù)塊的哈希值一樣,數(shù)據(jù)內(nèi)容必然是一樣的),從全局考慮,這使得BitSwap的效率相比于BitTorrent更高。

我們知道,對于p2p網(wǎng)絡(luò),有一個很重要的問題是:如何激勵大家分享自己的數(shù)據(jù)?用過迅雷、BitTorrent、emule等p2p軟件的讀者應(yīng)該都知道,如果只下載不上傳的話,很快你的節(jié)點(diǎn)就無法下載數(shù)據(jù)了或者下載數(shù)據(jù)變得很慢。每一個p2p軟件都實(shí)現(xiàn)了自己的數(shù)據(jù)分享策略。IPFS也不例外。

IPFS的策略體系由信用、策略、賬單組成

BitSwap信用體系

BitSwap協(xié)議必須能夠激勵節(jié)點(diǎn)去樂于分享數(shù)據(jù),即使這個節(jié)點(diǎn)暫時沒有數(shù)據(jù)需求。IPFS根據(jù)節(jié)點(diǎn)的之間的數(shù)據(jù)收發(fā)建立了一個信用體系:有借有還,再借不難。

  • 發(fā)送給其他節(jié)點(diǎn)數(shù)據(jù)可以增加信用值
  • 從其他節(jié)點(diǎn)接受數(shù)據(jù)降低信用值

如果一個節(jié)點(diǎn)只接收數(shù)據(jù)而不分享數(shù)據(jù),信用值就會降得很低而被其他節(jié)點(diǎn)忽略掉。簡單來講就是:你樂于分享數(shù)據(jù),其它節(jié)點(diǎn)也樂于發(fā)送數(shù)據(jù)給你,如果你不愿意分享,那么其它節(jié)點(diǎn)也不愿意給你數(shù)據(jù)。

BitSwap策略

根據(jù)上面的信用體系,BitSwap可以采取不同的策略來實(shí)現(xiàn),每一種策略都會對系統(tǒng)的整體性能產(chǎn)生不同的影響。策略的目標(biāo)是:

  1. 節(jié)點(diǎn)數(shù)據(jù)交換的整體性能和效率最高
  2. 阻止“吃白食”(freeloaders)的現(xiàn)象。就是不能夠只下載數(shù)據(jù)不上傳數(shù)據(jù)
  3. 可以有效的防止一些攻擊行為(比如:女巫攻擊)
  4. 對信任節(jié)點(diǎn)建立寬松機(jī)制(lenient)

IPFS提供一個可參考的策略機(jī)制(實(shí)際的實(shí)現(xiàn)可以有所變化):

每個節(jié)點(diǎn)根據(jù)和其他節(jié)點(diǎn)的收發(fā)數(shù)據(jù),計(jì)算負(fù)債率(debt ratio,r) r = bytes_sent / (bytes_recv + 1) 節(jié)點(diǎn)根據(jù)負(fù)債率計(jì)算出來和這個節(jié)點(diǎn)的數(shù)據(jù)發(fā)送率(P) P (send|r) = 1? 1/(1+exp(6?3r))

根據(jù)這兩個函數(shù)可以發(fā)現(xiàn),當(dāng)負(fù)債率達(dá)到某一個值的時候負(fù)債率會急劇下降。

這個模型表達(dá)的意義:如果一個節(jié)點(diǎn)只接受數(shù)據(jù)不分享數(shù)據(jù),別人發(fā)送給它數(shù)據(jù)的概率會越來越低(到達(dá)某一個值后就會急劇降低接近0),如果節(jié)點(diǎn)持續(xù)保持分享數(shù)據(jù),別的節(jié)點(diǎn)向你發(fā)送數(shù)據(jù)的概率就會越來越大。

IPFS的官方論文里面沒有給出來曲線圖(只放了一個空白的圖),小編根據(jù)函數(shù)幫大家把曲線圖畫出來了。(*小編一般是不愿意往文章里面放公式的,霍金說過:一本科普書中,每多一個公式,讀者減少就會一半,但是這兩個公式比較簡單,小編就冒個險(xiǎn) *)


BitSwap賬單

BitSwap節(jié)點(diǎn)會記錄下來和其他節(jié)點(diǎn)通信的賬單(數(shù)據(jù)收發(fā)),可以保持節(jié)點(diǎn)間數(shù)據(jù)交換的歷史和防止篡改。當(dāng)兩個節(jié)點(diǎn)之間建立連接的時候,BitSwap會相互交換賬單信息,如果賬單不匹配,則清除重新記賬。惡意節(jié)點(diǎn)可能會故意“丟失”賬單,以希望清除掉自己的債務(wù)。其它交互節(jié)點(diǎn)會把這些都記下來,如果總是發(fā)生,節(jié)點(diǎn)就會被拒絕。

BitSwap協(xié)議

IPFS節(jié)點(diǎn)之間的數(shù)據(jù)交換和激勵體系大致就是這些內(nèi)容。有想深入了解的讀者,建議參考一下 BitTorrent協(xié)議,IPFS的p2p協(xié)議大部分都來自于BitTorrent:

https://en.wikipedia.org/wiki/BitTorrent

下次我們主要講一下IPFS節(jié)點(diǎn)是如何找到彼此的?


原文來自于知乎專欄:IPFS指南(IPFS指南)作者:飛向未來

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容