LES RESEAUX LOCAUX
INDUSTRIELS
Chapitre 24/25 - Etude de Réseaux locaux : TCP/IP |
Hugues Angélis |
Etude de quelques Réseaux locaux
Dans ce chapitre, nous allons (enfin) étudier le fonctionnement de quelques Réseaux. En particulier, il me semble logique de vous parler d'ETHERNET + TCP-IP, de CAN et de I2C. Bien entendu, ce chapitre n'est pas exhaustif, et ne pourrait pas l'être. En effet, le renouvellement quasi permanent des technologies ne le permettrait pas.
Mais avant de présenter ces Réseaux, nous allons regarder un petit lexique des différents Réseaux disponibles sur le marché.
Il faut noter que bon nombre de Réseaux ne sont que des variantes des Réseaux les plus connus (ce qui à tendance à rendre l'offre encore plus difficile à analyser), on retiendra pour l'exemple FIPIO qui est une version SENSOR BUS de FIP et FIPWAY la version DEVICE BUS. Mais les exemples ne s'arrêtent pas là puisque certains Réseaux (comme CAN ou FIP, considérés comme des technologies), sont utilisés comme des "supports" pour des applications, ce qui fait qu'entre 2 Réseaux basés sur CAN, il n'y a souvent que la couche 7 (couche d'application) qui les rend incompatible (par exemple SDS, DEVICENET, VAN et CAL ne sont que des applications spécifiques de CAN pour un type de fonctionnement précis).
Ce genre de récupération est assez intéressante puisqu'elle autorise l'utilisation de systèmes CAN tout en les rendant plus spécifique donc plus adaptable.
TCP/IP.
C'est en 1957 que le "Department Of Defence" (le ministère de la défense américain) en réponse au vol du premier Sputnik soviétique, initie le projet DARPA (Defence Advanced Research Project Agency) pour permettre aux USA de reprendre le leadership dans les domaines technologiques (accessoirement), mais surtout militaire.
L'idée de mettre en œuvre un Réseau "invulnérable" aux attaques nucléaire soviétiques apparaît très tôt comme un concept fondamental pour lequel le DARPA va financer la recherche en lançant le projet qui deviendra ARPANET.
C'est aussi en 1969 que Steve Crocker publie la première RFC (Request For Comment). Les RFC sont les moyens d'échanger des informations ou de décrire des procédés, voir de résumer des connaissances. Il arrivera que l'usage dévie (voir la RFC 527).
En 1970, ARPANET choisi le protocole NCP (Network Control Protocol) pour le routage des paquets. En 1971, ARPANET est composé de 15 nœuds. Les protocoles FTP (File Transfert Protocol) et Telnet sont créés par le Network Working Group.
Le premier programme permettant d'envoyer des E-mail apparaît (SENDMSG), mais c'est en 1972 que le @ est choisi comme sigle de ponctuation entre l'utilisateur et l'adresse.
En 1972, ARPANET est composé de 30 nœuds. Le trafic sur ARPANET est composé à 75% d'E-mail. Le NWG devient le INWG (International NWG). En France, Louis Pouzin développe l'ARPANET français sous le nom de CYCLADES.
En 1973, ARPANET devient international avec le raccordement du University College of London et le NORSAR organisme Norvégien de communication. ALOHANET est le premier Réseau sans fil, il relie 7 supercalculateurs sur 4 îles de l'archipel de Hawaï. ARPANET est composé de 40 nœuds.
En 1974, Vinton Cerf et Robert Kahn présentent le protocole TCP/IP. Le trafic quotidien sur ARPANET dépasse les 3 millions de paquets.
En 1975, ARPANET est composé de 61 nœuds et la NSF (National Science Foundation) commence à financer le projet. SENDMSG se change en MSG, le premier logiciel E-mail complet (lecture, transfert, réponse). C'est aussi à cette date que le premier Newsgroup est créé, il parle de science fiction, Einar Stefferud en est le premier modérateur. En 1979, DARPA et NSF commencent à étudier la possibilité de créer le CSNET (Computer Science research Network), mais le coût de 3 millions de dollars est jugé prohibitif. Naissance de USENET (les newsgroup automatisés). Kevin MacKenzie crée les premiers émoticons (J L). En 1981, le CSNET est créé pour les universitaires non reliés à ARPANET, il est financé par la NSF. En France on voit apparaître le Minitel. En 1982, L'ensemble des Réseaux mondiaux commence leur migration en abandonnant le protocole NCP au profit de TCP/IP. La Norvège est la première à effectuer cette opération. TCP/IP est reconnu comme le standard international de communication en Packet Switched. En 1983, NCP disparaît. L'Europe se connecte (Hollande, Suède, Norvège, Angleterre, Allemagne) à EUNET (European UNIX Network) version européenne de CSNET qui permet le transfert d'E-mail et l'utilisation de USENET. Première version des services de nom qui permettent de traduire un nom de machine en adresse IP et inversement. Aux USA, ARPANET se sépare en MILNET (Réseau exclusivement militaire) et ARPANET (Réseau civil). Le nouveau ARPANET est connecté à CSNET. En 1984, le Japon crée JUNET, la version asiatique de CSNET. Le Canada fait de même avec NorthNet. L'ensemble du Réseau contient plus de 1000 nœuds. Le DNS est adopté comme service de nom. L'URSS implémente une version russe d'USENET En 1985, le 1er mars la racine .com est créée vont suivre : .edu, .gov et .org en juin et .uk en juillet. En 1986, la NSF crée NSFNET sur un backbone à 56 Kbit/s, regroupant 5 supercalculateurs. Le protocole NNTP (News Network Transfert Protocol) est créé. En 1987, plus de 10 000 nœuds sont connectés aux Réseaux mondiaux. Plus de 1 000 RFC ont été créées. 1988 : Naissance du mot Internet lors de la connexion de 7 nouveaux pays (Canada, Danemark, Finlande, France, Islande, Norvège et Suède) au Réseau NSFNET qui fédère déjà les Réseaux américains. Le 2 novembre, le premier virus Réseau (worm) est officiellement déclaré. Il infecte à peu près 6 000 des 60 000 nœuds connectés à internet. Naissance du IANA (Internet Assigned Number Autority) qui contrôle les adresses IP et les numéros de ports TCP (et UDP). Sa direction est confiée à John Postel. Naissance aussi du protocole IRC. 1989 : Internet dépasse les 100 000 nœuds avec la connexion de 10 nouveaux pays à NSFNET (Allemagne, Angleterre, Australie, Hollande, Israël, Italie, Japon, Mexique, Nouvelle Zélande et Porto Rico). NSFNET utilise des lignes T1 (1,544 Mbit/s) 1990 : Disparition de ARPANET et arrivée de 11 nouveaux pays sur NSFNET (Argentine, Autriche, Belgique, Brésil, Chili, Corée, Espagne, Grèce, Inde, Irlande et Suisse) En 1991, NSFNET accueille 10 nouveaux pays (beaucoup du bloc de l'Est puisque le mûr viens de tomber) sur ses nouvelles lignes T3 (44,736 Mbit/s). Au CERN à Genève Tim Berners-Lee crée le World Wide Web en développant le protocole HTTP (Hyper Text Transfert Protocol). Le premier site Web au monde est http://info.cern.ch. NSF recense un trafic mensuel de 1012 octets (1000 milliards). La NSF autorise un usage commercial d'internet. "World comes On Line" est le premier fournisseur d'accès à internet. En 1992, 13 nouveaux pays rejoignent NSFNET (dont la Russie). Il y a plus de 1 000 000 de nœuds connectés à internet. En 1993, 17 nouveaux pays rejoignent NSFNET. Le premier navigateur Web (Mosaic) apparaît. La croissance du service http est de 341 634% sur l'année. Naissance des moteurs de recherche. En 1994, Le trafic mensuel sur Internet dépasse les 1013 octets (dix mille milliards d'octet). Premier spam (envoi de courrier en masse) par une société d'avocat de l'Arizona. 22 pays rejoignent NSFNET (dont la Chine). Apparition des premières publicités sur internet. AOL et Compuserve sont les principaux FAI (Fournisseur d'Accès à Internet). En 1995, NSFNET redevient un Réseau de recherche, les fournisseurs d'accès à internet ne transitent plus sur NSFNET. Le service http dépasse en quantité le service FTP. 22 nouveaux pays rejoignent l'internet. En 1996, les backbone ont des débits variant entre 155 et 622 Mbit/s. 29 nouveaux pays rejoignent internet (on peut noter que la Guadeloupe est dans cette liste avec l'extension .gp). Les piratages se multiplient (NASA, CIA, Air Force,…). En 1997, le 2 000ème RFC est publié. 47 nouveaux pays rejoignent internet. Il y a plus de 100 000 serveurs de noms. En 1998, Première fête de l'internet (20 et 21 mars) sous l'initiative de Jack Lang. L'internet compte 43 230 000 clients. Décès de John Postel. Aujourd'hui (le 01/01/2004), on recense plus de 200 000 000 de nœuds.
Présentation du modèle OSI adapté à quelques éléments de la suite TCP/IP.
Le protocole IP.
Le protocole IP a pour rôle de router l'information, c'est à dire de permettre le transport des informations d'un Réseau vers un autre à travers plusieurs routeurs, donc dépasser la couche 2 pour franchir le mur du routeur, et atteindre sa cible en prenant le plus court chemin. Pour cela on utilise un nouveau format d'adressage, l'adresse IP.
L'adresse IP est composée, comme on le verra plus loin, de 32 bits, mais pour en simplifier l'usage (on pourra juger cette simplification un peu trop "informaticienne") on a regroupé ces termes par octet et énuméré l'adresse en décimal pointé (4 nombre décimaux inférieurs à 255 et séparés par des points).
On trouve cette adresse encapsulée dans la trame Ethernet (dans les premiers octets du champ de donnée de la trame IEEE 802.3). Elle est placée à l'intérieur de l'entête IP
Entête IP
L'adresse IP est définie par un ensemble de 4 octets. Ce qui permet de définir 232 adresses (4 300 milliards de nœuds). Ces adresses sont rangées selon 5 classes, dépendant de la valeur des premiers bits de l’adresse.
· La classe A permet de créer 126 Réseaux de 224 machines (16 millions), soit une utilisation des adresses de 1.0.0.0 à 126.255.255.255. · La classe B permet de créer 16 384 Réseaux de 216 machines (65 536), soit une utilisation des adresses de 128.1.0.0 à 191.255.255.255. · La classe C permet de créer 221 Réseaux (2 millions) de 256 machines, soit une utilisation des adresses de 192.0.1.0 à 223.255.255.255. · La classe D permet à une seule trame IP de s’adresser à plusieurs machines (MULTICAST mais en IP), elle utilise les adresses comprise entre 224.0.0.0 et 239.255.255.255. · Enfin la classe E est réservée à de futures utilisations, elle utilise quand même les adresses comprises entre 240.0.0.0 et 247.255.255.255. Cette répartition permet aussi de définir non seulement une "arborescence" du nombre de Réseau, mais aussi une organisation hiérarchique.
Au niveau de la classe A, toutes les machines sont des routeurs ou des passerelles interconnectées sur un faible nombre de Réseaux. On forme à ce niveau les interconnexions des grands Réseaux intercontinentaux.
Au niveau de la classe C, on retrouve un petit nombre d'ordinateurs connectés sur un grand nombre de sous-Réseaux (sous Réseaux pilotés par les routeurs de la classe A et B). On est ici dans le domaine "grand-public" avec plein de petits Réseaux sur lesquels sont connectés les machines des utilisateurs.
On arrive ainsi à la représentation suivante des adresses IP :
En gris, le codage du "nom" du Réseau, en blanc le codage du "nom" de la machine.
Pour permettre à une machine de s'identifier correctement dans son environnement, un autre paramètre que son adresse IP lui est indispensable, c'est le masque de sous-Réseau. Cette valeur composée de 4 octet lui permet de définir l'adresse du Réseau sur lequel elle est connecté, et par déduction connaître son "nom" sur le Réseau.
Par exemple, pour une machine d'adresse IP de classe C :
Attention, les nombres précédents sont présentés en base 10, pour mieux comprendre la manipulation présentée dans cet exemple de traduire les nombres en hexadécimal.
Analysons maintenant, ligne par
ligne un entête IP.
·
Les 4 premiers bits définissent le numéro de version IP,
généralement ce nombre est 4 (IPv4).
·
Le champ IHL (Ip Header Length) donne le nombre de mots de 32 bits
contenu dans l'entête (les données n'en font pas partie), mais en incluant les
options et le Padding. · Le champ TOS (Type Of Service) est en réalité composé de 5 sous ensembles. · Les 3 premiers bits forment un ensemble qui code la priorité du message. · 000 : routine (normal) · 001 : priority · 010 : immediate · 011 : flash · 100 : flash override · 101 : critic · 110 : internetwork control · 111 : network control · Le bit suivant est à 0. · Les 4 derniers bits servent à décrire le service demandé. Ils sont exclusifs (un seul bit peut être validé pour une trame) · D : Minimiser le délai, utilisé pour les messages de commande ou de synchronisation, donc pour des messages de petite taille. · T : Maximiser le débit, bien entendu, cette option est utilisée dès qu'il y a beaucoup de données à transmettre. · R : Maximise la fiabilité, spécialement utilisée par les opérations de gestion du Réseau. · C : Minimise le coût, en générale non utilisée. Le Champ TLF (Total Length Field) permet de fixer la taille totale du paquet IP (donc, connaissant la taille de l'entête, on connaît la taille du champ de données). Ce champ permet ainsi d'éliminer des termes de bourrage utilisé pour porter les petites trames IP au format minimum de la trame Ethernet (46 octets). · Le champ d'identification donne un numéro unique à chaque datagramme d'une machine, ce numéro s'incrémente de 1 après chaque émission. Il permet ainsi de connaître le numéro d'ordre de chaque datagramme transmis. En cas de fragmentation d'un datagramme, le numéro d'identification est dédoublé pour être le même sur tous les fragments d'un même message.
· Les 3 bits de Flag permettent de contrôler les fragmentations.
· "More Fragments" permet de prévenir que d'autres fragments d'un même datagramme sont à suivre. Le dernier fragment du datagramme a forcément ce bit à "0" (No more Fragment). · "Don't Fragment" permet d'interdire la fragmentation du data-gramme (cela peut entraîner des erreurs dans la mesure où la taille maximum du message autorisée par les couches inférieures du Réseau est inférieure à la taille du datagramme). · Le dernier bit de Flag n'est pas utilisé, donc à 0.
· Le champ Fragment Offset permet de définir le "numéro d'ordre" du fragment, chaque fragment pouvant être routé indépendamment des autres il peut passer par un chemin plus court que son prédécesseur et donc arriver à destination avant lui. La machine cible se chargeant alors de recomposer le datagramme en replaçant les fragments (qui ont la même identité) dans le bon ordre (ordre croissant des Fragment Offset).
Attention la fragmentation est une arme à double tranchant car si un fragment est perdu, tout le message est à retransmettre.
· Le champ TTL (Time To Live) permet de fixer le nombre maximal de routeur qu'un datagramme peut traverser. Ce champ est initialisé à une certaine valeur au départ. Puis chaque routeur traversé le décrémente. Arrivé à 0, le datagramme est rejeté, et l'émetteur prévenu. Contrairement à ce que l'on peut croire, cette méthode n'est pas coercitive, mais permet d'éliminer des paquets perdus sur le Réseau.
· Le champ protocole permet de définir quel type de service (TCP, UDP, etc.) utilise le champ de données de IP pour y encapsuler ses données. On peut noter certaines valeurs de ce champ (1 pour ICMP, 6 pour TCP et 17 pour UDP)
· Le champ HCS (Header Check Sum) contient un code CRC permettant de valider l'entête IP et exclusivement l'entête IP encapsulé dans la trame Ethernet. Il faut noter que le propre champ HCS est lui même inclus dans l'entête, donc dans le champ de contrôle, pour cela on le considère pour le calcul valant zéro.
· Enfin, on présente les adresses IP de la source et du destinataire, puis, avant d'empiler les données, on laisse systématiquement 32 bits libres pour la définition d'options (si il y en a) ou pour un usage ultérieur. La fragmentation des datagrammes.
Le principe de la fragmentation des datagrammes repose sur la connaissance par chaque routeur de la taille maximum admissible du champ de donnée de chacun des Réseaux qu'il interconnecte. Cette valeur communément appelée MTU (Maximum Transfert Unit) est définie pour chaque Réseau.
Lorsqu'une trame arrive sur un routeur, si sa taille dépasse le MTU du Réseau sortant, la trame est fragmentée. Chaque fragment dispose alors du même identificateur que le message d'origine, mais les 12 bits du champ Fragment Offset contiennent le déplacement par rapport à l'origine du champ de données du message, divisé par 8. La trame IP contient donc toujours un champ de donnée dont la taille est divisible par 8.
Par exemple, soit 3 Réseaux reliant la machine A à la machine B, le premier avec un MTU de 1500 octets, le second un MTU de 620 octets et le troisième un MTU de 420 octets.
Un paquet IP de 1496 octets (la taille doit être divisible par 8) est envoyé par la machine A, à destination de la machine B. Il contient 20 octets d'entête et 1476 octets de données.
Au passage du premier routeur, ce datagramme est divisé en trois morceaux respectivement de 620 (20 octets d'entête et 600 octets de données), 620 et 296 octets. Au total, on a bien un champ de données de 600 + 600 + 276 = 1476 octets.
· Pour le premier datagramme, l'entête IP est composé de l'identificateur du message d'origine, le bit More Fragment est à 1 et l'offset est à 0. Sa taille est de 620 octets (20 octets d'entête et 600 octets de données). · Pour le second datagramme, l'entête IP est composé de l'identificateur du message d'origine, le bit More Fragment est à 1 et l'offset vaut 75 (8 x 75 = 600). · Pour le troisième datagramme, l'entête IP est composé de l'identificateur du message d'origine, le bit More Fragment est à 0 et l'offset vaut 150.
Au passage par le second routeur, le MTU passe à 420. Cela signifie que les trames doivent être re-fragmentées. Pour les 2 premiers fragments, le routeur va les re-fragmenter en 2 morceaux respectivement de 420 octets (20 octets d'entête et 400 octets de données) et de 220 pour le second.
· Pour les fragments de 620 octets : o Le premier fragment (de 420 octets) conserve l'entête du fragment précédent. o Le second fragment (de 220 octets) présente lui un offset de 50 (8 x 50 = 400) en plus de celui du fragment dont il est issu. · Pour le fragment de 296 octets, sa taille étant inférieure au MTU, il est transmis tel quel sur le Réseau.
Au total, la machine B va recevoir les 5 fragments du message d'origine. Elle va recomposer le datagramme à partir des offset de fragmentation. Il n'y a pas de discontinuité, les fragmentations coïncident.
Dans certain cas, il peut arriver que le datagramme IP soit plus petit que le format minimum du champ de donnée du Réseau qui encapsule, on utilise alors les 2 champs de l'entête IP (IHL et TLF) pour définir le format réel du datagramme, et on accole au datagramme des bits de remplissage pour compléter la trame.
Les options de la trame IP.
La trame IP peut contenir des options. Celles-ci servent à la mise au point des Réseaux. Elles restent toutefois optionnelles bien que devant être implémentées par tous les éléments d'un Réseau. Les options sont décrites par un simple octet.
Le premier bit de l'octet est l'indicateur de copie, il permet de signifier si les informations concernant cette option doivent être copié pour chacun des éventuels fragments (bit à 1) ou pas (bit à 0).
Les 2 bits suivants définissent la classe de l'option : o 00 : classe de contrôle o 01 : réservé à un usage futur o 10 : mise au point et mesure o 11 : réservé à un usage futur
Les 5 derniers bits définissent l'option.
Le IANA gère bien entendu ces numéros.
On peut noter en particulier les options suivantes :
· L'option 7 est utilisée pour enregistrer le chemin parcouru. · Les options 9 et 3 permettent de fixer, pour l'option 9 l'intégralité du chemin que doit parcourir le message et pour l'option 3 (routage lâche par la source) les points de passage obligatoires pour un paquet. · L'option 4 (de classe 2) permet de créer un horodatage des paquets. A chaque passage par un routeur une information horaire est ajoutée à la trame.
Les options n'utilisant qu'un seul octet pour leur définition, on ajoute systématiquement des octets de remplissage pour compléter le paquet de 4 octets commencé par la définition de l'option. On parle alors de PADDING. IP et Ethernet.
L'utilisation du protocole IP sur internet impose la définition de deux problèmes, d'une part où et comment se rangent les données et l'identification de la trame IP (au sens physique), d'autre part comment on associe le fonctionnement des 2 protocoles (au sens logique).
Lors de l'émission d'une trame
Le protocole IP et le protocole Ethernet sont liés l'un à l'autre par une table d'échange nommée table ARP (pour Adress Resolution Protocol). Le rôle de cette table est d'associer à une adresse IP une adresse MAC. Ceci se fait suivant une procédure très simple.
Les 3 paramètres qui doivent être définis pour toutes les machines utilisant IP sont respectivement : l'adresses IP, le masque de sous Réseau et l'adresse IP de sa passerelle (qui doit être sur le même Réseau physique que la machine).
Lors de l'émission d'une trame IP, la machine source compare l'adresse IP de la machine cible avec l'adresse de son sous Réseau.
Si elle ne reconnaît pas alors l'adresse de son propre Réseau, elle sait que seule la passerelle est à même de faire transiter son message sur le Web, elle va donc essayer de contacter sa passerelle. Pour se faire, elle va utiliser la même procédure que celle lui permettant de contacter une machine sur le même sous Réseau.
Si la cible est sur le même sous Réseau, en considérant que la machine source est restée inactive assez longtemps, elle doit alors associer à l'adresse IP de sa cible une adresse au niveau de la couche MAC (IP n'est pas un Réseau, rappelez vous ce que j'en ai dit, seul la couche MAC donne accès à la liaison physique). Pour identifier l'adresse de sa cible, la machine source envoie une trame ARP Request.
La trame ARP utilise le champ de donnée de la trame du Réseau local pour présenter son entête et place dans le champ de définition du type de trame encapsulé le code hexadécimal 0806.
Entête ARP.
La trame ARP Request envoie alors un message à toutes les machines (BROADCAST ALL) leur demandant de répondre à l'émetteur si leur adresse IP est présente dans la trame. La machine concernée répondra par une trame ARP Reply directement adressée à l'émetteur de la requète. L'entête ARP est composé de 2 type de champs, d'une part des champs orientés vers la couche physique (HARDWARE) d'autre part les champs orientés vers la couche IP (PROTOCOL). Tout commence par 4 octets définissant respectivement pour les 2 premiers le type de couche MAC utilisée (Ethernet est caractérisé par un 1), et pour les 2 derniers le type de couche Réseau utilisée (on utilise le code 0x0800 pour IP). Les champs Hlen et Plen définissent respectivement la taille en octets des adresses de la couche MAC (6 pour Ethernet) et celles de la couche Réseau (4 pour IP). Le champ OP indique s'il s'agit d'une requête ou d'une réponse ARP (1 pour une requête et 2 pour une réponse) ou d'une commande RARP (Reverse Adress Resolution Protocol). Les champs précisés par la suite sont respectivement l'adresse MAC de la source, puis son adresse dans la couche Réseau en suite viennent les adresses MAC et Réseau de la cible. Lors de la requête, le champ correspondant à l'adresse MAC de la cible est laissé vide. Lors de la réponse, c'est la machine qui était la cible qui devient la source donc c'est elle qui fournit les valeurs d'adresse source et d'adresse cible au niveau de la couche Réseau, comme au niveau de la couche MAC. La machine cible étant alors la machine qui a émis la requête. Ces données sont alors stockées dans une table dynamique (qui s'efface si on ne la rafraîchit pas au bout de 30 secondes). Ainsi, on efface automatiquement les données entrées dans la table si elles ne sont plus utilisées.
Gestion des erreurs de routage sous IP.
L'utilisation de IP nous découple des Réseaux physiques, il faut donc établir une liaison entre les erreurs de routages (gérées au niveau de IP) et le comportement du Réseau (géré par la couche MAC). Si une machine cible (par exemple aux USA) est éteinte, la machine source (par exemple en France) doit recevoir une erreur de routage si elle tente d'y accéder. Pour cela, il existe un protocole (que beaucoup considèrent comme partie intégrante de IP) qui se nomme ICMP (Internet Control Message Protocol ou protocole des messages de contrôle sur internet), qui s'encapsule dans les trames IP. Il a pour rôle de transmettre les messages d'erreurs liés à la couche IP au travers des différents Réseaux.
Entête ICMP
Seule la première ligne de l'entête est généralisée, les lignes suivantes ne sont utilisées que pour certaines fonctions. On trouve, dans le tableau de la page suivante le contenu des 2 premiers champs (Type et Code) et on associe à ces 2 valeurs une erreur ou une fonction de test. Le 3ème champ de la première ligne de l'entête ICMP est le champ de contrôle d'erreur lié à l'entête (CRC).
L'utilisation d'ICMP permet de tester ou de signaler les erreurs, on a donc établis un ensemble de fonction permettant des tests simples. Parmi ces commandes on trouve la commande PING et la commande TRACEROUTE. La commande PING.
La commande PING vient de Packet INternet Groper, elle permet de tester la réponse d'une machine cible à une sollicitation de la part d'une machine source. Cette sollicitation est un écho que la machine cible doit retourner. L'entête ICMP est alors composé des 2 premières lignes (8 premiers octets), c'est à dire qu'en plus des champs de type et de code ainsi que celui de checksum, on trouve 2 autres champs. Un champ d'identification qui transmet l'identité de la source (au cas où plusieurs sources tenteraient de communiquer avec la même cible en même temps), et un champ de numéro de séquence qui sert à indiquer quel est le numéro du message transmis. Le message émis est donc composé d'un entête IP avec l'adresse de la machine source et de la machine cible, en suite on trouve, encapsulé dans le champ de donnés de IP l'entête ICMP qui possède un type et un code à 0, suivent un code d'identification de la machine source et le numéro de séquence. Le message renvoyé par la cible est lui aussi composé d'un entête IP et d'un entête ICMP où le type vaut 8 et le code vaut 0, le champ d'identification et le numéro de séquence sont ceux de la requête d'écho (le message émis).
La commande TRACEROUTE.La commande TRACEROUTE est une implémentation de la commande PING, elle permet de définir le chemin suivit par le datagramme IP. Son principe est de créer volontairement des erreurs de routage, pour recevoir les trames d'erreur ICMP. La commande utilisée est : TRACEROUTE <nom de la machine> Il y alors émission d'une trame de type PING à destination de la machine déclarée, mais cette trame à un TTL à 0, le premier routeur récupérant une trame dont le contenu à expiré renvoie vers l'émetteur une trame ICMP d'erreur. Cette trame ICMP, dont le contenu est un type 11 (délai expiré) et un code 0 ou 1 (cela n'a pas d'importance), contient une deuxième ligne nulle (pas d'identification ni de numéro de séquence), mais sur les lignes suivantes, on trouve le nom de la machine qui a signalé l'erreur. Ainsi en incrémentant la valeur du TTL jusqu'à obtenir un écho de retour, on trouve le chemin suivi par les datagrammes. Fonctionnement de IP.Identification des adresses locales.
Lorsqu'une machine souhaite communiquer avec une autre, elle doit utiliser un support physique de Réseau pour faire transiter ses données. Prenons l'exemple d'un Réseau fictif où trône 3 machines. Ces 3 machines sont en fait un routeur et 2 ordinateurs. Chacun d'eux à sa propre adresse IP et à part le routeur qui utilise 2 types de Réseaux, les 2 ordinateurs utilisent exclusivement le Réseau Ethernet. On a donc la structure suivante:
On considérera 2 cas, un premier où la machine n°1 souhaitera parler à la machine n°2, un autre où la machine 2 souhaitera parler à la machine 4. On étudiera après un exemple avec encore plus de Réseaux. Dans notre premier cas, on va imaginer qu'un utilisateur sur la machine n°1 souhaite communiquer avec la machine n°2. Cette machine ayant été inactive depuis très longtemps, elle ne connaît pas ses voisins. Pour communiquer, elle a besoin de l'adresse physique de la machine cible (si celle-ci est sur le même Réseau qu'elle) ou alors de l'adresse physique du routeur si sa machine cible n'est pas sur son Réseau local. Pour définir l'adresse de son Réseau, la machine source réalise un ET logique entre son adresse IP et le masque. On trouve :
Le Réseau est donc 192.0.1.0. La cible ayant pour adresse 192.0.1.3, on cherche, pour elle aussi, son Réseau :
Les 2 machines sont donc sur le même Réseau. La machine source va donc demander à toutes les machines du Réseau celle qui a pour adresse IP : 192.0.1.3. Cette demande se fait en envoyant une requête ARP en BROADCAST ALL, c'est à dire à l'adresse de toutes les machines. On trouve donc une trame ARP contenant les informations suivantes :
Puis une trame de réponse ARP viens de la cible qui répond :
Désormais les 2 machines se connaissent, elles communiquent entre elles par le truchement du Réseau Ethernet, sans relancer de commandes ARP. Tant que ces 2 machines continueront à discuter entre elles, elles conserveront localement l'association des adresses IP et MAC, dans la table ARP. De plus, une table de routage leurs permet de connaître désormais la voie à suivre pour se parler. Prenons maintenant le second cas : la machine n°2 souhaite dialoguer avec la machine n°4. On recommence alors la procédure : Définition du Réseau de la machine source :
Définition du Réseau de la machine cible :
Les Réseaux étant différents, la machine source sait qu'elle ne peut pas discuter directement avec sa cible, elle doit donc impérativement dialoguer avec son routeur pour obtenir le transfert des informations vers la cible. Comme la machine n'a pas dialogué avec le routeur depuis longtemps, elle doit associer à nouveau, à l'adresse IP du routeur, l'adresse MAC de ce dernier. Pour cela elle lance une requête ARP en BROADCAST ALL.
Puis une trame de réponse ARP vient du routeur :
Désormais, la machine n°2 sait parler à son routeur. C'est maintenant à lui d'établir la fin de la communication. Pour cela, il existe plusieurs possibilités : le routage statique (le chemin à suivre à été fixé par un administrateur) ou le routage dynamique (les routeurs doivent se découvrir sans aide extérieure). Mais quel que soit la méthode de routage, le principe reste le même, le routeur comme les autres machines, vérifie la présence du Réseau cible dans sa table de routage. Et si celui ci n'est pas présent, il consulte les autres machines grâce à des protocoles d'échange de routes (comme le protocole IRDP pour Internet Router Discovery Protocol).
Le routage des paquets IP.Le protocole RIPLe principal protocole utilisé par les routeurs est le protocole RIP (pour Routing Information Protocol). Celui ci permet à un routeur de définir automatiquement et dynamiquement (c'est à dire sans intervention extérieure) le plus court chemin à suivre pour atteindre une cible. Les informations de routages ne sont pas centralisées mais sont diffusées localement. Chaque routeur dispose de sa propre table de routage appelée table RIP. Il n'y a pas sur le Réseau, de nœud centralisateur de l'information de routage, pas plus qu'il n'y a de routeur connaissant l'ensemble des Réseaux disponible. La définition du chemin le plus court passe par l'utilisation d'une mesure de distance, basé sur le HOP. Un HOP correspondant au passage d'un routeur. La distance n'est donc pas réelle mais fictive, en effet, peu importe qu'un Réseau mesure plusieurs centaines de kilomètres, ce qui compte c'est que l'on mobilise un nombre minimum de routeur pour transférer une information. La table RIP des routeurs stocke donc 3 informations : · Le numéro IP du Réseau destinataire (R). · Le numéro IP du prochain routeur permettant d'y accéder (P). · La distance en HOP totale du chemin (H). Régulièrement (environ toutes les 30 secondes), les routeurs diffusent leurs tables RIP. Heureusement, il existe 2 garde-fous à ces échanges, qui sur un Réseau aussi vaste qu'internet pourraient poser de gros problèmes de saturation. Le premier tient au fait que les tables son propagées avec une limitation à 15 HOP de la distance maximale accessible. La seconde tiens au fait que seul le chemin le plus court est mémorisé. Diffusion et constitution des tables RIPImaginons maintenant la situation suivante :
Dans ce Réseau, toutes les boîtes sont des routeurs. Ainsi par exemple, si on analyse le routeur A, on a la table RIP suivante :
Le routeur B lui, a la table suivante :
Ces tables sont entretenues dynamiquement, cela veut dire par exemple que si le Réseau 192.0.3.0 est défaillant (par exemple, le lien est brisé), dès que le routeur C (ou le routeur D) essayera de transmettre sur ce Réseau, il détectera une erreur et fera évoluer sa table de routage et par propagation celle des autres. Dans notre exemple précédent, le routeur D aura les informations suivantes :
La création de ces tables de routage est réalisée par propagation de la table d'autres routeurs (en incrémentant les distances), via des échanges de trames RIP. Par exemple, imaginons l'initialisation de la table RIP de A. On considérera que A initie la propagation. · A connaît naturellement les 2 Réseaux auxquels il est relié. Il envoie donc l'information que constitue sa table de routage en "BROADCAST" à toutes les machines des 2 Réseaux où il est relié (seul les routeurs retiendront cette information estampillée RIP).
[NB] · J'ignore volontairement le routeur de E puisqu'il n'apporte rien au cas étudié. · Le délai aléatoire sert dans le cas du Réseau 192.0.2.0 à éviter une collision entre le retour de la table de C et celle de E. · Pour A qui va recevoir, selon les valeurs aléatoires la trame de B ou de C en premier, va donc mettre sa table à jour en incluant les 2 Réseaux (192.0.3.0 venant de C et 192.0.4.0 venant de B). Les tables respectives de B et de C continues à se propager. · Le routeur D, comme A recevra en même temps que A les informations provenant de B et de C, il va donc mettre lui aussi à jour sa table et il va lui aussi la diffuser après un court délai. A ce point les 4 Réseaux 192.0.X.0 sont tous connus, pour mieux comprendre le cheminement utilisé, on va synthétiser ces résultats sous la forme d'un tableau.
Les distances devant être minimisées, après la troisième étape, l'ensemble des éléments du Réseau connaît le chemin le plus court pour atteindre sa cible. Si l'on ajoute les routeurs E et F, la diffusion est un peu plus longue mais elle conduira aux mêmes résultats. La trame RIP
La trame RIP est encapsulée dans une trame IP. Elle se compose d'un nombre variable de champs. Toutefois, au minimum, la trame RIP est composée de 24 octets. La trame suivante est en octets.
Les champs ZERO sont des champs "vides" (remplis de zéro)
Une trame RIP peut contenir jusqu'à 25 occurrences des champs ADDRESS et METRIC, permettant ainsi (pour chaque trame) de donner la position de 25 routeurs. Le champ METRIC permet de donner le nombre de HOP entre le routeur source et sa cible. Le nombre de HOP est limité à 15 (et il ne peut pas être inférieur à 1), toutefois, il est possible de trouver dans le champ METRIC la valeur 16 qui signifie que le Réseau est inaccessible. L'adresse IP de la passerelle à contacter pour le routage est quand à elle dans la trame IP qui encapsule la trame RIP. Les autres protocoles de routage.Relativisons bien les choses, RIP n'est pas un protocole de routage très performant à grande échelle. Pour des applications "locales", il est simple et facile à utiliser, par contre à grande échelle il n'est pas du tout adapté (limitation à 15 HOP du routage, trame trop longue pour peu d'informations). On utilise donc d'autres protocoles. Il existe une évolution du protocole RIP qui est RIP2, cette nouvelle version est plus puissante que RIP, mais somme toute assez peu différente de son aïeul. Nous n'étudierons donc pas ce protocole. Pour mieux comprendre dans quels cas on utilise le routage RIP, on a définit 2 "zones" où peuvent s'appliquer des règles de réflexion différentes. On a donc une zone nommée Intra-domaine et inter-domaine. L'intra-domaines, est une zone que vous "contrôlez", c'est à dire où vous avez le contrôle de l'ensemble des nœuds. c'est vous qui fixez les règles de routages, qui segmentez l'espace en sous domaines. Vous devez sécuriser votre espace, mais pour ce faire, vous avez "tous les droits" puisque vous êtes chez vous. L'inter-domaine est le pays des opérateurs du monde des Réseaux (cela coïncide en général avec les grands opérateurs téléphoniques). A moins de travailler pour ces grandes entreprises, vous n'avez absolument aucun droit d'influencer de quelque façon que ce soit sur leur domaine, ou de leur demander de s'adapter à vos spécificités. Pour les zones intra-domaine, RIP est encore le plus employé, mais le protocole OSPF (Open Shortest Path First) est en passe de le détrôner. OSPF permet de contrôler l'état des liens, il est aussi plus rapide à se stabiliser que RIP. On trouve aussi les protocoles IGRP (Interior Gateway Routing Protocol) et E-IGRP (Enhanced IGRP). Pour les zones Inter-domaine, on trouve des protocoles tels que BGP (Border Gateway Protocol), IS-IS (Intermediate System to Intermetiate System), OSPF, etc… L'utilisation de la version 6 de IP fournira sans doute une normalisation des fonctions de routage, avec peut être l'apparition de nouveaux protocoles.
|