我正在解決 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 秒移動,如果是,也許您可以使用此字段來跟蹤數據包的發送時間。
添加回答
舉報
0/150
提交
取消