2.9. En-têtes ICMP

Comme déjà expliqué, les en-têtes de type ICMP diffèrent légèrement du type IP. La plupart des types ICMP permettent de les grouper par leurs en-têtes. À cause de cela, nous verrons en premier l'en-tête de base, et ensuite chaque groupe de type spécifique.

Tous les paquets contiennent des valeurs de base des en-têtes IP comme nous l'avons vu précédemment.

  • Version - Doit toujours être placé à 4.

  • Longueur en-tête Internet - Longueur de l'en-tête en mots de 32 bits.

  • Type de Service - Voir au-dessus. Doit être placé à 0, seule légitimité selon la RFC 792 - Internet Control Message Protocol.

  • Longueur totale - Longueur totale de l'en-tête et de la partie données du paquet, compté en octets.

  • Décalages d'Identification de fanions et fragments - Issu du protocole IP.

  • Durée de vie - Nombre de sauts que le paquet peut effectuer.

  • Protocole - Quelle version de ICMP est utilisée (doit toujours être à 1).

  • En-tête somme de contrôle Voir l'explication IP.

  • Adresse source - L'adresse de la source qui a envoyé le paquet. Ce n'est pas entièrement vrai, car le paquet peut avoir une autre adresse source, que celle située sur la machine en question. Les types ICMP peuvent produire cet effet, ce sera noté si nécessaire.

  • Adresse de destination - L'adresse de destination du paquet.

Il existe aussi de nouveaux en-têtes utilisés par les types ICMP. Ce sont les suivants :

  • Type - Le champ type contient le type ICMP du paquet. Par exemple les paquets ICMP Destination Injoignable auront un type 3 placé. Pour une liste complète des différents types ICMP voir Annexe C, Types ICMP. Ce champ contient 8 bits au total.

  • Code - Tous les types ICMP contiennent différents codes. Certains types ont un code unique, tandis que d'autres ont plusieurs codes qu'ils peuvent utiliser. Par exemple, le type ICMP Destination Injoignable peut avoir au moins les codes 0, 1, 2, 3, 4 ou 5. Chaque code aura un comportement différent selon le contexte. Pour une liste complète des différents codes, voir Annexe C, Types ICMP. Ce champ est de 8 bits de longueur totale. Nous verrons les différents codes un peu plus en détail plus tard dans cette section.

  • Somme de contrôle - La somme de contrôle est un champ de 16 bits contenant un complément de complément des en-têtes démarrant avec le type ICMP. Tandis que le calcul de la somme de contrôle s'effectue, le champ de celle-ci sera placé à zéro.

À ce point les en-têtes peuvent présenter un visage différent. Nous décrirons les types ICMP les plus communs un par un, avec un bref apperçu de leurs différents en-têtes et codes.

2.9.1. Écho requête/réponse ICMP

J'ai choisi de parler des paquets ICMP écho requête et réponse, ils sont très proches l'un par rapport à l'autre. La différence est que l'écho requête est de type 8, alors que l'écho réponse est de type 0. Quand un hôte reçoit un type 8, il répond avec un type 0.

Quand la réponse est envoyée, les adresses source et destination sont permutées. Après les deux changements effectués, la somme de contrôle est recalculée, et la réponse envoyée. Il y a un seul code pour les deux types, ils sont toujours placés à 0.

  • Identifiant - Il est placé dans le paquet requête, et se retrouve en retour dans la réponse, il permet de synchroniser les différents pings de requête et de réponse.

  • Numéro d'interclassement - Le numéro d'interclassement pour chaque hôte démarre généralement à 1 et est incrémenté de 1 pour chaque paquet.

Les paquets contiennent aussi une partie de données. Par défaut, la partie de données est généralement vide, mais elle peut contenir des données au hasard spécifiées par l'utilisateur.

2.9.2. Destination Injoignable ICMP

Les trois premiers champs montrés dans l'image sont les mêmes que ceux précédemment décrits. Le type Destination Injoignable possède six codes de base qui peuvent être utilisés, comme indiqué ci-dessous.

  • Code 0 - Réseau injoignable - Vous indique si un réseau spécifique est actuellement injoignable.

  • Code 1 - Hôte injoignable - Un hôte spécifique est actuellement injoignable.

  • Code 2 - Protocole injoignable - Ce code vous indique si un protocole spécifique (TCP, UDP, etc.) ne peut être joint pour l'instant.

  • Code 3 - Port injoignable - Si un port (ssh, http, ftp, etc.) n'est pas joignable vous obtenez ce message.

  • Code 4 - Fragmentation nécessaire et placement de DF - Si le paquet nécessite d'être fragmenté pour être délivré, mais que le bit "Do not Fragment" est placé dans le paquet, la passerelle retourne ce message.

  • Code 5 - Échec de la route source - Si la route source échoue pour quelque raison, ce message est retourné.

  • Code 6 - Destination réseau inconnue - S'il n'y a pas de route vers un réseau spécifique, ce message est retourné.

  • Code 7 - Destination hôte inconnue - S'il n'y a pas de route vers l'hôte spécifique, ce message est retourné.

  • Code 8 - Hôte source isolé (obsolète) - Si l'hôte est isolé, ce message sera retourné. Ce code est obsolète aujourd'hui.

  • Code 9 - Réseau de destination administrativement interdit - Si un réseau est bloqué au niveau de la passerelle et que votre paquet est incapable de le joindre à cause de ça, vous obtiendrez ce code ICMP en retour.

  • Code 10 - Hôte de destination administrativement interdit - Si vous ne pouvez joindre l'hôte parce qu'il a été interdit administrativement (ex. administration du routage), vous obtenez ce message.

  • Code 11 - Réseau injoignable pour TOS (Type de service) - Si un réseau est injoignable à cause d'un mauvais TOS placé dans votre paquet, ce code sera généré en retour.

  • Code 12 - Hôte injoignable pour TOS - Si votre paquet est incapable de joindre l'hôte à cause du TOS du paquet, ce message sera renvoyé.

  • Code 13 - Communication administrativement interdite par filtrage - Si le paquet est interdit pour une raison de filtrage (ex. pare-feu), vous obtenez le code 13 en retour.

  • Code 14 - Violation de loi de précédence - Envoyé par le premier routeur pour notifier à un hôte connecté que la précédence utilisée n'est pas autorisée pour la combinaison spécifique source/destination.

  • Code 15 - Effet de coupure de précédence - Le premier routeur peut envoyer ce message à un hôte si le datagramme reçu a un niveau de précédence trop bas.

Au sommet de tout ça, il existe également une petite partie "données", qui devrait être l'en-tête Internet et le datagramme IP d'origine en 64 bits. Si le protocole de niveau suivant contient des ports, etc. il est supposé que les ports seront disponibles dans les 64 bits supplémentaires.

2.9.3. Coupure de source

Un paquet coupure de source peut être envoyé à l'expéditeur d'un paquet ou d'un flux de paquets trop lents pour permettre de continuer à envoyer des données. Notez que la passerelle ou l'hôte que les paquets traversent peuvent aussi décharger les paquets sans prévenir, au lieu d'envoyer des paquets coupure de source.

Ces paquets ne contiennent pas d'en-têtes supplémentaires sauf la partie données, laquelle contient l'en-tête Internet plus les 64 bits du datagramme de données d'origine. Ceci est utilisé pour harmoniser le message de coupure source au processus correct, lequel envoie des données à travers la passerelle ou vers l'hôte de destination.

Tous les paquets coupure source ont leurs type ICMP placé à 4. Ils n'ont pas de codes sauf le 0.

[Note] Note

Aujourd'hui, il existe de nouveaux moyens de notifier à l'expéditeur ou au destinataire qu'une passerelle ou un hôte est en surcharge. Par exemple avec le système ECN (Explicit Congestion Notification).

2.9.4. Redirection

Le type redirection est envoyé dans un seul cas. Considérez ceci, vous avez un réseau (192.168.0.0/24) avec plusieurs clients et hôtes, et deux passerelles. Une passerelle sur un réseau 10.0.0.0/24, et une passerelle par défaut pour le reste de l'Internet. Maintenant considérez qu'un des hôtes soit sur le réseau 192.168.0.0./24 et n'ait pas de route vers 10.0.0.0/24, mais ait accès à la passerelle par défaut. Il envoie un paquet à la passerelle par défaut, laquelle bien sûr connait le réseau 10.0.0.0/24. Cette passerelle par défaut peut déduire qu'il est plus facile d'envoyer le paquet directement à la passerelle 10.0.0.0/24 car ce paquet entrera et quittera la passerelle par la même interface. La passerelle par défaut enverra désormais un paquet ICMP Redirect unique à l'hôte, à travers la passerelle 10.0.0.0/24. L'hôte saura maintenant que la passerelle la plus proche est 10.0.0.0/24, et l'utilisera dans le futur.

L'en-tête principal du type Redirect est le champ Gateway Internet Address. Ce champ indique à l'hôte la passerelle correcte, qui sera réellement utilisée. Le paquet contient aussi l'en-tête IP du paquet original, et les premiers 64 bits de données dans le paquet d'origine, lequel est utilisé pour se connecter au processus qui envoie les données.

Le type Redirection possède 4 codes, qui sont les suivants.

  • Code 0 - Redirection pour le réseau - Seulement utilisé pour rediriger l'ensemble du réseau (voir l'exemple ci-dessus).

  • Code 1 - Redirection pour l'hôte - Seulement utilisé pour les redirections d'un hôte spécifique.

  • Code 2 - Redirection pour TOS et réseau - Seulement utilisé pour rediriger un Type de Service spécifique et vers un ensemble réseau. Utilisé comme le code 0, mais aussi basé sur TOS.

  • Code 3 - Redirection pour TOS et hôte - Seulement utilisé pour rediriger vers un Type de Service spécifique vers un hôte spécifique. utilisé comme le code 1, mais aussi basé sur le TOS.

2.9.5. TTL égale 0

Le type ICMP TTL égale 0 est également connu comme "Time Exceeded Message" et possède le type 11, il a aussi 2 codes ICMP disponibles. Si le champ TTL atteint 0 pendant le transit à travers une passerelle ou un fragment réassemblé sur l'hôte de destination, le paquet doit être supprimé. Pour notifier ce problème à l'hôte expéditeur, nous pouvons envoyer un paquet ICMP TTL égale 0. L'expéditeur peut augmenter le TTL des paquets sortants si nécessaire.

Le paquet contient seulement la partie supplémentaire des données. Le champ données contient l'en-tête Internet plus 64 bits de données du paquet IP. Comme précédemment mentionné, le type TTL égale 0 peut avoir deux codes.

  • Code 0 - TTL égale 0 pendant le transit - Envoyé par l'expéditeur si le paquet TTL d'origine atteint 0 quand il est transféré par une passerelle.

  • Code 1 - TTL égale 0 pendant le réassemblage - Envoyé si le paquet d'origine était fragmenté, et que le TTL atteint 0 pendant le réassemblage des fragments. Ce code doit être envoyé uniquement depuis le destinataire.

2.9.6. Paramètre problème

Le paramètre problème ICMP utilise le type 12 et possède deux codes qu'il peut utiliser indifféremment. Les messages du paramètre problème sont utilisés pour indiquer à l'hôte que la passerelle ou le destinataire ont des problèmes de compréhension sur des parties d'en-tête IP, ou nécessitent des options qui ont été omises.

Le type paramètre problème contient un en-tête spécial, qui est un pointeur vers le champ qui a causé l'erreur dans le paquet d'origine, si le code est à 0. Les codes suivants sont disponibles:

  • Code 0 - Mauvais en-tête IP (catchall error) - Nous avons vu ce message d'erreur ci-dessus. Avec le pointeur ce code est utilisé pour indiquer quelle partie de l'en-tête IP contient l'erreur.

  • Code 1 - Options obligatoires omises - Si une option IP obligatoire est omise, ce code est utilisé pour l'indiquer.

2.9.7. Horodatage requête/réponse

Le type horodatage est aujourd'hui obsolète, mais nous le verrons brièvement. La réponse et la requête ont un code unique (0). La requête est de type 13 tandis que la réponse est de type 14. Les paquets horodatage contiennent 3 fois 32 bits comptant les millisecondes depuis minuit en temps universel (UT).

Le premier horodatage est l'horodatage d'origine, qui contient la dernière information sur l'expéditeur du paquet. L'horodatage de réception est l'information sur le premier hôte qui a reçu le paquet et l'horodatage de transmission le dernier horodatage sur l'envoi du paquet.

Chaque message d'horodatage contient aussi les mêmes identifiants et numéros d'ordre que les paquets ICMP écho.

2.9.8. Requête/réponse information

Les types requête/réponse information sont obsolètes depuis que les protocoles au sommet du protocole IP peuvent maintenant jouer ce rôle lorsque nécessaire (DHCP, etc.). La requête information génère une réponse depuis n'importe quel hôte interrogé sur le réseau.

L'hôte qui désire recevoir l'information crée un paquet avec l'adresse source du réseau dans lequel il est lié (exemple, 192.168.0.0), et le réseau destinataire est placé à 0. La réponse contiendra l'information au sujet du masque de réseau et de l'adresse IP.

La requête information est lancée à travers un type ICMP 15 alors que la réponse est envoyée via un type 16.