2012-02-11 73 views
0

我想在不同位置的兩臺計算機之間建立網絡連接(RTP或UDP),每個計算機位於NAT調制解調器/防火牆之後。我不希望對防火牆進行任何修改。通過防火牆實現點對點網絡連接

我的工作假設是我需要一個雙方的計算機可以到達的機器人(例如一個互聯網服務器上的shell帳戶)。每臺計算機連接到機器人,機器人允許兩臺計算機更新和查詢狀態並交換數據。

儘管它還行,但這意味着所有的數據都是通過機器人傳播的。有沒有一種方法可以在沒有機器人的情況下連接兩臺計算機,或者一旦連接完成,允許機器人退出數據交換?我的感覺是,沒有辦法做到這一點,但我的TCP/IP有點生疏......

+0

可能的重複[如何使TCP服務器在路由器(NAT)後面工作而不需要任何重定向配置](http://stackoverflow.com/questions/1511562/how-do-i-make-a- tcp-server-work-behind-a-router-nat-without-any-redirection-co)或[C++ Hole-punching UDP/RTP](http://stackoverflow.com/questions/4634780/c-hole-punching -udprtp) – 2012-02-11 03:49:30

+0

@Adam Liss:對不起,對不起:-( – 2012-02-11 13:57:55

回答

1

如果你在NAT /防火牆上什麼都不假,你是正確的。

據我所知,由於源端口被NAT設備隨機分配並且它將目標公共地址和拾取的源地址/匹配,所以在我知道的情況下,打孔功能對於過載NAT(PAT)不起作用港口當選。

UPnP可能正常工作,但您需要假設它存在並且在NAT設備上啓用。

正如我所看到的,如果您想要通用,只有兩個選項: 1.配置NAT。 2.使用代理(您提到的機器人)。例如,Skype使用第二種方式,但是通過將每個Skype客戶端用作潛在代理(可能只有當它檢測到它不在NAT後面或不受其限制時),才以分佈方式進行分組。

+0

謝謝我來看一下打孔(儘管你指出它不會工作,我應該更多地瞭解它)。在私有網絡中?我的場景是通過公共網絡的。 – 2012-02-11 13:57:27

+0

如果我理解正確,UPnP在專用網絡中用於允許元素之間進行協商。在此情況下,爲了允許客戶端更新他需要的端口上的路由器/防火牆打開溝通(實際上,自動修正路由器或防火牆),如果這樣做,兩個客戶端都可以交換可以通過它們到達的端口(交換可能通過代理進行)。 – EdwardH 2012-02-11 19:03:50