如何减少 TCP/IP 握手超时时间

How to decrease the TCP/IP handshake timeout time

详情: 我正在处理通过 TCP/IP 设备连接到 Modbus 的问题。我们需要每秒轮询设备 modbus 寄存器的一部分 4-6 次。我们记录了以下时间。在控制测试中,我们已经能够以以下速度进行通信:

Control Device: once every 0.0015s with a standard deviation of 0.0001s.

Issue Device: once every 0.5200s with a standard deviation of 0.01s.

经过数周的故障排除和数据包捕获,我们已将问题缩小为与我们通信的设备未发出或响应 TCP 握手数据包这一事实。但是,仍然可以进行通信,因为在发出 TCP 请求并随后被忽略后,查询仍然正好进行 0.3200 秒。此外,问题设备不支持 UDP。

Photo of packet capture breakdown [1]: https://i.stack.imgur.com/lCEos.png

The first (top) packet is the control, and the second (bottom) packet is the issue

问题: 忽略 TCP 的基本作用是握手这一事实,有没有办法减少或完全减轻 Windows 7 机器上 Intel NIC 上的 TCP 握手。

问题是从 PLC 请求的缓冲区大小。我们联系了 TCP/IP Modbus 服务器软件的开发人员(与 PLC 制造商相同),发现默认请求的缓冲区大小为 2GB,这对于我们与之通信的 Modbus 设备来说太大了。我们有一个新版本的 TCP/IP Modbus 服务器,它具有可配置的缓冲区大小,并且以 10 毫秒的速度进行通信。