Quick UDP Internet Connections (QUIC) est un protocole de couche de transport à usage général conçu pour remplacer le protocole de contrôle de transmission (TCP) grâce à sa flexibilité, sa sécurité intégrée, ses problèmes de performances réduits et son taux d'adoption plus rapide. Développé à l'origine par Google, QUIC utilise le protocole UDP (User Datagram Protocol) comme mécanisme de transport de bas niveau pour déplacer des paquets entre le client et le serveur. Notamment, QUIC intègre également Transport Layer Security (TLS) en tant que composant intégral, et non en tant que couche supplémentaire comme HTTP/1.1 et HTTP/2.

HTTP/3, basé sur QUIC, est la troisième version majeure du protocole de transfert hypertexte (HTTP) et a été adopté comme norme IETF en 2022. QUIC+HTTP/3 a été créé pour résoudre les limitations inhérentes à TCP qui limitent les performances et l'expérience utilisateur.

Comment fonctionnent les API ?

Les API sont la « face publique » des applications, révélant les fonctions qu’elles exécutent et les informations qu’elles peuvent fournir, et définissant le format approprié des requêtes. Lorsqu'un développeur crée et expose l'API d'une application, il permet à d'autres applications de communiquer avec elle.

Dans de nombreux cas, les API permettent aux développeurs de gagner un temps précieux, car elles rendent les fonctions couramment utilisées facilement accessibles. Plutôt que de dupliquer les fonctionnalités d’une application existante, les développeurs peuvent intégrer les fonctionnalités dans leurs applications en appelant l’API de l’application existante.

Diagramme HTTP

Présentation générale des piles de transport HTTP

Notions de base sur QUIC+HTTP/3

L’objectif de QUIC est de fournir un protocole de transport haute performance, haute fiabilité et haute sécurité pour HTTP/3 (bien que QUIC soit également adapté au trafic non HTTP).

Si QUIC est entièrement nouveau pour vous, nous vous recommandons de regarder la vidéo d’introduction ci-dessous.

UDP, TCP et TLS

UDP est un protocole simple et léger qui ne nécessite pas de négociation complexe à trois comme TCP pour établir la première connexion. Cette simplicité rend l'UDP rapide et sans connexion, mais cela signifie également qu'il manque les fonctionnalités essentielles pour une communication fiable et sécurisée par rapport au TCP.

QUIC est unique car il fusionne les avantages des protocoles UDP et TCP. Bien qu'il soit sans connexion et qu'il utilise UDP comme protocole de transport de bas niveau pour réduire les délais de connexion et de transport, il est orienté connexion dans les couches supérieures en raison de sa réimplémentation des fonctionnalités d'établissement de connexion et de détection de perte de TCP qui garantissent la livraison des paquets. Il gère les tâches d'identification des données perdues et d'exécution des retransmissions pour garantir une expérience utilisateur transparente.

QUIC intègre également TLS en tant que composant intégral, et non en tant que couche supplémentaire comme c'est le cas avec HTTP/1.1 et HTTP/2. Cette incorporation garantit que les messages sont cryptés par défaut.

Présentation d'un réseau QUIC

Le diagramme ci-dessous illustre l’anatomie de base d’un réseau QUIC. Comme le montre le diagramme, les objets logiques qui contiennent des requêtes HTTP/3, des réponses ou des données d'application sont des flux QUIC. Pour la transmission entre les points de terminaison du réseau, les flux QUIC sont encapsulés dans plusieurs couches logiques.

Diagramme d'anatomie du réseau de Quic

Anatomie d'un flux QUIC

En partant de l'extérieur vers l'intérieur, les couches logiques et les objets sont :

  • Datagramme UDP – Contient un en-tête spécifiant les ports source et de destination (ainsi que les données de longueur et de somme de contrôle), suivi d'un ou plusieurs paquets QUIC. Le datagramme est l'unité d'information transmise du client au serveur via le réseau.
  • Paquet QUIC – Contient un en-tête QUIC et une ou plusieurs trames QUIC.
  • En-tête QUIC – Contient des métadonnées sur le paquet. Il existe deux types d'en-tête :
    • L'en-tête long, utilisé lors de l'établissement de la connexion.
    • L'en-tête court, utilisé après l'établissement de la connexion. Il contient (entre autres données) l'ID de connexion, le numéro de paquet et la phase de clé (utilisée pour suivre les clés utilisées pour crypter le paquet, à l'appui de la rotation des clés). Les numéros de paquets sont uniques (et augmentent toujours) pour une connexion et une phase clé particulières.
  • Cadre – Contient le type, l’ID de flux, le décalage et les données de flux. Les données de flux sont réparties sur plusieurs trames, mais peuvent être assemblées à l'aide de l'ID de connexion, de l'ID de flux et du décalage, qui sont utilisés pour présenter les blocs de données dans le bon ordre.
  • Flux – Un flux de données unidirectionnel ou bidirectionnel au sein d’une seule connexion QUIC. Chaque connexion QUIC peut prendre en charge plusieurs flux indépendants, chacun avec son propre ID de flux. Si un paquet QUIC contenant certains flux est perdu, cela n'affecte pas la progression des flux non contenus dans le paquet manquant (ceci est essentiel pour éviter le blocage en tête de file rencontré par HTTP/2). Les flux peuvent être bidirectionnels et créés par l’un ou l’autre point de terminaison.
Comment fonctionne QUIC avec une liaison TLS ?

Une négociation TLS fournit une connexion sécurisée entre le client et le serveur. Le cryptage fourni par QUIC nécessite TLS v1.3 . Comme le montre le diagramme ci-dessous, QUIC conserve la « couche de contenu » TLS qui fournit les clés cryptographiques mais remplace la « couche d’enregistrement » par son propre mécanisme de transport.

QUIC s’appuie également sur TLS pour l’authentification et la négociation des paramètres essentiels à la sécurité et aux performances. Plutôt qu’une superposition stricte, les deux protocoles coopèrent : QUIC utilise la négociation TLS pour établir une connexion sécurisée tandis que TLS utilise la fiabilité, la livraison ordonnée et la couche d'enregistrement fournies par QUIC.

À un niveau élevé, il existe deux interactions principales entre les composants TLS et QUIC :

  • Le composant TLS envoie et reçoit des messages via le composant QUIC, QUIC fournissant une abstraction de flux fiable à TLS.
  • Le composant TLS fournit une série de mises à jour du composant QUIC, notamment (a) de nouvelles clés de protection de paquets à installer et (b) des changements d'état tels que la fin de la négociation, le certificat du serveur, etc.

Options de prise en charge HTTP/3 pour QUIC TLS

QUIC TLS est une variante de TLS conçue spécifiquement pour le protocole QUIC. Actuellement, il existe deux options pour les utilisateurs recherchant la prise en charge HTTP/3 dans QUIC TLS :

  • Implémentation d’OpenSSL QUIC – OpenSSL travaille actuellement à l’implémentation d’une pile QUIC complète par ses propres moyens. Ce développement encapsulera toutes les fonctionnalités QUIC dans l'implémentation, ce qui permettra aux utilisateurs HTTP/3 d'utiliser beaucoup plus facilement l'API OpenSSL TLS sans se soucier des fonctionnalités spécifiques à QUIC.
  • Bibliothèques prenant en charge l'API BoringSSL QUIC – Plusieurs bibliothèques SSL comme BoringSSL, quicTLS et LibreSSL (qui a commencé comme un fork d'OpenSSL) fournissent désormais la fonctionnalité QUIC TLS en implémentant l'API BoringSSL QUIC. C'est actuellement la seule option pour les utilisateurs souhaitant utiliser HTTP/3 car l'implémentation OpenSSL QUIC TLS n'est pas encore prête.
Avantages de QUIC+HTTP/3

QUIC+HTTP/3 vise à améliorer les performances des applications Web en réduisant la latence et en améliorant la diffusion des données sur des réseaux peu fiables. Parmi leurs avantages, on peut citer :

  • Latence réduite – Les protocoles traditionnels comme TCP souffrent de latence en raison de leur processus de configuration de connexion. Les capacités de multiplexage de QUIC+HTTP/3 leur permettent d’établir des connexions plus efficacement, ce qui se traduit par une latence plus faible pour l’établissement des connexions et la transmission des données.
  • Établissement de connexion plus rapide – QUIC+HTTP/3 combine la configuration de la négociation TLS et du chiffrement en une seule étape, réduisant ainsi le nombre d'allers-retours nécessaires pour établir une connexion sécurisée.
  • Multiplexage – En gérant plusieurs flux de données au sein d'une seule connexion, QUIC+HTTP/3 permet une utilisation plus efficace des ressources réseau et aide à éviter le problème de blocage en tête de file, où un flux lent peut retarder les autres dans les connexions TCP traditionnelles.
  • Correction d’erreur améliorée – QUIC intègre des techniques de correction d’erreur directe, qui peuvent aider à récupérer les paquets perdus sans avoir besoin de retransmissions, réduisant ainsi l’impact de la perte de paquets sur les performances.
  • Impact réduit de la perte de paquets – UDP est sans connexion et permet une transmission plus rapide sans avoir besoin de la vérification rigoureuse des erreurs du TCP. Cela est particulièrement avantageux dans les scénarios où les conditions du réseau sont moins stables.
  • Contrôle de congestion adaptatif – QUIC+HTTP/3 est conçu pour être plus efficace et réactif que le contrôle de congestion de TCP, conduisant à de meilleures performances dans différents environnements réseau.
  • Prise en charge de la migration – QUIC+HTTP/3 peut effectuer une transition transparente entre différentes connexions réseau (par exemple, passer du Wi-Fi au cellulaire) sans perturber les performances de l'application.
  • Sécurité améliorée – QUIC+HTTP/3 intègre le cryptage par défaut, améliorant ainsi la sécurité et la confidentialité de la transmission des données. Ce cryptage empêche l’écoute clandestine et la falsification des données en transit.
  • Traversée NAT – L’utilisation d’UDP par QUIC+HTTP/3 peut aider à la traversée de traduction d’adresses réseau (NAT), ce qui simplifie l’établissement de connexions dans des scénarios où les connexions TCP traditionnelles peuvent rencontrer des problèmes.
  • Évolution constante – Étant donné que QUIC+HTTP/3 a été conçu pour être implémenté et mis à jour par logiciel plutôt que de nécessiter des modifications de l'infrastructure réseau sous-jacente, ils peuvent être mis à jour et améliorés plus rapidement pour s'adapter aux conditions changeantes du réseau et aux problèmes de sécurité.
Découvrez comment utiliser QUIC+HTTP/3 avec NGINX

Explorez les ressources ci-dessous pour en savoir plus sur l’implémentation QUIC+HTTP/3 de NGINX et sur d’autres façons d’utiliser QUIC+HTTP/3 pour une communication plus rapide et plus efficace.