End2End-Retransmit

Diese Seite beschreibt ein PowerShell-Script, welches die Windows Performance Counter zur Ermittlung von TCP Retransmissions nutzt. Die Aussagekraft ist zwar abhängig von aktiven TCP-Übertragungen aber es ist ein einfacher Indikator für die Qualität einer Übermittlungswege und ggfls. deren Einfluss auf die Datenübertragung.

Kurzfassung

In einem perfekten Netzwerk gehen Pakete nie verloren und sind auch nie zu spät am Ziel. In einem realen Netzwerk gibt es unterschiedliche Bandbreiten und Router, die Pakete über Queues weiterleiten. Wenn diese Warteschlangen voll sind, dann werden weitere eingehende Pakete verworfen. Der Absender merkt dies anhand der ausbleibenden Quittung, sendet das Paket erneut und passt auch seine Aussendegeschwindigkeit an. Genau diese Aktion wird von Windows mit einem Performance Monitor Counter erfasst.

Erfassung per Skript

Das Auslesen von Performance Countern ist aber mit PowerShell sehr einfach  und genau wie ich mit End2End-HTTP, End2End-Ping und anderen Programmen aus der Reihe entsprechende Tools gebaut habe, funktioniert das mit dem Retransmit-Counter auch recht gut. Das Skript liest einfach jede Sekunde den Counter aus und bereitet die 60 Messwerte einer Minute als Summe auf. Über eine einfache farbliche Gestaltung kann das Skript quasi von jedem Anwender, Helpdesk etc. direkt eingesetzt werden.

Damit solche Auswertungen überhaupt etwas anzeigen, muss der Client natürlich aktive TCP-Verbindungen habe, bei der möglichst viele Pakete übertragen werden. Sie können so eine Last z.B. mit End2End-HTTP oder End2End File erzeugen. Ein PING oder UDP-Transport bei VoIP werden nicht einbezogen. Es ist auch von Vorteil, wenn mehrere TCP-Verbindungen  parallel genutzt werden.

Hier zwei Beispiele

  • Fehlerarme Verbindung
    Mein Client hat hier über eine WAN-Verbindung überwiegend keine Fehler angezeigt.
  • Problematische Verbindung
    Sieh sehen hier schon sehr deutlich, dass hier mehrere Wiederholungen durch den TCP-Stack durchgeführt werden.

Skript

Das Skript selbst stelle ich hier als unsigniertes PowerShell-Skript bereit, welches Sie gerne an ihre Umgebung anpassen können.

end2end-retransmit.ps1

Es kann ohne Admin-Rechte einfach ausgeführt werden.

Weiterentwicklung

Kaum ist eine Version1.0 fertig, kommen natürlich weitere Wünsche für später:

  • Lokalisierung
    Aktuell fragt das Skript den deutschen String ab. Auf der Seite PowerShell Performance Counter habe ich schon beschrieben, wie ein Skript anhand der allgemeinen englischen Bezeichnung den lokalisierten Namen ermitteln kann.
  • Anzahl der Pakete erfassen
    Die Anzahl der Wiederholungen wird aussagekräftiger, wenn sie zur Gesamtanzahl der TCP-Pakete in Relation gesetzt wird. Genauso sollte die Messung aufzeigen, wenn keine oder zu wenig Pakete übertragen wurden und daher keine Aussagekraft hat.
  • Einbindung in End2End ClientCheck
    Ich könnte mir auch vorstellen, dass dieser Ermittlung der Counter in dem größeren Modul aufgeht
  • Zentrales Logging
    Sicher kann jede Monitoring-Lösung diesen Counter ebenfalls nutzen. Wenn das Skript aber z.B.: durch den Client-Helpdesk einfach im Rahmen einer Fehlersuche gestartet wird, könnte das Skript die Ergebnisse einfach an eine zentrale Stelle melden.

Weitere Links