傳統的網路服務都是以 客戶端-伺服器 的中心化模式為架構的。中央伺服器提供服務,各個客戶端則向伺服器請求資料或工作。幾乎所有網路應用都是這個結構:臉書、谷歌、Wordpress 等等。現在的 “中央伺服器” 通常是一個負載均衡器背後的伺服器叢集,但從抽象一些來看,它們的架構是完全一樣的。
客戶端-伺服器 架構是一箇中心化網路架構,完全取決於單一的參與方,一旦中心伺服器宕機了,服務就中止了(就像 DigiCash 那樣)。
而點對點網路則是一種分散式網路架構,不存在中央伺服器。每個節點都承擔一部分該網路的負載。這就意味著每個節點都可以對網路發起請求但也必須響應其他節點的請求。我們可以把點對點網路看成一個融合了客戶端和伺服器兩個角色的 “蜂群”。
點對點網路之所以受人關注,是因為它能讓我們實現去中心化。去中心化網路不依賴於任何單一節點,也因此對於任何單點宕機或者離線有高容忍度。
好的,去中心化聽起來是挺酷的,但,說到底,它真的能讓一個系統變得更優越嗎?
去中心化可以給我們帶來兩個我們想要的特性:第一,宕機容錯,意味著系統可以承受單個節點錯誤或故障,即使一個節點死亡,整個系統可以照常執行。這對於可拓展性至關重要,因為大型網路中的節點故障不可根除。
中心化給我們帶來的第二個特性是抗審查性。如果某一個節點遭受審查,但網路整體上是去中心化的,那就無關緊要,系統剩下的節點會繼續執行。要做到審查去中心化網路,所有節點都必須串謀配合來執行審查,這在大型網路中很難實現。如果我要在一個去中心化網路中搜尋一份檔案,只要一個節點願意響應我的請求,我就能成功找到。
但我們為什麼這麼關注這些網路特性呢?畢竟也沒有誰要拿下或者審查這些網路,對吧?
一段點對點網路的發展簡史可能會讓你明白為什麼中本聰這麼看重比特幣的這些性質。
點對點協議簡史
上世紀九十年代,在大型分散式系統中協作大量計算的事情還非常罕見。MapReduce 或者 HDFS 還未發明,因此,大規模的分散式計算非常罕見且成本高昂。點對點協議是第一個在計算機數量上算是大規模的分散式系統(除了網際網路本身以外)。
Napster 並不是第一個點對點協議,但它是第一個進入主流的點對點協議,證明了點對點模式的潛力。
Napster 是在 1999 年由兩位大學生 Sean Parker 和 Shawn Fanning 建立的。它提出了一個簡單的價值主張:你可以從 Napster 網路中的任何客戶端上下載 MP3 檔案。
Napster 的架構非常簡單,有一個 Napster 中央伺服器,可以看作是一個大型檢索索引表,瞭解所有節點與他們分享的內容。它把內容後設資料儲存為元組:(filename, ip_address, port_number)。
一個新節點加入網路時,會給中央伺服器傳送它願意分享的檔案列表,伺服器隨後更新自己的檢索索引,將新的共享檔案放入列表。
使用者需要查詢一個檔案時,伺服器就會查詢索引表,再把相關結果展示給使用者。由於查詢出來的結果都是其他節點的檔案,使用者需要 ping 相關使用者的 IP 地址來檢視他們的下載延遲與網速。
使用者選出自己想要下載的檔案之後,TA 所用的協議客戶端軟體就會直接向該檔案指向的 IP 地址提取檔案。所有檔案都在兩個節點之間直接傳輸,Napster 伺服器這時已經完全不參與了。
從某種意義上說,Napster 是 客戶端-伺服器 模式與點對點模式的過渡,伺服器僅僅是 MP3 下載使用者的匹配引擎。而且事實證明,很多人都想下載 MP3。
Napster 釋出不久後就火了,在鼎盛時期擁有超過八千萬使用者。2001 年,它時常讓大學宿舍的高速網路超載,很快就被許多大學禁了。
2000 年,Napster 被 Metallica、Dr. Dre 與 A&M 起訴侵犯版權,這些訴訟為 Napster 帶來了更多新聞報道與宣傳。但當法官宣判了讓 Napster 停止版權音樂交易的禁制令後,事情終於告一段落。
Napster 給我們的教訓
雖然我們把 Napster 稱作點對點網路,但在檔案查詢上,Napster 的設計完全是客戶端-伺服器模式,只有在檔案傳輸方面是點對點的。這就使網路架構中出現了一個被依賴的單點(也就是所謂的 “單點故障”),在 Napster 公司關門大吉後整個網路就消失了。
Napster 對於網路安全方面的考量也不足,所有的訊息和請求都以純文字的形式傳送,所有 IP 地址都是公開的,使系統幾乎毫無私密性。
但最終,Napster 棺材上的最後一顆釘子是法律的釘子,不是技術的釘子,Napster 被判對使用者的侵犯版權行為負有法律責任。即使 Napster 作為公司本身沒有直接侵犯任何版權,法官仍舊判定 Napster 引誘其使用者侵犯版權,因此 “間接侵犯” 了版權所有人的利益。
法院要求 Napster 立即停止所有侵權行為,Napster 隨後聲稱他們可以實施一項能夠阻止 99.4% 侵權行為的解決方案,但法院堅持認為 Napster 應該百分百阻止侵權。
後 Napster 時代
最終,Napster 申請破產。其資產被出售,重新包裝成了 Rhapsody。但 Napster 掀起了一場巨大的風暴,讓我們幾乎忘記了風暴的始作俑者。諸如 LimeWire、KaZaA 一類的網路繼承了 Napster 的特徵,建立出了局限性更少,效能更強且愈加去中心化的點對點協議。
隨著時間流逝,所有這些協議最終都被 BitTorrent 所替代。到 2009 年為止,以 BT 為主力的點對點檔案共享已佔全球網際網路流量的 70%。BT 網路發展至今,已成為世界上最大的點對點網路,並且是大多數國家最大的上傳流量來源。
我們應該停下來反思一下:為什麼 BitTorrent 成功了,而其他大多數協議都隨著時間逐漸消失了?
一個原因是 BT 投桃報李模式的頻寬共享,也就意味著為其他節點提供更大頻寬的節點也將獲得更大的下載頻寬。這種互惠的體制能有效阻止使用者白嫖網路資源,也鼓勵使用者提前付出。(實際上,這種投桃報李的模式並不完全有效,但它也是對先前的檔案共享協議的改進)BT 協議在頻寬佔用方面也非常高效,對於需求量大的檔案來說尤其如此。
但在許多方面,BT 協議成功的核心實際應歸功於其無可指摘的表態。他們的開發者從不提倡將共享有版權的檔案視為對服務的合法使用。他們將 BT 定義為 “一種為網站服務的更好的方式”,並且他們的網站僅提及無關痛癢的用例,例如 Linux 各種發行版或者魔獸世界遊戲的更新下載。
即使你想找茬兒,你也找不到一箇中心化的 BT 服務。只有一個由私人執行的種子追蹤器組成的聯盟網路。所以儘管其他點對點網路不斷被執法者關停,但對 BT 而言,執法者只能查到單個的種子跟蹤器。多虧了 BT 的 DHT 模型,很多種子甚至在跟蹤器被取締之後還能在網路中倖存,因此,針對 BT 的審查也就演變成了一場 “打鼴鼠” 的遊戲。
檔案共享革命對於我們與技術和媒體的關係產生了深遠的社會影響。但它的衝擊遠不止於此,它還復興了工程師對點對點協議興趣,引導了許多學術專案的發展,比如 Folding @home 和 SETI @home,使個人可以將自己的算力借給世界級的點對點科學計算專案。一些成功的創業公司,比如 Skype,在成立之初都是建立在點對點架構上的。
但隨著執法日趨嚴厲,點對點協議在公眾的心目中逐漸成為了 “非法檔案共享” 的代名詞。在受到過多的汙名化後,學術熱情也逐漸降溫。與此同時,分散式系統的進展使工程師能夠構建出大型的中心化系統,也就使大多數商業應用都不需要點對點架構了。
此外,各種經驗也證明,圍繞點對點協議建立可持續的商業模式非常困難,大多數的內容業務需要一箇中心化經紀人或者數字版權管理系統來跟蹤使用情況並管理付款。而點對點協議從定義上幾乎就可以說是無法實現中心化追蹤的。uTorrent 的前 CEO Daniel Ek 用腳投票證明了這一點,他拋棄了 BT 世界,與其他人合夥成立了音樂公司 Spotify。所有這些因素都廣泛地導致了人們對點對點協議的興趣下降。
這就是為什麼在 2009 年,點對點協議在很大程度上已經不流行的原因。在檔案共享網路以外,沒有多少新的應用採用了大規模的點對點系統。
然而,中本聰是明白人,他知道點對點架構是建立一個強韌的去中心化貨幣協議唯一可行的方法。他寫道:
各國政府很擅長取締像 Napster 這樣的中心化控制的網路,但像 Gnutella 和 Tor 這樣的純點對點網路似乎堅持下來了。
點對點架構有什麼缺點?
去中心化不是毫無代價的。中本聰選擇讓比特幣使用點對點架構時就必須接受三大障礙。
第一,在中心化的架構中,我們通常很容易得到全域性狀態的一致的快照(也就是說,我們能清楚看到網路中正在發生的一切)。但在點對點協議中,通常不可能獲取這樣一個快照。節點僅儲存自己本地的知識,要描繪網路全域性中正在發生的一切變得非常困難。
比如在 IP 路由這一例子中就是如此,單個 IP 路由都不擁有整個網際網路的路由表,路由器將資料包傳遞給它們所知的下一個最近的節點,並相信有更多本地資訊的節點能夠將資料包傳遞到離其目的地更近的位置。因此,在網際網路上展現出路由的活動全域性快照是非常困難的。
點對點協議的第二個缺點,在於隨著使用者不斷上線下線,網路的使用者流失率很高。這意味著任何的點對點協議都必須高度容錯才能使用。中心化架構在容錯能力方面的要求通常比點對點協議低很多。
然而,也許點對點協議所面臨最大的障礙是無法實施質量控制。由於點對點協議通常是完全開放的,任何惡意參與者都可以自由加入網路並引起騷動。在中心化服務中,阻止一個惡意參與者非常容易。但在去中心化的點對點網路中,又有誰能決定誰是好人誰是壞人呢?節制功能一旦設計不當就可能被惡意使用者利用來阻止好的使用者訪問。這意味著任何點對點網路都必須經過精心設計,使得即使有惡意使用者存在,他們也無法顛覆網路。
儘管有著上述缺點,中本聰顯然還是認為點對點網路的性質對去中心化貨幣來說不可或缺。
對點對點協議歷史的概述到此為止。在下一節中,我們將深入探討一個著名但簡單的點對點協議 —— Gnutella。它將為我們帶來 Gossip 協議的藍圖,該協議最終會幫助我們理解比特幣自身的網路模型。