2011-04-16 28 views
1

我想創建一個簡單的Java聊天程序,它可以在p2p的基礎上工作。使用公共服務器僅啓動連接。但我甚至不確定這是可能的。使用服務器繞過路由器發起連接

我成功地實現聊天解決方案在Java中工作,如果至少具有一個PC轉發了正確的端口。我還設法使用外部服務器,而不必在客戶端轉發端口。

所以我雖然,甚至會可能以某種方式使用公共服務器發起連接,並且比客戶端之間發送數據的恰到好處,帶負荷關閉服務器?

我不是很熟悉路由器是如何工作的,但我希望,當你從內部IP呼叫公共服務器,路由器記得通話,然後從公共IP傳入響應不是發送到您的PC。所以我想,也許如果第一個客戶端連接到服務器,服務器比傳遞信息到第二個客戶端,可能比他們可以以某種方式直接溝通?如果路由器中的規則是由服務器建立的?

我希望我解釋清楚。如果不是,請原諒我。我甚至不知道如何做到這一點,我只想知道我的概念是否正確,我必須努力學習,並有機會運作。謝謝。

+0

你只使用tcp進行通信,對嗎? – 2011-04-16 17:26:50

回答

-2

編輯:在評論(並閱讀鏈接的頁面)後,我應該撤消我的建議。我不刪除它,爲好的圖形,但改變了最後一部分。


如果我理解正確的,你有兩個客戶端都在NAT防火牆,它允許傳出連接,但不向前入流的連接,如果沒有專門配置做這樣的(因爲他們不知道背後其中它註定的本地主機)。

原則,在其整個存在時間的TCP連接總是在這些地址(例如,我們有保持不變四位數字)連接兩個相同的IP地址和端口號。在NAT的情況下,你實際上有兩個連接,但這不是從客戶端計算機A(也沒有從服務器S)可見:

Client A -------(LAN)------ NAT B  ------ (Internet) -------- Server S 
    IP A     IP B1 | IP B2        IP S 
    Port a      | Port b        Port s 

的TCP分組具有[A:A/S:S](或[S:s/A:a])地址和Internet部分上的[B2:b/S:s](或[S:s/B2:b])地址。這個連接由這個[IP:port/IP:port]四元組標識,所以如果你試圖改變這四個數字中的一個,這必須是一個新連接(否則數據包將被丟棄)。

所以,如果你第一次與你的服務器來說,你不能繼續向其他客戶講同樣的連接上,除非服務器轉發的內容。

UDP數據包的情況實際上是一樣的,區別在於沒有連接,並且NAT必須是智能的並且猜測哪個數據包是對其他數據包的答案,並且因此將其轉發給正確的方向。

正如指出的意見和其他的答案,這裏就是NAT可以被欺騙了一點:我們首先發送一個UDP包到其他客戶端,這將是由NAT獲得扔掉那裏。但是另一個客戶端發送的應答數據包對傳出數據包不是真正的答案(因爲這個數據包從來沒有被其他客戶端的NAT收到),但是IP地址和端口號相匹配,它仍然可以通過。如果NAT也轉換端口號,這可能會變得更加複雜。

對於TCP,它可以工作類似,如果兩個NAT都沒有真正保持打開的連接,而只是在發送之前發送SYN時轉發(更改)了數據包。它更加複雜,因爲TCP序列號也必須在這裏匹配。

+1

你錯了,這是可能的,請參閱http://en.wikipedia.org/wiki/Hole_punching – mabn 2011-04-16 18:01:24

+1

@Paulo,首先請使用'packet',而不是'package' ......當你嘗試解釋時,你立即失去信譽這與包,但這並不是我投票的原因。我拒絕了,因爲他**不需要創建一個新的協議。 UDP(假設有問題的端口允許通過任何防火牆)是好的。想想看,如何Skype(一個peer2peer應用程序)[通過防火牆獲取udp](http://www.h-online.com/security/features/How-Skype-Co-get-round-firewalls-747197。 HTML)? – 2011-04-16 18:09:04

+1

@Mike:謝謝你的評論,今天我學到了一些新東西。關於Skype,我從來沒有真正想過它的點對點本質。 (我曾經用其他非防火牆客戶端作爲網關閱讀了一些內容。) – 2011-04-16 19:03:38

5

我覺得TeleHash是一個新的項目,可以做這樣的事情。我只是最近才發現它,所以我不太瞭解它。

我回答這個問題的社區wiki,以便其他人可以更新它來解釋如何使用TeleHash。

+0

Telehash的+1,這是我聽說的第一個 – 2011-04-16 18:14:19

+1

Telehash正在積極開發(2013-2014)。我正在研究Go的實現。 Telehash支持NAT穿越,前向保密,基於身份的路由等等。 – simonmenke 2014-02-18 14:38:21

相關問題