![如何从二进制 TCPDUMP 文件计算数据包丢失](https://linux22.com/image/568823/%E5%A6%82%E4%BD%95%E4%BB%8E%E4%BA%8C%E8%BF%9B%E5%88%B6%20TCPDUMP%20%E6%96%87%E4%BB%B6%E8%AE%A1%E7%AE%97%E6%95%B0%E6%8D%AE%E5%8C%85%E4%B8%A2%E5%A4%B1.png)
我们通过互联网与端口 80 上的一台远程服务器的连接无法正常工作。(有时可以正常工作,有时则不行)
这肯定是某种数据包丢失,因为其他客户端没有问题。这只是从一个客户端到远程服务器发生的。
通常,我使用 ping 来测量数据包丢失,但远程服务器正在阻止 ICMP。
我创建了一个二进制 TCPDUMP 文件。如何查看是否存在数据包丢失?
捕获是在客户端完成的。我们没有远程服务器的 ssh 访问权限。
答案1
您可以通过计算重复序列号的数量来测量从客户端到服务器的数据包重传次数。
可以通过计算重复的 Ack 号码来测量从服务器到客户端的数据包重传。
请注意,重新传输不仅仅是由完全丢失(=超时)触发的;如果远程机器拒绝数据包,或者数据包已损坏,本地机器也必须重新传输。
答案2
$ 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
====================================================================================