2017-04-03 161 views
1

所以,我一直在閱讀NAT-Punchthrough。我似乎正在接受這個想法,但我很難實施它,並且我覺得我在這裏錯過了一步。 測試此功能有點困難,因爲當涉及到基於Internet的連接時,我幾乎無法控制環境。Nat Punchthrough瞭解P2P概念

我有一個SQL服務器作爲我的「服務商」運行,它保持服務器和客戶端的外部地址,以及它們的外部地址。

下面是步驟至今: - 我通過存儲服務器/客戶端的IP/PORT web請求(PHP腳本)連接到我的SQL服務器 - 當兩個是已知的,客戶端和服務器嘗試連接(服務器主機在一個設置的端口上,客戶端通過設置的端口連接) - 沒有發生重大事件

這裏有2個未知數,我想檢查一個與你。 NAT-Punchthrough是否確實需要我在第一步中準備與我在此之後的步驟中連接的確切(內部/ LAN)端口?

如果是這樣,我不知道我的服務器究竟如何工作的水下,所以它可能需要更多的端口,然後我最初給定的靜態端口連接了,但至少給我一個提示。

如果有人有關於此的更多文檔,請讓我知道。

來源:
Programming P2P application
http://www.mindcontrol.org/~hplus/nat-punch.html

回答

1

NAT打穿上受過教育的猜測的原則作品。它通常用於與IP Masquerading設備建立連接。這是在大多數家庭互聯網調制解調器中使用的技術,以至於NAT已經可以互換用於指稱IP僞裝。

當你從一個設備是在NAT後面的系統就像一個家調制解調器連接的。您無法控制將用於到Internet的出站連接的端口。然而,許多這些設備使用特定模式分配端口。例如,增量數字。

NAT打穿涉及嘗試直接連接是兩個獨立的背後NAT設備兩個源系統。第三個系統,您的「協調者」充當出站連接上兩個NAT設備當前分配的始發端口號的檢測器。然後將源端口號和IP地址發送給其他各方。

所以現在聰明的一點來回答你的問題。兩個系統都希望直接連接,開始嘗試與另一個進行通信。他們嘗試連接到主持人檢測到的已知端口號周圍的一系列端口。這是猜測。

兩個源系統開始嘗試連接是很重要的,因爲這將在本地設備中建立允許來自Internet的通信的NAT會話。如果任一源設備正確猜測其中一個NAT會話端口號,則連接成立。

在現實中,工程師從具有對NAT組織打穿可能已經花了一些時間研究比較流行的NAT端口分配算法和調整他們的軟件。如果您通過NAT設備控制連接,那麼設置一些測試並查看連接到不同服務器的端口號如何改變將非常簡單。

+0

所以,長話短說。認爲我們可以從1端口或線性增量進行自己的NAT-Punch實現是天真的,因此應該找到一種服務爲我們做點「魔術」來代替? – Smileynator

+0

沒有理由不能嘗試,但[此前的研究](http://www.brynosaurus.com/pub/net/p2pnat/)表明,在某些技巧下,成功率可能在60%左右。如果你確實嘗試並得到任何結果 - 那麼對於其他人知道你做了什麼,這將是很好的反饋。 –

+1

由於我們需要能夠達到90%,至少要通過它在生產中,我們將退出此。有些服務可以爲您提供NAT-Punchtrough。然而據我所知,他們都會做一些類似插座的東西,所以你被困在運行linux serverto的時候爲你做這個魔術。他們獲得了90%的成功。如果你想要100%的可靠性,你會被卡住,使用一個RELAY服務器,這就像Photon Networking。這通常會變得很昂貴,特別是在我們想要發送的數據負載的情況下。在一個小團隊中取得勝利實在太難了! #延遲 – Smileynator