Zusammenfassung

  • TIME-WAIT ist eine zeitliche Integritätsgrenze: Nach einem aktiven Verbindungsabbau muss der Endpunkt den Zustand gemäß RFC 9293 für 2xMSL bewahren, damit Pakete der alten Verbindung sterben, bevor sie mit der nächsten verwechselt werden können.
  • In der von RFC 1337 beschriebenen Kette löst ein nicht akzeptables altes Segment ein ACK aus; der bereits geschlossene Gegenüber antwortet mit RST, und die Annahme dieses Resets löscht TIME-WAIT vor Ablauf der Quarantäne.

Das Memo demonstrierte drei mögliche Folgen nach einer schnellen Neueröffnung, jedoch in einer absichtlich extremen Simulation. Es ist ein Existenzbeweis, keine Messung heutiger Häufigkeit.

Wenn eine Anwendung fertig ist, ist das Netz noch lange nicht leer. Ein Datensegment kann hinter einer überlasteten Strecke verzögert sein; ein dupliziertes ACK kann nach einem längeren Pfad verspätet eintreffen. Diese Pakete wissen weder, dass die Sockets geschlossen wurden, noch dass dieselbe Kombination aus Adressen und Ports bald eine andere Verbindung bezeichnen könnte.

TIME-WAIT hält diese beiden Geschichten auseinander. Der aktiv schließende Endpunkt verwirft seinen Verbindungszustand nicht unmittelbar nach dem letzten Austausch. RFC 9293 macht den Preis ausdrücklich: Er muss für die doppelte maximale Segmentlebensdauer, also 2xMSL, in TIME-WAIT bleiben. Das ist keine aufgeschobene Aufräumarbeit. Die Wartezeit soll alten Duplikaten erlauben, aus dem Netz zu verschwinden, bevor dasselbe 4-Tupel wieder Bedeutung erhält.

Die unbequeme Beobachtung von RFC 1337 lautet, dass ausgerechnet normale TCP-Reaktionen auf veralteten Verkehr diese Quarantäne zerstören konnten.

Eine korrekte Antwort erzeugt den falschen Reset

Die Kette beginnt, wenn ein altes Daten- oder ACK-Segment den Endpunkt A erreicht, während A noch in TIME-WAIT steht. Das Segment ist nicht akzeptabel, etwa weil seine Sequenznummer oder sein Zeitstempel zu einer anderen Verbindungsgeneration gehört. A antwortet mit einem ACK, das seine aktuellen Werte SND.NXT und RCV.NXT trägt.

Endpunkt B hat den Zustand dieser Verbindung bereits gelöscht. Er erhält ein ACK, das keiner bekannten Verbindung zugeordnet werden kann, und sendet ein RST zurück. Behandelt A diesen Reset als Grund, TIME-WAIT zu verlassen, löscht es genau den Zustand, der die alten Pakete überleben sollte. Das veraltete Segment hat A nicht direkt zum Schließen aufgefordert. Es brachte A zum Sprechen; As präzise Antwort veranlasste den zustandslosen Gegenüber zum zerstörerischen Steuersignal, und dieses Signal beendete die Wartezeit. RFC 1337 nannte diese Kette TIME-WAIT Assassination.

Die Assassination allein bedeutet noch nicht, dass eine neue Anwendung alte Daten erhalten hat. Sie entfernt die Grenze, die das verhindern sollte. Für den nachfolgenden Schaden muss dieselbe Verbindungsidentität wiederverwendet werden, bevor die Duplikate abgelaufen sind. Die Sequenzräume beider Generationen müssen sich genügend überlappen, und ein altes Paket muss in einen Bereich fallen, den der neue Zustand als gültig betrachtet.

Das Memo nennt drei Ergebnisse. Bei H1 werden Daten der vorherigen Verbindung irrtümlich angenommen. H2 lässt die Endpunkte auseinanderlaufen; mit dem damals spezifizierten Verhalten könnten sie einen nie gesendeten Zustand quittieren und in eine dauerhafte ACK-Schleife geraten. H3 beendet die neue Verbindung, wenn ein altes Segment während des Aufbaus einen Reset auslöst, obwohl die Verbindung bereits erfolgreich geöffnet zu sein schien.

Diese Zusatzbedingungen erklären, warum RFC 1337 H1, H2 und H3 für weniger wahrscheinlich hält als die Assassination selbst. Das vorzeitige Löschen von TIME-WAIT reicht nicht aus. Hinzukommen müssen schnelle Wiederverwendung, überlappende Sequenzräume und das richtige Duplikat im richtigen Bereich. Das Dokument reproduzierte alle vier Phänomene mit einem TCP-Stack von SunOS 4.1.1, allerdings in einer Simulation, die Segmente massenhaft duplizierte und gezielt auf die nötigen Zufälle abgestimmt war. Das beweist die Möglichkeit des Mechanismus; es misst weder seine heutige Verbreitung noch das Verhalten eines bestimmten aktuellen Produkts.

Drei Abhilfen mit unterschiedlicher Reichweite

Der erste Vorschlag von RFC 1337 ist der direkteste: RST-Segmente in TIME-WAIT ignorieren. Wird die im Memo angenommene MSL von zwei Minuten eingehalten, soll diese Wahl H1, H2 und H3 vermeiden. Die Begründung folgt dem Zweck des Zustands. Wenn die Wartezeit alten, nicht authentisierten Verkehr sterben lassen soll, darf eben dieser Verkehr die Frist nicht verkürzen.

Die Empfehlung hat dennoch eine klare Grenze. RFC 1337 ist ein Informational-Dokument und fordert längere Produktionstests, um unerwartete Folgen der Änderung aufzudecken. Es belegt weder, dass alle Implementierungen die Regel übernommen haben, noch dass das Ignorieren eines Resets in jeder Architektur folgenlos ist.

Der zweite Ansatz nutzt TCP-Zeitstempel und PAWS. Bleibt TIME-WAIT bestehen, bis die Uhren fortgeschritten sind, kann das SYN der neuen Verbindung einen jüngeren Zeitstempel als die alten Segmente tragen; damit lässt sich H1 blockieren. Die Abhilfe ist jedoch nur teilweise. Ein altes ACK in TIME-WAIT kann ein neues ACK mit aktuellem Zeitstempel hervorrufen. Dieses „neu erzeugte alte Duplikat“ kann PAWS in der nächsten Verbindung passieren, sodass H2 und H3 nicht zwingend verschwinden.

Der dritte Ansatz erweitert Sequenznummern auf 64 Bit. Der größere Raum würde die Wiederverwendung desselben Bereichs stark verzögern, verhindert aber nicht, dass ein RST TIME-WAIT vorzeitig löscht. RFC 1337 behandelt dies daher als bedeutende Protokolländerung, die zusammen mit weiteren Parameteränderungen die Folgegefahren vermeiden könnte, nicht als eigenständige Lösung der Assassination.

Die heutige Basisspezifikation bewahrt die Spannung

RFC 9293, der aktuelle Internet Standard für TCP, hält am 2xMSL-TIME-WAIT nach aktivem Schließen fest. Ein neues SYN desselben Gegenübers darf direkt angenommen werden, aber nur wenn die neue ISN größer ist als die größte Sequenznummer der vorherigen Generation und der Endpunkt in TIME-WAIT zurückkehrt, falls sich das SYN als altes Duplikat erweist. Für Server mit hohen Verbindungsraten verweist der Text außerdem auf einen verbesserten, zeitstempelgestützten Algorithmus.

Die Basiszustandsmaschine enthält zugleich weiterhin den Ausgang, der das Problem relevant macht. Nach den Akzeptabilitätsprüfungen führt ein in TIME-WAIT verarbeitetes RST zu CLOSED und löscht den Kontrollblock. Eine erneute Übertragung des entfernten FIN wird dagegen bestätigt und startet den 2xMSL-Timer neu. Zwei Steuersegmente im selben Zustand können über verschiedene Zweige die Grenze beenden oder verlängern.

„TIME-WAIT reduzieren“ ist deshalb keine vollständige Architekturentscheidung: Die Aussage nennt nicht den Beleg, der anstelle der Zeit die Verbindungsgenerationen trennt. „Mehr Zustand behalten“ genügt ebenfalls nicht, wenn unklar bleibt, ob dieser Zustand den Signalen widersteht, die ihn löschen können. Die eigentliche Frage lautet, welcher Beweis stark genug ist, eine Quarantäne zu beenden, deren Zweck gerade darin liegt, alten, nicht authentisierten Verkehr zu überleben.

Die einzigen Quellen dieses Pakets sind RFC 1337, im Mai 1992 als Informational veröffentlicht, und RFC 9293, der im August 2022 als Internet Standard erschien. Sie beschreiben Mechanismus, Bedingungen und TCP-Grundregeln; sie belegen weder eine heutige Häufigkeit noch das Verhalten eines namentlich genannten Produkts.