Networking
如何從二進制 TCPDUMP 文件中計算封包遺失
我們通過 Internet 與埠 80 上的一台遠端伺服器的連接無法正常工作。(有時它工作,有時不工作)
它一定是某種丟包,因為從其他客戶端沒有問題。它只是從一個客戶端到遠端伺服器發生。
通常,我用 ping 確定封包遺失,但遠端伺服器阻止了 ICMP。
我製作了一個二進制 TCPDUMP 文件。如何查看是否有丟包?
擷取是在客戶端上完成的。我們沒有對遠端伺服器的 ssh 訪問權限。
您可以通過計算重複序列號的數量來衡量從客戶端到伺服器的數據包重新傳輸。
從伺服器到客戶端的數據包重傳可以通過計算重複的 Ack 數來衡量。
請注意,重傳不僅僅是由完全失去(=超時)觸發的;如果遠端機器拒絕數據包,或者數據包損壞,本地機器也必須重新傳輸。
$ tshark -r file.pcap -q -z io,stat,1,\ "COUNT(tcp.analysis.retransmission) tcp.analysis.retransmission",\ "COUNT(tcp.analysis.duplicate_ack)tcp.analysis.duplicate_ack",\ "COUNT(tcp.analysis.lost_segment) tcp.analysis.lost_segment",\ "COUNT(tcp.analysis.fast_retransmission) tcp.analysis.fast_retransmission"
這是一個範例結果:
IO Statistics Interval: 1.000 secs Column #0: COUNT(tcp.analysis.retransmission) tcp.analysis.retransmission Column #1: COUNT(tcp.analysis.duplicate_ack)tcp.analysis.duplicate_ack Column #2: COUNT(tcp.analysis.lost_segment) tcp.analysis.lost_segment Column #3: COUNT(tcp.analysis.fast_retransmission) tcp.analysis.fast_retransmission | Column #0 | Column #1 | Column #2 | Column #3 Time | COUNT | COUNT | COUNT | COUNT 000.000-001.000 0 0 0 0 001.000-002.000 0 0 0 0 002.000-003.000 0 0 0 0 003.000-004.000 0 0 0 0 004.000-005.000 0 0 0 0 005.000-006.000 0 0 0 0 006.000-007.000 1 2 1 0 007.000-008.000 3 1 0 0 008.000-009.000 0 0 0 0 009.000-010.000 1 0 1 0 010.000-011.000 0 0 0 0 011.000-012.000 0 0 0 0 012.000-013.000 0 0 0 0 013.000-014.000 1 0 0 0 ====================================================================================