【问题标题】:Latency debug for websocket communicationwebsocket通信的延迟调试
【发布时间】:2021-02-12 22:45:56
【问题描述】:

我正在处理 websocket 的调试延迟问题。

我正在尝试通过其 websocket 接口从加密货币交易所接收一些价格信息。我们收到的数据包包括在交换服务器上生成的时间戳。我记录了我们在计算机(“客户端”)上收到滴答信息的时间,并比较了到达时间和服务器生成时间之间的延迟。大多数滴答声显示几十毫秒,这或多或少都很好。但是每天我们都会看到几次延迟变成几秒甚至超过十秒,我想弄清楚这些大延迟是从哪里来的。

系统使用的是Python编程语言,我使用的websocket模块是websocket-client(https://pypi.org/project/websocket_client/,https://github.com/websocket-client/websocket-client),我尝试在模块内部添加日志,看看是不是模块处理时间的原因但仍然没有运气。

目前我脑海中的一个想法是使用tcpdump来捕获网络流量并记录tcp数据包到达我的网卡的时间。如果这个时间仍然存在延迟,我将别无他法,只能将程序移动到同位服务器。但是,我在这里遇到困难,因为 websocket 连接是 SSL 加密的。因此,我看不到消息中包含的刻度生成时间。

这里有人有解决方案吗?特别是:

  • 有没有办法从客户端的websocket-client python 包中检索 SSL 的私钥? (我假设密钥应该在本地某处可用,否则websocket-client 无法解密数据本身。WireShark 应该能够解密 TSL1.2 协议的消息)
    • 如果使用websocket-client 包不容易做到这一点,我很乐意尝试其他由python、C/C++ 编写的websocket lib。
  • tcpdump能否获取服务器发送TCP数据包时的时间戳(即使是服务器时间)?

我们也非常感谢任何其他建议。

非常感谢!


感谢@Eugène Adell 我在 WireShark 中打开的 tcpdump 大多如下所示 我可以在TCP Option - Timestamps 中看到 TSval 这些能说明什么吗? 抱歉,可能是基本问题,在这方面真的缺乏经验,再次感谢。

【问题讨论】:

    标签: python websocket wireshark latency tcpdump


    【解决方案1】:

    编辑

    tcpdump 能否获取 TCP 数据包发送时的时间戳 服务器(甚至在服务器时间)?

    打开您的捕获并查看数据包是否具有 TCP 时间戳选项(在 RFC 1323 中定义,但在 RFC 7323 中有更好的解释)。如果是这样,第一个 SYN 数据包应该已经提到了它。

    不幸的是,这些数据包中给出的 TSval(以毫秒为单位的时间戳值)的含义不是真正的时钟,并且并不总是像真正的时钟一样变化(这取决于您的计算机使用的实现)。例如,如果与您的服务器的对话持续 60 秒,请检查此 TSval 是否也从 60 秒移动,如果是,您可以使用此字段来跟踪数据包的发送时间。

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 2013-06-11
      • 2017-11-13
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多