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.