如何从二进制 TCPDUMP 文件计算丢包率

JMW*_*JMW 4 networking tcp tcpdump

我们通过 Internet 连接到端口 80 上的一台远程服务器无法正常工作。(有时它起作用,有时不起作用)

它一定是某种丢包,因为从其他客户端没有问题。它只是从一个客户端到远程服务器发生。

通常,我会通过 ping 来解决丢包问题,但是远程服务器阻止了 ICMP。

我制作了一个二进制 TCPDUMP 文件。如何查看是否有丢包?


捕获是在客户端上完成的。我们没有远程服务器的 ssh 访问权限。

qua*_*nta 15

tshark可以过滤重传、重复 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"
Run Code Online (Sandbox Code Playgroud)

这是一个示例结果:

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 
====================================================================================
Run Code Online (Sandbox Code Playgroud)


ada*_*ptr 9

您可以通过计算重复序列号的数量来测量从客户端到服务器的数据包重传。

从服务器到客户端的数据包重传可以通过计算重复的 Ack 数来衡量。

请注意,重传不仅仅是由完全丢失(=超时)触发的;如果远程机器拒绝数据包,或者数据包损坏,本地机器也必须重传。