我有一个物联网设备(很可能是通过NAT),它应该与服务器(在互联网上)通信,服务器应该能够向设备发送命令。以下是高级别的沟通细节:
- IoT设备会将端口9000(例如)的KeepAlive数据包发送到端口8000上的服务器(比方说)。服务器现在具有端口和IP(比如Cp和Cip),如果需要,它可以用来启动与IoT设备的连接。
- 服务器显然是在侦听端口8000上的连接。所以Server有一个服务器套接字来监听物联网设备的keepalive
- 定期发送KeepAlive数据包,并在服务器返回OK后关闭连接。这是为了确保套接字不会保持打开状态,从而节省服务器和物联网设备上的资源。
- 现在,我想要向IoT设备发送一些命令,在这种情况下,我想从端口8000上的服务器打开套接字连接,并将数据包发送到Cip,Cp。
- IoT设备应在其端口9000上接收此数据包。为此,IoT设备应打开服务器套接字以接受这些连接。
醇>
正如我们所看到的,客户端和服务器都必须在特定端口上打开服务器套接字,有时需要在该端口上创建客户端套接字以发送一些数据。
TCP会与上述情况一起使用吗?如果客户端套接字和服务器套接字可以绑定到同一个端口,我只是感到困惑?
请建议
编辑1:
- 我故意选择上面的设计,因为保持IoT设备始终打开服务器连接不会扩展。假设我在现场有数百万台物联网设备,我现在需要对连接进行负载平衡。
- 服务器到IoT设备(后向)连接只是为了确保立即发送命令。仅创建正向连接(IoT设备到服务器)以发送Keepalive。它将定期进行(可能相隔5-10分钟)
编辑2:
固定端口(8000)的原因是:NAT仅从接收到keepalive数据包的目标端口打开反向通信的漏洞。因此,只有在该端口上从IoT设备收到数据包时,才能将反向数据包从服务器上的端口X发送到物联网设备。