Pourquoi le protocole ICMP est-il l'aide la plus puissante du réseau ?

Aujourd'hui, parlons du protocole ICMP. ICMP peut être considéré comme le support le plus puissant dans le monde des réseaux. Si un paquet de données IP rencontre un accident en cours de route, il dépend d'ICMP pour le notifier. Le paquet a-t-il été transmis avec succès ? Si ce n'est pas le cas, quelle est la raison du échec? Ceux-ci sont tous notifiés par le protocole ICMP.

ICMP signifie Internet Control Message Protocol (Internet Control Message Protocol), qui est un protocole important au niveau de la couche réseau.

A quoi sert ICMP ?

Pourquoi est-ce? Pourquoi est-il appelé Control Message Protocol et que contrôle-t-il ?

ICMP est divisé en deux catégories : les messages de requête et les messages d'erreur. Le message de requête est initié par nous, comme la commande ping ; le message d'erreur est envoyé à la source après qu'une erreur se soit produite, ce qui est convenu par le modèle de protocole Internet.

Un retour de message d'erreur ICMP se produit dans divers problèmes rencontrés dans l'environnement de communication. Grâce à ces informations, les gestionnaires peuvent diagnostiquer les problèmes et prendre les mesures appropriées pour les résoudre.

Le message d'erreur ICMP est un maillon très important dans l'ensemble de la liaison de transmission de données. Pour utiliser une métaphore, le message d'erreur est un messager qui ne signale que les mauvaises nouvelles. Lorsque le paquet de données est sans entrave tout le long du réseau, le message d'erreur ICMP est comme furtif, et vous ne saurez jamais son existence. Lorsque vous rencontrez divers obstacles dans le réseau, ce messager sortira pour des activités. Il n'a qu'un seul but, qui est de notifier à l'expéditeur l'accident rencontré par ce paquet de données, mais il n'y a que plus de 20 sortes de mots (correspondant à des codes d'erreur).

Par exemple, les deux scénarios suivants doivent vous être familiers.

  • Lorsqu'un routeur reçoit un datagramme IP mais ne peut pas le transférer, il envoie un message d'erreur ICMP "hôte inaccessible".

  • Lorsqu'un datagramme IP doit être envoyé à un autre routeur, le routeur qui a reçu le datagramme envoie un message d'erreur ICMP "Redirect" à l'expéditeur du datagramme IP.

Description du protocole ICMP

Bien qu'il fonctionne au niveau de la couche réseau, il semble être en parallèle avec le protocole IP, mais l'en-tête IP est attaché au message ICMP, qui est généralement utilisé par la couche IP ou les protocoles de couche supérieure (tels que TCP ou UDP). Peu d'applications utilisent directement le protocole ICMP, à l'exception  de ping.traceroute

Format de protocole ICMP

Comparé au protocole IP et au protocole TCP, le format du protocole ICMP est encore très simple.

taper

Le champ type occupe 8 bits et définit principalement la catégorie générale du message. Par exemple, le type 3 signifie oui 不可达et la raison spécifique est déterminée par le champ code.

le code

Le champ de code occupe également 8 bits. Le champ de code est en fait un sous-type sous le type. Par exemple, ce qui précède mentionné que le type est 3 est inaccessible, le code est 0, le réseau est inaccessible et le code est 1, le l'hôte est inaccessible.

somme de contrôle

Il est utilisé pour la vérification des erreurs, ce qui est cohérent avec la somme de contrôle du protocole IP.

contenu

Étant donné que les types et les codes sont différents, cela signifie que les raisons des erreurs sont différentes et que les différentes raisons doivent avoir des descriptions correspondantes. La partie contenu est utilisée pour décrire les raisons des erreurs.

Quelques exemples seront donnés par la suite.

L'image ci-dessous est la classification d'ICMP, y compris les messages de requête et les messages d'erreur. Les étudiants qui ont besoin de l'Excel original peuvent répondre pour  ICMPobtenir le fichier source.

Message d'erreur de destination inaccessible

La destination inaccessible est un problème souvent rencontré dans la transmission réseau. Vous l'avez peut-être rencontré au cours du processus de développement, en particulier lors de la programmation réseau, comme la connexion à la mauvaise adresse IP ou la configuration du mauvais port.

On peut voir dans le tableau ci-dessus que lorsque le type est 3, il s'agit d'une erreur inaccessible, et le code peut aller de 0 à 15, c'est-à-dire qu'il existe 16 raisons spécifiques d'inaccessibilité. Le format de protocole dans ce cas est le suivant.

Type 3, codes 0 - 15. Il y a 4 octets d'espace après la somme de contrôle qui ne sont pas utilisés, mais doivent être 0, sans raison, c'est tout.

Comme mentionné précédemment, la partie contenu est différente selon le type et le code. Si la destination est inaccessible, c'est-à-dire lorsque le type est 3, le contenu est divisé en deux parties, l'en-tête IP et les 8 premiers octets de la partie données du datagramme IP d'origine.

La partie données du datagramme IP d'origine fait référence au protocole au-dessus de la couche réseau de TCP ou UDP. En prenant TCP comme exemple, TCP se trouve au niveau de la couche transport. Lorsque le datagramme TCP atteint la couche réseau, il ajoutera l'en-tête IP et devenir un pack de données IP. Donc la partie données évoquée ici est le datagramme TCP, mais ce datagramme peut être très volumineux, donc seuls les 8 premiers octets suffisent, car les informations contenues dans les 8 premiers octets suffisent.

Rappelons le format du protocole TCP, les 8 premiers octets sont la case rouge sur la figure ci-dessous, comprenant le port source, le port destination et le numéro de série.

Par exemple, lorsque le code est 3, le message d'erreur est que le port est inaccessible, puis avec les 8 premiers octets du protocole TCP, vous pouvez connaître le port de destination dans le message de données d'origine qui a causé l'erreur, et le port inaccessible est ce port. Vous pouvez également connaître le port source du paquet d'origine. Avec le numéro de port source, vous pouvez savoir quel processus utilisateur a envoyé le paquet de données et vous pouvez le transmettre à ce processus pour gérer l'erreur à temps.

Le numéro de port source est un indicateur important du processus utilisateur associé.Par exemple, nous avons développé une application qui occupe deux ports 8888 et 8898. Si la machine sur laquelle l'application est installée reçoit un message d'erreur, le contenu du message d'erreur Après en démontant les 8 premiers octets d'une partie du paquet de données d'origine, on constate que le port source est 8898, nous savons donc que cela sera géré par l'application que nous avons développée.

Vous trouverez ci-dessous un message d'erreur de port inaccessible au format détecté par WireSharek.

telnet un port non ouvert pour obtenir un message d'erreur de port ICMP inaccessible.

message de requête

Il existe relativement peu de scénarios dans lesquels ICMP est utilisé comme message de requête. La signification de l'utilisation d'ICMP comme message de requête est similaire à l'utilisation du protocole ARP ou du protocole TCP. Il est initié par nous, mais le protocole ICMP est sélectionné.

Par exemple,  ping avec  tracerouteces deux-là, nous en reparlerons plus tard, ces deux-là sont plus intéressants, et ils sont très malins pour l'application d'ICMP.

De plus, il peut être utilisé comme système sans disque pour obtenir son propre masque de sous-réseau au démarrage. Il peut également être utilisé pour interroger l'horodatage actuel à partir d'un système tiers.

Apprenez simplement à le connaître.

Dans certains scénarios, les messages d'erreur ne sont pas envoyés

Dans certains scénarios, les paquets d'erreur ne sont pas envoyés, afin d'éviter les tempêtes de diffusion causées par les paquets d'erreur ICMP.

  1. Si une erreur se produit dans le message d'erreur ICMP lui-même, aucun message d'erreur ne sera envoyé au message d'erreur. Est-ce un peu compliqué à lire, une erreur TCP, UDP enverra un message d'erreur, mais un message d'erreur ICMP en cours de notification de la source d'une erreur, alors ne vous en souciez pas, sinon cela peut être inutile, comme la fin de la source Le le câble réseau est en panne. Cependant, le message de requête ICMP peut générer un message d'erreur ICMP.Par exemple, si une erreur se produit lors de la transmission de la commande ping, l'extrémité source recevra un message d'erreur.

  2. Le datagramme IP dont l'adresse de destination est une adresse broadcast ou une adresse multicast (adresse de classe D) n'envoie pas de message d'erreur.

  3. En tant que datagramme de diffusion de couche liaison, aucun message d'erreur n'est envoyé et ARP est un datagramme de diffusion de couche liaison typique.

  4. S'il ne s'agit pas du premier morceau de fragmentation IP, aucun message d'erreur n'est envoyé. Si les données sont trop longues, la couche réseau les fragmentera.Ces fragments sont en fait le même paquet de données.Dans ce cas, seul le premier fragment est envoyé avec un message d'erreur, et les autres fragments sont ignorés.

  5. Pour les datagrammes dont l'adresse source n'est pas un hôte unique, aucun message d'erreur n'est envoyé. L'adresse source ne peut pas être une adresse zéro, une adresse de bouclage, une adresse de diffusion ou une adresse de multidiffusion.

Résumer

1. ICMP est au niveau de la couche réseau, mais l'en-tête IP doit être ajouté ;

2. ICMP est divisé en messages de requête et messages d'erreur, et les messages d'erreur sont principalement utilisés ;

3. Le message d'erreur ICMP est comme un message qui notifie uniquement les mauvaises nouvelles. Lorsqu'un datagramme a un problème sur le réseau, la source est notifiée à temps. Le contenu de la notification comprend la raison et la partie nécessaire du datagramme original qui causé l'erreur ;

4. Dans certains cas, les messages d'erreur ICMP ne seront pas envoyés, ceci afin d'éviter les tempêtes de réseau ;

Si vous pensez que c'est bon, veuillez donner une recommandation! Compte public "Ancient Kite", développeur Java

Je suppose que tu aimes

Origine blog.csdn.net/Z__7Gk/article/details/131533835
conseillé
Classement