weidner/archives/2014/03/

Bestimmung der Bandbreite mit traceroute

Es gibt heute für fast jedes Problem Apps oder Programme, die mir helfen, alle möglichen Fragen zu beantworten. Das ist praktisch, wenn ich einfach nur das Problem gelöst, die Frage beantwortet haben will. Es ist eher unbefriedigend, wenn ich mehr wissen will: Wie geht das? Wie hat es das jetzt raus bekommen? Wenn ich also nicht nur ein paar Parameter sondern mehr vom System verstehen will.

Dann suche ich nach Basiswissen. Sei es weil ich gerade keinen Zugriff auf das passende Spezialprogramm habe, weil ich ihm nicht traue oder weil ich wissen will, wie es geht.

Bestimmung der Bandbreite mit PING

Ein Beispiel ist die Bestimmung der Bandbreite einer Verbindung.

In [1] beschreibt Joseph Sloan, wie man nur mit dem Programm ping, Bleistift und Papier die Bandbreite aller Segmente einer Verbindung zwischen zwei Rechnern bestimmen kann. Das Verfahren funktioniert folgendermaßen:

  1. Ich bestimme die Adressen der Router auf dem Pfad, den ich untersuchen will, zum Beispiel mit traceroute.

  2. Ich sende direkt an die Router PING-Pakete mit 100 Byte und 1100 Byte Paketgröße und notiere mir die RTT der Antworten.

  3. Für jedes Segment betrachte ich die RTT des Routers davor (1) und dahinter (2).

    Für jede Paketgröße bestimme ich die Differenz der Antwortzeiten für den vorderen und hinteren Router. Damit eliminiere ich den Einfluss des Pfades bis zum vorderen Router.

    Es bleiben zwei Zeiten, für das große und das kleine Datenpaket. Die Differenz zwischen diesen Zeiten ist die benötigte Zeit, um 1000 Byte über dieses Segment zu transportieren.

    Diese Zeit teile ich durch 2, weil mich nur die einfache Zeit für die Übertragung interessiert. Die Anzahl der Bytes (1000) multipliziere ich mit 8, da die Bandbreite üblicherweise in bps (bits per second) angegeben wird.

    Damit komme ich zu folgender Gleichung:

    BW = 16 * (Pl - Ps) / (t2l - t2s - t1l + t1s)

    Dabei sind Pl und Ps die Größe der großen (l) und kleinen (s) Datenpakete in Byte.

    t2l, t2s, t1l und t1s sind die RTT des Routers hinter dem Segment (2) und vor dem Segment (1) in Millisekunden.

    Das Ergebnis BW ist in kbps.

Falls ich mehrere Datenpakete mit der gleichen Größe gesendet habe, verwende ich für die Berechnung nicht den Durchschnitt sondern die kleinste RTT, weil diese der wahren, nicht mit anderen Übertragungen geteilten Bandbreite am nächsten kommt. Es versteht sich, dass ich für die Messung einen Zeitpunkt wähle, zu dem möglichst wenig anderer Datenverkehr die Messung beeinflusst.

asymmetrische Leitungen

Sehr schön, dachte ich. Damit kann ich nun herausfinden, wie groß die Bandbreite meines DSL-Anschlusses wirklich ist und sie mit dem vergleichen, was mein Provider sagt. Aber da gibt es ein Problem. Ich habe einen ADSL-Anschluss mit A wie asymmetrisch. Hier kann ich die RTT nicht einfach halbieren um die Dauer für die einfache Übertragungszeit zu erhalten.

In diesem Fall kommt mir traceroute zu Hilfe, das außerdem den Vorteil hat, dass oft auch die Router mit ICMP-Nachricht Typ 11 Code 0 (Time-to-live exceeded) antworten, die auf PING nicht reagieren, und diese ICMP-Pakete immer gleich groß sind. Ich brauche also die Zeit nicht zu halbieren.

Das Programm traceroute läßt mich die Größe der Datenpakete variieren, indem ich die gewünschte Paketgröße nach dem Zielrechner angebe.

Damit habe ich bereits alles, was ich brauche. Die oben angegebene Gleichung ändert sich zu:

BW = 8 * (Pl - Ps) / (t2l - t2s - t1l + t1s)

Messergebnisse

Und wie groß ist nun die Bandbreite?

$ traceroute -n www.heise.de 100
traceroute to www.heise.de (193.99.144.85), 30 hops max, 100 byte packets
1  111.111.111.111  0.750 ms  0.870 ms  1.185 ms
2  222.222.222.222  40.910 ms  43.301 ms  46.942 ms
...
$ traceroute -n www.heise.de 1100
traceroute to www.heise.de (193.99.144.85), 30 hops max, 1100 byte packets
1  111.111.111.111  3.189 ms  4.255 ms  4.268 ms
2  222.222.222.222  65.791 ms  88.670 ms  111.300 ms
...

111.111.111.111 steht für meinen Router, 222.222.222.222 für die PPPoE Gegenstelle. Ich nehme jeweils die kleinste der drei Zeiten und komme zu einer Bandbreite von ungefähr 350 kbps für den Upload.

Interessanterweise wird die Zeit hinter dem DSL-Segment immer größer. Ich vermute, dass das dadurch zustande kommt, dass traceroute die Datagramme schneller hintereinander sendet, als sie über die DSL-Leitung gehen. Da ich sowieso für die Berechnung die kleinste der drei Zeiten verwende, kann ich diesen Umstand erstmal außer Acht lassen.

Beim Download sind die Ergebnisse ungenauer, da traceroute teilweise verschiedene Router als letzten Hop vor meinen Router anzeigte. Mit ICMP als Protokoll (Option -I) waren die Ergebnisse ausgeglichener. Die errechnete Übertragungsrate betrug im Download ebenfalls ungefähr 350 kbps, was auf eine suboptimale Verbindung schließen läßt. Die errechnete Bandbreite für das Segment unmittelbar davor betrug 90000 kbps, was auf eine 100 Mbps Verbindung schließen läßt und plausibel klingt. Ich werde diese Messung auf jeden Fall zu anderen Tageszeiten wiederholen, um zu sehen, ob das Ergebnis vielleicht abhängig von der Auslastung der Leitung sein könnte.

[1] Sloan, Joseph D.; Network Troubleshooting Tools; O' Reilly & Associates; Sebastopol; 2001; ISBN 0-596-00186-X

Posted 2014-03-09
Tags: