繁体   English   中英

tcp客户端与不同网络中存在的服务器通信(NAT问题)

[英]tcp client to communicate with server present in different network (NAT issue)

我有一个TCP客户端程序,该程序需要与设备中嵌入的服务器进行通信。 可能需要通过单个客户端程序控制1000台设备。 由于这些设备(即tcp服务器)的数量很大,因此它们必须位于不同的路由器之后

所以场景就像

客户端-----“ router1” ----服务器1,服务器2,服务器3 ... server_255

   ----- "router2" ---server1, server 2...server_255

在此输入图像描述

由于客户端和服务器程序位于不同的网络中,因此这是在客户端和服务器之间建立通信的最简单方法吗?

尽管看似简单的客户端-服务器编程,但问题在于NAT,网络转换。 这些服务器位于不同的专用网络后面,因此我期待在此处解决NAT问题。 (例如,类似端口转发,但不确定)

注意:我的客户端和设备仍在我的网络中,因此安全不是主要问题。

提前谢谢了。

最直接的设计是拥有一个专用的守护进程,通常称为控制器 ,在一个众所周知的端口上侦听,所有设备都作为客户端,连接到它。 控制器将观察设备上下移动,跟踪其位置和状态。

您现在称为“客户端”的东西将变成用户界面的一部分。 它将查询控制器并显示结果,并向控制器发出命令,该命令继而将其中继到设备。

让您的所有“服务器”(即设备)保持与“客户端”(即中央服务器)的连接。 正如您所描述的,采用另一种方式将无法与路由器配合使用。

如果不需要全时连接,则可能需要建立连接调度或使用广播/多播消息来告知客户端进行连接。 请注意,广播/多播将需要更改路由器配置,以确保消息消失。

我在这里假设通过路由器你的意思是NAT的东西。 NAT就是问题所在。

您的插图显示了每个基于NAT的路由器后面的多个端点。 如果使用端口转发方法,则需要为各种路由器中的每个端点注册一个不同的端口号。 跟踪和配置会很麻烦,但是它将允许您的中央管理服务器即时访问您的每个端点。

如果您在端点上控制该软件,则可以让它们轮询中央服务器以获取指示。 路由器中不需要配置,因为请求来自私有端。 假设来自服务器的典型消息类似“确定”,那么流量将是微不足道的。 缺点是中央服务器传送指令不是即时的。 在下一轮询间隔之前,客户端将不知道消息是否可用。

两种极端情况之间的某个地方是分布式管理方法,但要增加成本。 如果每个NAT路由器后面都有服务器,则可以让其将指令中继到每个端点。 您的中央管理服务器可以控制一小部分本地管理服务器,每个本地管理服务器位于每个NAT防火墙后面,并且这些服务器中的每一个都可以直接访问其同一LAN内的端点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM