Ein Teil des ganzen Bazens

Congestion Avoidance

Um Überlastsituationen im Netz zu vermeiden wird bei TCP der Congestion Avoidance Algorithmus angewendet.

Eine Überlastsituation kann sich durch zwei ACKs mit der selben Nummer oder dem Ablauf des RTO (Retransmission Timeout) des Senders bemerkbar machen.

Funktionsweise

Beim Eintreffen eines doppelten ACKs wird die aktuelle Größe des Congestion Windows halbiert und die die sstresh (Slowstart Treshold) auf den gleichen Wert gesetzt (siehe Slow Start Congestion Avoidance). Das Congestion Window wird nun linear wieder vergößert (ein MSS pro Roundtrip-Zeit). Dieses Verfahren wird bei jedem doppelten ACK angewendet.

Wenn dir RTO abläuft wird von einer extremeren Überlast ausgegangen. Das Congestion Window wird wieder auf 1 MSS gesetzt und der normale Slow-Start Algorithmus angewendet. Die sstresh wird auf die Hälfte der aktuellen Fenstergröße reduziert.

Optimierung: Fast Retransmit / Fast Recovery

Bei einzelnen Paket Verlusten ist die Verkleinerung des CW wie beim normalen CA-Algorithmus viel zu massiv, deswegen wird folgende Änderung angewendet:

Ein doppeltes ACK muss nicht zwingend durch einen Verlust eines Pakete enstanden sein, es kann auch passieren, dass dies durch eine Umordnung hervorgerufen wird. Deswegen wartet der Sender nur kurz bei einem doppelten ACK um abzuwarten, ob das fehlende ACK nicht doch gleich kommt. Ist dies nicht der Fall wird sofort ab dem verlorenen Paket neu übertragen. Der Congestion Avoidance Algorithmus tritt in Kraft, das Congestion Window wird aber nur auf sstresh + 3xMSS reduziert. Der Vorteil ist, dass bei diesem Verfahren die RTO nicht abläuft und das Congestion Window so nicht so stark verkleinert wird.