IPFS: BitSwap协议(数据块交换)
BitSwap協議
IPFS節點之間是如何進行數據交換的?本文來講一下這個問題。
IPFS在BitTorrent的基礎上實現了p2p數據交換協議:BitSwap協議
IPFS每一個節點都維護了兩個列表:
- 已有的數據塊(have_list)
- 想要的數據塊(want_list)
當兩個節點建立連接后,他們會根據hava_list和want_list互通有無。跟BitTorrent不一樣的是:BitSwap獲取數據塊的時候不限于從同一個torrent里面。也就是說BitSwap可以從不屬于本文件的其他文件獲取數據塊(只要數據塊的哈希值一樣,數據內容必然是一樣的),從全局考慮,這使得BitSwap的效率相比于BitTorrent更高。
我們知道,對于p2p網絡,有一個很重要的問題是:如何激勵大家分享自己的數據?用過迅雷、BitTorrent、emule等p2p軟件的讀者應該都知道,如果只下載不上傳的話,很快你的節點就無法下載數據了或者下載數據變得很慢。每一個p2p軟件都實現了自己的數據分享策略。IPFS也不例外。
IPFS的策略體系由信用、策略、賬單組成
BitSwap信用體系
BitSwap協議必須能夠激勵節點去樂于分享數據,即使這個節點暫時沒有數據需求。IPFS根據節點的之間的數據收發建立了一個信用體系:有借有還,再借不難。
- 發送給其他節點數據可以增加信用值
- 從其他節點接受數據降低信用值
如果一個節點只接收數據而不分享數據,信用值就會降得很低而被其他節點忽略掉。簡單來講就是:你樂于分享數據,其它節點也樂于發送數據給你,如果你不愿意分享,那么其它節點也不愿意給你數據。
BitSwap策略
根據上面的信用體系,BitSwap可以采取不同的策略來實現,每一種策略都會對系統的整體性能產生不同的影響。策略的目標是:
IPFS提供一個可參考的策略機制(實際的實現可以有所變化):
每個節點根據和其他節點的收發數據,計算負債率(debt ratio,r)r = bytes_sent / (bytes_recv + 1) 節點根據負債率計算出來和這個節點的數據發送率(P) P (send|r) = 1? 1/(1+exp(6?3r))
根據這兩個函數可以發現,當負債率達到某一個值的時候負債率會急劇下降。
這個模型表達的意義:如果一個節點只接受數據不分享數據,別人發送給它數據的概率會越來越低(到達某一個值后就會急劇降低接近0),如果節點持續保持分享數據,別的節點向你發送數據的概率就會越來越大。
IPFS的官方論文里面沒有給出來曲線圖(只放了一個空白的圖),小編根據函數幫大家把曲線圖畫出來了。(小編一般是不愿意往文章里面放公式的,霍金說過:一本科普書中,每多一個公式,讀者減少就會一半,但是這兩個公式比較簡單,小編就冒個險 )
P (send|r) = 1? 1/(1+exp(6?3r))BitSwap賬單
BitSwap節點會記錄下來和其他節點通信的賬單(數據收發),可以保持節點間數據交換的歷史和防止篡改。當兩個節點之間建立連接的時候,BitSwap會相互交換賬單信息,如果賬單不匹配,則清除重新記賬。惡意節點可能會故意“丟失”賬單,以希望清除掉自己的債務。其它交互節點會把這些都記下來,如果總是發生,節點就會被拒絕。
BitSwap協議
IPFS節點之間的數據交換和激勵體系大致就是這些內容。有想深入了解的讀者,建議參考一下 BitTorrent協議,IPFS的p2p協議大部分都來自于BitTorrent:
https://en.wikipedia.org/wiki/BitTorrent
下次我們主要講一下IPFS節點是如何找到彼此的?
本專欄的微信公眾號IPFS指南(ipfs_guide),致力于IPFS的知識的普及,如果你對IFPS、Filecoin,挖礦感興趣,敬請關注!
本專欄的文章允許轉載,但請注明:原文來自于知乎專欄:IPFS指南(IPFS指南)作者:飛向未來
總結
以上是生活随笔為你收集整理的IPFS: BitSwap协议(数据块交换)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IPFS: NAT traversal(
- 下一篇: IPFS网络是如何运行的(p2p网络)