2012-02-11 76 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