websocket 通信的延迟调试

Latency debug for websocket communication

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

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

系统使用Python编程语言,我使用的websocket模块是websocket-clienthttps://pypi.org/project/websocket_client/, https://github.com/websocket-client/websocket-client),我尝试在模块中添加日志,看看是否可以是由于模块处理时间,但仍然没有运气。

我目前想到的一个想法是使用tcpdump来捕获网络流量并记录tcp数据包到达我的网卡的时间。如果这时候还出现延迟,我就只能把程序移到co-located服务器上了。但是,我在这里遇到了困难,因为 websocket 连接是 SSL-encrypted。因此我看不到消息中包含的报价生成时间。

这里有人有解决办法吗?特别是:

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

非常感谢!


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

编辑

Can tcpdump get the timestamp when the TCP data packet sent from server (even in server time)?

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

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