在没有服务器的两台计算机之间创建TCP连接 2台计算机位于不同的子网中 两者都是Windows机器 它们之间有2-5个IGMP就绪路由器 他们可以通过多播协议相互连接(他们加入了同一个多播组,并且知道彼此的存在)

在没有服务器的两台计算机之间创建TCP连接 2台计算机位于不同的子网中 两者都是Windows机器 它们之间有2-5个IGMP就绪路由器 他们可以通过多播协议相互连接(他们加入了同一个多播组,并且知道彼此的存在),tcp,connection,p2p,multicast,Tcp,Connection,P2p,Multicast,如何在没有任何公共服务器的情况下在它们之间建立可靠的TCP连接 程序设计语言:C++,WinAPI < /P> (我需要一个TCP连接来发送一些重要的大数据,我不能将其委托给UDP)您还没有指定编程语言,因此整个问题可能与主题无关 子网不是问题所在。可路由性是问题所在。要么有路由设置,要么没有。例如,如果它们都位于NAT盒的后面,那么您将受NAT盒配置的支配。如果它们仅位于路由网络的两个不同子网上,则网络管理员的任务是设置路由。因此,每一个都有一个IP地址,其中一个可以寻址另一个 在一台机器上,

如何在没有任何公共服务器的情况下在它们之间建立可靠的TCP连接

程序设计语言:C++,WinAPI < /P>


(我需要一个TCP连接来发送一些重要的大数据,我不能将其委托给UDP)

您还没有指定编程语言,因此整个问题可能与主题无关

子网不是问题所在。可路由性是问题所在。要么有路由设置,要么没有。例如,如果它们都位于NAT盒的后面,那么您将受NAT盒配置的支配。如果它们仅位于路由网络的两个不同子网上,则网络管理员的任务是设置路由。因此,每一个都有一个IP地址,其中一个可以寻址另一个

在一台机器上,您将创建一个套接字,将其绑定到您选择的某个端口,然后侦听。另一方面,您将连接到第一台机器的IP+所选端口

编辑

我会再试一次,但我觉得这里有一个巨大的概念鸿沟

曾几何时,TCP/IP被发明了。在最初的概念中,网络上的每一项都有一个IPV4地址,每台机器都可以通过路由到达其他每台机器,除了“专用”地址空间中的机器(10.x等)

在早期,唯一的“子网”是“A类、B类、C类”。后来增加了通过位掩码细分网络的想法。“子网”的概念只是描述一个网络的一种方式,在这个网络中,所有的主机都可以通过某种传输或另一种传输,通过一个跃点向彼此传送数据包。在正确配置的网络中,这只与操作系统驱动程序有关。普通程序只是通过网络寻址数据包,然后数据包就到达了

这种连接的实现总是通过路由协议。如果这里有一个(物理)以太网a,那里有一个(物理)以太网B,通过某种点对点链接连接,a上的机器需要知道在哪里为B发送数据包。或者,确切地说,他们需要知道在哪里发送“非a”数据包,以及他们发送的任何东西需要知道在哪里发送“B”数据包。在简单的情况下,这是通过显式配置来安排的:路由规则填充到路由器盒中,甚至包含多个物理接口的计算机中。在更复杂的情况下,路由盒通过协议(如EGP、BGP或IGMP)相互通信以了解网络拓扑

如果使用Windows“路由”命令,您将看到系统用于发送需要离开本地子网的数据包的“默认路由”。它通常是负责将信息从本地子网移动到其他任何地方的路由器盒的地址

该路由的全部目标是安排从a.b.c.d发送到e.f.g.h的数据包到达那里。TCP和UDP没有什么不同,只是你不能通过多播或广播到达目的地:你需要知道通讯者的确切地址

DNS的发明是为了让主机能够了解彼此的IP地址,而无需人类通过电子邮件发送这些地址

当人们开始使用NAT和防火墙来关闭路由时,所有这些都会停止工作。NAT的全部思想是NAT盒后面的计算机根本不可寻址。它们似乎都有一个IP地址。他们可以发送资料,但只有在NAT箱为他们映射一个端口时,他们才能接收资料


从你的原始信息来看,我有点怀疑NAT是否在这里使用。我只是不理解你的评论“我无法访问网络”。你说你到处发送UDP数据包。那你是怎么做到的?您使用了什么地址?

@b参数,如何指定“IP:端口”?它们位于不同的子网中,可能在5个路由器后面。在不同的子网中可能有不同的IP类。如果我简单地指定另一个子网的IP,就会建立连接?简单的答案是“是”。这就是路由协议的用途。请参阅我的编辑。因此,活动IGMP连接对此任务没有任何帮助?IGMP是用于建立可路由性的工具之一,因此值得乐观。这两台机器的IP地址是多少?如果使用“traceroute”命令从一个到另一个,您会看到什么?我仍然无法访问该网络,因此我必须准备一些通用的方法。你的意思是没有通用的方法,一切都取决于当前的网络配置?那么首选哪种配置?非常感谢您的解释!我为我的愚蠢感到抱歉,我之前的评论意味着我现在无法在多路由器网络中测试我的软件,但我会稍后再做。UDP多播以前在那里工作得很好,但我不确定路由器在TCP连接上是否也能完成同样的工作。