如何在没有任何公共服务器的情况下在它们之间建立可靠的TCP连接?
编程语言:C ++,WinAPI
(我需要一个TCP连接来发送一些大的关键数据,我不能委托给UDP)
答案 0 :(得分:3)
您尚未指定编程语言,因此整个问题可能是偏离主题的。
子网不是问题。可行性是问题所在。有路由设置或没有。例如,如果它们都在NAT框后面,那么你就可以完成nat框的配置。如果它们仅位于路由网络的两个不同子网上,则网络管理员的工作就是设置路由。因此,每个都有一个IP地址,并且可以解决另一个。
在一台机器上,您将创建一个套接字,将其绑定到您选择的某个端口,然后收听。另一方面,您将连接到第一台机器的IP +所选端口。
修改强>
我要再试一次,但我觉得这里有一个巨大的概念差距。
曾几何时,发明了TCP / IP。在最初的概念中,网络上的每个项目都有一个IPV4地址,每台机器都可以通过路由到达所有其他机器,但“私人”地址空间(10.x等)中的机器除外。
在早期,唯一的“子网”是“A级,B级,C级”。后来增加了通过位掩码细分网络的想法。 “子网”的概念只是描述一个网络的一种方式,在这种网络中,所有主机都可以通过某个传输或另一个传输一跳传递数据包。在正确配置的网络中,这仅与操作系统驱动程序有关。普通程序只是通过网络对数据包进行处理,然后它们就会到达。
此连接的实现始终通过路由协议实现。如果你有一个(物理)以太网A,那里有一个(物理)以太网B,通过某种点对点链接连接,A上的机器需要知道在哪里发送B的数据包。或者,确切地说,他们需要知道在哪里发送'not-A'数据包,无论发送什么,他们都需要知道在哪里发送'B'数据包。在简单的情况下,这是通过显式配置来安排的:路由规则填充到路由器盒中,甚至是具有多个物理接口的计算机。在更复杂的情况下,路由盒通过EGP或BGP或IGMP等协议进行相互通信,以了解网络拓扑。
如果使用Windows“route”命令,您将看到系统用于发送需要离开本地子网的数据包的“默认路由”。它通常是路由器盒的地址,负责将信息从本地子网移动到其他任何地方。
此路由的整个目标是安排从a.b.c.d发送到e.f.g.h的数据包到达那里。 TCP与UDP没有什么不同,除了您无法通过多播或广播到达那里:您需要知道通讯员的确切地址。
DNS的发明是为了让主机能够学习彼此的IP地址而无需人们通过电子邮件发送它们。
当人们开始使用NAT和防火墙来关闭路由时,所有这一切都停止了。 NAT的整个想法是NAT盒子后面的计算机 根本不可寻址。它们似乎都有一个IP地址。他们可以发送东西,但是如果NAT盒子在为他们映射端口时遇到麻烦,他们只能接收东西。
从您的原始消息中,我有点怀疑NAT在这里使用。我只是不明白你的评论“我无法访问网络。”你说你已经在那里发送了UDP数据包。那你是怎么做到的?你用过什么地址?