P2P網路中UDP穿越NAT的原理

2021-07-05 08:28:10 字數 1602 閱讀 7238

p2p網路中,udp穿越nat方式主要有:中轉方式(relay)、反向連線(connection reversal)、udp打洞(udp hole punching)。

中轉方式是最簡單也是比較可靠的nat穿越方法,它將p2p通訊簡單地轉換為客戶端/伺服器通訊模式。

假如有a和b兩個客戶端和乙個公共伺服器s,客戶端位於各自的私有網路中,各自的nat阻止任何其他客戶端直接向其發起連線。中轉方式就是a和b都有乙個到s的udp連線,a為了向b傳送訊息,a可以選擇它已經建立的連線伺服器s傳送訊息,然後s使用與b現存的連線向b**訊息,達到了a與b通訊的目的

優點:只要客戶端能夠連線到伺服器,中轉就可以工作,是最有效的

缺點:消耗了伺服器的處理能力和網路頻寬,多了中轉環節,節點間反應時間增加,效率最低

反向連線方式只適合僅有乙個主機在nat後面,另外的主機擁有合法公網ip位址的情況,這種方式的使用範圍有明顯的侷限性。

假如有a和b兩個客戶端和乙個公共伺服器s,客戶端a位於私有網路中,客戶端b擁有合法的公網ip。如果a想要初始化乙個到b的連線,直接連線就可以了,因為b沒有在nat後面,a的nat認為這是乙個外出的會話,不會阻攔。如果b想要初始化乙個到a的連線,直接連線就會被a的nat阻止,b通過伺服器s向a傳送連線請求,請求a反向連線到b。也就說說a可以直接連b,b要想連a,只需要通過伺服器通知a,讓a反向連線b

udp打洞技術假定客戶端a和b可以與公網伺服器s建立udp連線。當乙個客戶端登入到s之後,伺服器s會記錄下該客戶端的兩個endpoints(ip位址,udp埠),乙個是客戶端的內網ip和埠,另乙個是內網ip和埠經過nat轉換後的公網ip和埠。如果該客戶端不是位於nat裝置後面,那麼採用上述方法得到的兩個endpoint值應該完全相同。

具體實現方法:假設兩台內網pc, a和b想用埠40000通訊,閘道器分別是nata和natb,伺服器是s,配置如下:

a:                   192.168.0.34                  40000

nata:            58.240.157.121             60020

b:                   192.168.0.227                40000

natb:            58.240.157.222             50030

s:                   58.240.157.240             40000

打洞過程:

(1) a訪問s,打乙個洞,洞的指向為 a <---> s

(2) b訪問s,打乙個洞,洞的指向為 b<---> s

(3) s訪問a,告訴它:b想訪問a

(4) a訪問b,洞的指向為a<--->b,b的路由器natb收到資料報之後不會**給b,而是丟棄,因為它認為這是來歷不明的包

(5) b訪問a, 洞的指向為b<->a, 因為a已經訪問過b了,則a的路由nata會把該包**給a,此時a與b可以進行雙向通訊,打洞成功。

打洞的目的是為了告訴nat,我要訪問的ip是我"朋友",你不能阻攔它發過來的資訊。比如第4步a通過傳送這個包,告訴了nata:b是我朋友;第5步b傳送包給a,告訴了natb:a是我朋友。最後nata認識了b,而natb認識了a,a與b終於實現了雙向通訊

P2P網路「自由」穿越NAT的「秘密」

穿越nat的意義 nat是為了節省ip位址而設計的,但它隱藏了內網機器的位址,意外 起到了安全的作用。對外不可見,不透明的內部網路也與網際網路的 公平 應用,相互共享 的思想所不容,尤其是p2p網路中 相互服務 的宗旨,所以穿越nat,讓眾多內部網路的機器也參與到p2p網路中的大集體中來,一直是p2...

P2P網路「自由」穿越NAT的「秘密」

p2p 網路 自由 穿越nat 的 秘密 jack zhai 穿越nat的意義 nat是為了節省ip位址而設計的,但它隱藏了內網機器的位址,意外 起到了安全的作用。對外不可見,不透明的內部網路也與網際網路的 公平 應用,相互共享 的思想所不容,尤其是p2p網路中 相互服務 的宗旨,所以穿越nat,讓...

P2P網路「自由」穿越NAT的「秘密」原理

nat是為了節省ip位址而設計的,但它隱藏了內網機器的位址,意外 起到了安全的作用,由於客戶端是主動登入p2p網路才可穿越,所以p2p的方式也沒有違背企業的內部管理原則 穿越nat的意義 nat是為了節省ip位址而設計的,但它隱藏了內網機器的位址,意外 起到了安全的作用。對外不可見,不透明的內部網路...