記一次 tcpdump 抓包分析,Dup Ack

2021-08-28 10:37:30 字數 1507 閱讀 8117

起因是 docker pull 映象時有時卡住,然而 registry 一切正常,無奈只好一試抓包。

tcpdump -n -i en0 host 10.116.58.41 -w pull.pcap

引數說明:

-n 不轉換 ip 位址為 hostname

-i 網絡卡

host 過濾條件,抓符合 host 位址的包

-w 將抓包結果保留到檔案

下文的 sender、receiver 分別代表資料的傳送方和接收方。在此處 registry 即為 sender,docker client 為 receiver。
在建立 tcp 鏈結協議後,sender 開始傳送資料,receiver 接收到資料後會給 sender 傳送確認的包。通常傳輸的資料較大,tcp 會將其分片傳輸,並且資料報是順序傳送的,每乙個資料報都會有相應的序號 seq。如果 recevier 發現收到的資料報的 seq 不對,則會拋棄該包,並且給 sender 傳送前乙個確認包,此時確認包的 ack 跟上乙個相同,故為 dup ack。

receiver 的確認包的 ack 計算公式如下,而該 ack 也是 sender 下乙個資料報的 seq

ack = seq + bytes of date received

# seq 為 sender 傳送的資料報的報文 seq

這個值在 wireshark 檢視這個很方便,會自動幫我們計算出來,如圖:

進一步分析發現,dup ack 通常以乙個 fast retransmission 結束,然後恢復正常。這是什麼原理呢?

這是因為 sender 在收到超過 3 個相同的 ack 時,此時 sender 認為 receiver 沒有收到相應的包,快速再次傳送此丟失包則為 fast retransmission。

那為何是有個 fast 呢?

在 sender 傳送乙個包後,如果超出一定時間沒有收到返回的確認包 ack,sender 則認為 receiver 沒有收到,再次傳送此包即為 retransmission。而 fast retransmission 是 sender 收到超過3個相同的 ack 包時立即發出,可能還沒有到超時時間,故 fast 。

嘛。。。知道來 dup ack 和 fast retransmission ,那我們的網路是啥問題呢?

首先,有太多的 dup ack,說明丟失很多的 sender 的包,網路肯定有問題,不太好。但具體是啥問題,我已經無能為力了。。。。?

記一次 Hook 與 抓包

用了 sslkiller 也沒有報網路錯誤 日誌中暴露了關鍵字 利用朋友提供的 日誌中暴露的關鍵字定位到網路請求的位置,發現cz.msebera.android.httpclient 谷歌發現好像是對android async http的一種封裝 不管它是什麼吧,走進去發現會 new 了乙個com....

tcpdump 抓包與分析

tcpdump 抓包與分析 tcpdump抓的包內容可以用wireshark進行解析,如 tcpdump c1000 w tmp tcpdump.test.cap wireshark是開源軟體windows和linux下都可以執行,我在windows下測試的,用wireshark開啟 tcpdump...

tcpdump抓包分析利器 wireshark

wireshark有mac版和win版,fiddler有win版。下面看下wireshark怎麼用 先抓點包 zjy ubuntu sudo tcpdump iany w dump.pcap tcpdump listening on any,link type linux sll linux coo...