Passa al contenuto principale

17. Formati dei pacchetti

17. Formati dei pacchetti

Tutti i valori numerici sono codificati nell'ordine dei byte di rete (cioè, big-endian) e tutte le dimensioni dei campi sono in bit. La notazione esadecimale è utilizzata per descrivere il valore dei campi.

17.1 Codifica e decodifica del numero di pacchetto

I numeri di pacchetto sono interi nell'intervallo da 0 a 2^62-1 (Sezione 12.3). Quando presenti in un pacchetto, sono codificati in 1-4 byte. Il numero di bit richiesti per rappresentare il numero di pacchetto è ridotto includendo solo i bit meno significativi del numero di pacchetto.

Il numero di pacchetto codificato è protetto come descritto nella Sezione 5.4 di [QUIC-TLS].

Il mittente DEVE utilizzare una dimensione del numero di pacchetto in grado di rappresentare più del doppio dell'intervallo della differenza tra il numero di pacchetto riconosciuto più grande e il numero di pacchetto inviato. Un peer che riceve il pacchetto decodificherà quindi correttamente il numero di pacchetto, a meno che il pacchetto non sia ritardato in transito in modo tale da arrivare dopo che molti pacchetti numerati più in alto sono stati ricevuti.

Di conseguenza, la dimensione della codifica del numero di pacchetto è almeno uno in più del logaritmo in base 2 del numero di numeri di pacchetto contigui non riconosciuti, incluso il nuovo pacchetto.

17.2 Pacchetti con intestazione lunga

Le intestazioni lunghe sono utilizzate per i pacchetti inviati prima dell'instaurazione delle chiavi 1-RTT. Una volta che le chiavi 1-RTT sono disponibili, un mittente passa all'invio di pacchetti utilizzando l'intestazione corta (Sezione 17.3). La forma lunga consente ai pacchetti speciali -- come il pacchetto di negoziazione della versione -- di essere rappresentati in questo formato di pacchetto uniforme a lunghezza fissa.

I pacchetti con intestazioni lunghe sono identificati dal bit di forma dell'intestazione impostato a 1.

17.2.1 Pacchetto di negoziazione della versione

Un pacchetto di negoziazione della versione è intrinsecamente indipendente dalla versione. Al ricevimento da parte di un client, sarà identificato come pacchetto di negoziazione della versione in base al campo Version che ha un valore di 0.

17.2.2 Pacchetto Initial

Un pacchetto Initial utilizza intestazioni lunghe con un valore di tipo di 0x00. Trasporta i primi frame CRYPTO inviati dal client e dal server per eseguire lo scambio di chiavi, e trasporta frame ACK in entrambe le direzioni.

17.2.3 0-RTT

Un pacchetto 0-RTT utilizza intestazioni lunghe con un valore di tipo di 0x01. Un pacchetto 0-RTT ha uno spazio di numeri di pacchetto (Sezione 12.3) di ApplicationData.

17.2.4 Pacchetto Handshake

Un pacchetto Handshake utilizza intestazioni lunghe con un valore di tipo di 0x02. È utilizzato per trasportare messaggi di handshake crittografico e riconoscimenti dal server e dal client.

17.2.5 Pacchetto Retry

Un pacchetto Retry utilizza un'intestazione di pacchetto lunga con un valore di tipo di 0x03. Trasporta un token di validazione dell'indirizzo creato dal server. È utilizzato da un server che desidera eseguire un retry (vedere Sezione 8.1).

17.3 Pacchetti con intestazione corta

Questa versione di QUIC definisce un singolo tipo di pacchetto che utilizza l'intestazione di pacchetto corta.

17.3.1 Pacchetto 1-RTT

Un pacchetto 1-RTT utilizza un'intestazione di pacchetto corta. È utilizzato dopo che la versione e le chiavi 1-RTT sono negoziate.

17.4 Bit di rotazione della latenza

Il bit di rotazione della latenza, situato al bit 0x20 dell'intestazione corta, consente il monitoraggio passivo della latenza da punti di osservazione sul percorso di rete. Il bit di rotazione è presente solo nell'intestazione di pacchetto corta, poiché è possibile misurare l'RTT iniziale di una connessione osservando l'handshake. Pertanto, il bit di rotazione è disponibile dopo che la negoziazione della versione e l'instaurazione della connessione sono completate.