關於P2P穿越NAT 防火牆的困惑

2021-09-05 13:15:49 字數 1647 閱讀 6373

不知道大家有沒有什麼資料?我剛剛搜尋到一篇,可惜說的不是很詳細,也沒有源**可以讓我看看……

到網上面找了半天gaim,看了一下源**,然後就失去繼續看下去的興趣了。裡面雖然有msn協議的源**,但是感覺看起來太累了,因為包括連線等等細節都被包裝到gaim裡面了。但是關於gaim的總體文件比較缺乏,只能夠仔細看源**裡面的文件,那就太累了,尤其是我只想要知道如何穿越nat的問題。如果真想從這裡得出結論的話,還必須把gaim和msn協議這兩個部分的源**仔細研究才行,太太太太太累了。還是等待別人告訴我比較舒服,呵呵……

p.s.:

這篇文章在原來的dotnet.blogger.cn上面發的,很久以前的事情了,看來在那邊沒有什麼人關注這些問題,不知道在這邊又沒有人關注呢?呵呵。

此外,我思考了一段的時間,感覺有點眉目了。說說我的想法,如果有什麼不對的地方,請大家幫忙指出:

nat分為兩種,一種是非對稱的,另外一種當然就是對稱的了。

nat的作用是位址轉換,用於內網和外網之間的位址對映,具體點說就是:192.168.0.1:1234經過nat傳送資訊訪問202.119.0.1:80,於是192.168.0.1:1234就在nat上面註冊為218.109.3.5:54342(上述數字都是假設)。這個時候202.119.0.1:80看到的是218.109.3.5:54342這個endpoint,因此會傳的資訊也自然傳送到218.109.3.5:54342——實際上是nat的位址,nat經過查表,將這個資訊**到192.168.0.1:1234上面。

非對稱的意思是:當192.168.0.1:1234在nat上面註冊了218.109.3.5:54342這個外網位址之後,外網的所有endpoint都可以通過這個218.109.3.5:54342來訪問192.168.0.1:1234。

而對稱的意思是:註冊的時候實際上還註冊了對方的ip。因此在上例當中,除了202.119.0.1:80之外,任何其他的endpoint要訪問218.109.3.5:54342都會被拒絕!也就是達到了一定的防火牆的功能。

無論是非對稱還是對稱的nat,如果我們希望不通過擁有固定ip的外網伺服器進行跨nat的p2p訪問,都需要知道雙方在nat上面註冊的對映endpoint。這個問題比較好辦,但是也離不開中間伺服器的幫助:雙方通過向中間伺服器傳送資訊,使得中間伺服器知道雙方在各自的nat上面註冊的endpoint到底是多少,然後就可以獲得對方的nat endpoint,通過向對方的nat endpoint傳送資訊來達到p2p通訊的目的。注意,在進行p2p通訊的時候,實際上已經脫離了中間伺服器的**工作了。

問題是,如果是對稱的nat,光是向中間伺服器傳送訊息是不夠的,因為那樣之能夠讓中間伺服器和某個點進行通訊,而無法p2p——因為點b的nat endpoint並沒有在點a的nat上面註冊。而第一篇文章所說的方法,就是為了突破對稱nat的。方法就是設法讓雙方同時向對方nat傳送資訊,利用網路延時提前註冊對方的nat endpoint。這個方法的乙個前提就是,同乙個內部end point在向不同外部end point傳送資訊時,在nat上面註冊的nat endpoint是同乙個end point。還是在上面那個例子:如果192.168.0.1:1234往另外乙個地方比如說202.0.0.1:1234傳送資訊的時候,nat會分配另外乙個endpoint比如說218.109.3.5:31456,那麼上面這種方法就不可能成功了。這也許就是第一篇文章當中提到的有可能失敗的情況吧。

諸位有什麼看法?(編輯完了,發表意見吧!)

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

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

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

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

P2P網路中UDP穿越NAT的原理

p2p網路中,udp穿越nat方式主要有 中轉方式 relay 反向連線 connection reversal udp打洞 udp hole punching 中轉方式是最簡單也是比較可靠的nat穿越方法,它將p2p通訊簡單地轉換為客戶端 伺服器通訊模式。假如有a和b兩個客戶端和乙個公共伺服器s,...