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:
- Behandle beides als Überlastungssignale
- Reduziere cwnd nur einmal für die schwerste Bedingung
- 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