Por que os pacotes tcpdump estão sendo descartados pela interface?

Por que os pacotes tcpdump estão sendo descartados pela interface?

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

Omanpara tcpdumpafirma o que pode causar "pacotes descartados pelo kernel", mas não declara o que causa "pacotes descartados pela interface".

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

Responder1

Como você apontou, não há nada na documentação sobre o contador "pacotes descartados pela interface". Portanto, precisamos de alguma pesquisa no código-fonte.

Decódigo fonte do tcpdump, o contador de queda 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));

Dehomem pcap_stats:

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

E a partir docódigo fonte libpcap:

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

Então oO contador tcpdump "pacotes descartados pela interface" corresponde aos pacotes registrados como descartados /proc/net/devdurante a tcpdumpcaptura.

O significado dos /proc/dev/netcampos é explicadoaqui

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

  • ethtool -S <interface>
  • grep '' /sys/class/net/<interface>/statistics/*

Responder2

Em geral, isso ocorre porque o computador está muito ocupado para lidar com o pacote recebido e a interface não tem onde colocá-lo. O driver pode não ter fornecido buffers para a interface, a interrupção pode estar bloqueada por muito tempo, sérios problemas de falta de recursos como esse.

Isso não acontece mais, pois a implementação do sistema operacional e o desempenho do hardware melhoraram, mas era um problema real nos primeiros dias, quando (por exemplo) uma unidade de disco poderia ocupar o barramento de memória ou o sistema operacional precisava fornecer a interface um buffer como parte do atendimento à interrupção de recepção (design de hardware ruim).

informação relacionada