Por que os pacotes tcpdump são descartados pela interface?

3

Estou usando o Ubuntu 14.04 via Virtual Box em um host do Windows 7. A NIC é um adaptador USB para Ethernet.

O man para tcpdump indica o que pode causar "pacotes descartados pelo kernel", mas não indica o que faz com que "pacotes sejam descartados pela interface".

Alguém pode esclarecer por que a interface pode estar perdendo pacotes? Ou como posso descobrir o motivo da queda dos pacotes?

    
por Adi 06.01.2015 / 15:07

2 respostas

1

Como você apontou, não há nada na documentação sobre o contador "pacotes descartados pela interface". Então, precisamos de algum código fonte para escavar.

Do código-fonte do tcpdump , o contador de gotas da interface é extraído de stats.ps_ifdrop :

if (stats.ps_ifdrop != 0) {
    if (!verbose)
        fputs(", ", stderr);
    else
        putc('\n', stderr);
    (void)fprintf(stderr, "%u packet%s dropped by interface\n",
        stats.ps_ifdrop, PLURAL_SUFFIX(stats.ps_ifdrop));

De homem pcap_stats :

ps_ifdrop
    number of packets dropped by the network interface or its driver.

E no código-fonte da libpcap :

 *  "ps_ifdrop" is supported. It will return the number
 *  of drops the interface reports in /proc/net/dev,
 *  if that is available.

Portanto, o contador tcpdump "pacotes descartados pela interface" corresponde aos pacotes registrados como descartados em /proc/net/dev durante a tcpdump capture .

O significado dos campos /proc/dev/net é explicado aqui

Para entender melhor as gotas, eu começaria observando as seguintes estatísticas:

  • ethtool -S <interface>
  • grep '' /sys/class/net/<interface>/statistics/*
por 17.08.2017 / 09:38
0

Em geral, isso ocorre porque o computador está muito ocupado para manipular o pacote de entrada, e a interface não tem espaço para colocá-lo. O driver pode não ter dado buffers para a interface, a interrupção pode ser bloqueada por muito tempo, falta grave de problemas de recursos como esse.

Isso não acontece mais, já que a implementação do SO e o desempenho do hardware melhoraram, mas era um problema real nos primeiros dias, quando (por exemplo) uma unidade de disco podia roubar o barramento de memória ou o SO precisava dê à interface um buffer como parte da manutenção da interrupção de recebimento (design de hardware insatisfatório).

    
por 20.05.2016 / 20:37

Tags