Wie diagnostizieren Sie Paketverlust?

27

Mir ist klar, dass dies sehr subjektiv ist und von einer Reihe von Variablen abhängt, aber ich frage mich, welche Schritte die meisten Leute durchlaufen, wenn sie einen Paketverlust auf einem bestimmten System diagnostizieren müssen.

KushalP
quelle
Was ist das "System"? Meinen Sie damit, dass auf einem einzelnen Server (oder Desktop) Paketverluste auftreten? Oder ist es ein ganzes Netzwerksegment? Wie haben Sie dies als Paketverlust diagnostiziert (von dem ich annehme, dass es vom Netzwerk verursacht wird) und nicht zum Beispiel als schlechte Leistung auf einem Anwendungsserver, wenn die transienten Ports oder der Java-Heap oder eine Million anderer Möglichkeiten ausgehen?
mfinni
Mir ist klar, dass es eine schlechte Problembeschreibung ist. Betrachten Sie es als rein akademisch und hypothetisch. Angenommen, es ist ein Paketverlust, nur neugierig, welche Schritte die meisten Ingenieure unternehmen.
KushalP

Antworten:

29

Ich bin ein Netzwerktechniker, daher beschreibe ich dies aus meiner Sicht.

Für mich beginnt die Diagnose eines Paketverlusts normalerweise mit "Es funktioniert nicht sehr gut". Von dort aus versuche ich normalerweise, das Kit so nah wie möglich an beiden Enden der Kommunikation zu finden (normalerweise eine Workstation in einem Büro und irgendwo einen Server) und so nah wie möglich an das andere Ende zu pingen (idealerweise den "entfernten Endpunkt"). Aber manchmal gibt es Firewalls, über die ich keine Pings senden kann, also muss ich mich mit einer LAN-Schnittstelle auf einem Router begnügen.

Wenn ich einen Verlust sehe, ist dies normalerweise ein Fall von "nicht genügend Bandbreite" oder "Verbindung mit Problemen", also suchen Sie die Route durch das Netzwerk und beginnen Sie in der Mitte, die Ihnen normalerweise das eine oder andere Ende gibt.

Wenn ich keinen Verlust sehe, lauten die nächsten beiden Schritte in der Regel "Weitere Pings senden" oder "Größere Pings senden". Wenn die Sortierung keinen Hinweis auf das Problem gibt, ist es an der Zeit, die QoS-Richtlinien und Schnittstellenstatistiken über den gesamten Pfad zwischen den Endpunkten zu betrachten.

Wenn das nichts bringt, ist es Zeit, Ihre Vermutungen in Frage zu stellen, ob Sie tatsächlich unter Paketverlust leiden. Der einzig sichere Weg, dies herauszufinden, ist das gleichzeitige Erfassen an beiden Enden, entweder durch Verwenden von WireShark (oder eines gleichwertigen Mittels) auf den Hosts oder durch Anschließen von Sniffer-Maschinen (wahrscheinlich mit WireShark oder ähnlichem) über Netzwerk-Taps. Dann kommt der Spaß beim Vergleichen der beiden Paketerfassungen ...

Manchmal ist das, was als "Paketverlust" bezeichnet wird, einfach etwas auf der Serverseite, das merklich langsamer ist (z. B. das Verschieben der Datenbank von "im selben LAN" auf "20 ms entfernt" und das Verwenden von Abfragen, die sehr viel Zeit erfordern) hin und her zwischen dem Front-End und der Datenbank).

Vatine
quelle
+1. Als Kundendienst-Netzwerktechniker gehe ich normalerweise auch diesen Weg.
Petrus
1
@Vatine Wäre schön, einige Codebeispiele zu haben, um es üben zu können, ohne nach Befehlen und Optionen suchen zu müssen ...
Philippe Gachoud
11

Aus der Sicht eines Linux-Systems werde ich zunächst nach Paketverlust auf der Netzwerkschnittstelle mit suchen ethtool -S ethX.

Meistens wird dies durch Erhöhen des Ringpuffers ethtool -G ethX rx VALUEbehoben.

Manchmal werden Interrupts nicht ausgeglichen, weil dem System der Dienst irqbalance fehlt. Überprüfen Sie daher in chkconfig(EL) oder update-rc(Debuntu), ob dieser Dienst ausgeführt wird. Sie können feststellen, ob Interrupts nicht ausgeglichen sind, da /proc/interruptsnur Core 0 angezeigt wird, der alle IRQ-Kanäle bedient.

Andernfalls müssen Sie möglicherweise eine Erhöhung vornehmen, net.core.netdev_max_backlogwenn das System mehr als ein paar Gigabit Datenverkehr überträgt, und möglicherweise net.core.netdev_budget.

Wenn das nicht funktioniert, können Sie den Interrupt zwicken koaleszierende Werte mit ethtool -C.

Wenn die Netzwerkschnittstelle keine Paketverluste aufweist, überprüfen netstat -sSie, ob die Socket-Puffer gelöscht wurden. Diese werden mit Statistiken wie " pruned from receive queue" und " dropped from out-of-order queue" gemeldet .

Sie können versuchen, den Standard- und den Maximal-Socket-Puffer für das entsprechende Protokoll zu erhöhen (z. B. net.ipv4.tcp_rmemfür TCP).

Wenn die Anwendung ihre eigene Socket-Puffergröße festlegt, sind möglicherweise Konfigurationsänderungen für die Anwendung erforderlich. Wenn Ihre Anwendung fest codierte Socket-Puffergrößen aufweist, wenden Sie sich an den Hersteller der Anwendung.

Persönlich mag ich das Protokoll-Offloading auf Netzwerkkarten (Prüfsummen, Segmentierungs-Offloading, großes Empfangs-Offloading) nicht, da es mehr Probleme zu verursachen scheint, als es wert ist. Es ethtool -Kkann einen Versuch wert sein, mit diesen Einstellungen zu experimentieren.

Sehen Sie sich die Moduloptionen für Ihre Netzwerkkarte ( modinfo <drivername>) an, da Sie möglicherweise einige Funktionen ändern müssen. Ich habe beispielsweise festgestellt, dass die Verwendung von Intels Flow Director auf einem System, das einen großen TCP-Stream verarbeitet, wahrscheinlich die Effizienz dieses Streams beeinträchtigt. Deaktivieren Sie daher FDir.

Darüber hinaus werden Sie dieses spezifische System für seine spezifische Arbeitsbelastung von Hand abstimmen, was, wie ich vermute, den Rahmen Ihrer Frage sprengt.

suprjami
quelle
4

Ich beginne mit Paketerfassungstools wie: wireshark (unter Windows) und tcpdump (unter Linux).

Ich werde auch die Firewall-Konfiguration überprüfen (Host-Firewall sowie Netzwerk-Firewall).

Khaled
quelle
3

Isolieren und dann eliminieren.

Suchen Sie die kleinste Teilmenge der Pfade mit dem Problem. Testen Sie dazu verschiedene Kombinationen und / oder destillieren Sie Benutzerberichte. Vergessen Sie nicht, die Zeit in die Equasion einzubeziehen. Vielleicht ist es nur ein Paketverlust beim gesamten Datenverkehr zu einem bestimmten Netzwerk, oder vielleicht leiden nur die drahtlosen Clients. Berücksichtigen Sie verschiedene Verkehrstypen (Ratenbegrenzung für Pings). Finden Sie den zuverlässigsten und am einfachsten zu wiederholenden Weg, um es zu testen.

Beseitigen Sie dann mögliche Ursachen. Reduzieren Sie den Datenverkehr auf den Verbindungen (vorübergehend), entfernen Sie Störquellen aus dem Spektrum und trennen Sie bestimmte Clients. Schließlich finden Sie die Ursache des Problems.

Sie können manchmal Verknüpfungen verwenden, indem Sie sich Paket-Dumps ansehen oder Vermutungen anstellen (es ist immer bittorrent). Erklären Sie auch Ihrem Professor, dass serverfault fantastisch ist.

Joris
quelle
Es ist "Ausrotten" und nicht "Beseitigen".
Andrew Smith
0

Pings zeigen möglicherweise keinen Paketverlust, es sei denn, Sie senden große Pings! Ich hatte einen Paketverlust in meinem Netzwerk, der unsichtbar war, bis ich die Größe meines Ping-Pakets erhöhte.

Für Windows:

ping -n 30 -l <largevalue> <target>

Denn largevalueich habe 40960 (40k Packet) benutzt

Denn targetich habe die ersten paar IP-Adressen austracert google.com

(das war mein Router & Kabelmodem). Eines der Geräte weiter unten in der Kette hatte einen schrecklichen Paketverlust (> 60%) für große Pakete, aber 0% für kleine. Ich habe es durch einen Neustart behoben, aber es könnte auch ein Kabel oder etwas internes sein, das ausgetauscht werden muss.

Jonathan
quelle