【问题标题】:How to decrease the TCP/IP handshake timeout time如何减少 TCP/IP 握手超时时间
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多