


Plusieurs moteurs de collecte de paquets Linux classiques
Cet article répertorie quatre moteurs de collecte de paquets Linux classiques. Si vous pensez qu'il y en a d'autres, vous pouvez laisser un message. Ces quatre sont :
libpcap/libpcap-mmap PF_RING DPDK xdp
libpcap
Le mécanisme de capture de paquets delibpcap se trouve au niveau de la couche liaison de données. Ajouter un contournement processus qui n'interfère pas avec le traitement de la propre pile de protocoles réseau du système. Les paquets de données envoyés et reçus sont filtrés et mis en mémoire tampon via le noyau Linux, et finalement transmis directement à l'application de couche supérieure.
Le paquet de données arrive sur le périphérique de la carte réseau. Le périphérique de carte réseau effectue des opérations DMA en fonction de la configuration. ("Première copie" : Registre de la carte réseau -> tampon en anneau alloué par le noyau pour la carte réseau) La carte réseau envoie une interruption et réveille le processeur. Le logiciel pilote lit à partir du tampon en anneau et remplit la structure skbuff du noyau ( "Deuxième copie" : tampon en anneau de la carte réseau du noyau-> structure de données spécifique au noyau skbuff) Appelez ensuite la fonction netif_receive_skb :
5.1 S'il existe un programme de capture de paquets, entrez le filtre BPF via la sous-interface réseau et copiez les paquets correspondant aux règles dans le cache du noyau système ( "3ème copie " ). BPF associe un filtre et deux tampons à chaque programme de capture de paquets nécessitant un service. BPF alloue des tampons et sa taille est généralement de 4 Ko. Le tampon de stockage est utilisé pour recevoir les données de l'adaptateur ; le tampon de conservation est utilisé pour copier les paquets vers l'application. 5.2 Traitez la fonction de pontage de la couche liaison de données ; 5.3 Déterminez le protocole de couche supérieure en fonction du champ skb->protocol et soumettez-le à la couche réseau pour traitement, entrez la pile de protocole réseau et effectuer un traitement de haut niveau. libpcap contourne le traitement de la pile de protocoles du processus de collecte de paquets du noyau Linux, permettant à l'API de l'espace utilisateur d'appeler directement le socket PF_PACKET pour obtenir une copie du paquet de données du pilote de couche de liaison et de le mettre en mémoire tampon à partir du La zone du noyau est copiée dans le tampon de l'espace utilisateur ("La 4ème copie") SNA (Shared-nothing Architecture), l'architecture logicielle est décentralisée, essayant d'éviter le partage mondial, provoquant une concurrence mondiale et perdant la capacité de s'étendre horizontalement. Sous le système NUMA, la mémoire n'est pas utilisée à distance entre les nœuds. SIMD (Single Instruction Multiple Data), du premier mmx/sse au dernier avx2, les capacités du SIMD ont augmenté. DPDK utilise le traitement par lots de plusieurs paquets en même temps, puis utilise la programmation vectorielle pour traiter tous les paquets en un seul cycle. Par exemple, memcpy utilise SIMD pour augmenter la vitesse. affinité CPU : c'est-à-dire affinité CPU - Les scénarios d'utilisation de XDP incluent :
- Défense DDoS
- Pare-feu
- Équilibrage de charge basé sur XDP_TX
- Statistiques réseau
-
- OK, ce qui précède est le partage d'aujourd'hui. Si vous pensez qu'il existe d'autres moteurs de collecte de paquets, vous pouvez laisser un message à partager.
libpcap-mmap
libpcap-mmap est une amélioration de l'ancienne implémentation de libpcap et est essentiellement utilisée dans la nouvelle versions du mécanisme libpcap packet_mmap. PACKET_MMAP réduit une copie de mémoire via mmap ("La quatrième copie a disparu"), réduit les appels système fréquents et améliore considérablement l'efficacité de la capture de paquets.
PF_RING
Nous avons vu que libpcap avait 4 copies de mémoire auparavant. libpcap_mmap dispose de 3 copies mémoire. La solution principale proposée par PF_RING est de réduire le nombre de copies des messages lors de la transmission.
Nous pouvons voir que par rapport à libpcap_mmap, pfring permet à la mémoire de l'espace utilisateur de mapper directement avec rx_buffer. Cela réduit une autre copie ( "La deuxième copie de libpcap_mmap" : rx_buffer->skb)
PF-RING ZC implémente la technologie DNA (Direct NIC Access direct network card access) pour mapper l'espace mémoire utilisateur à la mémoire du pilote. espace afin que l'application de l'utilisateur puisse accéder directement aux registres et aux données de la carte réseau.
De cette façon, la mise en mémoire tampon des paquets de données dans le noyau est évitée et une copie est réduite ("La première copie de libpcap", copie du tampon DMA vers le noyau). Il s’agit d’une copie totalement nulle.
L'inconvénient est qu'une seule application peut ouvrir l'anneau DMA à la fois (notez que les cartes réseau actuelles peuvent avoir plusieurs files d'attente RX/TX, permettant à une application d'être sur chaque file d'attente en même temps), autrement dit , plusieurs applications en mode utilisateur doivent communiquer entre elles pour distribuer des paquets de données.
DPDK
pf-ring zc et dpdk peuvent obtenir une copie nulle des paquets de données. Les deux contournent le noyau, mais les principes d'implémentation sont légèrement différents. PF-ring zc prend en charge les paquets de données via le pilote zc (également au niveau de la couche application), et dpdk est implémenté sur la base de UIO.
1 UIO+mmap implémente zéro copie
UIO (Userspace I/O) est une technologie d'E/S qui s'exécute dans l'espace utilisateur. Généralement, les périphériques pilotes des systèmes Linux s'exécutent dans l'espace noyau et peuvent être appelés par les applications dans l'espace utilisateur. Cependant, UIO exécute une petite partie du pilote dans l'espace noyau et implémente la grande majorité du pilote dans l'espace utilisateur. Fonction. Grâce au mécanisme UIO fourni par Linux, le noyau peut être contourné et tout le travail de traitement des paquets est effectué dans l'espace utilisateur.
2 UIO+PMD réduit les interruptions et le changement de contexte du processeur
Le pilote UIO de DPDK bloque les interruptions émises par le matériel, puis utilise l'interrogation active en mode utilisateur. Ce mode est appelé PMD (Poll Mode Driver).
Par rapport à DPDK, pf-ring (pas de zc) utilise l'interrogation NAPI et l'interrogation de la couche d'application, tandis que pf-ring zc est similaire à DPDK et utilise uniquement l'interrogation de la couche d'application.
3 HugePages réduisent les erreurs TLB
Après l'introduction de la MMU (Memory Management Unit) dans le système d'exploitation, le CPU doit accéder à la mémoire deux fois pour lire les données de la mémoire. La première fois consiste à interroger la table des pages pour convertir l'adresse logique en adresse physique, puis à accéder à l'adresse physique pour lire des données ou des instructions.
Afin de réduire le problème du temps de requête long causé par un trop grand nombre de pages et des tables de pages trop volumineuses, TLB (Translation Lookaside Buffer) a été introduit, qui peut être traduit comme un tampon de traduction d'adresses. Le TLB est une unité de gestion de mémoire, généralement stockée dans un registre, qui stocke une petite partie des entrées de table de pages les plus susceptibles d'être consultées actuellement.
Après l'introduction du TLB, le CPU ira d'abord au TLB pour s'adresser. Étant donné que le TLB est stocké dans un registre et ne contient qu'une petite partie des entrées de la table des pages, la vitesse de requête est très rapide. Si l'adressage dans TLB réussit (TLB hit), il n'est pas nécessaire d'interroger la table des pages dans la RAM ; si l'adressage dans TLB échoue (TLB miss), vous devez interroger la table des pages dans la RAM. Après avoir interrogé la page. sera mis à jour dans le TLB.
DPDK utilise HugePages, qui prend en charge des tailles de page de 2 Mo et 1 Go sous x86-64, ce qui réduit considérablement le nombre total de pages et la taille de la table des pages, réduisant ainsi considérablement la probabilité de manque de TLB et améliorant les performances d'adressage du processeur.
4 Autres optimisations
XDP
Plan de traitement des données, xdp crée un plan rapide de données dans la couche pilote. Le paquet de données est traité avant que les données ne soient enregistrées par le matériel de la carte réseau dans la mémoire et que skb ne soit alloué.
Veuillez noter que XDP n'effectue pas de contournement du noyau sur les paquets de données, il effectue simplement une petite vérification préalable.
Par rapport à DPDK, XDP présente les avantages suivants :
Pas besoin de bibliothèques de codes et de licences tierces définir de nouveaux modèles de réseau sécurisésCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

C La compilation conditionnelle du langage est un mécanisme pour compiler sélectivement les blocs de code en fonction des conditions de temps de compilation. Les méthodes d'introduction incluent: l'utilisation des directives #IF et #ELSE pour sélectionner des blocs de code en fonction des conditions. Les expressions conditionnelles couramment utilisées incluent STDC, _WIN32 et Linux. Cas pratique: imprimez différents messages en fonction du système d'exploitation. Utilisez différents types de données en fonction du nombre de chiffres du système. Différents fichiers d'en-tête sont pris en charge selon le compilateur. La compilation conditionnelle améliore la portabilité et la flexibilité du code, ce qui le rend adaptable aux modifications du compilateur, du système d'exploitation et de l'architecture du processeur.

Les cinq composants de base de Linux sont: 1. Le noyau, gérant les ressources matérielles; 2. La bibliothèque système, fournissant des fonctions et des services; 3. Shell, l'interface pour les utilisateurs pour interagir avec le système; 4. Le système de fichiers, stockant et organisant des données; 5. Applications, en utilisant des ressources système pour implémenter les fonctions.

Il existe de nombreuses raisons pour lesquelles la startup MySQL échoue, et elle peut être diagnostiquée en vérifiant le journal des erreurs. Les causes courantes incluent les conflits de port (vérifier l'occupation du port et la configuration de modification), les problèmes d'autorisation (vérifier le service exécutant les autorisations des utilisateurs), les erreurs de fichier de configuration (vérifier les paramètres des paramètres), la corruption du répertoire de données (restaurer les données ou reconstruire l'espace de la table), les problèmes d'espace de la table InNODB (vérifier les fichiers IBDATA1), la défaillance du chargement du plug-in (vérification du journal des erreurs). Lors de la résolution de problèmes, vous devez les analyser en fonction du journal d'erreur, trouver la cause profonde du problème et développer l'habitude de sauvegarder régulièrement les données pour prévenir et résoudre des problèmes.

MySQL ne peut pas fonctionner directement sur Android, mais il peut être implémenté indirectement en utilisant les méthodes suivantes: à l'aide de la base de données légère SQLite, qui est construite sur le système Android, ne nécessite pas de serveur distinct et a une petite utilisation des ressources, qui est très adaptée aux applications de périphériques mobiles. Connectez-vous à distance au serveur MySQL et connectez-vous à la base de données MySQL sur le serveur distant via le réseau pour la lecture et l'écriture de données, mais il existe des inconvénients tels que des dépendances de réseau solides, des problèmes de sécurité et des coûts de serveur.

La solution à l'erreur d'installation de MySQL est: 1. Vérifiez soigneusement l'environnement système pour vous assurer que les exigences de la bibliothèque de dépendance MySQL sont satisfaites. Différents systèmes d'exploitation et exigences de version sont différents; 2. Lisez soigneusement le message d'erreur et prenez des mesures correspondantes en fonction des invites (telles que les fichiers de bibliothèque manquants ou les autorisations insuffisantes), telles que l'installation de dépendances ou l'utilisation de commandes sudo; 3. Si nécessaire, essayez d'installer le code source et vérifiez soigneusement le journal de compilation, mais cela nécessite une certaine quantité de connaissances et d'expérience Linux. La clé pour finalement résoudre le problème est de vérifier soigneusement l'environnement du système et les informations d'erreur et de se référer aux documents officiels.

Les principales raisons de la défaillance de l'installation de MySQL sont les suivantes: 1. Problèmes d'autorisation, vous devez s'exécuter en tant qu'administrateur ou utiliser la commande sudo; 2. Des dépendances sont manquantes et vous devez installer des packages de développement pertinents; 3. Conflits du port, vous devez fermer le programme qui occupe le port 3306 ou modifier le fichier de configuration; 4. Le package d'installation est corrompu, vous devez télécharger et vérifier l'intégrité; 5. La variable d'environnement est mal configurée et les variables d'environnement doivent être correctement configurées en fonction du système d'exploitation. Résolvez ces problèmes et vérifiez soigneusement chaque étape pour installer avec succès MySQL.

Impossible d'accéder à MySQL à partir du terminal peut être dû à: le service MySQL n'est pas en cours d'exécution; Erreur de commande de connexion; autorisations insuffisantes; Connexion de blocs de pare-feu; Erreur de fichier de configuration MySQL.
