O problema pode ser com o próprio tcpdump: Se ele não responder com rapidez suficiente, os pacotes antigos serão sobrescritos por novos, o que significa que eles serão descartados.
Se você capturar todos os bytes de cada pacote, é muito fácil invadir o buffer de captura de pacotes do kernel. Os sintomas dessa sobrecarga são que seu programa de rastreamento de pacotes relatará que descartou pacotes.
No caso do tcpdump, ele imprime um resumo de quantos pacotes foram capturados, filtrados e descartados quando você interrompe a captura. Por exemplo:
$ sudo tcpdump -i en0 -w trace.pcap
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
94 packets captured
177 packets received by filter
0 packets dropped by kernel
Se a contagem dropped
for diferente de zero, você precisará aumentar o tamanho do buffer de captura de pacote passando a opção -B
para tcpdump.
Experimente também sem um arquivo de captura, para ver se isso melhora a taxa de captura.