嘿我正在研究一个在java中创建p2p网络的项目。 我使用UDP为本地局域网构建了n / w,我正在努力 通过互联网发送UDP数据报。我遇到了这个名为UDP打孔的概念,但似乎无法找到任何相关的主题或库。 有人可以帮忙吗?
答案 0 :(得分:1)
我认为这通常被称为NAT punch-through。也许你会有更多的运气搜索该标题。
答案 1 :(得分:1)
以下是一些强烈推荐的UDP(或TCP)打孔技术资料:
http://www.usenix.org/events/usenix05/tech/general/full_papers/ford/ford_html/
或者,当然,维基百科:
http://en.wikipedia.org/wiki/UDP_hole_punching
基本上,由于大多数计算机都落后于所谓的网络地址转换器(NAT),因此您需要使用计算机公共IP和公共端口,因为互联网上的某个人会看到它们。此外,您将需要专用IP和专用端口(或者当应用程序本身看到其套接字时...这是为了防止您在与您尝试连接的其他应用程序/计算机/节点相同的NAT后面)。然后,两个节点尝试通过尝试公共和私有地址来建立连接。当这两个应用程序建立联系时,他们已成功遍历NAT - 他们已成功穿孔。
这样做的一种流行方式是让两个客户端连接到服务器,以帮助协调两个客户端。它协调将公共和私人IP和端口发送给另一个客户端,然后用它们执行“打孔”。
此外,显然使用UDP协议,因为它比TCP(经验)更成功。注意:我试图找到相关的统计数据,但没有成功。
答案 2 :(得分:0)
你无法通过inetrnet进行UDP广播/多播。但是,您可以通过互联网传递TCP。
我建议您尝试在网络上使用网关侦听您选择的UDP数据包,通过TCP将数据传递到另一个网络上的另一个网关,这可以将此信息转换回UDP。
答案 3 :(得分:0)
您可能正在寻找uPnP的NAT遍历工具。许多消费者路由器支持以编程方式为任何要求的应用程序打开整个防火墙和转发端口。或蠕虫。无论哪种方式。 :)
答案 4 :(得分:0)
在NAT-to-NAT traversal上查看此其他问题。 Erik对UDP打孔有很好的描述。