去中心化技術P2P框架

中心化網絡與去中心化網絡

1. 中心化網絡

????????在傳統的中心化網絡中,所有客戶端都通過一個中心服務器進行通信。這種網絡拓撲結構通常是一個星型結構,其中服務器作為中心節點,每個客戶端只能與服務器通信。如果客戶端之間需要通信,必須通過服務器進行路由處理。這種網絡結構中,服務器和客戶端扮演著不同的角色,服務器為所有客戶端提供服務。這種通信網絡被稱為中心化網絡。

特點:

  • 中心服務器:所有客戶端都連接到一個中心服務器。

  • 通信方式:客戶端之間的通信必須通過服務器中轉。

  • 角色區分:服務器和客戶端有明確的角色區分,服務器提供服務,客戶端請求服務。

2. 去中心化網絡

去中心化網絡是一種沒有中心服務器的網絡結構。在這種網絡中,每個客戶端都是平等的,沒有客戶端與服務器之分。客戶端之間可以直接通信,互相提供服務,同時也使用其他客戶端提供的服務。在這種情況下,客戶端被稱為節點。去中心化網絡不僅解除了中心化服務器絕對控制的風險,還提高了網絡傳輸效率,去除了中心化服務器數據路由的壓力。

特點:

  • 無中心服務器:沒有中心服務器,所有節點都是平等的。

  • 直接通信:節點之間可以直接通信,無需通過中心服務器中轉。

  • 角色平等:所有節點既是服務提供者,也是服務使用者。

?

?

去中心化網絡的原理

1. P2P 通信

P2P(Peer-to-Peer)通信是去中心化網絡的核心。在這種通信方式中,終端設備(節點)之間可以直接通信,無需通過中心服務器。每個節點既是客戶端也是服務器,可以同時提供和接收服務。

特點:

  • 直接連接:節點之間直接建立連接,無需通過中心服務器。

  • 對等關系:所有節點在功能上是平等的,沒有主從之分。

  • 高擴展性:網絡可以輕松擴展,新節點可以隨時加入。

2. 節點發現

在去中心化網絡中,節點需要能夠發現其他節點并建立連接。這通常通過以下幾種方式實現:

  • 廣播:節點通過廣播消息來發現其他節點。

  • 多播:節點通過多播組來發現其他節點。

  • 中心服務器:雖然去中心化網絡沒有中心服務器,但在某些情況下,可以使用一個臨時的中心服務器來幫助節點發現其他節點。

3. 數據存儲和檢索

在去中心化網絡中,數據通常存儲在多個節點上,而不是集中存儲在一個服務器上。數據的存儲和檢索通常通過以下方式實現:

  • 分布式哈希表(DHT):使用 DHT 來存儲和檢索數據。DHT 是一種分布式數據結構,可以高效地存儲和檢索鍵值對。

  • 文件共享:節點之間可以直接共享文件,無需通過中心服務器。

4. 網絡穿透

網絡穿透是實現終端與終端直接通信的一種技術方案。在去中心化網絡中,網絡穿透通常通過以下技術實現:

  • NAT 穿透:通過 NAT 穿透技術,如 STUN、TURN 和 ICE,解決 NAT 設備對直接通信的限制。

  • 中繼服務器:在某些情況下,可以使用中繼服務器來中轉數據,確保通信的可靠性。

簡單理解如下圖:

?總結一把:

1.節點發現通常用udp 因為要廣播發送,簡單易實現。

2.數據存儲和檢索,并非集中存儲,節點之間可以共享文件。

3.nat穿透,主要解決方案 STUN、TURN 和 ICE,解決 NAT 設備對直接通信的限制。以及中繼服務器,交互。

?

NAT 的實現

為什么要進行nat?

解決ipv4不夠使用的問題,通過ip+port端口映射關系,可以滿足公網識別進程的位置。

NAT的三種實現方案對比

類型核心原理IP映射關系端口處理適用場景優缺點
靜態NAT一對一固定映射私有IP ? 固定公網IP不修改端口服務器對外暴露(如Web服務器)? 穩定可預測 ? 浪費公網IP ? 無地址復用
動態NAT從公網IP池動態分配私有IP ? 臨時公網IP不修改端口企業內網少量設備臨時訪問公網? 節省少量IP ? 并發數受IP池大小限制 ? 無法復用已分配IP
端口地址映射(PAT)多對一IP映射 + 端口重寫多私有IP ? 單一公網IP修改源端口家庭/企業多設備共享單公網IP? 極致節省IP(單IP支持數萬連接) ? 隱藏內網拓撲 ? 端口映射表維護復雜

?主要流行:端口地址映射(PAT/NAT Overload)

  • 核心創新 在IP映射基礎上引入端口重寫,實現多設備共享單一公網IP。例如:

    • 內網設備A(192.168.1.2:5000) → 映射為203.0.113.1:15000

    • 內網設備B(192.168.1.3:6000) → 映射為203.0.113.1:16000

  • 技術實現 NAT設備維護一張端口映射表,記錄五元組(源IP、源端口、目標IP、目標端口、協議),確保響應數據包能正確回傳。

  • 優勢擴展

    • 安全性:外部無法直接看到內網IP和端口,天然具備防火墻特性。

    • 高并發:單個公網IP理論上支持約65,000個端口(TCP/UDP)。

?

NAT 種類

NAT功能分類對比表

類型映射規則過濾規則P2P兼容性典型應用場景
完全錐型NAT內網地址(iAddr:iPort )固定映射為公網地址(pAddr:pPort ),所有外部請求均可通過該端口訪問內網無過濾:任何外部IP和端口均可通過pAddr:pPort 訪問內網? 高企業對外服務(需主動暴露端口)
IP限制錐型NAT同完全錐型,映射關系固定(pAddr:pPort ? iAddr:iPort )IP過濾:僅允許內網主機主動通信過的外部IP訪問pAddr:pPort (不限制端口)? 中家庭寬帶(運營商基礎NAT)
端口限制錐型NAT同完全錐型,映射關系固定(pAddr:pPort ? iAddr:iPort )IP+端口過濾:僅允許內網主機主動通信過的外部IP和端口訪問pAddr:pPort? 低企業防火墻(嚴格安全策略)
對稱型NAT動態映射:內網主機每連接一個外部目標,分配新的公網端口(pAddr:pPort_new )會話綁定:僅允許特定外部IP和端口通過對應的動態映射端口訪問內網? 極低移動網絡(4G/5G運營商級NAT)

nat映射表ps:如果源地址和nat后地址一致,則目標地址不進行登記,而是共享nat表。回源轉發是通過nat表進行這就導致如果是對稱nat,會為這個新的連接分配另一個公網 IP 和端口,有兩條記錄,使得p2p目的不明確!

?對稱NAT

錐形NAT ?

關鍵特性深度解析

1. 完全錐型NAT(Full Cone NAT)
  • 技術特點

    • 映射關系:內網IP:端口公網IP:端口(固定一對一)

    • 無狀態過濾:任何外部主機均可通過公網IP:端口訪問內網主機(無需內網主機主動發起連接)。

  • 示例場景 內網服務器(192.168.1.100:80)映射為公網地址(203.0.113.10:80),公網用戶可直接訪問203.0.113.10:80

  • P2P兼容性 最佳,無需打洞即可直接通信。

2. IP限制錐型NAT(Restricted Cone NAT)
  • 技術特點

    • 映射關系固定,但過濾規則基于IP:僅允許內網主機主動連接過的外部IP通過映射端口訪問。

    • 端口不限:外部主機可使用任意端口(如從180.93.45.46:8080改為180.93.45.46:1234仍可訪問)。

  • 示例場景 內網主機(192.168.1.2:5000)主動連接公網服務器(180.93.45.46:80),則NAT允許來自180.93.45.46(任何端口)的返程流量。

  • P2P兼容性 需通過STUN服務器交換IP信息,可打洞成功。

3. 端口限制錐型NAT(Port-Restricted Cone NAT)
  • 技術特點

    • 過濾規則嚴格綁定IP+端口:僅允許內網主機主動連接過的外部IP和端口訪問映射端口。

    • 示例:若內網主機連接180.93.45.46:8080,則僅允許來自180.93.45.46:8080的返程流量。

  • P2P兼容性 需雙方同時向對方發送打洞包以建立雙向通道,成功率取決于NAT策略。

4. 對稱型NAT(Symmetric NAT)
  • 技術特點

    • 動態端口映射:內網主機每連接一個外部目標(IP:Port ),NAT分配不同的公網端口

    • 嚴格會話綁定:外部主機必須使用與內網主機通信時相同的IP和端口,且只能通過對應的動態端口訪問。

  • 示例場景 內網主機(192.168.1.2:5000)連接公網主機A(180.93.45.46:80)時映射為203.0.113.1:55000;連接主機B(198.51.100.2:443)時映射為203.0.113.1:56000

  • P2P兼容性 極低,需依賴TURN中繼服務器轉發流量。

?

總結

?

如何識別net網關類型

為什么要是區分nat類型

1.nat類型由服務器探測,得出網絡分布nat類型。以后打洞就方便

nat類型識別次數如何計算(去重復)

?1.雙方屬于完全錐型NAT (1次 p2p大概率成功)

步驟1:私網機器1(192.168.1.3:2341)發送報文給服務器(180.93.45.46:8888)。 服務 器獲取到私網機器1的公網IP地址與端口(112.93.14.56:43891)。 步驟2:服務器收到信息后,通知私網機器2(192.168.2.6:6583), 通知信息內含私網機器 1 的公網IP地址與端口(112.93.14.56:43891)。 步驟 3:私網機器 2(192.168.2.6:6583)發送數據給私網機器 1 的公網 IP 地址與端口 (112.93.14.56:43891),此時私網機器 1 就能收到私網機器2發送的報文數據,并且能過 獲取私網機器2的公網IP地址與端口(iAddr:iPort)。 步驟4:私網機器1回發報文信息給私網機器2的公網IP地址與端口(iAddr:iPort),此 時私網機器2能夠收到報文數據。穿透流程結束。?

2.雙方屬于限制類型nat (受限,則通過中繼服務器轉發,最終p2p)

步驟1:私網機器1(192.168.1.3:2341)發送報文給服務器(180.93.45.46:8888),服務 器獲取私網機器的公網IP地址(112.93.14.56:43891)。 步驟2:服務器發送通知報文給私網機器2(192.168.2.6:6583),通知報文中內含私網機器 1 的公網IP地址(112.93.14.56:43891)。 步驟3:私網機器2發送報文數據到私網機器1的公網IP地址(112.93.14.56:43891)。由 于NAT1是限制錐型NAT,此時私網機器1是不能收到報文數據的。 步驟4:私網機器2進行完步驟3以后,立即發送報文給服務器(180.93.45.46:8888),要 求私網機器1發送數據給私網機器2的公網IP地址。 步驟5:服務器通知私網機器1,通知信息內含公網IP地址(180.20.198.42.9681)。 步驟6:私網機器1發送報文數據給私網機器2的公網IP地址。由于步驟3發送報文給私 網機器2的公網IP地址,此份報文會被NAT2的路由器認為是步驟3的回復。所以此步驟會 被允許通過。此時已經穿透了NAT2。 步驟7:私網機器2回發報文給私網機器1,此時穿透了NAT1。穿透流程結束。?

3.兩邊是對稱nat (沒啥限制,直接用服務器大概率通)

使用 STUN 協議

  • STUN(Simple Traversal of UDP through NAT)協議是一種用于確定 NAT 類型和公共 IP 地址的協議。通過 STUN 協議,可以檢測 NAT 類型并判斷是否為對稱 NAT。

  • 你可以使用 STUN 服務器來測試 NAT 類型。例如,使用 NatTypeChecker 工具,它是一個基于 JavaScript 的 STUN 協議實現,可以檢測 NAT 類型 。

使用 P2P 穿透工具

  • 一些 P2P 穿透工具(如 pwnat)可以嘗試與對端建立連接,并根據連接結果判斷 NAT 類型。如果兩邊都是對稱 NAT,這些工具通常會報告連接失敗或需要額外的中繼服務器 。

手動測試

手動進行以下步驟來判斷 NAT 類型:

  1. 客戶端 A 向 STUN 服務器發送請求,獲取其公共 IP 和端口號。

  2. 客戶端 B 向同一 STUN 服務器發送請求,獲取其公共 IP 和端口號。

  3. 客戶端 A 和 B 互相發送 UDP 數據包,觀察是否能夠直接通信。

  4. 如果兩邊都是對稱 NAT,通常會發現無法直接通信,因為每個連接的端口號都是動態分配的,無法預測。

4.NAT1為限制錐型NAT,NAT2為對稱NAT。

步驟1:私網機器1(192.168.1.3:2341)發送報文數據給服務器(180.93.45.46:8888), 請求與私網機器2進行透傳。

步驟2:服務器(180.93.45.46:8888)發送通知信息給私網機器2。通知信息內含私網機器 1 的公網IP地址(112.93.14.56:43891)。

步驟3:私網機器2收到通知信息,發送報文數據給私網機器1的公網IP地址。此時由于 NAT1 為限制錐形NAT,數據是不被允許進入私網的。同時由于NAT2為對稱NAT,所以會在 此次報文發送過程中,會被產生新的映射記錄,分配公網地址與端口(iAddr:iPort)。

步驟4:私網機器2進行完步驟3以后,發送報文信息給服務器的另一個端口8889,此步驟 也會在路由器上產生一條新的映射記錄,分配公網地址與端口(mAddr:mPort)。服務器同時 也獲取到新的公網地址與端口(mAddr:mPort)。

步驟5:服務器(180.93.45.46:8889)發送通知信息給私網機器1。通知信息內含步驟4產 生的新記錄公網地址與端口(mAddr:mPort)。 此時根據 iPort 與 mPort 產生的相隔時間很 短,可以來判斷iPort 的值,即需要穿透的端口。為了判斷的根據準確,可以在產生mPort 之前也加上一次新記錄,即再步驟3以前讓NAT路由器產生一條記錄,這樣準確度會大大穿 透的概率。

步驟6:根據mPort的值,來猜測iPort的值,發送報文信息給私網機器2的公網地址與端 口(mAddr:mPort)。 準確的mPort值,則能夠穿透NAT2。

步驟7:收到穿透報文信息后,回復報文信息。流程完畢。

步驟核心邏輯

NAT穿透失敗的根本原因

  1. NAT1的限制錐型規則

    • 僅允許內網機器1主動通信過的外部IP(如服務器IP 180.93.45.46)返程流量進入,私網機器2的初次連接請求會被NAT1直接丟棄

  2. NAT2的對稱型規則

    • 私網機器2每次連接不同目標(如服務器或NAT1的公網地址)時,NAT2會分配不同的公網端口(如 iPortmPort),導致傳統打洞無法直接定位有效端口。

解決方案

觸發兩次端口映射

  • 步驟3:私網機器2首次嘗試連接NAT1的公網地址(112.93.14.56:43891),觸發NAT2生成映射記錄 iPort

  • 步驟4:私網機器2轉而連接服務器的另一個端口(8889),觸發NAT2生成新映射記錄 mPort

端口推測機制

  • 對稱型NAT(如NAT2)在為同一內網主機的連續連接分配端口時,可能采用遞增或固定偏移策略(例如 mPort = iPort + 1)。

  • 服務器通過對比兩次映射端口 iPortmPort 的生成時間間隔與差值,推測出 iPort 的可能值。

主動驗證猜測端口

  • 步驟6:服務器通知私網機器1向推測的端口 mAddr:mPort(實際目標為 iPort)發送穿透報文。

  • 若猜測正確,NAT2會將報文轉發至私網機器2,完成雙向通道建立。

總結

?1.雙方屬于完全錐型NAT (1次 p2p大概率成功)

2.雙方屬于限制類型nat (受限,則通過中繼服務器轉發,最終p2p)

3.兩邊是對稱nat ()

4.NAT1為限制錐型NAT,NAT2為對稱NAT。

????????總結:步驟3由于是錐形,不會產生記錄。所以需要額外記錄這次nat ip:port,步驟4 又產生多余的記錄。只能靠猜測4是ip:port+1的模式,進行嘗試。最后客戶機1根據上述兩點進行猜測。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71832.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

muduo源碼閱讀:linux timefd定時器

?timerfd timerfd 是Linux一個定時器接口,它基于文件描述符工作,并通過該文件描述符的可讀事件進行超時通知。可以方便地與select、poll和epoll等I/O多路復用機制集成,從而在沒有處理事件時阻塞程序執行,實現高效的零輪詢編程模…

Pinia 3.0 正式發布:全面擁抱 Vue 3 生態,升級指南與實戰教程

一、重大版本更新解析 2024年2月11日,Vue 官方推薦的狀態管理庫 Pinia 迎來 3.0 正式版發布,本次更新標志著其全面轉向 Vue 3 技術生態。以下是開發者需要重點關注的升級要點: 1.1 核心變更說明 特性3.0 版本要求兼容性說明Vue 支持Vue 3.…

【圖像處理 --- Sobel 邊緣檢測的詳解】

Sobel 邊緣檢測的詳解 目錄 Sobel 邊緣檢測的詳解1. 梯度計算2. 梯度大小3. 梯度方向4. 非極大值抑制5. 雙閾值處理6. 在 MATLAB 中實現 Sobel 邊緣檢測7.運行結果展示8.關鍵參數解釋9.實驗與驗證 Sobel 邊緣檢測是一種經典的圖像處理算法,用于檢測圖像中的邊緣。它…

LeetCode 熱題100 15. 三數之和

LeetCode 熱題100 | 15. 三數之和 大家好,今天我們來解決一道經典的算法題——三數之和。這道題在 LeetCode 上被標記為中等難度,要求我們從一個整數數組中找到所有不重復的三元組,使得三元組的和為 0。下面我將詳細講解解題思路&#xff0c…

基因組組裝中的術語1——from HGP

Initial sequencing and analysis of the human genome | Nature 1,分層鳥槍法測序hierarchical shotgun sequencing

安全開發-環境選擇

文章目錄 個人心得虛擬機選擇ubuntu 22.04python環境選擇conda下載使用: 個人心得 在做開發時配置一個專門的環境可以使我們在開發中的效率顯著提升,可以避免掉很多環境沖突的報錯。尤其是python各種版本沖突,還有做滲透工具不要選擇windows…

數字體驗驅動用戶參與增效路徑

內容概要 在數字化轉型深化的當下,數字內容體驗已成為企業與用戶建立深度連接的核心切入點。通過個性化推薦引擎與智能數據分析系統的協同運作,企業能夠實時捕捉用戶行為軌跡,構建精準的用戶行為深度洞察模型。這一模型不僅支撐內容分發的動…

Python 字符串(str)全方位剖析:從基礎入門、方法詳解到跨語言對比與知識拓展

Python 字符串(str)全方位剖析:從基礎入門、方法詳解到跨語言對比與知識拓展 本文將深入探討 Python 中字符串(str)的相關知識,涵蓋字符串的定義、創建、基本操作、格式化等內容。同時,會將 Py…

使用C++實現簡單的TCP服務器和客戶端

使用C實現簡單的TCP服務器和客戶端 介紹準備工作1. TCP服務器實現代碼結構解釋 2. TCP客戶端實現代碼結構解釋 3. 測試1.編譯:2.運行 結語 介紹 本文將通過一個簡單的例子,介紹如何使用C實現一個基本的TCP服務器和客戶端。這個例子展示了如何創建服務器…

Java Web開發實戰與項目——Spring Boot與Spring Cloud微服務項目實戰

企業級應用中,微服務架構已經成為一種常見的開發模式。Spring Boot與Spring Cloud提供了豐富的工具和組件,幫助開發者快速構建、管理和擴展微服務應用。本文將通過一個實際的微服務項目,展示如何使用Spring Boot與Spring Cloud構建微服務架構…

VMware建立linux虛擬機

本文適用于初學者,幫助初學者學習如何創建虛擬機,了解在創建過程中各個選項的含義。 環境如下: CentOS版本: CentOS 7.9(2009) 軟件: VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…

Linux8-互斥鎖、信號量

一、前情回顧 void perror(const char *s);功能:參數: 二、資源競爭 1.多線程訪問臨界資源時存在資源競爭(存在資源競爭、造成數據錯亂) 臨界資源:多個線程可以同時操作的資源空間(全局變量、共享內存&a…

LD_PRELOAD 繞過 disable_function 學習

借助這位師傅的文章來學習通過LD_PRELOAD來繞過disable_function的原理 【PHP繞過】LD_PRELOAD bypass disable_functions_phpid繞過-CSDN博客 感謝這位師傅的貢獻 介紹 靜態鏈接: (1)舉個情景來幫助理解: 假設你要搬家&#x…

【無人集群系列---無人機集群編隊算法】

【無人集群系列---無人機集群編隊算法】 一、核心目標二、主流編隊控制方法1. 領航-跟隨法(Leader-Follower)2. 虛擬結構法(Virtual Structure)3. 行為法(Behavior-Based)4. 人工勢場法(Artific…

Oracle Fusion Middleware更改weblogic密碼

前言 當用戶忘記weblogic密碼時,且無法登錄到web界面中,需要使用服務器命令更改密碼 更改方式 1、備份 首先進入 weblogic 安裝目錄,備份三個文件:boot.properties,DefaultAuthenticatorInit.ldift,Def…

MongoDB 復制(副本集)

MongoDB 復制(副本集) 引言 MongoDB是一個高性能、可擴展、易于使用的文檔存儲系統。它以JSON-like的文檔存儲結構,支持靈活的數據模型。在分布式系統中,為了提高數據可用性和系統穩定性,常常需要實現數據的備份和冗余。MongoDB提供了副本集…

【Erdas實驗教程】009:非監督分類及分類后評價

文章目錄 一、分類過程二、分類評價ERDAS 的 ISODATA 算法是基于最小光譜距離來進行的非監督分類,聚類過程始于任意聚類平均值或一個已有分類模板的平均值;聚類每重復一次,聚類的平均值就更新一次,新聚類的均值再用于下次聚類循環。這個過程不斷重復,直到最大的循環次數已…

一周學會Flask3 Python Web開發-Jinja2模板訪問對象

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程: 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 如果渲染模板傳的是對象,如果如何來訪問呢? 我們看下下面示例: 定義一個Student類 cla…

git 命令 設置別名

在Git中,您可以通過以下命令查看所有的alias(別名): git config --get-regexp alias 這個命令會列出所有配置的alias,例如: alias.st.status alias.co.checkout alias.br.branch ... 如果您想查看某個特定a…

React Router v5 vs v6 路由配置對比

React Router v5 vs v6 路由配置對比 React Router 是 React 中最常用的路由庫,從 v5 到 v6 版本,發生了較大變化。本文對比 React Router v5 和 React Router v6 的配置方式,幫助開發者順利遷移。 1. 安裝依賴 React Router v5 npm inst…