Warum werden TCPdump-Pakete von der Schnittstelle gelöscht?

Warum werden TCPdump-Pakete von der Schnittstelle gelöscht?

Ich verwende Ubuntu 14.04 über Virtual Box auf einem Windows 7-Host. Die Netzwerkkarte ist ein USB-zu-Ethernet-Adapter.

Dermanfür tcpdumpgibt an, was die Ursache für „vom Kernel verworfene Pakete“ sein kann, gibt jedoch nicht an, was die Ursache für „von der Schnittstelle verworfene Pakete“ sein kann.

Kann jemand Aufschluss darüber geben, warum die Schnittstelle möglicherweise Pakete verliert? Oder wie kann ich den Grund dafür herausfinden?

Antwort1

Wie Sie angemerkt haben, steht in der Dokumentation nichts über den Zähler „Von Schnittstelle verworfene Pakete“. Wir müssen also ein wenig im Quellcode herumstöbern.

Von demQuellcode von tcpdumpwird der Schnittstellen-Drop-Zähler aus folgendem Dokument extrahiert 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));

Ausman pcap_stats:

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

Und von derlibpcap-Quellcode:

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

Also dasDer Zähler „Pakete, die von der Schnittstelle verworfen wurden“ von tcpdump entspricht den Paketen, die /proc/net/devwährend der tcpdumpErfassung als verworfen protokolliert wurden..

Die Bedeutung der /proc/dev/netFelder wird erklärtHier

Um die Rückgänge besser zu verstehen, würde ich zunächst einen Blick auf die folgenden Statistiken werfen:

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

Antwort2

Im Allgemeinen liegt dies daran, dass der Computer zu beschäftigt ist, um das eingehende Paket zu verarbeiten, und die Schnittstelle keinen Platz hat, um es abzulegen. Der Treiber hat der Schnittstelle möglicherweise keine Puffer zur Verfügung gestellt, der Interrupt ist möglicherweise zu lange blockiert oder ähnliche schwerwiegende Ressourcenprobleme.

Dies kommt heute nicht mehr so ​​oft vor, da sich die Betriebssystemimplementierung und die Hardwareleistung verbessert haben. Früher war es jedoch ein echtes Problem, wenn beispielsweise ein Festplattenlaufwerk den Speicherbus blockieren konnte oder das Betriebssystem der Schnittstelle einen Puffer zur Verfügung stellen musste, um den Empfangsinterrupt zu bedienen (schlechtes Hardwaredesign).

verwandte Informationen