Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 两台计算机通过因特网相互查找_Networking_Network Protocols - Fatal编程技术网

Networking 两台计算机通过因特网相互查找

Networking 两台计算机通过因特网相互查找,networking,network-protocols,Networking,Network Protocols,考虑到两台连接到Internet的计算机之前彼此一无所知,一台计算机是否能够广播消息,以便第二台计算机能够接收并响应 我知道UDP广播是存在的,但我相信在它进入真正的互联网之前,ISP通常会对其进行过滤。这是真的吗?不,你不能在互联网上那样广播。你需要知道你想让你的数据包去哪个地址。你需要一个他们都知道的中间第三方,该第三方可以像广播一样向它发送消息。目前实现无需集中协调的多节点网络的最佳方法是使用。该链接解释了一点,并链接到您可以利用的各种实现 也就是说,您仍然需要每台机器与至少一些对等机进行

考虑到两台连接到Internet的计算机之前彼此一无所知,一台计算机是否能够广播消息,以便第二台计算机能够接收并响应


我知道UDP广播是存在的,但我相信在它进入真正的互联网之前,ISP通常会对其进行过滤。这是真的吗?

不,你不能在互联网上那样广播。你需要知道你想让你的数据包去哪个地址。

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

目前实现无需集中协调的多节点网络的最佳方法是使用。该链接解释了一点,并链接到您可以利用的各种实现


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

这个问题的解决方案(没有一个对等方知道另一个的最终地址)可能依赖于IM协议

特别是,XMPP协议是可扩展的、开放的,许多提供商(如Google Talk)都使用它。大多数语言都有库,即使两台主机都在NAT箱后面,它也可以工作(速度慢,通过第三方服务器)

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


希望这有帮助。

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

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

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


Simon

一个可能的解决方案是使用服务

您的应用程序需要提前知道另一台主机将使用哪个主机名,但此服务至少可以避免您不确切知道另一台计算机的IP地址这一事实



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

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

如果计算机运行的是Windows,我会考虑使用。看看chord或pastry算法。这是一个覆盖网络(基于DHT),其中包含一个发现机制。它是一个P2P(对等2)路由算法。

与编程无关,是吗?可能与编程有关——他可能对开发这样一个系统感兴趣。如果你问我的话,这看起来还是一个网络作业。他没有写任何关于编程的东西。考虑到他说他提出了一个现实世界的问题(ISPs过滤UDP),我怀疑这是家庭作业,因为这类高级问题通常更具理论性,它们往往忽略实际情况,如网线无法正常工作、ISP过滤等。这是一个很好的问题,如果它找到了一个很好的答案,那么只会从中受益。这个问题属于哪里并不重要。可能最好的例子是DNS,但也有其他的。是的,DHT,正如Vinko Vrsalovic所提到的,但如果他们知道他们有一个共同的第三方系统,那不是DNS吗?那么他们就不能使用非广播机制来找到彼此了吗?我不知道这一点,我真的很好奇,你能发送吗他向所有的计算机发送数据包?你可以通过局域网进行广播;理论上,什么能阻止你向世界上所有的计算机发送数据包?@Tom:提示:有多少人可以向世界广播而不会使整个系统崩溃?IP广播只在本地网段上工作,因为网络堆栈将IP广播转换为网络以太网broadcast@Alnitak:这是我希望在stackoverflow上经常看到的答案。谢谢。+1-其他更高级别的答案似乎忽略了“事先对彼此一无所知”这一点问题的一部分。目前在整个互联网上几乎不可行。@Alnitak-同意,当然希望它得到正确实施。但如果它真的实现了,可能会出现大量的多播攻击。此外,他们还必须知道使用哪个多播地址。这意味着他们不会“事先对彼此一无所知”.这在问题的“事先对彼此一无所知”部分下是如何限定的?他们不必对彼此有任何先验的了解。当然,有人会