如何解决网络套接字通信的延迟调试
我正在研究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库。
- 如果使用
-
tcpdump
是否可以从服务器发送TCP数据包时获得时间戳(甚至在服务器时间内)?
任何其他建议也将受到高度赞赏。
非常感谢!
感谢@EugèneAdell
我在WireShark中打开的tcpdump大致如下
我可以在TCP Option - Timestamps
中看到TSval
这些可以说明什么吗?
很抱歉,可能是一些基本问题,确实缺乏该领域的经验,再次感谢。
解决方法
编辑
tcpdump可以从何时发送TCP数据包时获取时间戳记 服务器(甚至服务器时间)?
打开捕获窗口,查看数据包是否具有TCP时间戳选项(如RFC 1323中所定义,但在RFC 7323中有更详细的说明)。如果是这样,那么第一个 SYN 数据包应该已经提到它。
不幸的是,这些数据包中给出的 TSval (时间戳值(以毫秒为单位))的含义不是真实时钟,并且并非总是像真实时钟那样变化(取决于计算机所使用的实现方式) )。例如,如果与服务器的对话持续60秒,请检查此TSval是否也从60秒移开,如果可以,则可以使用此字段来跟踪数据包的发送时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。