我正在解決 websocket 的調(diào)試延遲問(wèn)題。我正在嘗試通過(guò)其 websocket 接口從加密貨幣交易所接收一些價(jià)格信息。我們收到的數(shù)據(jù)包包括交換服務(wù)器上生成的時(shí)間戳。我記錄了我們?cè)谟?jì)算機(jī)(“客戶(hù)端盒子”)上接收?qǐng)?bào)價(jià)信息的時(shí)間,并比較了到達(dá)時(shí)間和服務(wù)器生成時(shí)間之間的延遲。大多數(shù)刻度顯示幾十毫秒,這或多或少都不錯(cuò)。但每天我們都會(huì)看到幾次延遲變成幾秒甚至十幾秒,我想弄清楚這些大延遲是從哪里來(lái)的。該系統(tǒng)使用Python編程語(yǔ)言,我正在使用的websocket模塊是( https://pypi.org/project/websocket_client/,https://github.com/websocket-client/websocket-client websocket-client),我嘗試在模塊內(nèi)添加日志,看看是否是由于模塊處理時(shí)間造成的,但仍然沒(méi)有運(yùn)氣。目前我腦海中的一個(gè)想法是使用tcpdump捕獲網(wǎng)絡(luò)流量并記錄tcp數(shù)據(jù)包到達(dá)我的網(wǎng)卡的時(shí)間。如果這次仍然存在延遲,我將沒(méi)有辦法,只能將程序移至同一位置的服務(wù)器。然而,我在這里遇到了困難,因?yàn)?websocket 連接是 SSL 加密的。因此我看不到消息中包含的刻度生成時(shí)間。這里有人有解決辦法嗎?尤其:websocket-client有沒(méi)有辦法從客戶(hù)端的python包中檢索SSL的私鑰?(我假設(shè)密鑰應(yīng)該在本地某處可用,否則無(wú)法websocket-client解密數(shù)據(jù)本身。并且 WireShark 應(yīng)該能夠解密 TSL1.2 協(xié)議的消息)如果用包來(lái)做到這一點(diǎn)并不容易websocket-client,我很樂(lè)意嘗試由 python、C/C++ 編寫(xiě)的其他 websocket 庫(kù)。能否tcpdump獲取服務(wù)器發(fā)送TCP數(shù)據(jù)包時(shí)的時(shí)間戳(即使是服務(wù)器時(shí)間)?任何其他建議也將受到高度贊賞。多謝!我在 WireShark 中打開(kāi)的 tcpdump 大部分如下所示 ,我可以在 Can 這些表明什么?中看到 TSval?TCP Option - Timestamps抱歉,可能有一些基本問(wèn)題,確實(shí)缺乏這方面的經(jīng)驗(yàn),再次感謝。
1 回答

慕工程0101907
TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
編輯
tcpdump能否獲取服務(wù)器發(fā)送TCP數(shù)據(jù)包時(shí)的時(shí)間戳(即使是服務(wù)器時(shí)間)?
打開(kāi)您的捕獲并查看數(shù)據(jù)包是否具有 TCP 時(shí)間戳選項(xiàng)(如RFC 1323中定義,但在RFC 7323中有更好的解釋?zhuān)?。如果是這樣,第一個(gè)SYN數(shù)據(jù)包應(yīng)該已經(jīng)提到了它。
不幸的是,這些數(shù)據(jù)包中給出的TSval?(以毫秒為單位的時(shí)間戳值)的含義不是真實(shí)時(shí)鐘,并且并不總是像真實(shí)時(shí)鐘一樣變化(這取決于計(jì)算機(jī)使用的實(shí)現(xiàn))。例如,如果與服務(wù)器的對(duì)話(huà)持續(xù) 60 秒,請(qǐng)檢查此 TSval 是否也從 60 秒移動(dòng),如果是,也許您可以使用此字段來(lái)跟蹤數(shù)據(jù)包的發(fā)送時(shí)間。
添加回答
舉報(bào)
0/150
提交
取消