Zusammenfassung

  • Ein UDP-Datagramm kann mehrere vollständige QUIC-Pakete enthalten, darunter Initial, Handshake und Anwendungsdaten.
  • Jedes Paket behält eigenen Schutz, einen eigenen Paketnummernraum sowie eigene Verarbeitung, ACK- und Verlustsemantik.
  • Die Beobachtung muss auf Datagramm- und Paketebene erhalten und getrennt mit Anwendungsquittungen verbunden werden.

Ein Mitschnitt kann Initial, Handshake und 1-RTT innerhalb desselben UDP-Datagramms zeigen. Diese Nachbarschaft beschreibt die Übertragung, nicht ein unteilbares Zustellereignis. Bei QUIC ist das vollständige Paket die verarbeitbare Einheit; UDP stellt lediglich die Hülle für eines oder mehrere Pakete bereit.

Coalescing dient der Effizienz. Es kann die Zahl der UDP-Datagramme senken, die für den kryptografischen Handshake und den Beginn der Datenübertragung nötig sind. Der Empfänger muss jedes enthaltene Paket erkennen und verarbeiten können. Initial, 0-RTT und Handshake besitzen ein Length-Feld zur Erkennung der Paketgrenzen. Ein Paket mit kurzem Header hat kein Length-Feld und kann deshalb nur am Ende stehen. Retry und Version Negotiation werden nicht mit einem anderen Paket zusammengeführt; Pakete mit verschiedenen Connection IDs dürfen ebenfalls nicht zusammengeführt werden.

Die gemeinsame Hülle verschmilzt die Semantik nicht. Jedes zusammengeführte Paket wird einzeln verarbeitet und separat bestätigt, als wäre es in einem anderen UDP-Datagramm eingetroffen. Kann ein Paket nicht entschlüsselt werden, darf der Empfänger es verwerfen oder zwischenspeichern, muss aber weiterhin versuchen, die übrigen Pakete zu verarbeiten. Eine Darstellung, die daraus ein einziges Handshake-Ereignis macht, entfernt eine vom Protokoll beabsichtigte Unterscheidung.

Initial, Handshake und Anwendungsdaten verwenden getrennte Paketnummernräume. Ein ACK benennt Pakete in dem Raum, zu dem es gehört. Die Nachbarschaft im Datagramm macht daraus weder eine gemeinsame Nummernfolge noch einen gemeinsamen Bestätigungsbereich. Auch der Verlust erzeugt kein gemeinsames Objekt für die erneute Übertragung. QUIC sendet die von den Frames getragene Information in neuen Paketen erneut; die ursprüngliche Paketnummer wird nicht wiederverwendet.

Mehrere Frames in einem Paket sind etwas anderes als mehrere vollständige Pakete in einem Datagramm. Der Verlust eines Pakets kann die Streams blockieren, deren Daten darin lagen, während andere Streams weiterlaufen. Diese Folge entsteht durch das gemeinsame QUIC-Paket, nicht durch die gemeinsame UDP-Hülle.

Für Initial gilt eine besondere Größenregel. UDP-Datagramme mit Initial müssen durch Padding oder Coalescing mindestens 1200 Bytes erreichen; ein Server verwirft ein Initial in einem kleineren Datagramm. Diese Größenanforderung darf nicht zu einer allgemeinen Behauptung über ein gemeinsames Zustellschicksal aller enthaltenen Pakete werden. Die Sicherheitsbetrachtung von RFC 9000 stellt außerdem fest, dass eine andere Gruppierung in UDP-Datagrammen – abgesehen von der Initial-Padding-Regel – keine funktionale Wirkung auf die Verbindung hat, auch wenn sich die Leistung ändern kann.

Das Register sollte die Datagramm-ID und den Messpunkt, Quell- und Ziel-Tupel, die Gesamtgröße, die geordneten Offsets und Längen der enthaltenen Pakete, Connection IDs, Pakettypen, Verschlüsselungsebenen, Paketnummernräume und dekodierte Paketnummern, soweit verfügbar, festhalten. Ebenso zu erfassen sind das Entschlüsselungs- und Verarbeitungsergebnis je Paket, das Frame-Inventar, ACK- und ACK-Bereichsbeziehungen, Verlustmeldungen, die Zuordnung erneut übertragener Information, Stream-IDs sowie Offsets und Längen, die Einhaltung der Initial-Größe, die Rolle als PMTU-Probe und die Empfangsbestätigung der Anwendung.

Die Beobachtung einer Hülle beweist nur, dass von einem bestimmten Messpunkt ein Transportereignis sichtbar war; sie beweist nicht die gemeinsame Entschlüsselung, Verarbeitung oder Bestätigung, die Wiederherstellung von Information, den Eingang von Bytes im User Space, abgeschlossene Nachrichten, dauerhafte Speicherung oder einen abgeschlossenen Geschäftsvorgang.