Transmission Control Protocol/Überlastungskontrolle
Überlastungskontrolle
- Bei Paketvermittelten Netzen kann es zu Überlastung kommen
- Beim Zielhost
- Innerhalb des Netzwerkes
- Lösungen
Änderung der Fenstergröße
- Congestion Windows Size (Größe des Überlastungsfensters)
- Die tatsächliche Segmentgröße ist ein Limit aus beiden Werten
Slow Start with Congestion Avoidance
- Beim Verbindungsaufbau wird das Überlastungfenster auf die Größe eines Segmentes gesetzt
- Kommen die Quittungen des versandten Segmentes ohne Timeout an, wird die Größe des Überlastungsfensters verdoppelt
- Dies geschieht bis zum Schwellenwert von 64 KByte
- Danach pro erfolgreichem Sende- und Empfangszyklus um jeweils eine Segmentgröße
- Dieser Algorithmus ist für zuverlässige Verbindungen konzipiert und sollte z. B. bei WLANs deaktiviert werden
- Dort verringert er stark die effektive Bandbreite
Überlaststeuerung/Staukontrolle (Congestion Control)
- Wird eine Verbindung stark belastet, werden immer mehr Pakete verworfen
- Durch die Wiederholung steigt wiederum die Belastung, dies sorgt (ohne Maßnahmen) für einen Datenstau
- Die Verlustrate wird von einem IP-Netzwerk ständig beobachtet
- Normalerweise wird eine TCP/IP-Verbindung langsam gestartet (Slow-Start) und die Senderate schrittweise erhöht, bis zum Datenverlust
- Ein Datenverlust verringert die Senderate, ohne Verlust wird sie wiederum erhöht
Algorithmus zur Überlaststeuerung
Gehen bei einer bestimmten Fenstergröße Pakete verloren, kann das festgestellt werden, wenn der Sender innerhalb einer bestimmten Zeit (Timeout) kein ACK erhält
- Man muss davon ausgehen, dass das Paket aufgrund zu hoher Netzlast von einem Router im Netz verworfen wurde (Stau im Netz)
- Um den Stau aufzulösen, müssen alle beteiligten Sender ihre Netzlast reduzieren
Dazu werden im RFC 2581 vier Algorithmen definiert:
- slow start
- congestion avoidance
- fast retransmit
- fast recovery
- slow start und congestion avoidance werden zusammen verwendet
- fast retransmit und fast recovery werden zusammen verwendet, sind eine Erweiterung von slow start und congestion avoidance
Slow Start Slow Start und Congestion Avoidance
- Der Slow-Start-Algorithmus dient zur Bestimmung des congestion window
- Da die momentane Auslastung des Netzes nicht bekannt ist, wird mit kleinen Datenmengen begonnen
- Der Algorithmus startet mit einem kleinen Fenster, von einer Maximum Segment Size (MSS), in dem Datenpakete vom Sender zum Empfänger übertragen werden
- Der Empfänger sendet ACK an den Sender zurück
- Für jedes empfangene ACK wird die Größe des congestion window um eine MSS erhöht
- Dies führt innerhalb einer Roundtrip-Zeit zu einer Verdopplung des Congestion Windows
- Dieses exponentielle Wachstum wird so lange fortgesetzt, bis der Slow-Start Threshold erreicht wird
- Die Phase des exponentiellen Wachstums wird auch Slow Start Phase genannt
- Danach wird das Congestion Window nur noch um eine MSS erhöht, wenn alle Pakete aus dem Fenster erfolgreich übertragen wurden
- Es wächst pro Roundtrip-Zeit nur noch um eine MSS, also nur noch linear
- Diese Phase wird als Congestion Avoidance Phase bezeichnet
- Das Wachstum wird beendet, wenn das vom Empfänger festgelegte Empfangsfenster erreicht worden ist
- Es wächst pro Roundtrip-Zeit nur noch um eine MSS, also nur noch linear
Kommt es zu einem Timeout, wird das congestion window auf 1 zurückgesetzt, der slow-start threshold wird auf die Hälfte der gesendeten, unquittierten Pakete herabgesetzt (Flight Size)
- Die Phase des exponentiellen Wachstums wird also verkürzt
- Das Fenster wächst bei häufigen Paketverlusten nur langsam
Fast-Retransmit und Fast-Recovery
- Werden eingesetzt, um nach Paketverlust schneller auf die Stau-Situation zu reagieren
- Empfänger informiert den Sender, wenn Pakete außer der Reihe ankommen und somit dazwischen ein Paketverlust vorliegt
- Der Empfänger bestätigt das letzte korrekte Paket erneut für jedes weitere ankommende Paket außer der Reihe
- Man spricht dabei von Dup-Acks (duplicate acknowledgments)
- Mehrere aufeinanderfolgende Nachrichten, welche dasselbe Datensegment ACKen
- Der Sender bemerkt die duplizierten ACKS, und nach dem dritten Duplikat sendet er sofort, vor Ablauf des Timers, das verlorene Paket erneut
- Da nicht auf den Timerablauf gewartet werden muss, heißt das Prinzip Fast Retransmit
- Dup-Acks: auch Hinweise darauf, dass ein Paketverlust stattfand, dennoch die folgenden Pakete angekommen sind
- Das Sendefenster wird nach dem Fehler nur halbiert (kein Slow-Start)
Zusätzlich kann das Sendefenster noch um die Anzahl der Dup-Acks erhöht werden
- Jedes Dup-Ack steht für ein weiteres Paket, welches den Empfänger erreicht hat
- Dadurch kann nach dem Fehler schneller wieder die volle Sendeleistung erreicht werden
- Das Prinzip nennt man Fast-Recovery
Überlaststeuerung/Staukontrolle (Congestion Control)
Im Internet, in dem viele Netze mit unterschiedlichen Eigenschaften verbunden werden, ist Datenverlust einzelner Pakete durchaus normal.
- Wird eine Verbindung stark belastet, werden immer mehr Pakete verworfen, die entsprechend wiederholt werden müssen.
- Durch die Wiederholung steigt wiederum die Belastung, ohne geeignete Maßnahmen kommt es zu einem Datenstau.
Die Verlustrate wird von einem IP-Netzwerk ständig beobachtet.
- Abhängig von der Verlustrate wird die Senderate durch geeignete Algorithmen beeinflusst: Normalerweise wird eine TCP/IP-Verbindung langsam gestartet (Slow-Start) und die Senderate schrittweise erhöht, bis es zum Datenverlust kommt.
- Ein Datenverlust verringert die Senderate, ohne Verlust wird sie wiederum erhöht.
- Insgesamt nähert sich die Datenrate so zunächst dem jeweiligen zur Verfügung stehenden Maximum und bleibt dann ungefähr dort.
- Eine Überbelastung wird vermieden.
Algorithmus zur Überlaststeuerung
Gehen bei einer bestimmten Fenstergröße Pakete verloren, kann das festgestellt werden, wenn der Sender innerhalb einer bestimmten Zeit (Timeout) keine Bestätigung (ACK) erhält.
- Man muss davon ausgehen, dass das Paket aufgrund zu hoher Netzlast von einem Router im Netz verworfen wurde.
- Das heißt, der Puffer eines Routers ist vollgelaufen; es handelt sich hier sozusagen um einen Stau im Netz.
- Um den Stau aufzulösen, müssen alle beteiligten Sender ihre Netzlast reduzieren.
- Dazu werden im RFC 2581 vier Algorithmen definiert: slow start, congestion avoidance, fast retransmit und fast recovery, wobei slow start und congestion avoidance zusammen verwendet werden.
- Die zwei Algorithmen fast retransmit und fast recovery werden auch zusammen verwendet und sind eine Erweiterung der Algorithmen slow start und congestion avoidance.
Slow Start und Congestion Avoidance
Zu Beginn einer Datenübertragung dient der Slow-Start-Algorithmus zur Bestimmung des congestion window (wörtlich: Überlastfenster), um einer möglichen Überlastsituation vorzubeugen.
- Man möchte Staus vermeiden, und da die momentane Auslastung des Netzes nicht bekannt ist, wird mit zunächst kleinen Datenmengen begonnen.
- Der Algorithmus startet mit einem kleinen Fenster von einer MSS (Maximum Segment Size), in dem Datenpakete vom Sender zum Empfänger übertragen werden.
Der Empfänger sendet nun eine Bestätigung (ACK) an den Sender zurück.
- Für jedes empfangene ACK wird die Größe des congestion window um eine MSS erhöht.
- Da für jedes versandte Paket bei erfolgreicher Übertragung ein ACK geschickt wird, führt dies innerhalb einer Roundtrip-Zeit zu einer Verdopplung des Congestion Windows.
- In dieser Phase gibt es also ein exponentielles Wachstum.
- Wenn das Fenster beispielsweise das Versenden von zwei Paketen gestattet, so erhält der Sender auch zwei ACKs und erhöht das Fenster daher um 2 auf 4.
- Dieses exponentielle Wachstum wird so lange fortgesetzt, bis der sogenannte Slow-Start Threshold erreicht wird (engl. Vorlage:Lang ‚Schwelle‘).
- Die Phase des exponentiellen Wachstums wird auch Slow Start Phase genannt.
Danach wird das Congestion Window nur noch um eine MSS erhöht, wenn alle Pakete aus dem Fenster erfolgreich übertragen wurden.
- Es wächst also pro Roundtrip-Zeit nur noch um eine MSS, also nur noch linear.
- Diese Phase wird als Congestion Avoidance Phase bezeichnet.
- Das Wachstum wird beendet, wenn das vom Empfänger festgelegte Empfangsfenster erreicht worden ist (siehe Fluss-Steuerung).
Kommt es zu einem Timeout, wird das Vorlage:Lang wieder auf 1 zurückgesetzt, und der Vorlage:Lang wird auf die Hälfte der Flight Size (Flight Size ist die Anzahl an Paketen, die verschickt, aber noch nicht quittiert wurden)[1] herabgesetzt.
- Die Phase des exponentiellen Wachstums wird also verkürzt, so dass das Fenster bei häufigen Paketverlusten nur langsam wächst.
Fast-Retransmit und Fast-Recovery
Vorlage:Lang und Vorlage:Lang („schnelles Erholen“) werden eingesetzt, um nach einem Paketverlust schneller auf die Stau-Situation zu reagieren.
- Dazu informiert ein Empfänger den Sender, wenn Pakete außer der Reihe ankommen und somit dazwischen ein Paketverlust vorliegt.
- Hierfür bestätigt der Empfänger das letzte korrekte Paket erneut für jedes weitere ankommende Paket außer der Reihe.
- Man spricht dabei von Dup-Acks (Vorlage:Lang), also mehrere aufeinanderfolgende Nachrichten, welche dasselbe Datensegment ACKen.
- Der Sender bemerkt die duplizierten Bestätigungen, und nach dem dritten Duplikat sendet er sofort, vor Ablauf des Timers, das verlorene Paket erneut.
- Weil nicht auf den Ablauf des Timers gewartet werden muss, heißt das Prinzip Vorlage:Lang.
- Die Dup-Acks sind auch Hinweise darauf, dass zwar ein Paketverlust stattfand, aber doch die folgenden Pakete angekommen sind.
- Deshalb wird das Sendefenster nach dem Fehler nur halbiert und nicht wie beim Timeout wieder mit Slow-Start begonnen.
- Zusätzlich kann das Sendefenster noch um die Anzahl der Dup-Acks erhöht werden, denn jedes steht für ein weiteres Paket, welches den Empfänger erreicht hat, wenn auch außer der Reihe.
- Da dadurch nach dem Fehler schneller wieder die volle Sendeleistung erreicht wird, nennt man das Prinzip Vorlage:Lang.
Selective ACKs (SACK)
Vorlage:Lang werden genutzt, um noch mehr Kontrollinformationen über den Datenfluss vom Empfänger an den Sender zurückzuschicken.
- Dabei wird nach einem Paketverlust vom Empfänger im TCP-Optionsfeld ein zusätzlicher Header eingefügt, aus welchem der Sender genau ersehen kann, welche Pakete bereits angekommen sind und welche fehlen (im Gegensatz zu den standardmäßigen kumulativen ACKs von TCP, s. o.).
- Als bestätigt gelten die Pakete auch weiterhin erst dann, wenn der Empfänger dem Sender ein ACK für die Pakete übermittelt hat.
TCP-Tahoe und TCP-Reno
Bei den nach Orten in Nevada benannten TCP-Congestion-Control-Varianten Tahoe und Reno handelt es sich um zwei verschiedene Verfahren, wie TCP auf ein Überlast-Ereignis in Form von Timeouts oder Dup-Acks reagiert.
Das inzwischen nicht mehr verwendete TCP Tahoe reduziert, sobald ein Timeout vorliegt, das Congestion Window für die nächste Übertragungseinheit auf 1.
- Anschließend startet wieder der TCP-Slow-Start-Prozess (mit verringertem Threshold, s. u.), bis ein neues Timeout- oder DUP-Acks-Ereignis stattfindet oder aber der Schwellwert (Threshold) zum Übergang in die Congestion-Avoidance-Phase erreicht wird.
- Dieser Schwellwert wurde nach dem Auftreten des Überlast-Ereignisses auf die Hälfte der Größe des derzeitigen Congestion Window gesetzt.
- Der Nachteil dieses Verfahrens ist zum einen, dass ein Paketverlust nur durch einen Timeout festgestellt wird, mitunter also recht lange dauert, und zum anderen die starke Reduktion des Congestion Windows auf 1.
Die Weiterentwicklung von Tahoe ist TCP-Reno.
- Hierbei wird zwischen auftretenden Timeout- und Dup-Acks-Ereignissen unterschieden: Während TCP-Reno beim Auftreten eines Timeout genauso verfährt wie TCP Tahoe, wendet es beim Auftreten von drei doppelten Acks eine andere Variante für die Festlegung des nachfolgenden Congestion Windows an.
- Die grundlegende Idee dabei ist, dass der Verlust eines Segments auf dem Weg zum Empfänger nicht nur durch einen Timeout erkannt werden kann, sondern auch dadurch, dass der Empfänger mehrfach dieselben ACKs für das unmittelbar vor dem verlorengegangenen Segment zurückschickt (und zwar jedes Mal, wenn er ein weiteres Segment nach der „Lücke“ empfängt).
- Daher wird das nachfolgende Congestion Window auf die Hälfte des Wertes des Congestion Windows zum Zeitpunkt des Überlast-Ereignisses gesetzt; anschließend wird wieder in die Congestion Avoidance Phase übergegangen.
- Dieses Verhalten wird, wie oben im Artikel erwähnt, als Fast-Recovery beschrieben.