19. Types et formats de trames
19. Types et formats de trames
Comme décrit dans la Section 12.4, les paquets contiennent une ou plusieurs trames. Cette section décrit le format et la sémantique des types de trames QUIC de base.
19.1 Trames PADDING
Une trame PADDING (type=0x00) n'a aucune valeur sémantique. Les trames PADDING peuvent être utilisées pour augmenter la taille d'un paquet. Le padding peut être utilisé pour augmenter un paquet Initial à la taille minimale requise ou pour fournir une protection contre l'analyse de trafic pour les paquets protégés.
19.2 Trames PING
Les points de terminaison peuvent utiliser des trames PING (type=0x01) pour vérifier que leurs pairs sont toujours en vie ou pour vérifier l'accessibilité au pair. La trame PING ne contient aucun champ supplémentaire.
19.3 Trames ACK
Les récepteurs envoient des trames ACK (types 0x02 et 0x03) pour informer les expéditeurs des paquets qu'ils ont reçus et traités. La trame ACK contient une ou plusieurs plages ACK. Les plages ACK identifient les paquets accusés réception.
19.3.1 Plages ACK
Chaque plage ACK consiste en des valeurs alternées de Gap et ACK Range Length dans l'ordre décroissant des numéros de paquet.
19.3.2 Comptages ECN
La trame ACK utilise le bit le moins significatif (c'est-à-dire, le type 0x03) pour indiquer un retour ECN et signaler la réception de paquets QUIC avec des points de code ECN associés de ECT(0), ECT(1), ou CE dans l'en-tête IP du paquet.
19.4 Trames RESET_STREAM
Un point de terminaison utilise une trame RESET_STREAM (type=0x04) pour terminer brusquement la partie d'envoi d'un flux.
19.5 Trames STOP_SENDING
Un point de terminaison utilise une trame STOP_SENDING (type=0x05) pour communiquer que les données entrantes sont supprimées à la réception selon la demande de l'application.
19.6 Trames CRYPTO
Une trame CRYPTO (type=0x06) est utilisée pour transmettre des messages de négociation cryptographique. Elle peut être envoyée dans tous les types de paquets sauf 0-RTT.
19.7 Trames NEW_TOKEN
Un serveur envoie une trame NEW_TOKEN (type=0x07) pour fournir au client un jeton à envoyer dans l'en-tête d'un paquet Initial pour une connexion future.
19.8 Trames STREAM
Les trames STREAM créent implicitement un flux et transportent des données de flux. La trame STREAM prend la forme 0b00001XXX (ou l'ensemble des valeurs de 0x08 à 0x0f).
19.9 Trames MAX_DATA
Une trame MAX_DATA (type=0x10) est utilisée dans le contrôle de flux pour informer le pair de la quantité maximale de données pouvant être envoyées sur la connexion dans son ensemble.
19.10 Trames MAX_STREAM_DATA
Une trame MAX_STREAM_DATA (type=0x11) est utilisée dans le contrôle de flux pour informer un pair de la quantité maximale de données pouvant être envoyées sur un flux.
19.11 Trames MAX_STREAMS
Une trame MAX_STREAMS (type=0x12 ou 0x13) informe le pair du nombre cumulatif de flux d'un type donné qu'il est autorisé à ouvrir.
19.12 Trames DATA_BLOCKED
Un expéditeur DEVRAIT envoyer une trame DATA_BLOCKED (type=0x14) lorsqu'il souhaite envoyer des données mais est incapable de le faire en raison du contrôle de flux au niveau de la connexion.
19.13 Trames STREAM_DATA_BLOCKED
Un expéditeur DEVRAIT envoyer une trame STREAM_DATA_BLOCKED (type=0x15) lorsqu'il souhaite envoyer des données mais est incapable de le faire en raison du contrôle de flux au niveau du flux.
19.14 Trames STREAMS_BLOCKED
Un expéditeur DEVRAIT envoyer une trame STREAMS_BLOCKED (type=0x16 ou 0x17) lorsqu'il souhaite ouvrir un flux mais est incapable de le faire en raison de la limite maximale de flux fixée par son pair.
19.15 Trames NEW_CONNECTION_ID
Un point de terminaison envoie une trame NEW_CONNECTION_ID (type=0x18) pour fournir à son pair des ID de connexion alternatifs qui peuvent être utilisés pour briser la liaison lors de la migration de connexions.
19.16 Trames RETIRE_CONNECTION_ID
Un point de terminaison envoie une trame RETIRE_CONNECTION_ID (type=0x19) pour indiquer qu'il n'utilisera plus un ID de connexion émis par son pair.
19.17 Trames PATH_CHALLENGE
Les points de terminaison peuvent utiliser des trames PATH_CHALLENGE (type=0x1a) pour vérifier l'accessibilité au pair et pour la validation de chemin pendant la migration de connexion.
19.18 Trames PATH_RESPONSE
Une trame PATH_RESPONSE (type=0x1b) est envoyée en réponse à une trame PATH_CHALLENGE.
19.19 Trames CONNECTION_CLOSE
Un point de terminaison envoie une trame CONNECTION_CLOSE (type=0x1c ou 0x1d) pour notifier son pair que la connexion est en cours de fermeture. La trame CONNECTION_CLOSE avec un type de 0x1c est utilisée pour signaler des erreurs au niveau QUIC, ou l'absence d'erreurs. La trame CONNECTION_CLOSE avec un type de 0x1d est utilisée pour signaler une erreur avec l'application qui utilise QUIC.
19.20 Trames HANDSHAKE_DONE
Le serveur utilise une trame HANDSHAKE_DONE (type=0x1e) pour signaler la confirmation de la négociation au client.
19.21 Trames d'extension
Les trames QUIC n'utilisent pas un codage auto-descriptif. Un point de terminaison doit donc comprendre la syntaxe de toutes les trames avant de pouvoir traiter avec succès un paquet. Cela permet un codage efficace des trames, mais cela signifie qu'un point de terminaison ne peut pas envoyer une trame d'un type inconnu de son pair.
Une extension à QUIC qui souhaite utiliser un nouveau type de trame DOIT d'abord s'assurer qu'un pair est capable de comprendre la trame. Un point de terminaison peut utiliser un paramètre de transport pour signaler sa volonté de recevoir des types de trames d'extension.