NOUVEAU : Helius acquiert Light Protocol
Comment atténuer rapidement le spam avec QUIC : tout savoir sur Solana et QUIC
Blog/Fondamentaux

Comment atténuer rapidement le spam avec QUIC : tout savoir sur Solana et QUIC

Developer Experience Engineer0xIchigo sur X0xIchigo sur LinkedIn0xIchigo sur GitHub
12 min de lecture

De quoi parle cet article ?

Solana est actuellement la blockchain la plus rapide et la plus évolutive du marché. Réputée pour la vitesse de ses transactions, elle constitue la chaîne idéale pour de nombreux cas d’usage. Malgré ces prouesses, le réseau de Solana a suscité de la peur, de l’incertitude et du doute (couramment désignés par l’acronyme FUD) en raison de ses interruptions de service. Si ce FUD était légitime par le passé, il est aujourd’hui injustifié. Pourquoi ? Au cours de l’année écoulée, les ingénieurs de Solana Labs ont travaillé sur plusieurs mises à niveau du réseau. La plus notable consiste à remplacer le protocole personnalisé de Solana basé sur UDP brut pour l’ingestion des transactions par QUIC.

Dans cet article, nous examinerons le fonctionnement des protocoles réseau, TCP et UDP, puis verrons comment QUIC améliore les deux. Nous nous intéresserons ensuite à Solana et à ses avantages spécifiques. Cet article vise à vous expliquer en détail pourquoi cette mise à niveau du réseau représente une étape technique majeure pour Solana.

Mises à niveau du réseau Solana

Le 13 décembre 2022, la Solana Foundation a publié un article intitulé « Mises à niveau du réseau Solana ». Elle y présentait plusieurs mises à niveau du réseau ainsi que leur état d’avancement respectif. Les voici :

QUIC

  • Actuellement actif sur Mainnet-beta

Qualité de service pondérée par le stake

  • Actuellement active sur Mainnet-beta

Marchés des frais

  • Actuellement actifs sur Mainnet-beta, avec la prise en charge des RPC et des portefeuilles bientôt disponible
  • Vous pouvez suivre leur progression ici

Augmentation de la taille des transactions

  • Actuellement en cours de développement

État de vote compact

  • Actuellement actif sur Testnet

Le spam est l’une des principales causes des interruptions de service rencontrées par Solana par le passé. En voici quelques exemples :

  • Le spam lors de l’IDO de Grape le 14 septembre 2021
  • Les attaques DDoS survenues du 6 au 12 janvier 2022
  • Le spam lié au mint de NFT survenu du 30 avril au 1er mai 2022

Depuis l’implémentation de QUIC, aucun cas d’interruption de service liée au spam n’a été signalé sur Solana. QUIC constitue donc une avancée majeure pour améliorer le trafic réseau et l’ingestion des données de Solana. Avant de découvrir QUIC, nous devons d’abord étudier le fonctionnement des protocoles réseau. Cette meilleure compréhension des principes fondamentaux des réseaux nous permettra de mesurer l’impact réel de QUIC sur le réseau de Solana.

Qu’est-ce qu’un protocole réseau ?

Un protocole réseau est un ensemble établi de règles qui définissent la manière dont les données sont transmises entre les appareils d’un même réseau. Les protocoles réseau permettent aux appareils connectés de communiquer facilement entre eux, quels que soient leur fonctionnement interne, leur structure ou leur conception.

Imaginez que vous êtes assis face à un ami dans un restaurant à Paris. Vous décidez tous les deux de parler français et, par conséquent, votre conversation se déroule sans difficulté. Cette décision commune revient à adopter un ensemble de règles grammaticales, un vocabulaire et une prononciation que vous comprenez tous les deux.

Les protocoles réseau fonctionnent de manière similaire pour les appareils connectés, tout comme le français sert de « protocole » à votre conversation dans un restaurant parisien. Choisir TCP, UDP ou QUIC revient à accepter un ensemble établi de règles et de conventions pour échanger des informations. Le respect d’un protocole réseau précis garantit que les appareils connectés peuvent se comprendre sans aucune confusion.

Qu’est-ce que TCP ?

Transmission Control Protocol (TCP) est une interface de communication normalisée permettant d’envoyer des flux de données entre deux points de terminaison d’un réseau. Vint Cerf et Bob Kahn ont créé le Transmission Control Program, un protocole monolithique ensuite divisé en une architecture modulaire composée de TCP et de l’Internet Protocol (IP). L’ensemble de cette suite est appelé TCP/IP. Dans notre cas, lorsque j’utilise l’abréviation TCP, je fais référence au Transmission Control Protocol et non à l’ensemble de la suite.

TCP est orienté connexion : il nécessite l’établissement d’une connexion entre le client et le serveur avant l’envoi des données. TCP utilise une poignée de main en trois étapes pour établir une connexion : synchronisation (SYN), synchronisation-accusé de réception (SYN-ACK) et accusé de réception (ACK). Vous pouvez voir SYN comme le fait de tendre la main à quelqu’un et de lui demander s’il est prêt à parler ; SYN-ACK comme cette personne qui vous serre la main, vous indique qu’elle est prête et vous demande si vous souhaitez continuer ; et ACK comme le fait de lui serrer la main en retour pour confirmer que vous souhaitez poursuivre la conversation. Une session est alors établie. Les deux parties savent qu’elles sont connectées et conviennent qu’elles sont prêtes à échanger des informations.

TCP décompose les données en paquets, qui sont ensuite envoyés sur le réseau. Une petite quantité de données est ajoutée à chaque paquet. Ces données supplémentaires comprennent un numéro de séquence permettant de détecter les paquets perdus ou désordonnés, ainsi qu’une somme de contrôle permettant de repérer les erreurs dans un paquet.

Lorsqu’une conversation est interrompue, nous demandons à l’autre personne de se répéter pour nous assurer d’avoir bien entendu. TCP gère les interruptions de manière similaire avec l’Automatic Repeat Request (ARQ). Lorsqu’un problème survient, ARQ demande à l’expéditeur de renvoyer le paquet endommagé ou perdu. TCP indique ensuite à l’utilisateur de ralentir son débit de transmission des données et limite le nombre de paquets non confirmés pouvant être en transit. Une fois l’erreur résolue, TCP utilise des mécanismes pour éviter la congestion et augmente progressivement sa vitesse.

TCP n’est pas adapté à tous les cas d’usage, car il séquence l’ensemble du trafic. Ainsi, si une partie des données est perdue ou endommagée, tout ce qui suit ce paquet doit attendre. Mais si nous n’avions pas besoin d’attendre ?

Qu’est-ce qu’UDP ?

User Datagram Protocol (UDP) est une interface de communication normalisée utilisée pour transmettre des données sur un réseau. Contrairement à TCP, UDP fonctionne sans connexion et ne garantit ni la livraison, ni l’ordre, ni l’absence de duplication des paquets de données. UDP n’utilise aucun dialogue de poignée de main, ce qui rend la transmission des données vulnérable aux éventuelles défaillances du réseau sous-jacent. UDP est ainsi plus rapide que les autres protocoles, car il ne consacre pas de temps à établir une connexion avec la destination. Cependant, cela lui vaut aussi d’être surnommé « Unreliable Datagram Protocol », ou protocole de datagramme non fiable.

UDP fonctionne en envoyant des datagrammes sur le réseau. Les datagrammes sont des ensembles de données plus autonomes qui contiennent les informations nécessaires au routage de la source vers la destination. Grâce à ces informations intégrées, leur routage ne dépend pas d’autres datagrammes. Ces datagrammes se composent d’un en-tête et de données. L’en-tête comporte quatre champs de 16 bits chacun : un port source facultatif, un port de destination, une longueur et une somme de contrôle facultative. Le processus d’envoi se déroule comme suit :

  • L’application émettrice crée un socket UDP
  • L’application émettrice place les données qu’elle souhaite envoyer dans un datagramme UDP, avec un en-tête contenant le port de destination et toute autre information pertinente
  • Le datagramme est envoyé à la couche IP pour être routé et livré
  • La couche IP récupère le datagramme, le transfère à la couche UDP et retire son en-tête
  • Le datagramme est envoyé à l’application qui écoute sur le port spécifié

Imaginez UDP comme une conversation avec quelqu’un à l’autre bout d’une salle bondée. Vous criez en direction de cette personne sans vous soucier de savoir si elle vous a entendu ni attendre sa réponse. Votre objectif est de transmettre rapidement votre message, sans conversation prolongée. C’est risqué, car cette personne n’a peut-être pas entendu tout ce que vous avez dit, mais cette méthode peut être très efficace.

Pourquoi utiliser un protocole de communication sans connexion comme UDP alors qu’il existe une solution plus fiable comme TCP ? UDP est extrêmement utile pour les applications sensibles au temps ou dans les situations où une certaine perte de données est acceptable. Lorsque vous jouez à des jeux vidéo avec vos amis, perdre quelques images est infiniment préférable à des pauses et mises en mémoire tampon continuelles. UDP est également utilisé pour les appels VoIP, les requêtes Domain Name System (DNS), ainsi que la surveillance et la journalisation.

QUIC : trouver l’équilibre entre efficacité et fiabilité

QUIC est un protocole moderne de couche de transport conçu par Jim Roskind chez Google en 2013. Il associe la fiabilité de TCP aux avantages d’UDP en matière de faible latence, créant ainsi un environnement optimisé pour des communications asynchrones rapides et sécurisées. QUIC se distingue en intégrant des sessions sécurisées et des stratégies avancées de contrôle des flux, caractéristiques de TCP, au cadre plus flexible et plus rapide fourni par UDP.

Avec QUIC, l’établissement de la connexion est simplifié grâce à l’intégration de l’échange des clés cryptographiques et des détails du protocole dans la poignée de main initiale, toujours chiffrée de manière sécurisée avec Transport Layer Security (TLS). Le protocole permet des connexions multiplexées via UDP, afin que plusieurs flux de données indépendants atteignent leurs points de terminaison sans se perturber mutuellement. QUIC contrôle indépendamment le flux de chaque stream. Ainsi, même si l’un d’eux rencontre des erreurs, il ne bloque pas les autres. Cela contribue à éviter le blocage en tête de ligne, où une file de paquets est bloquée par le premier paquet, un problème fréquent avec les connexions TCP.

Si un paquet est perdu ou endommagé, QUIC retransmet intelligemment les données afin de préserver l’intégrité et la continuité de la communication. QUIC résiste également aux changements de l’environnement réseau. Chaque paquet comporte un identifiant de connexion qui identifie de manière unique la connexion au serveur, quelle que soit la source. La connexion peut donc être rétablie en envoyant un autre paquet, car chaque paquet contient cet identifiant, ce qui signifie que la connexion d’origine reste valide. Pour reprendre notre métaphore, si vous changez de pièce, votre conversation n’est pas interrompue et se poursuit sans difficulté.

Imaginez que vous vous trouvez de nouveau dans cette salle bondée et que vous essayez de parler à votre ami. Cette fois-ci, vous disposez de talkies-walkies chiffrés qui permettent un échange clair et sécurisé. Tandis que votre conversation aborde différents sujets, votre ami confirme chaque message d’un pouce levé. Un regard perplexe vous indique qu’il faut répéter tout message mal compris, afin que rien ne se perde dans la transmission. Et si votre ami ou vous-même changez de pièce, le dialogue se poursuit sans interruption. Voilà l’essence de QUIC : une communication robuste, adaptable et efficace.

Comment Solana implémente QUIC

QUIC offre plusieurs avantages à Solana, notamment :

  • Réduction du temps d’établissement de la connexion : en optimisant le processus de poignée de main, QUIC réduit la latence
  • Multiplexage et gestion efficace des paquets : la capacité de QUIC à gérer simultanément plusieurs flux de données sans blocage en tête de ligne améliore le débit et l’efficacité des transactions
  • Adaptabilité et résilience : le protocole est conçu pour s’adapter à l’évolution des conditions du réseau, une exigence essentielle pour un système distribué et décentralisé comme Solana
  • Personnalisation pour optimiser le réseau : la flexibilité de QUIC permet d’adapter les implémentations, comme celle de Solana, afin de répondre à des objectifs précis de performances et de sécurité du réseau

QUIC a été ajouté aux ports qui assurent l’ingestion des transactions des utilisateurs. Il est ainsi possible de limiter le trafic d’un acteur pour que le réseau puisse se concentrer sur le traitement des transactions légitimes. QUIC est actif sur Solana et a été entièrement adopté sur Mainnet-beta avec la version 1.13.4. Depuis son intégration, le réseau a enregistré des améliorations notables en matière de stabilité et de débit.

Malgré ces avancées, la récente congestion du réseau a suscité un débat sur l’efficacité de calcul de QUIC par rapport à l’ancienne implémentation UDP de Solana. Les critiques soulignent que l’approche UDP brute permettait aux validateurs de se concentrer exclusivement sur le traitement des transactions, au lieu de gérer le spam de poignées de main et le chiffrement. De plus, l’échange et la vérification des clés ne font pas partie de la poignée de main initiale dans l’implémentation de Solana. Solana utilise l’option de QUIC permettant d’envoyer un « paquet de challenge » pour vérifier les adresses IP. L’objectif de ce challenge est d’éviter la vérification du certificat lors de la première étape de la poignée de main et de l’effectuer plutôt durant sa deuxième partie, après la validation de l’adresse IP. La question de savoir si Solana a connu des interruptions de service liées au spam ou à des attaques DDoS reste débattue, car la récente panne du réseau Solana en février pourrait être considérée comme un déni de service.

À mesure que le réseau évolue, il est important d’examiner et d’améliorer continuellement les implémentations qui y sont déployées. QUIC vise à résoudre de nombreux problèmes de TCP et d’UDP, mais avec le recul, son efficacité reste discutable. Il faut notamment tenir compte de la manière dont une solution fonctionne sur le matériel. Grâce à sa simplicité, TCP fonctionne bien mieux que QUIC sur le matériel. On pourrait aisément avancer qu’avec un jeu d’instructions AES, un protocole basé sur TCP offrirait un débit supérieur à QUIC et serait plus efficace en matière de TPS.

L’équipe de Jump Crypto repousse notamment les limites de QUIC. Elle a créé sa propre implémentation robuste et évolutive lors du développement de Firedancer, un nouveau client de validation pour Solana. La couche réseau de Firedancer a été conçue de A à Z pour tirer parti du receive-side scaling, un type d’équilibrage de charge accéléré par le matériel. Cette architecture parallèle permet à chaque cœur de CPU de gérer efficacement une partie du trafic entrant. L’équipe a indiqué sur X :

Une démonstration et un fil de discussion consacrés à l’avancée technique de QUIC dans Firedancer sont disponibles ici.

Conclusion

Félicitations ! Dans cet article, nous avons étudié les principes fondamentaux des protocoles réseau, en nous intéressant aux rôles de TCP et d’UDP ainsi qu’à leur évolution vers QUIC. Nous avons également examiné l’implémentation de QUIC par Solana et souligné son rôle central dans l’amélioration du réseau. Si QUIC a renforcé la résilience du réseau Solana face au spam et aux attaques DDoS, la croissance du réseau a révélé les difficultés et les débats liés à son efficacité de calcul et aux nuances de son implémentation.

QUIC incarne l’objectif fondamental de Solana : proposer un réseau à haut débit et faible latence. Ses capacités de multiplexage et de récupération après la perte de paquets placent Solana au cœur des discussions sur les performances et l’évolutivité. L’implémentation de l’équipe Firedancer illustre l’adaptabilité de QUIC et met en évidence le potentiel d’optimisations sur mesure pour répondre à l’évolution des besoins du réseau.

En tant que développeur Solana, comprendre QUIC vous aide à prendre des décisions plus éclairées sur des sujets allant de l’architecture des applications aux erreurs de transaction. Solana évolue constamment, tout comme QUIC. Suivre les dernières évolutions du réseau est le meilleur moyen de créer des applications performantes sur Solana. Même si vous n’êtes pas développeur, une compréhension plus technique de QUIC peut vous aider à saisir pourquoi Solana est une blockchain performante, réputée pour sa vitesse et son évolutivité.

Si vous avez lu jusqu’ici, anon, merci ! Saisissez votre adresse e-mail ci-dessous pour ne manquer aucune actualité de Solana. Vous souhaitez aller plus loin ? Découvrez les derniers articles du blog Helius et poursuivez votre parcours avec Solana dès aujourd’hui.

Ressources supplémentaires / Pour aller plus loin

Abonnez-vous à Helius

Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication

Image agrandie