12. Pakete und Frames
12. Pakete und Frames
QUIC-Endpunkte kommunizieren durch den Austausch von Paketen. Pakete haben Vertraulichkeits- und Integritätsschutz (siehe Abschnitt 12.1) und werden in UDP-Datagrammen übertragen (siehe Abschnitt 14).
Diese Version von QUIC verwendet den langen Paket-Header (Abschnitt 17.2) während des Verbindungsaufbaus. Pakete mit dem langen Header sind Initial (Abschnitt 17.2.2), 0-RTT (Abschnitt 17.2.3), Handshake (Abschnitt 17.2.4) und Retry (Abschnitt 17.2.5). Die Versionsaushandlung verwendet ein versionsunabhängiges Paket mit einem langen Header (Abschnitt 17.2.1).
Pakete mit dem kurzen Header (Abschnitt 17.3) sind für minimalen Overhead konzipiert und werden verwendet, nachdem eine Verbindung hergestellt wurde und 1-RTT-Schlüssel verfügbar sind.
12.1 Geschützte Pakete
QUIC-Pakete haben unterschiedliche Ebenen des kryptografischen Schutzes basierend auf dem Pakettyp. Abschnitt 17 bietet einen Überblick über Pakettypen und ihre Schutzebenen.
12.2 Zusammenfügen von Paketen
Initial (Abschnitt 17.2.2), 0-RTT (Abschnitt 17.2.3) und Handshake (Abschnitt 17.2.4) Pakete enthalten ein Längenfeld, das das Ende des Pakets bestimmt. Die Länge umfasst sowohl das Paketnummer- als auch das Payload-Feld, die beide vertraulich und zunächst unbekannt sind. Die Länge des Payload-Felds wird erlernt, sobald der Paketschutz entfernt wurde.
Mit dem Längenfeld kann ein Sender mehrere QUIC-Pakete in einem UDP-Datagramm zusammenfügen. Dies kann die Anzahl der benötigten UDP-Datagramme reduzieren, um den kryptografischen Handshake abzuschließen und mit dem Senden von Daten zu beginnen. Empfänger MÜSSEN in der Lage sein, zusammengefügte Pakete zu verarbeiten.
12.3 Paketnummern
Paketnummern sind Ganzzahlen im Bereich von 0 bis 2^62-1. Paketnummern sind in QUIC in drei Räume unterteilt:
- Initial-Raum: Alle Initial-Pakete (Abschnitt 17.2.2) befinden sich in diesem Raum.
- Handshake-Raum: Alle Handshake-Pakete (Abschnitt 17.2.4) befinden sich in diesem Raum.
- Anwendungsdaten-Raum: Alle 0-RTT (Abschnitt 17.2.3) und 1-RTT (Abschnitt 17.3.1) Pakete befinden sich in diesem Raum.
Paketnummern in jedem Raum beginnen bei Paketnummer 0. Nachfolgende Pakete, die im selben Paketnummernraum gesendet werden, MÜSSEN die Paketnummer um mindestens eins erhöhen.
12.4 Frames und Frame-Typen
Die Payload von QUIC-Paketen besteht nach Entfernung des Paketschutzes aus einer Sequenz vollständiger Frames, wie in Abbildung 13 dargestellt. Versionsaushandlungs-, zustandslose Reset- und Retry-Pakete enthalten keine Frames.
Packet Payload {
Frame (8..),
...
}
Abbildung 13: QUIC Payload
Die Payload eines Pakets, das Frames enthält, MUSS mindestens einen Frame enthalten und KANN mehrere Frames und mehrere Frame-Typen enthalten. Ein Endpunkt MUSS den Empfang eines Pakets ohne Frames als Verbindungsfehler vom Typ PROTOCOL_VIOLATION behandeln. Frames passen immer in ein einzelnes QUIC-Paket und können sich nicht über mehrere Pakete erstrecken.
Jeder Frame beginnt mit einem Frame-Typ, der seinen Typ angibt, gefolgt von zusätzlichen typabhängigen Feldern:
Frame {
Frame Type (i),
Type-Dependent Fields (..),
}
Abbildung 14: Generisches Frame-Layout
12.5 Frames und Nummernräume
Einige Frames sind in verschiedenen Paketnummernräumen verboten. Die Regeln, welche Frames in welchen Pakettypen erscheinen dürfen, werden in Abschnitt 17 beschrieben und in Tabelle 3 zusammengefasst.
| Frame-Typ | Initial | 0-RTT | Handshake | 1-RTT |
|---|---|---|---|---|
| PADDING | Y | Y | Y | Y |
| PING | Y | Y | Y | Y |
| ACK | Y | - | Y | Y |
| RESET_STREAM | - | Y | - | Y |
| STOP_SENDING | - | Y | - | Y |
| CRYPTO | Y | - | Y | Y |
| NEW_TOKEN | - | - | - | Y |
| STREAM | - | Y | - | Y |
| MAX_DATA | - | Y | - | Y |
| MAX_STREAM_DATA | - | Y | - | Y |
| MAX_STREAMS | - | Y | - | Y |
| DATA_BLOCKED | - | Y | - | Y |
| STREAM_DATA_BLOCKED | - | Y | - | Y |
| STREAMS_BLOCKED | - | Y | - | Y |
| NEW_CONNECTION_ID | - | Y | - | Y |
| RETIRE_CONNECTION_ID | - | - | - | Y |
| PATH_CHALLENGE | - | Y | - | Y |
| PATH_RESPONSE | - | - | - | Y |
| CONNECTION_CLOSE | Y | Y | Y | Y |
| HANDSHAKE_DONE | - | - | - | Y |
Tabelle 3: Frames und Paketnummernräume