___ ___ ____ ___ __ _______ __ __ ______ | | | | | ; | | | |___ | |___ | | | .------. | | .- ---' , '-----'------'-----'--- ----'------- - -- - - - - ' _|________|__ ¦ | mkd.05 unofficial ICMP Protocol RFC : aka ping ' _ ___ __ ____ : | | '-----.------- .-----.------.-----| |----- - ------- - - - ---- - - - ____| |____ |______| ____| |____ | | | | |___ _ ________ ___|___ ____|_________ _______ | Tout d'abbord en écrivant cet article je suppose que vous avez une connaissance minimale du protocole TCP et IP. Cela étant dit venons-en au vif du sujet. Comme on le sait, le protocole IP ne permet pas la remise de datagrammes d'une façon fiable. En fait il a justement été conçu de cette façon pour qu'il soit le plus simple possible. Qu'arrive t-il lorsqu'un packet se pert dans le réseau ou pour une raison quelqu'onque n'arrive pas à destination? Le protocole ICMP ( Internet Control Message Protocol ) est là pour sauver la situation ( ou presque ). Il sert à avertir la source qui a envoyé le packet ( généralement un routeur ou tout autres périfériques réseaux ) que ce dernier ne s'est pas rendu à destination comme prévu pour une des raisons suivantes: - L'expiration du champs TTL ( Time To Live ); - La perte d'un des fragments du datagramme; - L'indisponibilité du protocole, d'un service ou d'un hôte; - L'impossibilité de transmettre un datagramme parce que la fragmentation est interdite et que la taille du datagramme est plus grande que le MTU ( Maximum Transmission Unit ) du réseau; - Le réseau est congestionné; Le protocole ICMP est obligatoire dans les toutes implémentations de IP. Le module ICMP run par dessus IP ( voir figure ci-dessous ). Couche ___________ réseau | ___ |<------------- Protocole IP du | | |<------------------ Module ICMP implémenté dans IP modèle | |___| | OSI |___________| [DANS QUEL CAS ICMP GÉNERE UN MESSAGE?] Bien qu'il signal des messages d'erreurs, ICMP ne rendra pas IP plus fiable si l'admin ne va pas regarder si ya des messages ICMP de temps en temps. Pour éviter l'apocalipse et surtout la congestion du réseau ICMP n'envoie aucun message pour les packets ICMP qui ne se rendent pas à destination. Un autre truc important à savoir c'est que ICMP va générer un message d'erreur seulement pour le premier packet, celui avec le champs Fragment Offset à 0, et tout ça dans le but de ne pas congestionner le réseau évidemment. Le dernier cas où il n'y aura pas de message ICMP généré est lorsque la source est un adresse broadcast. Pourquoi d'après vous? (eheh) [HOW DOES IT WORKS?] Machine A <---> Routeur1 <---> Routeur2 <---> Routeur3 <---> Machine B | | \ / \ / Routeur4 | |--> Réseau x Supposons que la table de routage de Routeur3 soit totalement fucked up et que selon celle-ci, le packet doit être routé vers Routeur4 plutôt que vers Machine B, lorsque le packet va arriver au Routeur4, il va regarder l'en-tête du packet et va se rendre compte que Machine B n'appartient pas à son sous réseaux donc il va générer un message d'erreur ICMP request (type 5 voir plus tard) et il va l'envoyer à la source, qui selon le packet est Machine A. En effet, les routeurs n'enregistrent pas la route du packet à moins que l'option Record Route soit activée, ce qui est rarement le cas car ça grossit la taille de l'en-tête du packet. Lorsque Machine A va recevoir le ICMP request, il va envoyer un ICMP reply pour signaler à Routeur4 qu'il a bien reçu le message d'erreur et qu'il va prendre un moyen pour que ça s'arrange ( Ex.: renvoyé le packet qui a chier ). [PACKET ICMP EN DÉTAILS] Le packet ICMP est encapsulé dans le packet IP comme ceci: ________________________________________________________________ | | | | En-tête IP | Données IP | |_________________|______________________________________________| | | | | En-tête ICMP | Données ICMP | |_______________|______________________________| L'en-tête IP utilisé pour transporter un message ICMP a la structure suivante : Longueur d'en-tête TOS Longueur total Identification Flags : rarement nesscessaire car un message ICMP est court Fragment Offset TTL Protocole : valeur 1 ( indique ICMP ) Total de contrôle IP source IP destination Comme je vous l'ai dit plus haut, je suppose que vous avez une connaissance minimale du protocole IP donc je ne m'attarderai pas trop sur ça. Structure générale des messages ICMP: -----------En-tête ICMP-------------- --Données ICMP- ____________|_____________________________________|_______________| | | | | | | | | En-tête IP | Type | Code | Total de | Paramètre | Informations | + DataLink | | | | contrôle |ou inutilisé| | |____________|______|______|__________|____________|_______________| 1octet 1octet 2 octets 4 octets Valeurs possibles pour le champs Type : 0 : Echo reply 3 : Destination unreachable 4 : Source quench 5 : Redirect 8 : Echo request 11 : Time exceeded 12 : Parameter IP unintelligible 13 : Timestanp request 14 : Timestamp reply 15 : Infotmation request 16 : Information reply 17 : Address mask request 18 : Address mask reply Ceux qui ne figure pas dans cette liste sont réservés pour des protocoles expérimentaux et sont suceptible de changer. Si vous les voulez tout de même, voici la liste: 1-2: Unassigned 6: Alternate Host Address 7: Unassigned 8: Echo 9: Router advertisement 10: Router selection 19-29: Reserved 30: Traceroute 31: Datagram conversion error 32: Mobile host redirect 33: IPv6 Where-are-you 34: IPv6 I-am-here 35: Mobile registration request 36: Mobile registration reply 37-255: Reserved Combinaisons possibles pour le champs Type et Code : Type Code Signification 0 (Echo) 0 No code 3 (destination 0 Next Unreachable unreachable) 1 Host unreachable 2 Protocol unreachable 3 Port unreachable 4 Fragmentation needed and "Don't Fragment" was set 5 Source route failed 6 Destination network unknown 7 Destination host unknown 8 Source host isolated 9 Communication with destination network is Administratively prohibited 10 Communication with destination host is Administratively prohibited 11 Destination network unreachable for type of service 12 Destination host unreachable for type of service 4 (source 0 No code quench) 5 (redirect) 0 Redirect datagram for the network( or subnet ) 1 Redirect datagram for the host 2 Redirect datagram for the type of service and network 3 Redirect datagram for the type of service and host 8 (Echo) 0 No code 11 (Time exceeded)0 Time to live exceeded in transit 1 Fragment reassembly time exceeded 12 (Parameter 0 Pointer indicates the error problem) 1 Missing a required option 2 Bad length 13 (Timestamp) 0 No code 14 (Timestamp) 0 No code 15 (Information) 0 No code 16 (Information) 0 No code 17 (Address mask) 0 No code 18 (Address mask) 0 No code Ensuite, le champs total de contrôle utilise le même algorithme que IP. Le champs Parametre est utile pour ajouter des paramètres facultatifs qui dépendent du message ICMP. Le champs Informations est le champs le plus utile car il comprend l'en-tête IP + 64 bits de ULP ( protocol de couche supérieur (Upper Layer Protocol) ) appartenant au datagramme en erreur. C'est donc grâce à ce champs qu'on peut identifier le datagramme qui a posé problème. [PRINCIPALES COMBINAISONS DE TYPES ET DE CODES] Type 0/8 : Echo/PING Les messages ICMP de types 0 et 8 sont les plus utilisés. En effet l'utilitaire PING qui est disponible dans pratiquement la totalité des systèmes TCP/IP utilisent ces types de messages. Je ne dirai rien de plus sur PING... Si tu n'as jamais entendu parler de PING, cesse de lire cet article au plus sacrant. Type 3 : Destination inacessible Ce type de message est utilisé lorsqu'un périférique n'est pas capable de transmettre un datagramme à la destination demandée. Les codes mentionnnés plus haut ont chacun leur signification. Type 4 : Source Quench Lorsque un routeur est surchargé par le traffic réseau, les packets qu'il reçoit s'enmagasinent dans sa mémoire tambon. Lorsqu'il n'a plus de mémoire disponible il doit écarter les packets qu'il recoit, il envoie alors un message ICMP Source Quench pour avertir la source de ralentir le débit. Évidement cette méthode n'est pas la meilleur puisqu'en envoyant d'autres packets, le routeur ne fait que congestionner le réseau encore plus qu'il était avant. Il existe des implémentations plus pratique qui surveillent constamment le flux sur le réseau et qui envoient des messages ICMP lorsque la congestion commence, pour éviter que la mémoire du routeur ne soit saturée. c'est ben beau tout ça mais comment la source fait pour savoir qu'elle peut recommencer à envoyer des packets? Il n'existe aucun moyen à date pour que la source sache quand repartir à sender des packets mais les applications qui utilise TCP sont habituellement conçues pour savoir quand reprendre la fréquence normale. Type 5 : Redirection Un message ICMP de type 5 est généré lorsqu'un routeur trouve une meilleur route pour router le datagramme que celle prévue. Les codes mentionés plus haut disent dans quels cas quels messages de type 5 va être généré. Par contre, si les routeurs prennent en compte les messages ICMP de type 5, il se pourrait qu'un hacker malicieux envoie des faux messages ICMP de redirection à un routeur afin de perturber le réseau et d'obtenir des informations qui sont censées être confidentielles. À vous de juger si vous voulez prendre en charge les messages de redirection. [RÉSUMÉ] Vu que je suis a peu près certain que tu te souvient pas de la moitié de cet article, cette section va te dire en quelques lignes ce qui faut que tu retiennes sur le protocole ICMP. Le module ICMP est implémenté directement dans le protocole IP et permet d'envoyer des messages de diagnostic lorsqu'il arrive quelque chose de pas habituelle sur le réseau. Les messages ICMP sont très utiles pour la détection de problèmes sur le réseau. [RFC PERTINENTES] RFC 792 - RFC 950 - RFC 1812 - RFC 1122 - RFC 1256 - RFC 1191 .----------------------------------------------- - - --- - --- | Sp1d3r [linux_sucker at hotmail dot com] '------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -