Zum Hauptinhalt springen

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:

  1. Implementierungsdetails:

    • TCP-Stack-Version
    • Unterstützte Optionen
    • Bekannte Einschränkungen
  2. Testergebnisse:

    • Erfolgreiche/fehlgeschlagene Testfälle
    • Leistungsmetriken
    • Interoperabilitätsergebnisse
  3. Konformitätserklärung:

    • RFC 9293-Konformitätsgrad
    • Unterstützte Erweiterungen
    • Abweichungen oder Einschränkungen
  4. 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.