P2P NAT檢測和穿越方式

2021-07-13 05:46:58 字數 3472 閱讀 6204

一、      nat型別

本文**:

1、基本的nat型別:只**ip,不**埠;

tips:乙個基本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)

二、      napt的四種型別

首先我們假設一種場景:乙個內網使用者a(private endpoint)首次向外傳送資料報時建立了位址對映會話,並為a分配了乙個公網的endpoint(ip+port),為了方便我們定義它為pa(public endpoint);現在外部主機b(ip:port)要與a進行通訊:

(1)     任何外部主機(b、c、d、e)只要把訊息傳送到pa上,a就可以接收到訊息;a所在的nat是完全錐型(full cone nat);

(2)     把訊息傳送到pa,並且保證a曾經與b的主機ip通訊,a才能接收到資訊;a所在的nat就是限制錐型(restrict cone nat);

(3)     把訊息傳送到pa,並且保證a曾與b的endpoint(ip+port)通訊,a才能接收到資訊;a所在的nat就是埠限制型(port restrict cone nat);

(4)     a與不同的外部主機通訊,nat就會給a分配不同的public endpoint,外部主機b和c、d、e們,想和a通訊,必須a先發訊息,它們才能把訊息響應給a;a所在的nat型別就是對稱型(symmetric nat);

三、      nat型別的檢測方法

根據nat型別的不同,stun伺服器檢測nat型別分為以下幾步。(stun伺服器有兩個公網endpoint,我們假設為e1和e2,假設stun伺服器為stun);

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

a發udp資料報給e1,stun將e1收到的資料報頭打包用e1反饋給a,a比較包中的endpoint與自己的endpoint是否相同,如果相同,證明a不位於任何nat之後;否則,就是位於nat之後,並不能判斷具體的nat型別;

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

a發udp資料報給e1,stun將e1收到到資料報頭打包,用e2反饋給a,如果能收到,證明a所處的nat是完全錐型的,否則就不是;

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

a分別向e1、e2傳送udp資料報,stun分別用相應的endpoint將訊息包頭打包反饋給a,a比較一下收到的兩個包頭中的endpoint是否相同;如果相同,a所處的nat就不是對稱型的,否則是對稱型的;

步驟4:檢測nat是限制型還是埠限制型

a發udp資料報給e1,stun伺服器用與e1相同的ip但不同的埠的endpoint把收到的包頭打包發給pa,如果能收到,證明a所處的nat型別是限制型的,如果不能收到,說明a所處的nat型別是埠限制型的。

tips:a在發訊息後會開始監聽埠,並設定超時時間,防止無限阻塞;另外每次檢測的時候也不止發一次udp包。

四、      穿透方法

穿透有4種方法:

(1)直接通訊(direct)

(2)打洞穿越(hole punching)

(3)反向穿越(reverse)

(4)埠**(port prediction)

為了方便說明,我們假設有兩個客戶端(peer),a和b;a和b都會註冊到同乙個伺服器regist-server,我們簡稱為其rs;這樣rs要讓a和b進行通訊而不通過自己;根據a和b所處的nat環境不同,就有不同的方法。我們做如下假定

a是主動連線者,b是被動鏈結者;

nat給a分配的public endpoint是pa;

nat給b分配的public endpoint是pb;

a所屬的nat為nat-a;

b所屬的nat為nat-b;

a、 b不在同乙個區域網內,不在同乙個nat後;

穿透的四種方法可以說明如下:

(1)直接通訊:rs把pb(ip:port)直接發給pa,a向pb發訊息;

(2)打洞穿越:rs把pa發給pb,把pb發給pa,pa發訊息給pb,pb發訊息給pa;

(3)反向穿越:rs把pa發給pb,讓b發訊息給pa;

(4)埠**:很難實現udp-p2p通訊

穿越方法根據nat-a和nat-b的不同而不同,具體方式如下:

nat-b

nat-a

公網

full cone

restrict cone

port restrict

symmetric

公網

direct

hole punching

hole punching

hole punching

reverse

full cone

direct

hole punching

hole punching

hole punching

reverse

restrict cone

direct

hole punching

hole punching

hole punching

reverse

port restrict

direct

hole punching

hole punching

hole punching

port prediction

symmetric

direct

hole punching

hole punching

port prediction

port prediction

P2P之NAT型別檢測方法

p2p的nat研究 第一部分 nat介紹 第二部分 nat型別檢測 第一部分 nat介紹 各種不同型別的nat according to rfc full cone nat 內網主機建立乙個udp socket localip localport 第一次使用這個socket給外部主機傳送資料時nat...

P2P之NAT型別檢測方法

p2p的nat研究 第一部分 nat介紹 第二部分 nat型別檢測 第一部分 nat介紹 各種不同型別的nat according to rfc full cone nat 內網主機建立乙個udp socket localip localport 第一次使用這個socket給外部主機傳送資料時nat...

P2P之NAT型別檢測方法

第一部分 nat介紹 各種不同型別的nat according to rfc 1 full cone nat 內網主機建立乙個udp socket localip localport 第一次使用這個socket給外部主機傳送資料時nat會給其分配乙個公網 publicip publicport 以後...