簡體   English   中英

websocket 通信的延遲調試

[英]Latency debug for websocket communication

我正在研究 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ène Adell 我在 WireShark 中打開的 tcpdump 大致如下在此處輸入圖片說明 我可以在TCP Option - Timestamps看到 TSval 在此處輸入圖片說明 這些能說明什么嗎? 對不起,可能是基本問題,真的缺乏這方面的經驗,再次感謝。

編輯

tcpdump 可以獲取服務器發送 TCP 數據包時的時間戳(即使在服務器時間)?

打開您的捕獲並查看數據包是否具有 TCP 時間戳選項(如RFC 1323 中所定義,但在RFC 7323 中有更好的解釋)。 如果是這樣,第一個SYN數據包應該已經提到它。

不幸的是,這些數據包中給出的TSval (以毫秒為單位的時間戳值)的含義不是真實時鍾,並且並不總是像真實時鍾一樣變化(這取決於您的計算機使用的實現)。 例如,如果與您的服務器的對話持續 60 秒,請檢查此 TSval 是否也從 60 秒開始移動,如果是,您可以使用此字段來跟蹤數據包的發送時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM