Passa al contenuto principale

12. Pacchetti e frame

12. Pacchetti e frame

Gli endpoint QUIC comunicano scambiando pacchetti. I pacchetti hanno protezione della riservatezza e dell'integrità (vedere Sezione 12.1) e sono trasportati in datagrammi UDP (vedere Sezione 14).

Questa versione di QUIC utilizza l'intestazione lunga del pacchetto (Sezione 17.2) durante l'instaurazione della connessione. I pacchetti con l'intestazione lunga sono Initial (Sezione 17.2.2), 0-RTT (Sezione 17.2.3), Handshake (Sezione 17.2.4) e Retry (Sezione 17.2.5). La negoziazione della versione utilizza un pacchetto indipendente dalla versione con un'intestazione lunga (Sezione 17.2.1).

I pacchetti con l'intestazione corta (Sezione 17.3) sono progettati per un overhead minimo e sono utilizzati dopo che una connessione è stabilita e le chiavi 1-RTT sono disponibili.

12.1 Pacchetti protetti

I pacchetti QUIC hanno diversi livelli di protezione crittografica in base al tipo di pacchetto. La Sezione 17 fornisce una panoramica dei tipi di pacchetto e dei loro livelli di protezione.

12.2 Coalescenza dei pacchetti

I pacchetti Initial (Sezione 17.2.2), 0-RTT (Sezione 17.2.3) e Handshake (Sezione 17.2.4) contengono un campo Length, che determina la fine del pacchetto. La lunghezza include sia il campo Packet Number che quello Payload, entrambi riservati e inizialmente sconosciuti. La lunghezza del campo Payload viene appresa una volta rimossa la protezione del pacchetto.

Utilizzando il campo Length, un mittente può coalizzare più pacchetti QUIC in un singolo datagramma UDP. Questo può ridurre il numero di datagrammi UDP necessari per completare l'handshake crittografico e iniziare a inviare dati. I destinatari DEVONO essere in grado di elaborare pacchetti coalizzati.

12.3 Numeri di pacchetto

I numeri di pacchetto sono interi nell'intervallo da 0 a 2^62-1. I numeri di pacchetto sono divisi in tre spazi in QUIC:

  • Spazio Initial: Tutti i pacchetti Initial (Sezione 17.2.2) sono in questo spazio.
  • Spazio Handshake: Tutti i pacchetti Handshake (Sezione 17.2.4) sono in questo spazio.
  • Spazio dati applicazione: Tutti i pacchetti 0-RTT (Sezione 17.2.3) e 1-RTT (Sezione 17.3.1) sono in questo spazio.

I numeri di pacchetto in ciascuno spazio iniziano dal numero di pacchetto 0. I pacchetti successivi inviati nello stesso spazio di numeri di pacchetto DEVONO incrementare il numero di pacchetto di almeno uno.

12.4 Frame e tipi di frame

Il payload dei pacchetti QUIC, dopo la rimozione della protezione del pacchetto, consiste in una sequenza di frame completi, come mostrato nella Figura 13. I pacchetti di negoziazione della versione, reset senza stato e retry non contengono frame.

Packet Payload {
Frame (8..),
...
}

Figura 13: Payload QUIC

Il payload di un pacchetto contenente frame DEVE contenere almeno un frame, e PUÒ contenere più frame e più tipi di frame. Un endpoint DEVE trattare la ricezione di un pacchetto che non contiene frame come un errore di connessione di tipo PROTOCOL_VIOLATION. I frame si adattano sempre all'interno di un singolo pacchetto QUIC e non possono estendersi su più pacchetti.

Ogni frame inizia con un tipo di frame, che indica il suo tipo, seguito da campi aggiuntivi dipendenti dal tipo:

Frame {
Frame Type (i),
Type-Dependent Fields (..),
}

Figura 14: Layout generico del frame

12.5 Frame e spazi di numeri

Alcuni frame sono vietati in diversi spazi di numeri di pacchetto. Le regole per quali frame possono apparire in quali tipi di pacchetto sono descritte nella Sezione 17 e riassunte nella Tabella 3.

Tipo di frameInitial0-RTTHandshake1-RTT
PADDINGYYYY
PINGYYYY
ACKY-YY
RESET_STREAM-Y-Y
STOP_SENDING-Y-Y
CRYPTOY-YY
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_CLOSEYYYY
HANDSHAKE_DONE---Y

Tabella 3: Frame e spazi di numeri di pacchetto