Aller au contenu principal

12. Paquets et trames

12. Paquets et trames

Les points de terminaison QUIC communiquent en échangeant des paquets. Les paquets ont une protection de confidentialité et d'intégrité (voir Section 12.1) et sont transportés dans des datagrammes UDP (voir Section 14).

Cette version de QUIC utilise l'en-tête long de paquet (Section 17.2) pendant l'établissement de connexion. Les paquets avec l'en-tête long sont Initial (Section 17.2.2), 0-RTT (Section 17.2.3), Handshake (Section 17.2.4) et Retry (Section 17.2.5). La négociation de version utilise un paquet indépendant de la version avec un en-tête long (Section 17.2.1).

Les paquets avec l'en-tête court (Section 17.3) sont conçus pour un overhead minimal et sont utilisés après qu'une connexion est établie et que les clés 1-RTT sont disponibles.

12.1 Paquets protégés

Les paquets QUIC ont différents niveaux de protection cryptographique en fonction du type de paquet. La Section 17 fournit un aperçu des types de paquets et de leurs niveaux de protection.

12.2 Regroupement de paquets

Les paquets Initial (Section 17.2.2), 0-RTT (Section 17.2.3) et Handshake (Section 17.2.4) contiennent un champ Length, qui détermine la fin du paquet. La longueur inclut les champs Packet Number et Payload, qui sont tous deux confidentiels et initialement inconnus. La longueur du champ Payload est apprise une fois que la protection du paquet est supprimée.

En utilisant le champ Length, un expéditeur peut regrouper plusieurs paquets QUIC en un seul datagramme UDP. Cela peut réduire le nombre de datagrammes UDP nécessaires pour compléter la négociation cryptographique et commencer à envoyer des données. Les destinataires DOIVENT être capables de traiter les paquets regroupés.

12.3 Numéros de paquet

Les numéros de paquet sont des entiers dans la plage de 0 à 2^62-1. Les numéros de paquet sont divisés en trois espaces dans QUIC:

  • Espace Initial: Tous les paquets Initial (Section 17.2.2) sont dans cet espace.
  • Espace Handshake: Tous les paquets Handshake (Section 17.2.4) sont dans cet espace.
  • Espace de données d'application: Tous les paquets 0-RTT (Section 17.2.3) et 1-RTT (Section 17.3.1) sont dans cet espace.

Les numéros de paquet dans chaque espace commencent au numéro de paquet 0. Les paquets suivants envoyés dans le même espace de numéros de paquet DOIVENT augmenter le numéro de paquet d'au moins un.

12.4 Trames et types de trames

La charge utile des paquets QUIC, après suppression de la protection du paquet, consiste en une séquence de trames complètes, comme illustré dans la Figure 13. Les paquets de négociation de version, de réinitialisation sans état et de réessai ne contiennent pas de trames.

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

Figure 13: Charge utile QUIC

La charge utile d'un paquet contenant des trames DOIT contenir au moins une trame, et PEUT contenir plusieurs trames et plusieurs types de trames. Un point de terminaison DOIT traiter la réception d'un paquet ne contenant aucune trame comme une erreur de connexion de type PROTOCOL_VIOLATION. Les trames s'adaptent toujours dans un seul paquet QUIC et ne peuvent pas s'étendre sur plusieurs paquets.

Chaque trame commence par un type de trame, indiquant son type, suivi de champs supplémentaires dépendant du type:

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

Figure 14: Disposition générique de trame

12.5 Trames et espaces de numéros

Certaines trames sont interdites dans différents espaces de numéros de paquet. Les règles concernant les trames pouvant apparaître dans quels types de paquets sont décrites dans la Section 17 et résumées dans le Tableau 3.

Type de trameInitial0-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

Tableau 3: Trames et espaces de numéros de paquet