mqtt断开discard疑问

我们有对一台设备进行抓包,发现discard的情况,对这个问题我们进行排查,有以下疑问:
1、discard是同一个clientId新旧连接互踢导致的,这么说的话,应该是客户端先发起新的连接再断开旧的连接,但从抓包来看,服务器好像是先 RST ,然后客户端才进行连接的;但是EMQ日志看着也是新的连接来请求 CONNECT 的包,才断开旧的连接的
2、抓包来看,RST这个包收到的时间为 Mar 3, 2025 17:53:46.344489000 UTC,但EMQ日志看到对应的discard为 2025-03-03T17:53:58.610526+00:00, 这两个事件中间差了十多秒,这是打印时机的问题吗?

  1. EMQX 肯定是 connect 来了才会发现要断开旧的连接。不然 emqx 没拿到 clientid怎么判断是不是相同的连接。。。
  2. 要排查是不是不同机器时间的问题,就不要用 UTC 时间。
    Wireshark 实现时间对齐,可以:
  • File -》 Merge 功能将多个捕获文件合并为一个
  • 在 View → “时间显示格式(Time Display Format)” 中选择时间格式
    相对于前一个已显示的数据包(Seconds Since Previous Displayed Packet)" 查看相对时间差异。