


Décrire brièvement le processus d'envoi et de réception de paquets de données réseau dans le système Linux
Lorsque le serveur Linux reçoit le paquet de données réseau, quel traitement doit être effectué pour transférer les données étape par étape vers le processus d'application ? Lorsqu'un processus d'application envoie un paquet de données, comment Linux envoie-t-il le paquet de données ? Aujourd'hui, nous allons parler de ce sujet.
Avant d'être prêt à recevoir des paquets de données réseau, Linux doit effectuer de nombreux travaux de préparation, tels que : l'initialisation du sous-système réseau, l'enregistrement de la pile de protocoles, l'initialisation du pilote de la carte réseau, le démarrage de la carte réseau, etc. Ce n'est que lorsque ceux-ci seront prêts qu'il pourra réellement commencer à recevoir des paquets réseau.
Pile de protocoles réseau
Avant de présenter Linux pour envoyer et recevoir des paquets de données réseau, comprenons d'abord la pile de protocoles réseau Linux.
L'Organisation internationale de normalisation a formulé le modèle de référence d'interconnexion des systèmes ouverts, qui est le modèle de réseau OSI. Le modèle comporte principalement 7 couches, à savoir la couche application, la couche présentation, la couche session, la couche transport et la couche réseau, la couche liaison de données et. couche physique.
Parce que le modèle OSI est trop complexe, il ne s'agit que d'un modèle conceptuel et théorique avec trop de couches, ce qui augmente la complexité du travail en réseau, il n'a donc pas été appliqué à grande échelle.
Le modèle de réseau le plus couramment utilisé est le modèle de réseau TCP/IP. Le système Linux implémente la pile de protocoles réseau selon ce modèle de réseau.
Le modèle de réseau TCP/IP comporte 4 couches, à savoir la couche application, la couche transport, la couche réseau et la couche interface réseau. Les fonctions de chaque couche sont les suivantes :
1. Couche applicative Correspond à la couche supérieure du modèle de référence OSI, offrant aux utilisateurs les différents services requis, tels que : FTP, Telnet, DNS, SMTP, etc.
2. Couche Transport Correspondant à la couche transport du modèle de référence OSI, elle fournit des fonctions de communication de bout en bout pour les entités de la couche application, assurant la transmission séquentielle des paquets de données et l'intégrité des données. Cette couche définit deux protocoles principaux : Transmission Control Protocol (TCP) et User Datagram Protocol (UDP).
3. Couche réseau Correspond à la couche réseau du modèle de référence OSI et résout principalement les problèmes de communication d'hôte à hôte. Il contient des protocoles conçus pour la transmission logique de paquets de données sur l'ensemble du réseau. Il se concentre sur la réattribution d'une adresse IP à l'hôte pour compléter l'adressage de l'hôte. Il est également responsable du routage des paquets de données dans divers réseaux. Il existe trois protocoles principaux dans cette couche : Internet Protocol (IP), Internet Group Management Protocol (IGMP) et Internet Control Message Protocol (ICMP).
4. Couche d'interface réseau Correspond à la couche physique et à la couche liaison de données dans le modèle de référence OSI. Il est chargé de surveiller l’échange de données entre l’hôte et le réseau. En fait, TCP/IP lui-même ne définit pas le protocole de cette couche. Au lieu de cela, chaque réseau participant à l'interconnexion utilise ses propres protocoles de couche physique et de couche liaison de données, puis se connecte à la couche d'accès réseau de TCP/IP. Le protocole de résolution d'adresse (ARP) fonctionne au niveau de cette couche, la couche liaison de données du modèle de référence OSI.
Recevoir des paquets réseau

Une fois que le paquet de données réseau atteint la carte réseau, il est stocké dans la file d'attente de réception de la carte réseau dans l'ordre FIFO. La carte réseau écrit le paquet réseau à l'adresse mémoire spécifiée (Ring Buffer) via la technologie DMA.
Ring Buffer est créé et initialisé au démarrage du pilote de la carte réseau et stocke le descripteur du tampon sk_buff (adresse physique et taille, etc.).
«
Lorsque le paquet réseau arrive, récupérez le descripteur sk_buff pointé du Ring Buffer et écrivez les données à l'adresse via DMA. Une fois que les données de sk_buff sont transmises à la pile de protocole supérieure pour traitement, la description dans le Ring Buffer est mise à jour avec le sk_buff nouvellement alloué.
”
Ensuite, la carte réseau lance une interruption matérielle vers le processeur. Lorsque le processeur reçoit la demande d'interruption matérielle, il trouve la fonction de traitement d'interruption enregistrée conformément au registre des interruptions.
La fonction de gestionnaire d'interruption matérielle fera les choses suivantes :
1. Protéger les interruptions de la carte réseau
«
Le but est d'éviter que le processeur soit fréquemment interrompu et incapable de gérer d'autres tâches. Le masquage des interruptions indique à la carte réseau qu'elle sait déjà qu'il y a des données dans la mémoire, la prochaine fois qu'elle recevra un paquet de données, elle pourra simplement y écrire. la mémoire directement sans en avertir le CPU.
”
2. Initiez une interruption logicielle et restaurez l'interruption qui vient d'être bloquée
«
Une fois que le thread ksoftirqd du noyau a reçu l'interruption logicielle, il appellera la fonction de traitement d'interruption logicielle correspondante pour interroger et traiter les données, c'est-à-dire : obtenir une trame de données du Ring Buffer, représenté par sk_buff, et la remettre au protocole réseau sous forme de paquet réseau La pile est traitée couche par couche de bas en haut.
”
La pile de protocoles réseau traite les paquets réseau comme suit :
1. Couche d'interface réseau
«
Tout d'abord, la couche d'interface réseau vérifie la légalité et l'exactitude du message. S'il est illégal ou si la vérification du message est incorrecte, supprimez-le. Sinon, recherchez le type de protocole de couche supérieure (IPv4 ou IPv6), supprimez l'en-tête de trame. et la fin du cadre, puis laissez-le à la couche supérieure, la couche réseau, pour le traitement.
”
2. Couche réseau
«
La couche réseau supprime l'en-tête IP et détermine la direction suivante du paquet réseau, qu'il soit transmis ou transmis à la couche supérieure. Après avoir confirmé que le paquet réseau doit être envoyé à la machine locale, le type de protocole de couche supérieure (tel que TCP ou UDP) est supprimé, l'en-tête IP est supprimé, puis transmis à la couche de transport pour traitement.
”
3. Couche de transport
«
Une fois que la couche de transport a retiré l'en-tête TCP ou l'en-tête UDP, elle trouve le Socket correspondant en fonction du quatre tuple [IP source, port source, IP de destination, port de destination] et copie les données dans le tampon de réception du Socket.
”
4. Couche d'application
«
Enfin, le programme de la couche application appelle l'interface Socket pour copier les données du tampon de réception Socket du noyau vers le tampon de la couche application.
”
À ce stade, le processus de réception d'un paquet réseau est terminé.
Envoyer un paquet réseau
Après avoir compris le processus de réception des paquets réseau, il est facile de comprendre le processus d'envoi des paquets réseau. Le sens d’envoi des paquets réseau est exactement opposé au sens de réception.
Tout d'abord, l'application appelle l'interface Socket pour envoyer des paquets réseau. Il s'agit d'un appel système qui passera du mode utilisateur à la couche socket du mode noyau.
La couche socket demandera une mémoire sk_buff en mode noyau, copiera les données à envoyer par l'utilisateur dans la mémoire sk_buff et les ajoutera au tampon d'envoi du socket pour attendre le traitement par la pile de protocole réseau.
Étant donné que les paquets de données réseau sont des données brutes lorsqu'ils sont transmis de l'application au noyau, la pile de protocoles doit ajouter des conventions de communication aux données brutes pour garantir que les données peuvent être correctement reconnues lorsqu'elles atteignent le serveur. La pile de protocole réseau extrait le paquet de données du tampon d'envoi Socket, puis le traite couche par couche de haut en bas selon les couches de la pile TCP/IP (couche transport, couche réseau, couche d'interface réseau). convertit l'en-tête du protocole. Les informations sont continuellement insérées dans les paquets de données.
Le flux de traitement de la pile de protocoles pour l'envoi de paquets de données est le suivant :
1. Couche de transport
«
Au niveau de la couche de transport, un en-tête TCP sera ajouté au serveur et une nouvelle copie de sk_buff sera copiée car sk_buff sera libéré lorsqu'il atteindra la carte réseau et que la transmission sera terminée, et le protocole TCP prend en charge la retransmission. . Afin de garantir la transmission fiable du paquet réseau, ce sk_buff ne peut pas être supprimé avant de recevoir l'ACK de l'autre partie.
”
2. Couche réseau
«
Au niveau de la couche réseau, il effectue principalement le travail suivant : sélection des routes (confirmation de l'IP du prochain saut), remplissage des en-têtes IP, filtrage netfilter et fragmentation des paquets de données qui dépassent la taille MTU. Après avoir traité ces tâches, elles seront transmises à la couche d'interface réseau pour traitement.
”
3. Couche d'interface réseau
«
La couche d'interface réseau effectuera un adressage d'adresse physique pour trouver l'adresse MAC du prochain saut, remplira l'en-tête de trame et la fin de trame, et les placera dans la file d'attente d'envoi. Déclenchez ensuite une interruption logicielle pour indiquer au pilote de la carte réseau : il y a de nouveaux paquets réseau dans la file d'attente qui doivent être envoyés. Lorsque le pilote reçoit la notification, il lira la trame réseau de la file d'attente des paquets d'envoi via DMA et écrira les données dans la file d'attente d'envoi FIFO de la carte réseau via DMA.
”
4. Équipement de carte réseau
«
Le périphérique de carte réseau retire le paquet de données de la file d'attente de transmission FIFO et l'envoie au réseau ; lorsque la transmission est terminée, le périphérique de carte réseau déclenchera une interruption brutale pour libérer de la mémoire, principalement pour libérer la mémoire sk_buff et nettoyer RingBuffer. mémoire. Enfin, lorsque la réponse ACK de ce message TCP est reçue, la couche transport libère le sk_buff d'origine.
”
À ce stade, le processus d'envoi d'un paquet réseau est terminé.
Ce 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

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Sujets chauds

Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

Les cinq composants de base du système Linux sont: 1. Kernel, 2. Bibliothèque système, 3. Utilitaires système, 4. Interface utilisateur graphique, 5. Applications. Le noyau gère les ressources matérielles, la bibliothèque système fournit des fonctions précompilées, les utilitaires système sont utilisés pour la gestion du système, l'interaction GUI fournit une interaction visuelle et les applications utilisent ces composants pour implémenter des fonctions.

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

Visual Studio Code (VSCODE) est un éditeur de code Open Source, Open Source et gratuit développé par Microsoft. Il est connu pour son léger, l'évolutivité et le support pour une large gamme de langages de programmation. Pour installer VScode, veuillez visiter le site officiel pour télécharger et exécuter l'installateur. Lorsque vous utilisez VSCODE, vous pouvez créer de nouveaux projets, modifier le code, déboguer le code, naviguer dans les projets, développer VSCODE et gérer les paramètres. VScode est disponible pour Windows, MacOS et Linux, prend en charge plusieurs langages de programmation et fournit diverses extensions via Marketplace. Ses avantages incluent le léger, l'évolutivité, le support linguistique étendu, les fonctionnalités riches et la version

Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.
