为了账号安全,请及时绑定邮箱和手机立即绑定

Websocket 通信的延迟调试

Websocket 通信的延迟调试

手掌心 2024-01-27 14:53:48
我正在解决 websocket 的调试延迟问题。我正在尝试通过其 websocket 接口从加密货币交易所接收一些价格信息。我们收到的数据包包括交换服务器上生成的时间戳。我记录了我们在计算机(“客户端盒子”)上接收报价信息的时间,并比较了到达时间和服务器生成时间之间的延迟。大多数刻度显示几十毫秒,这或多或少都不错。但每天我们都会看到几次延迟变成几秒甚至十几秒,我想弄清楚这些大延迟是从哪里来的。该系统使用Python编程语言,我正在使用的websocket模块是( https://pypi.org/project/websocket_client/,https://github.com/websocket-client/websocket-client websocket-client),我尝试在模块内添加日志,看看是否是由于模块处理时间造成的,但仍然没有运气。目前我脑海中的一个想法是使用tcpdump捕获网络流量并记录tcp数据包到达我的网卡的时间。如果这次仍然存在延迟,我将没有办法,只能将程序移至同一位置的服务器。然而,我在这里遇到了困难,因为 websocket 连接是 SSL 加密的。因此我看不到消息中包含的刻度生成时间。这里有人有解决办法吗?尤其:websocket-client有没有办法从客户端的python包中检索SSL的私钥?(我假设密钥应该在本地某处可用,否则无法websocket-client解密数据本身。并且 WireShark 应该能够解密 TSL1.2 协议的消息)如果用包来做到这一点并不容易websocket-client,我很乐意尝试由 python、C/C++ 编写的其他 websocket 库。能否tcpdump获取服务器发送TCP数据包时的时间戳(即使是服务器时间)?任何其他建议也将受到高度赞赏。多谢!我在 WireShark 中打开的 tcpdump 大部分如下所示 ,我可以在 Can 这些表明什么?中看到 TSval TCP Option - Timestamps抱歉,可能有一些基本问题,确实缺乏这方面的经验,再次感谢。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

编辑

tcpdump能否获取服务器发送TCP数据包时的时间戳(即使是服务器时间)?

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

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



查看完整回答
反对 回复 2024-01-27
  • 1 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信