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.
Bitte lesen Sie die technischen Details dazu auf TCP Retransmit Monitoring.
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.
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.