两台计算机通过Internet互相查找

时间:2008-11-13 07:02:01

标签: networking network-protocols

鉴于连接到互联网的两台计算机之前对彼此一无所知,一台计算机是否可以广播一条消息,以便第二台计算机可以接收并响应?

我知道UDP广播存在,但我相信这些通常在它到达真正的互联网之前由ISP过滤。这是真的吗?

9 个答案:

答案 0 :(得分:12)

目前在没有集中协调的情况下实现多节点网络的最佳方式是使用Distributed Hash Tables。该链接解释了一些可以利用的各种实现的链接。

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

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

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

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

希望这有帮助。

答案 3 :(得分:2)

不,你不能通过互联网这样播放。您需要知道您希望数据包到达哪个地址。

答案 4 :(得分:2)

可能的解决方案是使用dynamic DNS服务。

您的应用程序需要事先知道其他主机将使用哪个主机名,但此服务至少会解决您无法确切知道另一台计算机所在的IP地址的事实。

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

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

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

西蒙

答案 7 :(得分:1)

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

答案 8 :(得分:-2)

多播也是一种可能的解决方案。这在公司网络中肯定是可行的