UDP-Traffic stabiler gestalten

26/04/2008 - 16:11 von Opossum | Report spam
Hallo zusammen,

ich habe folgendes Setup: Eine Reihe von Messgeràten sendet über das
Internet Pakete mit Messwerten an mehrere Server. Dies geschieht über UDP.
Die Server fordern fehlende Messwerte nach Ablauf einer gewissen Zeitspanne
erneut an, auch dies geschieht über UDP.

Wenn nun irgendwo ein Router anfàngt, Pakete zu droppen, weil seine Queue
vollgelaufen ist, führt dies dazu, dass sàmtliche Empfànger anfangen,
Pakete erneut anzufordern, was wiederum dazu führt, dass der Traffic
sprungartig in die Höhe schnellt und dass der betreffende Router noch mehr
überlastet ist. Die Qualitàt der Datenübertragung wird so also künstlich
verschlechtert, aus einigen gedroppten Paketen werden so viele gedroppte
Pakete.

Technische Änderungen an den Messgeràten selbst sind kaum möglich, eine
Umstellung des Verkehrs auf TCP oder eine Änderung des Sendeverhaltens
darum nicht ohne weiteres machbar. Da die Empfànger komplett in Software
geschrieben sind, ist das aus meiner Sicht der einfachste Punkt, wo man
ansetzen könnte. Durch die Änderung des Algorithmus, mit dem Retransmits
angefordert werden, kann man zwar Congestion nicht grundsàtzlich vermeiden,
aber wenigstens die verstopfte Stelle nicht durch zusàtzliche Pakete weiter
überlasten.

Meine Frage: Was gàbe es für Möglichkeiten, den "naiven"
Retransmit-Algorithmus zu optimieren, so dass kurzfristig überlasteten
Verbindungen möglichst nicht noch mehr Pakete verschickt werden?

Die Eckwerte sollten sein:

- Am Schluss müssen alle Daten vorhanden sein. Beim Absender können sie ca.
zwei Stunden lang angefordert werden.
- Der erste Retransmit-Request sollte innerhalb von maximal einer halben
Minute erfolgen.
- Die verschiedenen Empfànger verschicken unabhàngig voneinander Requests,
d.h. ohne sich untereinander abzusprechen.

Mein erster Gedanke war, den Zeitpunkt wann zum ersten Mal ein Retransmit
angefordert wird, zu randomisieren, d.h. in der Art
request_time = rand(5000,30000);

wobei request_time die Anzahl Millisekunden nach dem erwarteten Eintreffen
des Paketes sind. Dadurch wird vermieden, dass vermisste Pakete ohne
Wartezeit sofort wieder angefordert werden, andererseits wird durch die
Randomisierung auch erreicht, dass sich die Retransmits auf eine Zeitspanne
von etwa 25 Sekunden verteilen.

Gibt es noch andere Verfahren, die für diesen Zweck in Frage kommen könnten?

Gruss

Opossum°
Ich bin hier nur das Opossum°.
 

Lesen sie die antworten

#1 Marc Haber
26/04/2008 - 16:42 | Warnen spam
Opossum wrote:
Technische Änderungen an den Messgeràten selbst sind kaum möglich, eine
Umstellung des Verkehrs auf TCP oder eine Änderung des Sendeverhaltens
darum nicht ohne weiteres machbar.



Das ist bedauerlich, denn die Benutzung von UDP für die Übermittlung
von Daten, deren Verlust ein Problem darstellt, ist IMO ein
Designfehler.

Wenn auch Hardware eingesetzt werden darf, würde ich den Messgeràten
einen Booksize-PC, einen OpenWRT-Router oder ein Routerboard
(http://www.routerboard.com/) zur Seite stellen, der auf der einen
Seite die Daten per UDP abholt und sie dann unter Benutzung eines
weniger zickigen Protokolls (was vielleicht auch OpenVPN über TCP sein
könnte, aber das ist ein Schnellschuss) zu den eigentlichen Empfàngern
weiterschiebt oder sie zur Abholung bereitstellt.

Abhàngig von der Auswahl dieser Hardware hat die vielleicht auch genug
Speicher, um die Datenreihen von einigen Tagen als lokales Backup
weiter vorzuhalten.

Grüße
Marc

Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834

Ähnliche fragen