P2P中的NAT類型檢測方法和穿越方式

之前有夥伴介紹了計算機中點對點通信(P2P)的相關知識,那麼,NAT類型是如何檢測的?針對不同的NAT類型,我們都有什麼穿越方法?這些穿越方法又如何實現?接下來小編將詳細爲您剖析。

目錄

基本概念

1、基本的NAT類型:只轉換IP,不轉換端口

2、NAPT:轉換整個Endpoint (IP:PORT)

NAT類型檢測

步驟1:檢測主機是否位於NAT後

步驟2:檢測NAT是否是完全錐型

步驟3:檢測NAT是否是對稱型的

步驟4:檢測NAT是限制型還是端口限制型

穿越方法介紹

簡介

直接通信

打洞穿越

反向穿越

端口預測

根據NAT類選擇穿越方法

穿越方法一覽表

客戶端的實現流程圖

基本概念

1、基本的NAT類型:只轉換IP,不轉換端口

一個基本NAT往往需要具有多個公網IP來滿足多個內網節點中具有相同端口的應用程序的同時訪問。由於這種類型的NAT設備限制大,現在已不常見。

2、NAPT:轉換整個Endpoint (IP:PORT)

現在常用的NAT類型是NAPT,NAPT是一種向外的NAT類型("向外"指內網訪問別人不受限,別人訪問內網受限),根據限制的不同分爲以下四種類型:
(1)完全錐型(FULL CONE NAT)
(2)限制錐型(RESTRICT CONE NAT)
(3)端口限制型(PORT RESTRICT CONE NAT)
(4)對稱型(SYMMETRIC NAT)

NAT類型檢測

如圖,檢測類型分爲以下幾步:

NAT類型檢測

步驟1:檢測主機是否位於NAT後

是否位於NAT後,是從受限的角度講的,如果客戶端部署在阿里雲,配置了一個外網地址(阿里雲的內網和外網IP地址不同,但是有固定的映射的關係),當你收到的請求100%和你自己配置的外網地址一致時,就可以稱之爲在公網;

步驟2:檢測NAT是否是完全錐型

圖中3、4兩步,證明只要Endpoint(IP+PORT)對應就可以,換個IP和PORT發送請求,該節點依然能收到消息,說明外來訪問並沒有受限,這樣的NAT類型就是完全錐型;

步驟3:檢測NAT是否是對稱型的

圖中1、2、5、6步,說明每次節點的內網發起請求的Endpoint(IP+PORT)不變的情況下,公網的出口Endpoint(IP+PORT)都會變,這樣的NAT類型就是對稱型;

步驟4:檢測NAT是限制型還是端口限制型

圖中7、8兩步,內網先發起請求到一個地址Endpoint(IP+PORT),如果對方換個PORT把請求發送回來,NAT不給轉發,則NAT就是端口限制型,否則僅爲限制錐型。

穿越方法介紹

簡介

穿越方法有四種:直接通信(direct)、打洞穿越(hole punching)、反向穿越(reverse)、端口預測(port prediction)。爲了方便說明,我們假設有兩個客戶端節點(Peer)A和B.
首先,A和B都需要把自己從STUN服務器中獲取的消息,註冊到同一個服務器AssistServer(AssistServer是自建的一個公網服務,用於協調邊緣節點互相發送消息),如圖:

我們假定Peer A爲發起端,Peer B爲接收端,四種穿越方式的請求序列圖分別如下所示。

直接通信

直接通信

打洞穿越

打洞穿越
從圖中5、6、7三個步驟,可以看出,這是爲應對Peer B處於端口限制型的NAT中,而做的設計。

反向穿越

如果Peer B所處的網絡類型爲對稱型,Peer A的消息無法直達Peer B。那麼我們就需要讓Peer B首先發送消息,這其實是一種將Peer B變成發起端的方法。

反向穿越

端口預測

端口預測,就是統計客戶端多次連接的地址,總結出客戶端外網端口變化的規律,然後把預測出的下一個端口和外網地址發給對方,然後促成雙方通信。這個方法穿透成功率極低,因此,如果碰上需要端口預測解決問題的時候,我們通常直接通過服務器轉發的方式解決。

根據NAT類選擇穿越方法

穿越方法一覽表

穿越方法一覽表

客戶端的實現流程圖

平臺轉發,可以選擇TRUN的方式,也可以自建服務轉發,但這樣會耗費服務端的流量,有可能得不償失。本文中講的方法,可以保證很高的穿透率,但本質還是有中心的。那麼常見的P2P的穿越方式到底是中心的還是去中心的?還是有新的技術來實現P2P的去中心化?去年比較火的IPFS的穿透方式又是什麼呢?這些問題,小編將在後續的文章中爲您揭曉。

往期回顧: 內網穿透技術一覽
關注“麻辣軟硬件”,獲取更多的精品軟硬件知識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章