
Ich verwende Ubuntu 14.04 über Virtual Box auf einem Windows 7-Host. Die Netzwerkkarte ist ein USB-zu-Ethernet-Adapter.
Derman
fü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/dev
während der tcpdump
Erfassung als verworfen protokolliert wurden..
Die Bedeutung der /proc/dev/net
Felder 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).