14

假设两台连接到 Internet 的计算机事先对彼此一无所知,一台计算机是否有可能广播消息,以便第二台计算机可以接收并响应?

我知道存在 UDP 广播,但我相信这些广播通常会在到达真正的 Internet 之前被 ISP 过滤。这是真的?

4

9 回答 9

12

目前在没有集中协调的情况下实现多节点网络的最佳方法是使用分布式哈希表。该链接解释了一点,并链接到您可以利用的各种实现。

也就是说,您仍然需要每台机器至少与一些同行进行协调。只是您不需要它来与中央服务器协调。使用知道两台(所有)参与机器的中央服务器的解决方案也可以工作,但对匿名性和可扩展性施加了进一步的限制,只要记住 Napster 发生了什么。

于 2008-11-13T07:14:05.257 回答
7

你需要一个他们都知道的中间第三方,它可以以类似广播的方式分发指向它的消息。

于 2008-11-13T07:10:23.347 回答
4

这个问题的解决方案(您的对等方都不知道对方的最终地址)可能是依赖 IM 协议。

特别是,XMPP 协议是可扩展的、开放的,并被许多提供商(例如 Google Talk)使用。大多数语言都存在库,并且即使两个主机都在 NAT-box 后面,它也能够工作(缓慢并通过第 3 方服务器)。

如果通信必须使用另一个通道,您可以使用 XMPP 交换 IP 地址,然后继续使用标准套接字路由(但如果您加密您的消息,即使通过 3rd 方服务器也应该没有问题 - 是的,所有数据包都通过通过不受信任的第 3 方路由器,因此如果您有敏感数据,无论如何都应该加密......)。

希望这可以帮助。

于 2008-11-13T07:38:56.613 回答
2

一个可能的解决方案是使用动态 DNS服务。

您的应用程序需要提前知道另一台主机将使用哪个主机名,但这项服务至少可以解决您不知道另一台计算机在哪个 IP 地址上的事实。

请注意,这不会解决两个主机之间的防火墙阻止您的数据包的潜在问题。唯一可行的方法是让两个主机都打开到中央主机的出站连接,然后中央主机可以在它们之间中继数据。

于 2008-11-13T09:21:32.800 回答
2

不,你不能在互联网上这样广播。您需要知道要将数据包发送到哪个地址。

于 2008-11-13T07:05:39.503 回答
2

查看和弦或糕点算法。它是一个覆盖网络(基于 DHT),其中涉及发现机制。这是一种 P2P(Peer 2 Peer)路由算法。

于 2009-08-23T11:49:21.687 回答
1

UDP 是一个死胡同——它只是一个协议,其中接收数据包的顺序不太重要,并且存在通过 WANS 路由的问题。您说您想在“互联网”上连接两台计算机,大概是端点移动等。唯一的方法是使用中央服务器作为寄存器/目录。如果每个端点都是一个网络服务或其他东西,并定期注册其当前的 IP 地址和名称,那么另一个端点可以使用该服务查找另一个端点的 IP 地址。(可以托管您自己的 DNS 服务器并将您的端点编码为在此 DNS 上注册吗?)

问题之一是,即使您有 IP 地址,防火墙或 NAT 路由器后面的一个或多个节点是什么?您将需要托管服务器来代理流量。最好的例子是 SKYPE - 看看它是如何工作的,它被记录在案,非常有趣。

最简单的答案可能是跳过现有服务,例如 messanger、skype、bit torrent 等。

西蒙

于 2008-11-13T07:47:07.297 回答
1

如果计算机运行的是 Windows,我会考虑使用PNRP

于 2009-04-25T14:46:18.643 回答
-2

多播也是一种可能的解决方案。在企业网络中当然是可行的

于 2009-04-25T14:16:03.913 回答