在没有服务器的2台计算机之间创建TCP连接

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

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

编程语言:C,WinAPI

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

最佳答案
您尚未指定编程语言,因此整个问题可能是偏离主题的.

子网不是问题.可行性是问题所在.有路由设置或没有.例如,如果它们都在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数据包.那你是怎么做到的?你用过什么地址?

转载注明原文:在没有服务器的2台计算机之间创建TCP连接 - 代码日志