P2P網絡雜燴

P2P網絡是什么

P2P是指位于同一網絡中的每臺計算機都彼此平等,身份對等,各個節點共同提供網絡服務,不存在任何“特殊”節點。網絡節點以“扁平”的拓撲結構相互連通。 網絡中不存在任何服務器端、中央化的服務、以及層級結構。點對點網絡中的節點同時提供和消費服務,互惠互利。點對點網絡也因此具有可靠性、去中心化,以及開放性。

早期的互聯網就是點對點網絡架構的一個典型用例:IP網絡中的各個節點完全平等。當今的互聯網架構具有分層架構,但是IP協議仍然保留了扁平拓撲的結構。

先問幾個問題

  1. IP協議解決了什么問題?其他網絡協議呢?
  2. 計算機如何發現對方?數據如何傳輸到遠程計算機?

P2P的例子

  1. Skype
  2. BitTorrent
  3. Gnutella
  4. VoIP
  5. Spotify
  6. SMTP(server - server)
  7. WebRTC
  8. Blockchain

現有的網絡

網絡
  1. IP 有限
  2. 大量的局域網IP

問題:咱們國內的網到底是個局域網還是廣域網

P2P 的技術難點

  1. Discovery - Registration
  2. NAT Traversal
  3. Firewalls
  4. Asymmetrical bandwidth
  5. Security
  6. Optimization
p2p模型

P2P網絡的數據流動

//udp
sendto(ip,port,buffer);
//tcp
send(fd,buffer,length,0)
去中心化網絡

上面的紅色箭頭是P2P真實的數據流動,那么數據怎么發送到客戶端B的呢?

說下鏈路層地址與IP地址。許多鏈路層協議也有自己的地址,一般是MAC地址,比如最常用的以太網。鏈路層地址在鏈路層協議中使用,表明這個鏈路層報文會被發給誰;而IP地址在IP層協議中使用,表明這個報文最終要發給誰。可以分為兩種情況:

  1. 直接通過鏈路層發送:
    鏈路層地址: (源MAC地址) (目的MAC地址)
    IP地址: (源IP地址) (目的IP地址)
  2. 經過網關轉發
    從本機出發發往網關時,鏈路層的目的是網關而IP層的目的不是網關:
    鏈路層地址: (本機源MAC地址) (網關MAC地址)
    IP地址: (本機IP地址) (目的IP地址)
    網關轉發到其他網關:
    鏈路層地址: (網關MAC地址) (下一跳網關MAC地址)
    IP地址: (本機IP地址) (目的IP地址)
    最后一個網關轉發到目標:
    鏈路層地址: (最后一個網關MAC地址) (目的MAC地址)
    IP地址: (本機IP地址) (目的IP地址)
    在轉發過程中,IP報文的源和目的保持不變,鏈路層地址則只和這一跳的雙方有關,甚至如果中間經過了不一樣的鏈路層,還會更換二層數據包的格式。

NAT (Network Address Translation) 穿透

我們知道了網關(路由器)可以幫助我們轉發數據,那么剩下的就是找到對方IP地址。這就涉及到NAT穿透。

NAT

完全錐形:不攔截
IP限制錐形NAT:限制特定IP
端口限制錐形NAT:限制IP加端口
對稱NAT:網關給不同端發送數據分配不同的ip和端口

問題:

  1. 如何判斷客戶端網關的NAT類型
  2. 如果對所有的網關NAT穿透
  3. 如何測試客戶端數量
  4. 有沒有穿透不了的情況?

網絡拓撲

最早的BitTorrent 網絡,需要一個中心服務器也就是種子服務器,來幫助各個 Peers 節點找到彼此進行文件下載


tracker
trackerless

DHT

在 P2P(peer-to-peer) 網絡中,節點的相互發現及網絡成型的過程會面臨一些問題。
早年間的 P2P 文件共享技術,比如 Napster,使用單個服務器共享信息,信息中記錄誰擁有什么文件。某個節點向中心服務器發起連接并提交記錄自己所擁有文件的列表。另一個節點之后向同一個中心服務器發起連接,尋找自己所需文件的存儲節點,然后和找到的節點建立聯系。然而這是一個有缺陷的系統 —— 系統很容易遭受攻擊,而且中心化服務器節點可能會吃官司。(譯者注:單個服務器上存儲文件內容和節點的對應關系,如果提供了一些受版權保護內容的鏈接關系,那么這個中心化服務器的提供者將直接受到原版權方的法律追責)
因此,點對點網絡亟需另一種解決方案。研究者們經過數年研究和實驗,提出了分布式哈希表(DHT)。

Kademlia 是 Petar Maymounkov 和 David Mazières 于 2002 年發明的 DHT 協議。我覺得這個協議可能是最流行,而且使用最廣泛的 DHT 協議

Kademlia 使用 XOR(異或操作符) 作為距離函數。XOR 函數的特點在于,只有當輸入不同時,輸出才為 true。下面是用二進制標識符表示的例子。

XOR 10011001 00110010 -------- 10101011
上面的這個例子是說,十進制數字 153 和 50 之間的距離是 171。

基本算法

Kademlia 是分布式散列表(DHT,Distributed Hash Table)的一種,類似的還有 Chord,Pastry 等。DHT 技術是去中心化 P2P 網絡中最核心的一種路由尋址技術,可以在無中心服務器(trackerless)的情況下,在網絡中快速找到目標節點。

https://zhuanlan.zhihu.com/p/40286711

假設現在的當前節點是 001,它想要查的目標節點是 101 節點。


查找

我們可以看到,整個檢索過程是不斷收斂的,查詢復雜度是可以證明是 Log N

BTC節點類型及角色

管比特幣點對點網絡中的各個節點地位對等,但是根據所提供的功能不同,各節點可能具有不同的角色。比特幣節點是路由、區塊鏈數據庫、挖礦、錢包服務這些功能的集合。全節點(full node)包括如下圖所示的四個功能(錢包,礦工,完整的區塊鏈數據庫和網絡路由的比特幣網絡節點):

角色

下圖描述了擴展比特幣網絡中多種類型的節點、網關服務器、邊緣路由器、錢包客戶端以及它們相互連接所需的各類協議。z


image.png

礦工網絡分成礦機、礦池、錢包等幾個主要部分,有時礦池軟件與錢包安裝在一起,可合稱為礦池。

礦機與礦池軟件之間的通訊協議是stratum,而礦池軟件與錢包之間的通訊是bitcoinrpc接口

比特幣傳輸網絡

雖然比特幣點對點網絡服務于各種各樣類型節點的一般需求,但是對于比特幣挖礦節點的特殊需求,它的網絡延遲就顯得太高了。

比特幣礦工參與的是時效性很強的競爭,以解決工作證明問題,延長區塊鏈。在參與這項競爭的同時,比特幣礦工必須盡可能縮短從傳播一個獲勝區塊到開始下一輪競爭之間的時間。挖礦中,網絡延遲與利潤率直接相關。

傳輸網絡不是替代比特幣的點對點網絡。相反,它們是重疊網絡,在具有特殊需求的節點之間提供額外的連接,就像高速公路不能替代鄉村道路,而是交通繁忙的兩點之間的捷徑,仍然需要通過小路連接高速公路。

Matt Corallo創建的Fast Internet Bitcoin Relay Engine 或者 FIBRE。 FIBER是一種基于UDP的傳輸網絡,可以節點網絡內傳輸區塊。 FIBRE實現了壓縮區塊優化,以進一步減少數據傳輸量和網絡延遲。

康奈爾大學研究的另一個傳輸網絡(仍在提案階段)是 Falcon。 Falcon使用“直通路由”而不是“存儲轉發”來減少延遲,方法是在接收到區塊時就開始部分傳輸,而不是等到接收到完整的區塊。

網絡發現

當新的網絡節點啟動后,它必須發現網絡中的其他比特幣節點才能參與。要啟動這個過程,新節點必須在網絡上發現至少一個現有節點并連接到該節點。其他節點的地理位置在哪兒都沒有關系,比特幣網絡拓撲結構沒有地理位置的定義。因此,可以隨機選擇任何現有的比特幣節點。

為了連接到一個已知的對等點,節點會建立一個TCP連接,通常連接到端口8333(通常被稱為比特幣使用的端口),或者如果指定了另一個端口,則連接到另一個端口。

新節點如何找到對等節點? 第一種方法是使用一些“DNS種子”來查詢DNS,DNS種子就是提供比特幣節點IP地址列表的DNS服務器。 其中一些DNS種子提供了穩定的比特幣偵聽節點的IP地址靜態列表。 一些DNS種子是BIND(Berkeley Internet Name Daemon)的自定義實現,它從爬蟲程序或長時間運行的比特幣節點收集的比特幣節點地址列表中返回一個隨機子集。 Bitcoin Core客戶端包含五種不同DNS種子的名稱。 不同DNS種子的所有權的多樣性和實現的多樣性為初始引導過程提供了高水平的可靠性。

或者,一個剛剛啟動的節點,對網絡一無所知,必須被賦予至少一個比特幣節點的IP地址,之后才可以通過進一步的引見建立連接。 在使用初始種子節點完成引見后,客戶端將斷開連接并使用新發現的對等節點。

建立連接
地址傳播和發現
交換庫存

總結

  1. 先說明了IP協議本身就是去中心化和扁平的,P2P是最天然的基于IP協議的傳輸方式。
  2. 由于IP是有限的,我們利用網關組件了局域網。
  3. 局域網通過網關發送數據到目標IP,這時候我們如果想建立P2P就需要知道對方的真實IP。
  4. P2P網絡可以有不同的拓撲結構。
  5. 區塊鏈是沒有中心化tracker的拓撲結構。
  6. Kademlia及其改進協議提供了對數級別的查找節點的算法。
  7. BTC的網絡分為不同的角色。
  8. BTC網絡建立也需要有網絡發現和數據同步的過程。

參考

Stratum_mining_protocol
MasterBitcoin2CN
P2P 網絡核心技術:Kademlia 協議
內網,外網,NAT,網絡穿透的故事

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370