¿Por qué la interfaz descarta los paquetes tcpdump?

¿Por qué la interfaz descarta los paquetes tcpdump?

Estoy usando Ubuntu 14.04 a través de Virtual Box en un host de Windows 7. La NIC es un adaptador de USB a Ethernet.

Elmanpara tcpdumpindica qué puede causar "paquetes descartados por el kernel", pero no indica qué causa "paquetes descartados por la interfaz".

¿Alguien puede aclarar por qué la interfaz puede estar descartando paquetes? ¿O cómo puedo averiguar el motivo por el que se descartan los paquetes?

Respuesta1

Como señaló, no hay nada en la documentación sobre el contador de "paquetes descartados por la interfaz". Así que necesitamos investigar un poco el código fuente.

Desde elcódigo fuente de tcpdump, el contador de caídas de la interfaz se extrae 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));

Dehombre pcap_stats:

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

Y desde elcódigo fuente libpcap:

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

Entonces elEl contador de "paquetes descartados por la interfaz" de tcpdump corresponde a los paquetes registrados como descartados /proc/net/devdurante la tcpdumpcaptura..

/proc/dev/netSe explica el significado de los campos.aquí

Para comprender mejor las caídas, comenzaría mirando las siguientes estadísticas:

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

Respuesta2

En general, esto se debe a que la computadora está demasiado ocupada para manejar el paquete entrante y la interfaz no tiene lugar para colocarlo. Es posible que el controlador no haya proporcionado buffers a la interfaz, que la interrupción esté bloqueada durante demasiado tiempo, problemas graves de falta de recursos como ese.

Esto ya no sucede mucho, ya que la implementación del sistema operativo y el rendimiento del hardware han mejorado, pero era un problema real en los primeros días, cuando (por ejemplo) una unidad de disco podía acaparar el bus de memoria o el sistema operativo tenía que proporcionarle a la interfaz un buffer como parte del servicio de la interrupción de recepción (diseño de hardware deficiente).

información relacionada