Qu'est-ce que XDP (Express Data Path) dans Linux

Starship Prompt (1)

XDP (ou Express Data Path) est un utilitaire de mise en réseau disponible dans le noyau Linux. XDP est utilisé dans de nombreuses entreprises populaires pour résoudre des problèmes de mise en réseau graves auxquels elles sont confrontées en gérant des millions de requêtes par seconde. C’est un programme open source sous licence MIT fusionné dans le noyau Linux à partir de la version 4.8.

XDP est un processeur de paquets de données réseau performant et programmable. Il est créé pour atténuer des problèmes graves côté serveur tels que les attaques DDoS (Déni de Service Distribué) ou en tant qu’équilibreur de charge.

Table des matières

  • Besoin de XDP
  • Pourquoi XDP est très rapide
  • Connecter la pile réseau avec XDP
  • Types d’opérations que XDP effectue
  • XDP et eBPF
  • Cas d’utilisation courants de XDP et eBPF
  • Questions fréquentes

À lire aussi : 5 conseils utiles lors de la compilation de votre propre noyau Linux

Besoin de XDP

Le besoin d’un chemin de données réseau performant est toujours une fonctionnalité requise pour les serveurs Linux. Mais la programmabilité de ces chemins de données devrait également être présente afin que les développeurs puissent en tirer quelque chose d’utile. Bien que XDP ait un parcours d’apprentissage assez abrupt, grâce au développement récent de nombreux outils et frameworks, l’écriture de code XDP est aujourd’hui assez abordable.

Le grand avantage de XDP est sa vitesse. La fonctionnalité principale de XDP est que les développeurs peuvent créer de nouvelles fonctionnalités pour filtrer les paquets sans modifier le noyau lui-même.

Il existe certains scénarios dans lesquels un paquet ne doit pas parcourir l’ensemble de la pile réseau juste pour décider d’avancer ou de laisser tomber le paquet. Cela devrait être fait au premier niveau de la pile réseau en plaçant des filtres. Ces filtres doivent être programmés de manière à pouvoir reconnaître facilement un paquet malveillant et le rejeter dès le début de la pile. Cela peut économiser beaucoup de puissance de traitement et de temps.

Avec XDP, cette filtration est possible dès le début de la pile réseau.

Maintenant, en utilisant XDP, le développeur peut filtrer tout paquet qui pourrait être envoyé par un hacker pour réaliser une attaque DDoS. Cela peut réduire une grande partie de la surcharge dans la pile de mise en réseau normale du noyau. Cette fonctionnalité a récemment été démontrée par Cloudflare dans leur démonstration de protection DDoS.

Xdp 1

Quelques caractéristiques notables de XDP sont les suivantes :

  1. Il ne nécessite aucun matériel spécialisé : XDP peut fonctionner sur n’importe quel matériel que vous lui présentez. Oui, la vitesse peut être compromise si vous n’avez pas le dispositif ou ses pilotes optimisés, mais à des fins de test, vous n’avez pas besoin de matériel spécialisé.
  2. Il ne nécessite pas de contournement du noyau : XDP s’exécute avant que le paquet n’atteigne la pile réseau du noyau. Une fonction de rappel est déclenchée lorsqu’un paquet est reçu et XDP le traite aussi rapidement que possible.
  3. Il ne remplace pas la pile TCP/IP : XDP est présent au niveau le plus bas de la pile de mise en réseau. Lorsqu’il passe le paquet, le paquet entre dans la pile de mise en réseau normale du noyau, qui comprend la pile TCP/IP.
  4. Il fonctionne en conjonction avec TCP/IP avec toutes les fonctionnalités BPF (Berkeley Packet Filter) : XDP ne remplace rien. Il utilise même eBPF pour traiter les paquets et donner au développeur un meilleur confort lors de l’écriture du code.

À lire aussi : Comment construire et installer un noyau personnalisé sur Ubuntu

Pourquoi XDP est très rapide

XDP est un chemin de données réseau programmable et haute performance basé sur eBPF dans le noyau Linux. Le gain de performance de XDP est dû au traitement de paquets bare metal au niveau le plus bas de la pile logicielle. Cela signifie que le paquet de données provenant du réseau atteint XDP en premier, avant tout autre processus du noyau.

Par conséquent, les ingénieurs peuvent programmer XDP pour l’optimiser pour divers cas d’utilisation. De la protection DDoS à l’équilibreur de charge.

XDP est chargé directement sur la pile de mise en réseau. Lorsqu’un paquet est reçu par la pile de mise en réseau, elle reçoit un appel de retour et traite les paquets aussi rapidement que possible. XDP peut rejeter 26 millions de paquets par seconde par cœur sur du matériel ordinaire.

La principale raison pour laquelle XDP est très rapide est que l’utilisateur est autorisé à lire directement ou à apporter des modifications aux données des paquets réseau et à prendre des décisions sur la façon de gérer le paquet à un stade précoce. Cela nécessite très peu de surcharge de traitement et entraîne une meilleure vitesse.

Connecter la pile réseau avec XDP

Vous pouvez vous connecter à la mise en réseau avec XDP par divers moyens, mais je mentionne ici quelques méthodes populaires.

  1. XDP générique : Dans ce processus, XDP est chargé dans le noyau, mais bénéficie très peu d’avantages de performance. C’est le moyen le plus simple d’exécuter un programme XDP sans aucun soutien du matériel.
  2. XDP natif : Le XDP natif est chargé par le pilote de mise en réseau lui-même. Il nécessite le soutien du pilote de carte réseau.

À lire aussi : Comment résoudre l’erreur Kernel Data Inpage dans Windows

Types d’opérations que XDP effectue

Certaines des opérations que XDP peut effectuer lorsqu’un paquet est reçu par l’interface réseau sont :

  1. XDP_DROP : Il rejette les paquets et ne les traite pas. En utilisant un programme eBPF pour analyser le schéma de trafic et peut rejeter des paquets en temps réel.
  2. XDP_PASS : Il transfère les paquets à la pile de mise en réseau pour un traitement ultérieur. Il peut modifier le contenu du paquet avant que cela ne se produise.
  3. XDP_ABORTED : Il rejette le paquet de données réseau, laissant une exception de point de trace.
  4. XDP_TX : il transfère les paquets à la même interface réseau qui les reçoit. Les paquets peuvent être modifiés ou non modifiés.
  5. XDP_REDIRECT : Redirige le paquet vers un autre NIC (contrôleur d’interface réseau).

Xdp 2 1

XDP et eBPF

eBPF est la version étendue du Berkeley Packet Filter. C’est comme une machine virtuelle abstraite fonctionnant à l’intérieur du noyau Linux. eBPF est utilisé pour exécuter un programme défini par l’utilisateur dans un environnement sandbox dans le noyau Linux. En général, il est utilisé pour exécuter des outils de mise en réseau et de surveillance sur les serveurs Linux afin d’assurer une performance optimale.

XDP est un cadre utilisé pour écrire un traitement de paquet très haute vitesse dans les applications BPF. Pour le rendre encore plus rapide, XDP exécute BPF immédiatement après qu’un paquet soit reçu par la pile de mise en réseau.

XDP a un parcours d’apprentissage très abrupt. Par conséquent, les développeurs créent des outils et des frameworks pour faciliter la programmation avec eBPF. Cela facilite grandement l’écriture de code pour le traitement de réseaux à très haute fréquence en utilisant XDP et eBPF. L’avantage principal de XDP est qu’il ne nécessite pas de modification du noyau, ce qui était un énorme casse-tête pour les ingénieurs.

Mais comme on dit, un grand pouvoir implique de grandes responsabilités. Comme XDP exécute eBPF le plus tôt possible avant que les paquets ne soient analysés par le noyau lui-même, les programmes eBPF doivent faire toute l’analyse eux-mêmes et ne peuvent pas compter sur le noyau pour faire quoi que ce soit pour eux.

En tant que programmeur, la plupart du temps, vous travaillez avec le terminal. Voici un guide pour décorer votre invite de terminal. N’hésitez pas à le consulter.

À lire aussi : Comment rétrograder le noyau dans Linux

Cas d’utilisation courants de XDP et eBPF

  1. Attaque DDoS : Le principal cas d’utilisation de XDP est la protection DDoS (Déni de Service Distribué). Lors d’une attaque DDoS, l’attaquant essaie d’utiliser un maximum de ressources du serveur en ne laissant aucun processus pour l’utilisateur final. En utilisant XDP comme la couche de mise en réseau très rapide, il n’y a aucun coût de traitement associé à rejeter un paquet de données réseau. Après le filtrage XDP, le paquet passe par toutes les autres méthodes de filtrage que le noyau Linux fournit.
  2. Équilibreur de charge : XDP est également utilisé comme équilibreur de charge pour gérer une énorme quantité de trafic vers le serveur. De nombreuses grandes entreprises technologiques, dont Facebook, utilisent cette technologie. Auparavant, les ingénieurs utilisaient un serveur dédié comme équilibreur de charge. Ce qui est très difficile à gérer et doit bien fonctionner pour servir des millions de clients. Mais imaginez utiliser la couche XDP comme un équilibreur de charge sans serveur central, par conséquent, aucun point de défaillance unique.
  3. Pare-feu : XDP avec eBPF peut être utilisé pour écrire diverses règles de pare-feu afin de protéger le système avec un overhead très minimal.

À lire aussi : Comment utiliser la commande Rm dans Linux

Questions fréquentes

Qu’est-ce que BCC dans eBPF ?

BCC est construit sur eBPF. C’est un ensemble d’outils ou un cadre pour le traçage et les programmes de manipulation du noyau qui est livré avec une interface de ligne de commande très utile. BCC aide à écrire des instructions du noyau en C. Il inclut également un wrapper autour de LLVM.

Qu’est-ce que libBPF ?

LibBPF est un ensemble alternatif d’outils pour créer une application BPF. Il est écrit dans le langage de programmation C.