# Network congestion avoidance

Network congestion avoidance („Vermeidung von Netzwerküberlastung“) ist ein Vorgang in Telekommunikationsnetzen, um Staus vorzubeugen. Ursächliches Problem ist die Begrenztheit aller Ressourcen, insbesondere die verfügbare Kanalkapazität und die zur Verfügung stehende Rechenleistung in den einzelnen Routern. Folgen einer Belastung über die verfügbare Kapazität hinaus sind eine Erhöhung der Laufzeitverzögerung, mehr oder weniger starke Schwankungen der Laufzeit (engl. Jitter) sowie der Verlust von Datenpaketen.
Die absichtliche Überbelastung einzelner oder mehrere Netzwerkkomponenten wird als (Denial of Service)-Attacke bezeichnet und dient dazu, einzelne Hosts oder Teile eines Netzwerks unbrauchbar zu machen.
Verfahren zur Vermeidung von Überlastsituationen setzen an verschiedenen Punkten an; jedes weist spezifische Vor- und Nachteile auf.

## Ende-zu-Ende Strategien

Traffic wird an einem Quell-Host erzeugt und findet seinen Weg durchs Netzwerk über Hops zu seinem Ziel-Host. Sowohl der Ziel-Host als auch jedes einzelne Hop kann dem Quell-Host mitteilen die Senderate zu drosseln. Verbindungsorientierte Protokolle wie TCP überwachen im Allgemeinen die Anzahl fehlerhafter oder verlorengegangener Datenpakete sowie Verzögerungen, um die Sendegeschwindigkeit adäquat anpassen zu können.

### TCP/IP-basiertes Vermeiden von Überlast

Dieser Effekt tritt auf, wenn viele parallele TCP-Verbindungen in einer Routerwarteschlange gelöscht werden, weil der Puffer keine Dienstklassen unterstützt, sondern einfach die letzten Elemente der Schlange löscht. Daraufhin drosseln viele (alle) TCP-Verbindungen fast gleichzeitig ihren Sendestrom, so dass der Stau beseitigt wird. Allerdings steigern die Verbindungen nach einiger Zeit ihre Senderate, so dass es erneut zu einer Überlastsituation kommen kann. Diese Oszillation (wellenartiges auf und ab) aller TCP-Verbindungen wird TCP Global Synchronization genannt und synonym für queue tail-drop verwendet, also das Löschen von Paketen am Ende der Warteschlange ohne Berücksichtigung von Dienstklassen.
* siehe Explicit Congestion Notification (ECN)
* siehe TCP Global Synchronization

## Hop-basierte Strategien

Jedes Netzwerkelement das nicht transparent ist, wird als Hop bezeichnet. Ein Router ist ein Netzwerkelement; auf jedem Router läuft ein Betriebssystem, welches die Hardware ansteuert und hat entsprechend Möglichkeiten in den Prozess der Network congestion avoidance miteinbezogen zu werden. Einerseits durch die Wahl des Routing Protokolls, andrerseits durch AQM:

### Routing-Protokoll

Gemäß dem eingesetzten Routing-Protokoll entscheidet ein Router, über welche der ihm verfügbaren und bekannten Router ein jedes Paket weitergeleitet wird.

### Bufferbloat avoidance

Puffer sind notwendig und sinnvoll, sie dienen dem Auffangen von Lastspitzen. Allerdings gibt es in jedem Router mehrere Puffer, und ihre Größe ist im Laufe der Zeit angewachsen. Im Falle eines Staus füllen sich sämtliche Puffer und es kommt zu den benannten unerwünschten Effekten (Bufferbloat), es ist daher notwendig die Größe eines jeden Puffers möglichst geschickt an die jeweiligen Bedürfnisse anzupassen.

### Active Queue Management (AQM)

Der Netzwerk-Scheduler verwaltet die im Sendewarteschlangen-Puffer befindlichen Datenpakete. Zu kleine Datenpuffer führen zu Paket-Verlust bei Lastspitzen, zu große Puffer führen zu einer erhöhten Laufzeitverzögerung, wenn sie volllaufen. Der Netzwerk-Scheduler kann entsprechend dem eingesetzten Algorithmus sowohl gezielt Pakete im Puffer verwerfen (= löschen) als auch die Reihenfolge der im Puffer befindlichen Pakete ändern. Üblich ist z. B. die Priorisierung von Datenpaketen, die zu einer Echtzeit-Verbindung gehören, bspw. IP-Telefonie-Datenpakete oder Pakete, die zu einer SSH-Verbindung gehören.