Zum Hauptinhalt springen

6.1.2. Der TCP-Sender (The TCP Sender)

Dieser Abschnitt spezifiziert das Verhalten des TCP-Datensenders bei Verwendung von ECN.

6.1.2.1. Setzen des ECN-Feldes in ausgehenden Paketen

Nach erfolgreicher ECN-Verhandlung:

Der TCP-Sender MUSS:

  • ECT(0) oder ECT(1) in allen Datenpaketen setzen
  • Not-ECT in reinen ACK-Paketen verwenden (optional ECT verwenden)
  • Kein CE in ausgehenden Paketen setzen

Ausnahmen:

  • SYN, SYN-ACK, und reine ACKs KÖNNEN Not-ECT verwenden
  • Neuübertragene Segmente - siehe Abschnitt 6.1.5

6.1.2.2. Empfang von ECN-Echo (ECE)

Wenn der Sender ein Segment mit gesetztem ECE-Flag empfängt:

Schritt 1: Erkennung der Überlastungsbenachrichtigung

  • Der Sender MUSS dies als Überlastungssignal behandeln
  • Äquivalent zum Empfang einer Benachrichtigung über ein einzelnes verworfenes Paket

Schritt 2: Reduzierung des Überlastungsfensters

Der Sender MUSS sein Überlastungsfenster (cwnd) reduzieren:

  • Gleiche Reaktion wie bei Paketverlust-Erkennung
  • Typischerweise: cwnd = cwnd / 2 (plus andere standardmäßige TCP-Anpassungen)
  • Slow-Start-Schwellenwert (ssthresh) MUSS ebenfalls angepasst werden

Schritt 3: Setzen des CWR-Flags

  • Der Sender MUSS das CWR-Flag im nächsten neuen Datensegment setzen
  • Dies signalisiert dem Empfänger: "Ich habe die ECE-Benachrichtigung empfangen und reagiert"
  • CWR bleibt gesetzt, bis bestätigt wird, dass der Empfänger es empfangen hat

6.1.2.3. Überlastungsfenster-Reduzierung

Die spezifische cwnd-Reduzierung SOLLTE:

  • Äquivalent zur Fast-Recovery-Reaktion auf ein einzelnes verworfenes Paket sein
  • Für Standard-TCP (Reno): ssthresh = max(FlightSize/2, 2*SMSS)
  • Dann: cwnd = ssthresh + 3*SMSS (Fast Recovery)

Wichtig: Die Reaktion SOLL NICHT:

  • Schwächer sein als die Reaktion auf Paketverlust
  • Aggressiver sein als die Reaktion auf Paketverlust

6.1.2.4. Häufigkeit der cwnd-Reduzierung

Nachdem cwnd als Reaktion auf ECE reduziert wurde:

Der Sender SOLL NICHT:

  • cwnd mehr als einmal pro RTT reduzieren
  • Dies verhindert Überreaktion auf mehrere CE-markierte Pakete in derselben Fenster

Implementierung:

  • Sender KANN eine Variable verfolgen, die die letzte cwnd-Reduzierung aufzeichnet
  • Zusätzliche ECE-Benachrichtigungen innerhalb derselben RTT werden anerkannt (mit CWR), aber führen nicht zu weiterer cwnd-Reduzierung

6.1.2.5. Interaktion mit Fast Retransmit/Fast Recovery

Wenn sowohl Paketverlust (durch doppelte ACKs) als auch ECE-Benachrichtigung auftreten:

  1. Behandle beides als Überlastungssignale
  2. Reduziere cwnd nur einmal für die schwerste Bedingung
  3. Gib Paketverlust Priorität wenn beide gleichzeitig auftreten

6.1.2.6. ECN während Slow Start

Während der Slow-Start-Phase:

  • ECE-Benachrichtigung MUSS zur Slow-Start-Beendigung führen
  • Wechsel zu Congestion Avoidance
  • cwnd und ssthresh wie bei Paketverlust-Detektion anpassen

6.1.2.7. ECN während Congestion Avoidance

Während Congestion Avoidance:

  • ECE-Benachrichtigung führt zu cwnd-Reduzierung
  • Dann Wiedereintritt in Congestion Avoidance (oder Fast Recovery)
  • Gleiche Behandlung wie bei einzelnem Paketverlust

6.1.2.8. Zeitgebung und ACK-Verarbeitung

Der Sender MUSS:

  • Jedes empfangene ACK auf das ECE-Flag prüfen
  • Auf das erste ECE in einem RTT-Fenster reagieren
  • CWR setzen, um Bestätigung zu signalisieren
  • CWR-Flag löschen, nachdem bestätigt (implizit, wenn ECE gelöscht wird)

6.1.2.9. Persistenz von CWR

Das CWR-Flag:

  • MUSS im nächsten neuen Datensegment nach Empfang von ECE gesetzt werden
  • KANN in nachfolgenden Segmenten gesetzt bleiben
  • Wird normalerweise gelöscht, wenn ECE nicht mehr gesetzt ist im empfangenen ACK