猿问

Websocket 通信的延迟调试

我正在解决 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

https://img1.sycdn.imooc.com/65b4a8a00001a14305600152.jpg

抱歉,可能有一些基本问题,确实缺乏这方面的经验,再次感谢。

手掌心
浏览 207回答 1
1回答

慕工程0101907

编辑tcpdump能否获取服务器发送TCP数据包时的时间戳(即使是服务器时间)?打开您的捕获并查看数据包是否具有 TCP 时间戳选项(如RFC 1323中定义,但在RFC 7323中有更好的解释)。如果是这样,第一个SYN数据包应该已经提到了它。不幸的是,这些数据包中给出的TSval (以毫秒为单位的时间戳值)的含义不是真实时钟,并且并不总是像真实时钟一样变化(这取决于计算机使用的实现)。例如,如果与服务器的对话持续 60 秒,请检查此 TSval 是否也从 60 秒移动,如果是,也许您可以使用此字段来跟踪数据包的发送时间。
随时随地看视频慕课网APP

相关分类

Python
我要回答