-------[  RtC Mag, At the end of the universe  ]

--------------[  ICMP My Friend  ]
---------[ in RtC mag 2 ]
----[  by SnEaKie <sneakie-rtc@fr.st>  ]


-------[  Introduction

    Qui n'a jamais t victime de cette sauvagerie qu'est l'erreur de transmission TCP/IP qui bloque toute ventuelle transmission? Je suppose qu'il y en a peu! Moi le premier, on me la fait en moyenne 3  4 fois par semaine. A quoi est d ce pb? 

    En fait c simple. Les connexions TCP/IP sont trs complexes et pendantles changes de donnes, il y a des rats :) par forcment trs avantageux,d'ailleurs. :(
    Mais bon, donc dans ces connexions, des millions de donnes transites et les seuls matres  bord, sont le serveur, et le routeur! Ils reoivent toutes les donnes et s'ocupent de les rediriger selon la vieille technique du "pipe" sous UNIX, LINUX aussi bien que sous Windows. C'est  dire qu'ils s'occupent tous deux de rediriger les paquets afin de les acheminer du mieux qu'ils peuvent jusqu' votre machine. Seulement il n'y a pas qu'une seule personne connecte, de ce fait des erreurs dans les paquets transmis interviennent : pb d'addressage, pb de contrle de flux, mauvaise transmision des paquets pour cause de saturation du rseau, mauvaise fragmentation, bref les raisons sont multiples! Un seul protocole est charg de grer ces erreurs, il se nomme le protocole ICMP : Internet Control Message Protocol. La fonction principale de ce protocole est de renvoyer vers l'emetteur des messages d'erreur quand les datagrammes rencontrent certains problmes sur leurs chemins jusqu'au destinataire. 


-------[  Le protocole ICMP


    Ce protocole est obligatoirement support par toute machine quelque soit sa plate-forme. Ces paquets sont achemins dans un datagramme IP. Ils possdent alors les mmes caractristiques, TTL, etc... :) ==> renvoi  l'article de P4r4noID!
    Je me dois de rajouter une petite chose, ce champ TTL(Time To Live); prend comme valeur par dfaut 32 ou 64. De plus, il existe sous Linux comme sous Windows un utilitaire nomm Traceroute, ou TRACERT.EXE sous Wx. Son nom parle de lui mme! :)     En fait, cet utilitaire opre trs facilement. Il met des paquets vers une destination donne en augmentant  chaque fois la valeur du champ TTL. Chaque paquet est alors dtruit par un routeur car le TTL arrivait  0, lors de son passage vers lui. Des messages ICMP sont alors renvoys permettant d'identifier les routeurs qui se trouvent sur le trajet d'un point X  un point Y. Avec X l'emetteur, et Y le destinataire, vous l'aviez compris! 

    La structure de ces paquets est des plus simples : 

----------------------------------------------------------------------
|     TYPE (8 bits)    |      CODE (1 octet)      |   SOMME DE       |
|                      |                          | CONTROLE (2octs) |
----------------------------------------------------------------------
|                   DONNEES DE TAILLE VARIABLE (variable)            |
|                                                                    |
----------------------------------------------------------------------

 - Le champ TYPE : Ce champ contient un code qui identifie la fonction ICMP de message.
 - Le champ CODE : Ce champ dfini les diffrents messages que transporte ICMP alors mme qu'ils sont du mme type. Si la valeur est 0, ce champ ne possde pas de variante.
 - Le champ SOMME DE CONTROLE : Ce champ contient un chiffre qui est la somme de toutes les donnes que contient le paquet ICMP. L'algorithme utilis est le mme que celui utilis pour les sommes de contrle des paquets IP.

    Il faut savoir qu'il y a plusieurs grands types de fautes :

  1) DESTINATION INACCESIBLE.
  2) EXTINCTION DE SOURCE.
  3) REDIRECTION.
  4) PROBLEMES DE PARAMETRAGES.
Ce sont les grands types de problmes que dtecte ICMP et pour lequel il est employ.


    Quelques petites explications seraient les bienvenues. C pourquoi je m'emploi  cette tche! Allons-y...


-------[  Explications des types de fautes


1) DESTINATION INACCESIBLE.

    C un type de message qui est gnr par un routeur ou un ordinateur destinataire en cas d'indisponibilit de la personne), plutt la machine,  joindre. Lorsqu'un routeur ne peut joindre le destinataire d'un paquet de donnes, il dtruit ces dernires puis se charge de renvoyer un paquet ICMP ordinateur inaccessible. Si le routeur est incapable de router vers un routeur suivant, il renvoie un paquet ICMP encore, portant la mention : rseau inaccessible.

    Maintenant, rflchissons, il existe pour chaque protocole un MTU, ce MTU (Maximum Transmission Unit), est diffrent pour chaque protocole : Ethernet 1500 octets; PPP 1500 octets; PPP(faible dlai) 296 octets. Ce MTU ne descend pas en dessous de 68 octets et ne monte pas au del de 65535 octets.
    Que se passe t'il lorsqu'un datagramme arrive  un routeur? Le protocole de la couche d'interconnexion interroge l'interface rseau sur laquelle le paquet sera mis afin justement d'obtenir des infos sur son MTU! Si la taille de ce datagramme dpasse celle du MTU, alors, en toute logique, le datagramme est fragment. 
    PS: Je fais une grave faute en parlant de paquet IP, cf Article1 TCP/IP by SnEaKie. On parle de paquet UDP, mais de datagramme IP. (C La Base...??!!) Il existe dans l'en-tte IP (et non le header==> parlons franais, ne nous laissons pas anglicis!!!) un champ qui dfinit si les datagrammes transmis doivent tre fragment ou non. Si ce champ, pour je ne sais quelle raison :), se trouve  1, alors imaginons la suite en schma :

    ETAPE1 : A ---------Connexion PPP--------------> B (routeur)    
    Vous avez comment a se passe, je zipe les dtails...

    ETAPE2 : A <--------Envoi de datagrammes-------- B
    Ici, il faut le dtail.

    DETAILS ETAPE 2:
    A <--Routeur1--Routeur2--Routeur3--Routeur4--Routeur5-- B

    En fait, il ne faut pas croire que la liaison s'tablie entre votre machine et le routeur directement, le trajet est encombr de multiples autres routeurs, et donc les donnes traversent plusieurs routeurs. Seulement, les donnes peuvent passer indpendemmant par un routeur sous NT4.0(bientt NTFS5.0), que sous un routeur UNIX, Linux, Novell, etc... De ce fait, les MTU changent.
           
    A <--Routeur1--Routeur2--Routeur3--Routeur4--Routeur5-- B
          MTU         MTU       MTU       MTU       MTU  
         1500oct.     576oct.   1500oct.  276oct.   1000oct.

En ralit cela donne plutt a:

        A <--Routeur--Routeur--Routeur--Routeur--Routeur------- B
                |       \    |      /           |     /
                |        \   |     /            |    /
             Routeur      \Routeur/----------Routeur/

    Les interconnexions rsaux entre les diffrents routeurs - qui sont par dfinition accesibles par tout le monde afin d'tre redirig jusqu' la destination finale "demande" en quelque sorte, dans l'en-tte IP, par le biais d'une simple addresse IP qui est l'ordinateur ou destination finale - sont trs complexes ce qui fait qu'une connexion qui vise un ordinateurA peut trs bien passer par 32 ou 64 routeurs avant d'aboutir (article sur le TTL de Par4noID..). Ce qui fait que le facteur rique d'erreur de trransmission est multipli par le nbre de routeur traverss. Certains routeurs redirigent les connexions vers d'autres du fait de leur trop fort encombrement, entendez par l, une trop forte solicitation du routeur par des ordinateurs distants. 
 
    Le schma le montre, il est impossible de dfinir  l'avance, non seulement le chemin que va prendre votre paquet mais aussi le MTU, il change en fonction des routeurs et ce sont eux, selon la mthode dcrite plus haut qui vont se charger de refragmenter les donnes.

    Donc prenons le cas o, votre datagramme fasse 1500octets et que vous mettez son champ de fragmentation  1, c a d qu'il ne sera jamais fragment, le routeur dont le MTU est 576octets ne pourra pas l'acheminer correctement : il tentera de le fragmenter mais chouera, il renverra alors un paquet ICMP. 
    PING ancienne version a t retir justement  cause d'une chose, il pouvait gnr des paquets de donnes de plus de 65535 octets, en l'occurence 65536 octets qui est la valeur maximale multiple de 8 (1 octet = 8 Bits; Binary Coded Digits). De ce fait, lorsque l'ordinateur distant recevait le paquet de 65536 octets, que faisait-il?
    Alors que la valeur max devait tre 65535, il essayait qd mme de le dmultiplexer : moralit ==> Gros Plantage. Imposibilit du systme  dmultiplexer le tout ( pour ceux qui ne savent pas ce que c'st: renvoi  article 1 RTCMag SnEaKie:moi! sur TCP/IP).

    Facile, on a qu' faire pareil et on fera tout planter!
    Non, depuis, le pb a t pali : on peut toujours envoyer des paquets de 65536 en programmant en C: seul incovnient le systme distant ne se fera plus berner => il ne dmultiplexe pas! Ca ratte pour pas dire autre chose...


2) EXTINCTION DE SOURCE

    Ces messages sont d'une grande importance dans le cas ou l'ordianteur et le serveur possdent des connexions rseaux fonctionnants  des dbits trs divers. Lorsque la requte d'un ordiXX se fait a 24000bps et que le servuer possde une ligne allant  56000bps, les rponses demandes vont s'ammasser  une vitesse telle que l'ordiXX va avoir ses mmoires tampons trs rapidement remplies, il va donc y avoir une saturation de la connexion entre les deux. Lorsqu'une telle chose arrive, il faut que l'ordiXX se charge de renvoyer un message ICMP au serveur lui demandant (en gros) de ralentir son envoi d'info. car le pauvre est en train d'en baver pour tout trater...(cf ordi. de Scientist  ce qui parat).
    Donc le message ICMP de ce type : type4, code0 ne signifie pas ncessairement que des donnes ont t perdues mais ce message prcde une situation qui est entrain de virer sur le critique, ce message se veut donc tre prventif afin d'viter d'ventuelles pertes de donnes ce qui rendrait toutes les donnes prcdemment envoyes totalement inutilisables.
Lorsqu'il arrive qu'une machine reoive ce genre de message, elle se doit de ragir, j'entends par l qu'elle se doit de rduire sa transmission de donnes vers l'ordi. distant jusqu' ne plus recevoir d'autres messages de ce type. Si la situation rendevient normale, l'ordi. metteur peut alors se permettre de raugmenter sa vitesse de transmission progressivement afin de ne rien brusqu!
Compte tenu du fait que les routeurs sont mieux quips en ce qui concerne les bandes passantes de donnes, ces genres de messages reprsentent un contrle de flux lmentaire plus gnralement mis par des ordi. distants. 


3) REDIRECTION   

    Ces messages sont mis lorsu'un routeur s'aperoit qu'une destination  est accesible sans ses services. Imaginons le schma suivant:

Rseau nIII

************
*  ORDI 1  *-------------/Machine A\        -----------/Machine C\
************                  |             |               |
      |                       |             |               |
      |                       |             |               |
      |                       |             |               |
      |                       |   |---------|          ************
      |------------------/Machine B\-------------------*  ORDI 2  *
                                                       ************

Donc, prenons le cas suivant simple: (le schma est nul d'acc ms bon ps le tmps!)
    - L'ordinateur1 veut envoyer des donnes a l'ordinateur2.
    - L'ordi.1 envoie donc ces donnes au routeurA(machineA).
    - Le routeurA se rend compte que pour que le paquet arrive  destination, il doit joindre le routeurB(machineB): il le voit dans sa table de routage. Il se rend compte d'une chose, c que le routeur B se trouve sur le mme rseau que la machine dpart ==> Ordi1
    - Le routeurA se charge tout de mme d'envoyer les donnes au routeurB et se charge en plus, de renvoyer un message ICMP redirection type5 code0,  l'ordi1 pour qu'il sache que dornavant, il n'est plus ncessaire de passer par A pour accder au rseau de l'ordi2.
    - L'ordi 1 va donc modifier sa propre table de routage suite  la rception de ce message.

    Les ordianteurs htes ne sont pas en mesure d'mettre de tels messages, en fait seuls les seuveurs en sont capables. De ce fait ils indiquent quelles sont les routes les plus rapides pour atteindre des  rseaux lointains. Ces datagrammes ICMP contiennent un champ en plus ==> Pas con! le truc!
    Ce champ contient l'adresse du routeur recommand, voici la structure de ce message:

----------------------------------------------------------------------
|     TYPE (8 bits)    |      CODE (1 octet)      |   SOMME DE       |
|                      |                          | CONTROLE (2octs) |
----------------------------------------------------------------------
|              Adresse de passerelle Internet (4octets)              |
|                                                                    |
----------------------------------------------------------------------
|         En-tte Internet + 8 octets datagrammes original           |
|                                                                    |
----------------------------------------------------------------------

    Les messages de redirection contiennet dans un champ spcifique, l'adresse du routeur permettant de l'atteindre plus aisment.

Code        Dfinition
0           Redirection de datagrammes pour le rseau.
1           Redirection de datagrammes pour l'ordi. hte.
2           Redirection de datagrammes pour le type de service et de rseau.
3           Redirection de datagrammes pour le type de service et l'ordi. hte.

    Les codes prcisent si l'adresse du routeur permet d'accder plus efficacement  un rseau entier ou  un ordinateur plus particulier. Le code utilis par l'metteur du datagramme ICMP dtermine le format de l'entre de la table de routage du destinataire.


4) PROBLEMES DE PARAMETRAGES

    Les routeurs ou les ordinateurs distants ont leur mots  dire ici. L'un ou l'autre sont capables d'envoyer de tels messages. Cela survient dans le cas o une machine reoit des datagrammes dont len-tte IP est rron et donc qu'il ne permet pas l'utilisation des donnes. Ces messages peuvent comporter les trois codes suivants:

Code        Dfinition
0           En-tte IP erron
1           Option obligatoire manquante
2           Longueur errone
    Un tel message ne permet d'alerter que pour des pbs graves qui ncessitent la destruction du datagramme. Il contient encore un champ en plus qui indique le numro d'ordre de l'octet de l'en-tte IP qui pose pb.

----------------------------------------------------------------------
|     TYPE (8 bits)    |      CODE (1 octet)      |   SOMME DE       |
|                      |                          | CONTROLE (2octs) |
----------------------------------------------------------------------
|   Pointeur (1 octet) |         Non utilis (3 octets)              |
|                                                                    |
----------------------------------------------------------------------
|         En-tte Internet + 8 octets datagrammes original           |
|                                                                    |
----------------------------------------------------------------------

    Voil, c'est tout, maintenant j'espre que cela sera assez clair pour l'ensemble car je manque considrablement de temps.


-------[  EOF
