0

我想在两个位于不同防火墙后面的 java 应用程序之间发送消息。有没有办法在没有端口转发的情况下做到这一点?(例如 p2p,Skype 在做什么?)

4

2 回答 2

1

几乎没有办法做到这一点,但经过大量搜索,我找到了一种经常工作的方法。它被称为UDP-Punching。

它也适用于 TCP,但不如 UDP 好。

https://en.wikipedia.org/wiki/UDP_hole_punching (在java中你可以做到DatagramSocket

于 2013-11-09T12:47:50.237 回答
0

如果没有至少一个防火墙上的端口转发,就没有办法做到这一点(假设防火墙有适当的限制规则。

使用 TCP 有一个服务器和一个客户端。服务器将接受连接,并且它不能接受请求,直到服务器前面的防火墙将网络流量转发给它。

典型的客户端防火墙允许向远程服务器发出请求(有时仅限于某些服务,如 http 和 https 等)。

因此,网络服务器端的防火墙需要配置为将适当的数据包转发到实际的服务器机器。

Skype 之类的东西通常只有传出连接(它们不运行等待连接的服务器套接字),而是连接到中央服务器,然后由中央服务器路由系统的流量。VPN通常以这种方式完成。

其他协议(如大多数 P2P 协议)要求对等方运行端口,并且需要配置防火墙以将流量转发到对等方。

在过去的几年中,已经建立了一种称为Internet 网关设备协议(通常标记为“UPnP”)的协议,该协议允许对等方请求防火墙根据请求转发流量。大多数 bittorrent 客户端将允许您使用 UPnP 重新配置防火墙,并且大多数现代住宅型宽带路由器将支持这些请求。

因此,需要重新配置防火墙,但有一些方法可以让您的服务器软件要求防火墙“自动”进行重新配置

于 2013-10-23T18:14:28.680 回答