Qu’est-ce que QUIC et HTTP/3 ?

Quick UDP Internet Connections (QUIC) est un protocole de couche 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 faibles problèmes de performances 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 les paquets entre le client et le serveur. QUIC incorpore également la sécurité de la couche transport (TLS) en tant que composant intégral, et non en tant que couche supplémentaire comme HTTP/1.1 et HTTP/2.

Basé sur le protocole QUIC, HTTP/3 est la troisième version majeure du Hypertext Transfer Protocol (HTTP) et a été adopté en tant que norme IETF en 2022. QUIC et HTTP/3 ont été créés pour résoudre les limitations inhérentes au TCP qui restreignent les performances et l’expérience de l’utilisateur.

Comment fonctionnent les API ?

Les API sont la « face publique » des applications, elles révèlent les fonctions qu’elles exécutent et les informations qu’elles peuvent fournir, et définissent 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 facilement accessibles les fonctions couramment utilisées. Plutôt que de reproduire la fonctionnalité d’une application existante, les développeurs peuvent intégrer cette fonctionnalité dans leurs applications en faisant appel à l’API de l’application existante.

Diagramme du HTTP

Aperçu à haut niveau des piles de transport HTTP

Les bases du QUIC et du HTTP/3

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

Si vous ne connaissez pas QUIC, 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 n’a pas besoin d’une liaison à trois voies (three-way handshake) complexe comme le TCP pour établir la première connexion. Cette simplicité rend l’UDP rapide et sans connexion, mais elle signifie aussi qu’il manque les caractéristiques essentielles pour une communication fiable et sécurisée par rapport au TCP.

QUIC est unique parce qu’il fusionne les avantages des protocoles UDP et TCP. Bien qu’il soit sans connexion et qu’il utilise l’UDP comme protocole de transport de bas niveau afin de réduire les délais de connexion et de transport, il est orienté connexion dans les couches supérieures grâce à sa réimplémentation des fonctions d’établissement de connexion et de détection de perte de TCP qui garantissent la livraison des paquets. Il prend en charge les tâches d’identification des données perdues et les retransmissions pour garantir une expérience utilisateur transparente.

QUIC incorpore également le 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.

Vue d’ensemble d’un réseau QUIC

Le diagramme ci-dessous décrit l’anatomie de base d’un réseau QUIC. Comme le montre le diagramme, les objets logiques qui contiennent les requêtes HTTP/3, les réponses ou toute autre donnée d’application sont des flux QUIC. Pour la transmission entre les points d’extrémité du réseau, les flux QUIC sont enveloppés à l’intérieur de plusieurs couches logiques.

Anatomie du réseau du diagramme Quic

Anatomie d’un flux QUIC

De l’extérieur vers l’intérieur, les couches et objets logiques sont les suivants :

  • Datagramme UDP - Contient un en-tête spécifiant les ports source et destination (ainsi que des 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 d’un client à un serveur à travers 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, contient (entre autres données) l’identifiant de la connexion, le numéro du paquet et la phase de la clé (utilisée pour savoir quelles clés ont été utilisées pour chiffrer le paquet, afin de faciliter la rotation des clés). Les numéros de paquets sont uniques (et augmentent toujours) pour une connexion et une phase de clé particulières.
  • Les données du flux sont réparties sur plusieurs trames, mais peuvent être assemblées à l’aide de l’ID de la connexion, de l’ID du flux et du décalage, qui est utilisé pour présenter les morceaux de données dans l’ordre correct.
  • Flux - flux de données unidirectionnel ou bidirectionnel au sein d’une connexion QUIC unique. Chaque connexion QUIC peut prendre en charge plusieurs flux indépendants, chacun avec son propre identifiant 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 ligne rencontré par HTTP/2). Les flux peuvent être bidirectionnels et créés par l’un ou l’autre des deux points d’extrémité.
Comment QUIC fonctionne avec une liaison TLS

Une liaison TLS assure 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.

Diagramme de couches TLS et QUIC

QUIC s’appuie également sur le TLS pour l’authentification et la négociation de paramètres essentiels à la sécurité et à la performance. Plutôt qu’une stricte superposition, les deux protocoles coopèrent : QUIC utilise la liaison TLS pour établir une connexion sécurisée, tandis que le TLS utilise la couche de fiabilité, de livraison ordonnée et d’enregistrement fournie 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 au composant QUIC, y compris (a) de nouvelles clés de protection des paquets à installer et (b) des changements d’état tels que l’achèvement de la liaison, le certificat du serveur, etc.

Options d’assistance HTTP/3 pour QUIC TLS

QUIC TLS est une variante de TLS conçue spécifiquement pour le protocole QUIC. Il existe actuellement deux options pour les utilisateurs qui souhaitent que QUIC TLS prenne en charge HTTP/3 :

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

Le QUIC et le HTTP/3 visent à améliorer les performances des applications Web en réduisant la latence et en améliorant la transmission des données sur des réseaux peu fiables. Leurs avantages sont les suivants :

  • Les capacités de multiplexage du QUIC et du HTTP/3 leur permettent d’établir des connexions plus efficacement, ce qui se traduit par une latence réduite pour l’établissement des connexions et la transmission des données.
  • Établissement plus rapide de la connexion - Le QUIC et le HTTP/3 combinent la liaison TLS et la configuration du cryptage en une seule étape, ce qui réduit le nombre d’allers-retours nécessaires à l’établissement d’une connexion sécurisée.
  • Multiplexage - En traitant plusieurs flux de données dans une seule connexion, le QUIC et le HTTP/3 permettent une utilisation plus efficace des ressources du réseau et aident à éviter le problème de blocage en tête de ligne, où un flux lent peut retarder les autres dans les connexions TCP traditionnelles.
  • Correction d’erreurs améliorée - QUIC intègre des techniques de correction d’erreurs directe, qui permettent de récupérer les paquets perdus sans avoir à les retransmettre, ce qui réduit l’impact de la perte de paquets sur les performances.
  • Réduction de l’impact de la perte de paquets - UDP est sans connexion et permet une transmission plus rapide sans avoir besoin du contrôle d’erreur rigoureux de TCP, ce qui est particulièrement avantageux dans les scénarios où les conditions du réseau sont moins stables.
  • Contrôle de congestion adaptatif - QUIC et HTTP/3 sont conçus pour être plus efficaces et plus réactifs que le contrôle de congestion de TCP, ce qui permet d’obtenir de meilleures performances dans des environnements de réseaux variés.
  • Prise en charge de la migration - QUIC et HTTP/3 peuvent passer en toute transparence d’une connexion réseau à l’autre (par exemple, du Wi-Fi au cellulaire) sans perturber les performances de l’application.
  • Sécurité améliorée - QUIC et HTTP/3 intègrent le cryptage par défaut, ce qui améliore la sécurité et la confidentialité de la transmission des données. Ce cryptage empêche l’écoute et la falsification des données en transit.
  • Traversée NAT - L’utilisation de l’UDP par QUIC et HTTP/3 peut aider à la traversée de la traduction d’adresses réseau (NAT), ce qui facilite l’établissement de connexions dans des scénarios où les connexions TCP traditionnelles pourraient rencontrer des problèmes.
  • Évolution constante - Comme QUIC et HTTP/3 ont été conçus pour être mis en œuvre et mis à jour par un 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 à l’évolution des conditions du réseau et des préoccupations en matière de sécurité.
Apprendre à utiliser QUIC et HTTP/3 avec NGINX

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