IPFS網(wǎng)絡(luò)是如何運(yùn)行的(p2p網(wǎng)絡(luò))

IPFS是一個(gè)p2p網(wǎng)絡(luò)主儡,先來看看BitTorrent的p2p網(wǎng)絡(luò)是如何工作的?

想要bt下載一個(gè)文件捕儒,首先你需要一個(gè)種子文件torrent望几,種子文件包含至少一個(gè) Tracker(一臺(tái)服務(wù)器地址)信息和文件的分割記錄信息。BT軟件解析種子文件torrent掰茶,從里面找出來tracker暇藏,告訴tracker我要下載這個(gè)文件。tracker同時(shí)返回給你現(xiàn)在其它正在下載的節(jié)點(diǎn)信息濒蒋,這個(gè)時(shí)候你的節(jié)點(diǎn)就正式加入了p2p下載網(wǎng)絡(luò)盐碱,根據(jù)tracker返回的信息直接跟其它節(jié)點(diǎn)建立聯(lián)系,開始數(shù)據(jù)傳輸沪伙。

這種情況下Tracker成為了溝通p2p網(wǎng)絡(luò)的關(guān)鍵一環(huán)瓮顽,如果tracker服務(wù)器全部關(guān)閉的話,p2p網(wǎng)絡(luò)就被關(guān)閉了围橡。

那么是不是說如果沒有了Tracker暖混,p2p就不能實(shí)現(xiàn)了?顯然不是的翁授,后來有了DHT(分布式哈希表)拣播,DHT技術(shù)的出現(xiàn)使得沒有tracker也能進(jìn)行p2p網(wǎng)絡(luò)下載,用過電驢的讀者應(yīng)該都不陌生收擦,電驢里面有一個(gè)選項(xiàng)贮配,可以允許選擇KAD(DHT的一種)網(wǎng)絡(luò)進(jìn)行搜索。這樣一來p2p網(wǎng)絡(luò)的適應(yīng)性更強(qiáng)了塞赂,可以大大減輕tracker的負(fù)擔(dān)牧嫉。

以上就是傳統(tǒng)的P2P軟件大概工作方式。

image

IPFS的p2p網(wǎng)絡(luò)使用的是DHT技術(shù)

什么是DHT ( Distributed Hash Tables ) ?

DHT是一個(gè)分布式系統(tǒng), 它提供了一個(gè)類似哈希表一樣的查詢服務(wù): 鍵值對(duì)存儲(chǔ)在DHT中, 任何參與的節(jié)點(diǎn)都可以有效的檢索給定鍵對(duì)應(yīng)的值. 鍵值對(duì)的映射由網(wǎng)絡(luò)中所有的節(jié)點(diǎn)維護(hù), 每個(gè)節(jié)點(diǎn)負(fù)責(zé)一小部分路由和數(shù)據(jù)存儲(chǔ). 這樣即使有節(jié)點(diǎn)加入或者離開, 對(duì)整個(gè)網(wǎng)絡(luò)的影響都很小, 于是DHT可以擴(kuò)展到非常龐大的節(jié)點(diǎn)(上千萬)减途。

DHT廣泛應(yīng)用于各種點(diǎn)對(duì)點(diǎn)系統(tǒng), 用來存儲(chǔ)節(jié)點(diǎn)的元數(shù)據(jù)酣藻。比如:BTC系統(tǒng)使用 MainlineDHT來維護(hù)節(jié)點(diǎn)。

DHT具有以下性質(zhì):

  • 離散型(Autonomy and decentralization): 構(gòu)成系統(tǒng)的節(jié)點(diǎn)之間都是對(duì)等的, 沒有中央控制機(jī)制進(jìn)行協(xié)調(diào)
  • 伸縮性(Scalability): 不論系統(tǒng)有多少節(jié)點(diǎn), 都要求高效工作
  • 容錯(cuò)性(Fault tolerance): 不斷有節(jié)點(diǎn)加入和離開, 不會(huì)影響整個(gè)系統(tǒng)的工作

來自于: https://en.wikipedia.org/wiki/Distributed_hash_table

簡單介紹一席跟IPFS有關(guān)的三種DHT技術(shù)

Kademlia DHT

  • 高效查詢:查詢的平均復(fù)雜度是 log2(n)鳍置,例如:10,000,000個(gè)節(jié)點(diǎn)只需要20次查詢
  • 低開銷:優(yōu)化了發(fā)往其它節(jié)點(diǎn)的控制消息的數(shù)量
  • 可以抵御各種攻擊
  • 廣泛應(yīng)用于各種點(diǎn)對(duì)點(diǎn)系統(tǒng)辽剧,包括:Guntella和BitTorrent,可以構(gòu)建超過2千萬個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)

Coral DSHT

Coral繼承了Kademlia并且做了一些改造 ( 它認(rèn)為直接在DHT上存儲(chǔ)數(shù)據(jù)是浪費(fèi)存儲(chǔ)和帶寬)

S/Kademlia DHT

S/Kademlia DHT同樣是繼承了Kademlia税产,并且做了一些改進(jìn)怕轿,系統(tǒng)可以防止惡意攻擊,例如女巫攻擊辟拷。

IPFS的路由系統(tǒng)

ipfs系統(tǒng)的節(jié)點(diǎn)查找有兩個(gè)需求:

  1. 第一找到其他節(jié)點(diǎn)地址
  2. 第二找到存儲(chǔ)有特定數(shù)據(jù)的節(jié)點(diǎn)

IPFS綜合了S/Kademlia 撞羽、Coral和Mainline技術(shù)(能折騰吧,不過這種對(duì)技術(shù)的追求精神值得我們給ipfs團(tuán)隊(duì)鮮花和鼓掌)衫冻。Kademlia協(xié)議的工作方式比較復(fù)雜, 有興趣了解的可以單獨(dú)去查詢一下, 本文不在進(jìn)行更深入的討論. KAD可以很高效進(jìn)行路由查詢服務(wù)诀紊。

IPFS DHT的數(shù)據(jù)存儲(chǔ)是根據(jù)數(shù)據(jù)的大小進(jìn)行的:

  • 小于1KB的數(shù)據(jù)直接存儲(chǔ)到DHT上面
  • 大于1KB的數(shù)據(jù)在DHT中存儲(chǔ)的是節(jié)點(diǎn)ID

節(jié)點(diǎn)加入

IPFS是基于DHT技術(shù)的,所以在IPFS網(wǎng)絡(luò)里面是沒有tracker存在的隅俘。那么一個(gè)新的節(jié)點(diǎn)創(chuàng)建后是如何加入網(wǎng)絡(luò)的呢邻奠?

新創(chuàng)建的節(jié)點(diǎn)必須知道至少一個(gè)已經(jīng)在網(wǎng)絡(luò)上的節(jié)點(diǎn)地址笤喳,連上那個(gè)節(jié)點(diǎn),就可以加入網(wǎng)絡(luò)了碌宴,所以ipfs系統(tǒng)提供了bootstrap命令來完成這個(gè)工作(通常情況不需要自己來做這樣的造作杀狡,除非有一些特殊需求,例如:指定自己比較近的啟動(dòng)節(jié)點(diǎn)贰镣,搭建IPFS私有網(wǎng)絡(luò)等)呜象。

ipfs bootstrap list 列出來啟動(dòng)節(jié)點(diǎn)
ipfs bootstrap add [<peer>] 添加啟動(dòng)節(jié)點(diǎn)
ipfs bootstrap rm [<peer>] 刪除啟動(dòng)節(jié)點(diǎn)

通過命令行help可以查看命令的使用詳情

localhost:~ tt$ ipfs bootstrap --help
USAGE
ipfs bootstrap - Show or edit the list of bootstrap peers.
SYNOPSIS
ipfs bootstrap
DESCRIPTION
Running 'ipfs bootstrap' with no arguments will run 'ipfs bootstrap list'
SECURITY WARNING:
The bootstrap command manipulates the "bootstrap list", which contains
the addresses of bootstrap nodes. These are the trusted peers from
which to learn about other peers in the network. Only edit this list
if you understand the risks of adding or removing nodes from this list.
SUBCOMMANDS
ipfs bootstrap add [<peer>]... - Add peers to the bootstrap list.
ipfs bootstrap list - Show peers in the bootstrap list.
ipfs bootstrap rm [<peer>]... - Remove peers from the bootstrap list.
Use 'ipfs bootstrap <subcmd> --help' for more information about each command.

小編在寫這篇問寫這篇文章的時(shí)候,還發(fā)現(xiàn)了一個(gè)小bug碑隆,當(dāng)使用

ipfs bootstrap rm

刪掉所有的啟動(dòng)節(jié)點(diǎn)之后恭陡,忘了添加自己的啟動(dòng)節(jié)點(diǎn),發(fā)現(xiàn)節(jié)點(diǎn)無法連接到ipfs網(wǎng)絡(luò)了干跛,成了孤立節(jié)點(diǎn),而且沒有任何提醒祟绊。于是小編去報(bào)了一個(gè)bug楼入,經(jīng)過跟開發(fā)們的討論給標(biāo)記成了feature,未來如果出現(xiàn)這種情況牧抽,節(jié)點(diǎn)啟動(dòng)的時(shí)候會(huì)給出提醒嘉熊,不至于讓我們莫名其妙找不到問題。

文中涉及到的名詞比較多扬舒,很多技術(shù)細(xì)節(jié)并沒有說的很詳細(xì)阐肤,如果感興趣的讀者可以自行Google,也歡迎跟小編交流讲坎,最近越來越多的技術(shù)愛好者跟小編交流可以基于ipfs做些什么事情孕惜,非常開心看到越來越多的國內(nèi)的開發(fā)者關(guān)注這個(gè)項(xiàng)目了。


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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晨炕,一起剝皮案震驚了整個(gè)濱河市衫画,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓮栗,老刑警劉巖削罩,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異费奸,居然都是意外死亡弥激,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門愿阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來微服,“玉大人,你說我怎么就攤上這事缨历≈氨妫” “怎么了盗蟆?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舒裤。 經(jīng)常有香客問我喳资,道長,這世上最難降的妖魔是什么腾供? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任仆邓,我火速辦了婚禮,結(jié)果婚禮上伴鳖,老公的妹妹穿的比我還像新娘节值。我一直安慰自己,他們只是感情好榜聂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布搞疗。 她就那樣靜靜地躺著,像睡著了一般须肆。 火紅的嫁衣襯著肌膚如雪匿乃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天豌汇,我揣著相機(jī)與錄音幢炸,去河邊找鬼。 笑死拒贱,一個(gè)胖子當(dāng)著我的面吹牛宛徊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻澳,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼闸天,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斜做?” 一聲冷哼從身側(cè)響起号枕,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陨享,沒想到半個(gè)月后葱淳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抛姑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年赞厕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片定硝。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皿桑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诲侮,我是刑警寧澤镀虐,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站沟绪,受9級(jí)特大地震影響刮便,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绽慈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一恨旱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坝疼,春花似錦搜贤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耕陷,卻和暖如春掂名,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啃炸。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工铆隘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卓舵,地道東北人南用。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像掏湾,于是被迫代替她去往敵國和親裹虫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容