Anhang C. TCP-Verifizierung
Dieser Anhang bietet Richtlinien und Testmethoden zur Überprüfung der Korrektheit von TCP-Implementierungen.
Verifizierungsmethoden
1. Unit-Tests
Header-Parsing:
- Korrekte Analyse von TCP-Header-Feldern
- Optionsverarbeitung
- Prüfsummenberechnung
Zustandsmaschine:
- Überprüfung jedes Zustandsübergangs
- Grenzwert-Tests
- Ablehnung ungültiger Zustandsübergänge
Sequenznummern:
- Unvorhersehbarkeit der ISN-Generierung
- Umgang mit Sequenznummern-Überlauf
- Duplikaterkennung
2. Integrationstests
Verbindungslebenszyklus:
- Normale Verbindungsherstellung (Drei-Wege-Handshake)
- Datenübertragung
- Normale Verbindungsbeendigung (Vier-Wege-Handshake)
Fehlerbehandlung:
- Simulation von Paketverlust
- Ungeordnete Pakete
- Doppelte Pakete
- Beschädigte Prüfsummen
3. Interoperabilitätstests
Verifizierung mit Anderen Implementierungen:
- Interoperabilität mit wichtigen TCP-Stacks (Linux, Windows, BSD, macOS)
- Tests unter verschiedenen Netzwerkbedingungen
- Verschiedene MTU-Größen
Erkennung Häufiger Probleme
1. Sequenznummern-Probleme
Testszenarien:
1. Sicherstellen, dass dieselbe ISN nicht für mehrere Verbindungen generiert wird
2. Sequenznummern-Überlauf korrekt behandeln
3. Sequenznummern außerhalb des Bereichs ablehnen
Verifizierungsmethoden:
- ISN-Vorhersagbarkeitstest
- Langzeitverbindungstests
- Simulation böswilliger Sequenznummern-Angriffe
2. Prüfsummenfehler
Testszenarien:
1. Alle gesendeten Segmente mit gültiger Prüfsumme
2. Segmente mit ungültiger Prüfsumme ablehnen
3. Korrekte Pseudo-Header-Berechnung für IPv4 und IPv6
3. Fensterverwaltung
Testszenarien:
1. Empfangsfenstergröße respektieren
2. Korrektes Verhalten der Fensterskalierung (falls aktiviert)
3. Behandlung von Null-Fenster-Situationen
4. Neuübertragungsmechanismus
Testszenarien:
1. Neuübertragung verlorener Segmente
2. Angemessene Timeout-Berechnung (RTO)
3. Exponentielles Backoff
4. Schnelle Neuübertragung (nach 3 doppelten ACKs)
Leistungsverifizierung
1. Durchsatz-Tests
Messwerte:
- Maximaler Durchsatz mit verschiedenen Fenstergrößen
- Beziehung zwischen RTT und Durchsatz
- Effizienz der Staukontrolle
Testumgebung:
- Niedrig-Latenz-Netzwerk (< 10ms RTT)
- Mittel-Latenz-Netzwerk (50-100ms RTT)
- Hoch-Latenz-Netzwerk (> 200ms RTT)
- Verschiedene Paketverlust raten (0%, 0.1%, 1%, 5%)
2. Latenz-Tests
Messwerte:
- Verbindungsaufbauzeit
- Zeit bis zum ersten Byte (TTFB)
- Datenzustellungslatenz
3. Staukontroll-Verifizierung
Tests:
1. Slow-Start-Verhalten
2. Stau-Vermeidung
3. Schnelle Neuübertragung und schnelle Wiederherstellung
4. RFC 5681-Konformität
Sicherheitsverifizierung
1. ISN-Vorhersagbarkeitstest
Methode:
# Pseudo-Code
isns = []
for i in range(1000):
conn = create_connection()
isns.append(get_initial_sequence_number(conn))
close(conn)
# Überprüfen, dass ISNs statistisch unvorhersehbar sind
assert is_random(isns) == True
assert entropy(isns) > MIN_ENTROPY
2. RST-Angriffsschutz
Testszenarien:
1. RST-Segmente mit Sequenznummern außerhalb des Bereichs ignorieren
2. Nur RSTs innerhalb des gültigen Fensters akzeptieren
3. RFC 5961-Richtlinien folgen
3. SYN-Flood-Schutz
Tests:
1. SYN-Cookies oder äquivalenten Mechanismus implementieren
2. Systemresilienz unter massiver SYN-Anfragelast
3. Sicherstellen, dass legitime Verbindungen hergestellt werden können
Stress-Tests
1. Gleichzeitige Verbindungen
Tests:
- Tausende gleichzeitige Verbindungen erstellen
- Korrekte Datenzustellung auf allen Verbindungen überprüfen
- Speicherlecks überwachen
- CPU-Auslastung messen
2. Langzeitverbindungen
Tests:
- Verbindungen über Stunden/Tage aufrechterhalten
- Sequenznummern-Überlauf überprüfen
- Speichernutzungsstabilität
- Keine Leistungsdegradation sicherstellen
Grenzwert-Tests
1. Extremfälle
- Null-Fenster-Situationen
- Maximale Segmentgröße
- Minimale Segmentgröße (1 Byte)
- Fragmentierung
- MTU-Änderungen
2. Ungültige Eingaben
- Fehlerhafte Header-Länge
- Ungültige Flag-Kombinationen
- Werte außerhalb des Bereichs
- Gesetzte reservierte Bits
Protokollkonformitätstests
1. RFC 9293-Konformität
Verifizierungselemente:
- Alle MUST-Anforderungen sind implementiert
- SHOULD-Anforderungen sind implementiert oder dokumentiert
- Bekannte Abweichungen sind klar dokumentiert
2. Konformität mit Verwandten RFCs
- RFC 5681: Staukontrolle
- RFC 7323: Fensterskalierung und Zeitstempel
- RFC 2018: SACK
- RFC 3168: ECN
- RFC 5961: Blind-Angriffsschutz
Debug-Tools
1. Paket-Erfassung
Tools:
- Wireshark: Paket-Inspektion
- tcpdump: Kommandozeilen-Erfassung
- tshark: Programmatische Analyse
2. Traffic-Simulation
Tools:
- packetdrill: TCP-Verhaltens-Skripterstellung
- hping3: Benutzerdefinierte Paketgenerierung
- netcat: Grundlegende Verbindungstests
3. Netzwerk-Emulation
Tools:
- netem (Linux): Verzögerung, Paketverlust, Bandbreitenbeschränkung
- dummynet (FreeBSD): Netzwerkbedingungssimulation
Verifizierungsbericht
Inhalte für Testbericht:
-
Implementierungsdetails:
- TCP-Stack-Version
- Unterstützte Optionen
- Bekannte Einschränkungen
-
Testergebnisse:
- Erfolgreiche/fehlgeschlagene Testfälle
- Leistungsmetriken
- Interoperabilitätsergebnisse
-
Konformitätserklärung:
- RFC 9293-Konformitätsgrad
- Unterstützte Erweiterungen
- Abweichungen oder Einschränkungen
-
Bekannte Probleme:
- Ungelöste Bugs
- Leistungsengpässe
- Kompatibilitätsprobleme
Hinweis: TCP-Verifizierung ist ein fortlaufender Prozess. Regelmäßige Tests und Updates gewährleisten die Robustheit und Sicherheit der Implementierung.