【发布时间】:2018-02-05 19:51:55
【问题描述】:
详情: 我正在处理通过 TCP/IP 设备连接到 Modbus 的问题。我们需要每秒轮询一部分设备 modbus 寄存器 4-6 次。我们记录了以下时间。在控制测试中,我们能够以以下速度进行通信:
控制设备:每0.0015s一次,标准差为0.0001s。
发行设备:每0.5200s一次,标准差为0.01s。
经过数周的故障排除和数据包捕获,我们将问题范围缩小到与我们通信的设备没有发出或响应 TCP 握手数据包这一事实。但是,仍然可以进行通信,因为在发出 TCP 请求并随后被忽略后,查询仍会进行 0.3200 秒。此外,问题设备不支持 UDP。
抓包分解图[1]:https://i.stack.imgur.com/lCEos.png
第一个(顶部)数据包是控制,第二个(底部)数据包是问题
问题: 忽略 TCP 的基本作用是握手这一事实,有没有办法减少或完全缓解 Windows 7 机器上英特尔 NIC 上的 TCP 握手。
【问题讨论】:
-
使用持久连接。注意 TCP 的基本作用是可靠。握手只是实现此目的的几种机制之一。
-
感谢 EJP 的回复。这给了我一个新的线索。
-
TFO 有帮助吗? (TCP 快速打开)
-
持久连接会有更多帮助。 @FormerNcp
-
我同意 EJP。似乎我们的控制设备和我们的问题设备的流量之间存在断开连接。对于我们的控制设备,我们的 Modbus 通过 TCP/IP 功能块在响应查询后发送一个 [FIN,ACK] 数据包,但对于我们的问题设备,它只发送和 [ACK]。我们正在研究更多,但功能块是第 3 方,有点像黑匣子。不过,我们一直在与创作者联系,当我得到答案时,我会更新答案。
标签: tcp handshake modbus-tcp