Maison > Tutoriel système > Linux > Décrire brièvement le processus d'envoi et de réception de paquets de données réseau dans le système Linux

Décrire brièvement le processus d'envoi et de réception de paquets de données réseau dans le système Linux

WBOY
Libérer: 2024-02-12 21:54:33
avant
678 Les gens l'ont consulté

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.
Décrire brièvement le processus denvoi et de réception de paquets de données réseau dans le système Linux

Recevoir des paquets réseau


Décrire brièvement le processus denvoi et de réception de paquets de données réseau dans le système Linux

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!

source:lxlinux.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal