中心化網絡與去中心化網絡
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 類型:
-
客戶端 A 向 STUN 服務器發送請求,獲取其公共 IP 和端口號。
-
客戶端 B 向同一 STUN 服務器發送請求,獲取其公共 IP 和端口號。
-
客戶端 A 和 B 互相發送 UDP 數據包,觀察是否能夠直接通信。
-
如果兩邊都是對稱 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穿透失敗的根本原因
NAT1的限制錐型規則
僅允許內網機器1主動通信過的外部IP(如服務器IP
180.93.45.46
)返程流量進入,私網機器2的初次連接請求會被NAT1直接丟棄。NAT2的對稱型規則
私網機器2每次連接不同目標(如服務器或NAT1的公網地址)時,NAT2會分配不同的公網端口(如
iPort
和mPort
),導致傳統打洞無法直接定位有效端口。解決方案
觸發兩次端口映射
步驟3:私網機器2首次嘗試連接NAT1的公網地址(
112.93.14.56:43891
),觸發NAT2生成映射記錄iPort
。步驟4:私網機器2轉而連接服務器的另一個端口(
8889
),觸發NAT2生成新映射記錄mPort
。端口推測機制
對稱型NAT(如NAT2)在為同一內網主機的連續連接分配端口時,可能采用遞增或固定偏移策略(例如
mPort = iPort + 1
)。服務器通過對比兩次映射端口
iPort
和mPort
的生成時間間隔與差值,推測出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根據上述兩點進行猜測。
?