====== Manips ====== ===== Objectif de la manipulation ===== Nous allons essayer de décortiquer le mieux possible le fonctionnement du routage en essayant d'ouvrir un dialogue avec un hôte situé dans un autre réseau et en regardant au moyen d'un "sniffeur" ce qu'il se passe, du moins à notre portée. ===== Description de la manipulation ===== Il existe dans tous les systèmes TCP/IP une commande qui s'appelle "traceroute". Cette commande a pour but de repérer toutes les passerelles franchies pour aller de son poste à un hôte distant. En plus de déterminer les passerelles, elle indique, un peu à la manière d'un ping, le temps que met cette passerelle à répondre. Cette commande, dans les systèmes Windows, s'appelle "tracert", sans doute à cause d'une vieille habitude de créer des noms de 8 caractères maximum. Sous Linux, elle s'appelle "traceroute". Les deux commandes donnent les mêmes indications, celle de Linux étant un peu plus puissante dans la mesure où elles est plus paramétrable. ==== Exemple : ==== Emploi de la commande ''tracert'' pour étudier le chemin emprunté pour aller de mon poste de travail à Marseille sur le serveur web de l'académie de Montpellier (ça change un peu d'Oléane et ce n'est pas bien loin). E:\>tracert www.ac-montpellier.fr Détermination de l'itinéraire vers mtn.ac-montpellier.fr [193.48.169.69] avec un maximum de 30 sauts : 1 <10 ms <10 ms <10 ms gw1.maison.mrs [192.168.0.250] 2 20 ms 20 ms 30 ms ca-ol-marseille-1-2.abo.wanadoo.fr [62.161.96.2] 3 20 ms 30 ms 30 ms 194.250.158.157 4 30 ms 20 ms * POS-6-0-0.NCMAR202.Marseille.raei.francetelecom.net [194.51.171.41] 5 20 ms 21 ms 20 ms P0-7.ncmar302.Marseille.francetelecom.net [193.252.101.78] 6 20 ms 20 ms 30 ms P0-2.nrlyo102.Lyon.francetelecom.net [193.252.101.150] 7 30 ms 40 ms * P7-0.ntsta102.Paris.francetelecom.net [193.251.126.98] 8 30 ms 30 ms 41 ms 193.251.126.26 9 30 ms 31 ms 20 ms P1-0.BOUBB1.Paris.opentransit.net [193.251.128.66] 10 30 ms 40 ms 20 ms nio-i.cssi.renater.fr [193.51.206.41] 11 40 ms 40 ms 40 ms nio-n1.cssi.renater.fr [193.51.206.9] 12 70 ms 60 ms 60 ms montpellier.cssi.renater.fr [195.220.99.166] 13 * 80 ms 220 ms NRCP-montpellier.cssi.renater.fr [195.220.99.174] 14 60 ms 50 ms 60 ms 193.50.61.110 15 60 ms 60 ms 60 ms 193.48.170.21 16 60 ms 60 ms 50 ms 193.48.168.72 17 60 ms 60 ms 70 ms 193.48.169.69 Itinéraire déterminé. Ce n'est pas bien loin, tout de même... 17 passerelles et il suffit de lire les noms pour constater que l'on passe par Paris! (Heureusement qu'on ne fait pas ça en voiture :). Le réseau Renater est un réseau qui relie en France toutes les facultés et les centres de recherche. Visiblement, le passage du réseau France Télécom au réseau renater se fait à Paris. Il n'empêche que les paquets ne mettent qu'environ 70 ms pour faire l'aller-retour. ==== Comment ça marche ? ==== La commande s'appuie sur le « Time To Live » d'un paquet de données. Ce TTL dispose d'une valeur initiale, généralement entre 15 et 30 secondes, et est décrémenté à chaque passage de routeur. La décrémentation à chaque routeur est au moins d'une seconde, plus si le paquet reste en file d'attente dans le routeur plus d'une seconde. Dans un tel cas, le TTL est décrémenté à chaque seconde passée dans la file d'attente. Si le TTL devient nul, le paquet est considéré comme mort et est détruit par le routeur. L'émetteur du paquet reçoit un message ICMP ''Time-to-live exceeded'' pour le prévenir (une des raisons pour laquelle il ne faut pas filtrer tout le trafic ICMP sur un firewall). C'est cette propriété qui va servir à définir la route. La cible envoie un premier paquet avec un TTL de 1s. Ce paquet, en arrivant sur le premier routeur, va voir son TTL tomber à 0, donc va être détruit, et le routeur va en informer l'émetteur au moyen d'un message ICMP « TTL expiré ». L'opération est effectuée par défaut trois fois (les trois indices de temps indiqués dans la réponse), puis, un nouvel essai sera fait, avec cette fois-ci un TTL de 2 secondes. Normalement, le paquet doit passer le premier routeur et être détruit par le second. Ainsi de suite jusqu'à arriver à destination. Les paquets envoyés par la source peuvent être des paquets UDP ou ICMP. La commande "traceroute" de Linux envoie par défaut des paquets UDP, mais la directive "-I" force l'émission de paquets ICMP. Sous Windows, la commande "tracert" ne sait envoyer que des paquets ICMP. Notez que l'envoi de paquets UDP peut parfois poser des problèmes. ==== Comment les routeurs connaissent-ils les routes ? ==== Là, je n'ai pas de routeur Internet sous la main pour vous montrer; cependant, le choix des routes commence déjà sur votre machine et la commande "route" permet d'administrer ces routes. C'est le même principe qui sera appliqué sur un routeur. Voyons déjà les routes connues par mon poste de travail sous Windows 2000:
E:\>route print =========================================================================== Liste d'Interfaces 0x1 ........................... MS TCP Loopback interface 0x1000003 ...00 20 18 b9 49 37 ...... Realtek RTL8029(AS) Ethernet Adapt =========================================================================== =========================================================================== Itinéraires actifs : Destination réseau Masque réseau Adr. passerelle Adr. interface Métrique 0.0.0.0 0.0.0.0 192.168.0.250 192.168.0.10 1 (1) 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 (2) 192.168.0.0 255.255.255.0 192.168.0.10 192.168.0.10 1 (3) 192.168.0.10 255.255.255.255 127.0.0.1 127.0.0.1 1 (4) 192.168.0.255 255.255.255.255 192.168.0.10 192.168.0.10 1 (5) 224.0.0.0 224.0.0.0 192.168.0.10 192.168.0.10 1 (6) 255.255.255.255 255.255.255.255 192.168.0.10 192.168.0.10 1 (7) Passerelle par défaut : 192.168.0.250 (8) ===========================================================================A première vue, ça semble plutôt illisible, mais avec un peu d'habitude, on y arrive assez bien: - Destination 0.0.0.0\\ C'est la route que les paquets vont prendre lorsqu'ils n'on pas trouvé un meilleur chemin. En fait, c'est la route par défaut, reprise à la ligne 8.\\ C'est la ligne la plus intéressante, parce qu'elle fait intervenir une adresse de passerelle (192.168.0.250 c'est à dire gw1) et une adresse d'interface (192.168.0.10) différentes.\\ Cette ligne veut dire en français, "Lorsqu'on ne sait pas par où il faut passer, on va emprunter l'interface 192.168.0.10 pour joindre la passerelle 192.168.0.250. C'est elle qui décidera pour la suite du chemin".\\ - Destination 127.0.0.0\\ C'est la boucle interne, celle qui permet à l'hôte de se parler à lui même.\\ - Destination 192.168.0.0\\ C'est mon réseau local. Cette ligne indique que la passerelle est 192.168.0.10, de même que l'adresse de l'interface.\\ - Pour atteindre 192.168.0.10, c'est à dire moi-même, il faudra utiliser 127.0.0.1 (adresse interne toujours la même sur tous les hôtes quelque soit l'OS).\\ - Pour réaliser un broadcast sur mon réseau, il faudra utiliser 192.168.0.10\\ - Si l'on souhaite faire du multicast, même chose\\ - Si l'on souhaite faire du broadcast étendu, encore la même chose.\\ - La passerelle par défaut est indiquée de façon explicite. Comme deux exemples valent mieux qu'un, nous allons maintenant voir la table de routage de gw1, plus intéressante parce que dedans, il y a deux interfaces réseau (l'une sur le réseau local, l'autre sur le réseau FTCI). Avant d'aller plus loin, rappelons que gw1 est connecté à l'Internet par eth0 dont l'adresse est donnée par le DHCP de FTCI (213.56.56.250 actuellement), ainsi que le masque de sous réseau (255.255.248.0) et une passerelle par défaut (213.56.56.1).
[root@gw1 /root]# route -n Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth1 (1) 213.56.56.0 * 255.255.248.0 U 0 0 0 eth0 (2) 127.0.0.0 * 255.0.0.0 U 0 0 0 lo (3) default 213.56.56.1 0.0.0.0 UG 0 0 0 eth0 (4)Curieusement, les informations paraissent beaucoup plus lisibles, alors que le routage devrait être plus compliqué. - Pour atteindre le réseau 192.168.0.0 (masque 255.255.255.0), il faut passer par l'interface eth1 - Pour atteindre le réseau 213.56.56.0 (masque 255.255.248.0), il faut passer par eth0 - Pour atteindre le réseau 127.0.0.0, il faut passer par l'interface locale (127.0.0.1) - La route par défaut, celle qu'il faut prendre lorsqu'on ne sait pas laquelle prendre, c'est de joindre la passerelle 213.56.56.1 en passant par eth0 De ceci nous pouvons déjà prévoir quelque chose: Les paquets qui partiront de mon poste de travail vers un serveur quelconque de l'Internet passeront obligatoirement par 192.168.0.10 pour rejoindre 192.168.0.250. De là, ils passeront par eth0 (213.56.56.250) pour rejoindre 213.56.56.1 et c'est ce routeur qui décidera de la suite. C'est obligatoire, ça ne peut pas être autrement, ce sont les seules routes connues dans mon rayon d'action. Comme vous avez tous suivi attentivement, vous avez pu constater que ce que je dis ici n'est pas en accord avec ce que dit la commande ''tracert'' vers [[http://www.ac-montpellier.fr|www.ac-montpellier.fr]] vue plus haut. En effet, la deuxième passerelle rencontrée n'est pas 213.56.56.1 comme on peut le prévoir, mais 62.161.96.2 qui, en plus, n'est pas située dans un réseau que gw1 sait atteindre autrement qu'en passant par 213.56.56.1. Comment se fait-il qu'il n'y ait aucune trace de la passerelle par défaut attribuée par le DHCP? Pour le savoir, demandez à FTCI; j'ignore la réponse. Et pourtant, ça passe ;-) ==== Et comment font les « vrais » routeurs ? ==== Ils font pareil, à part que les tables sont souvent plus longues et que leurs mises à jour se font par l'intermédiaire de protocoles de dialogue entre routeurs, pour se tenir informés des changements toujours possibles. Normalement ça marche puisqu'il est tout de même assez rare d'être confronté à de réels problèmes de routage. ===== La suite ===== Maintenant que tout le décor est planté, passons à la manipulation proprement dite... Pour mieux comprendre la suite de cet exposé, rappelons l'architecture sur laquelle tous les tests vont être faits: ==== Mon réseau local ==== Le réseau local est réellement constitué de 6 hôtes (gw1 et gw2 inclus). Tous les hôtes (gw1 et gw2 exclus) fonctionnent sous diverses versions de Windows. "pchris" est mon poste de travail habituel et fonctionne le plus souvent sous Windows 2000. {{ :routage:config_structure.gif |Structure du réseau d'étude}} ==== Connexion Internet ==== Il n'y a que les deux hôtes gw1 et gw2 qui sont connectés directement à l'Internet via un HUB et le Com21. Les deux machines fonctionnent sous Linux (Mandrake 7.2 à l'heure où ces lignes ont été écrites) et sont toutes les deux configurées en passerelles / firewall ((En ces temps bénis, il était possible en effet d'obtenir deux adresses IP publiques, ce qui a permis cette manipulation, maintenant impossible)). * gw1 est la passerelle « officielle ». Normalement, il n'y a que cette machine qui est en service. * gw2 est plus expérimentale, cette machine n'est en service que lorsque je fais des manipulations particulières, ce qui sera le cas ici. ==== Informations réseau ==== Lors des manipulations décrites dans ce chapitre, les adresses réseau étaient les suivantes: | ^ eth0 ^^ eth1 ^^ Passerelle || | | //MAC// | //IP// | // MAC// | //IP// | //MAC// | //IP// | ^ gw1 | 00:20:AF:07:1A:3D | 213.56.56.250 | 00:20:18:61:90:E3 | 192.168.0.250 ^ 00:00:OC:07:AC:03 ^ 213.56.56.1 | ^ gw2 | 00:20:AF:4A:66:B7 | 195.6.103.216 | 00:20:18:29:11:31 | 192.168.0.253 ^ 00:00:OC:07:AC:03 ^ 195.6.96.1 | ^ pchris | 00:20:18:B9:49:37 | 192.168.0.10 | N/A | N/A | 00:20:18:61:90:E3 | 192.168.0.250 | **__Attention!__** Regardez bien les informations sur les passerelles par défaut pour gw1 et gw2: * Côté Internet, gw1 et gw2 ne sont pas dans les mêmes réseaux logiques. * Leurs passerelles par défaut sont bien dans leur réseau logique. * L'adresse MAC des deux passerelles par défaut __ **est la même.**__ Nous verrons un peu plus loin cette particularité plus en détail. Ce qui veut dire que, bien que les deux hôtes gw1 et gw2 n'appartiennent pas au mêmes réseaux logiques (IP), ils sont malgré tout connectées sur le même réseau physique (ce qui est finalement tout à fait normal). Cette conclusion est tirée du fait que l'adresse MAC est la même pour les deux passerelles. En fait, il n'y a qu'une seule passerelle qui dispose de deux adresses IP (Plus, en réalité, comme nous le verrons plus loin)... ==== Vérification ultime ==== Nous avons peut-être à voir d'un peu plus près la configuration de mon poste de travail: pchris. === La commande ''ipconfig'' === J'utilise Windows 2000. Ce serait la même chose avec Windows NT 4, mais pas avec WIndows 95, 98 ou Me; ces OS disposent en revanche de l'application "winipgfg" qui fait rigoureusement la même chose, mais en mode graphique.
E:\>ipconfig /all Configuration IP de Windows 2000 Nom de l'hôte . . . . . . . . . . : pchris Suffixe DNS principal . . . . . . : maison.mrs Type de noeud . . . . . . . . . . : Diffuser Routage IP activé . . . . . . . . : Non Proxy WINS activé . . . . . . . . : Non Ethernet carte Connexion au réseau local: Suffixe DNS spéc. à la connexion. : Description . . . . . . . . . . . : Carte Realtek PCI Ethernet à base RTL8029(AS) Adresse physique. . . . . . . . . : 00-20-18-B9-49-37 DHCP activé . . . . . . . . . . . : Non Adresse IP. . . . . . . . . . . . : 192.168.0.10 Masque de sous-réseau . . . . . . : 255.255.255.0 Passerelle par défaut . . . . . . : 192.168.0.250 Serveurs DNS. . . . . . . . . . . : 192.168.0.250C'est une configuration fixe. Il n'y a pas de DHCP sur mon réseau privé (pour 4 hôtes, ce serait peut-être excessif). Nous avons ici toutes les informations nécessaires au bon fonctionnement de la pile IP: * Adresse MAC * Adresse IP * Masque de sous réseau * Passerelle par défaut. === Mais c'est quoi, cette passerelle par défaut ? === Mon poste de travail sait que tous les autres hôtes du réseau ont des adresses avec le même HostID 192.168.0.0 et qu'il peut leur envoyer directement les informations. En revanche, pour tout hôte qui dispose d'une adresse IP avec un HostID autre, il sait qu'il ne peut pas leur envoyer d'informations directement. Dans ce cas, il lui faut un relais et ce relais, c'est justement la passerelle par défaut. Ici, la configuration est simple, il n'y a qu'un seul routeur. Sur des réseaux plus complexes, il pourrait y avoir plusieurs routeurs, chacun établissant une passerelle vers des réseaux différents. La table de routage serait alors plus compliquée, une simple passerelle par défaut ne pouvant plus suffire. Plus simplement, la couche 3 de mon OS, lorsqu'elle doit envoyer des informations à un hôte qui n'est pas sur mon réseau, se contentera de les envoyer à la passerelle par défaut, soit 192.168.0.250 qui, elle, est directement accessible, puisqu'elle est dans le même réseau logique. C'est elle qui devra se charger de définir la suite de la route. ===== Une route simple ===== Nous allons voir de très près comment déterminer l'itinéraire entre un client et le serveur FTP ftp.oleane.net. Ce n'est pas très difficile, nous savons maintenant qu' il existe une commande exprès pour. Cette fois-ci, nous allons utiliser "tracert" sur ftp.oleane.net. === Quelles informations obtient-on ? === L'exemple qui suit est réalisé avec Windows 2000 depuis mon poste "pchris" Détermination de l'itinéraire vers ftp.oleane.net [195.25.12.28] avec un maximum de 30 sauts: 1 <10 ms <10 ms <10 ms gw1.maison.mrs [192.168.0.250] 2 20 ms 30 ms 20 ms ca-ol-marseille-1-2.abo.wanadoo.fr [62.161.96.2] 3 30 ms 10 ms 30 ms 194.250.158.162 4 30 ms 20 ms 30 ms 212.234.244.93 5 10 ms 30 ms 20 ms POS-6-0-0.NCMAR201.Marseille.raei.francetelecom.net [194.51.171.37] 6 20 ms 30 ms 20 ms P0-2.nrlyo101.Lyon.francetelecom.net [193.252.101.74] 7 30 ms 30 ms 40 ms P7-0.ntaub101.Aubervilliers.francetelecom.net [193.251.126.226] 8 40 ms 30 ms 30 ms P9-0.nraub201.Aubervilliers.francetelecom.net [193.251.126.165] 9 30 ms * 40 ms POS-2-0.ARCG1.Archives.raei.francetelecom.net [194.51.159.234] 10 30 ms 40 ms 21 ms POS-1-0.GENG1.Archives.raei.francetelecom.net [194.51.159.154] 11 40 ms 30 ms 40 ms ftp.oleane.net [195.25.12.28] Itinéraire déterminé. Comme nous l'avons vu, la commande permet d'identifier tous les routeurs par lesquels on passe pour arriver jusqu'à la cible, avec le temps nécessaire pour atteindre chacun d'eux, un peu comme le ferait un ping. Les étoiles indiquent que le temps de réponse a été trop long ou qu'il n'y a pas eu de réponse. === Comment ça marche ? === === Première vérification ===
No. Source Destination Proto Info 1 - Première passerelle (la mienne). Nous voyons les trois pings et les trois réponses ICMP On passe du réseau 192.168.0.0 au réseau 213.56.56.0 (L'adresse indiquée dans le tracert semble ne pas être la bonne, mais souvenez-vous que ce routeur a plusieurs adresses IP sur la même interface) 583 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 584 gw1.maison.mrs pchris.maison.mrs ICMP Time-to-live exceeded 585 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 586 gw1.maison.mrs pchris.maison.mrs ICMP Time-to-live exceeded 587 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 588 gw1.maison.mrs pchris.maison.mrs ICMP Time-to-live exceeded 2 - Seconde passerelle (ma passerelle par défaut) On passe du réseau 213.56.56.0 au réseau 194.250.158.0 610 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 611 ca-ol-marseille-1-2.abo.wanadoo.fr pchris.maison.mrs ICMP Time-to-live exceeded 612 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 613 ca-ol-marseille-1-2.abo.wanadoo.fr pchris.maison.mrs ICMP Time-to-live exceeded 614 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 615 ca-ol-marseille-1-2.abo.wanadoo.fr pchris.maison.mrs ICMP Time-to-live exceeded 3 - Troisième passerelle du réseau 194.250.158.0 au réseau 194.51.171.0 637 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 638 194.250.158.162 pchris.maison.mrs ICMP Time-to-live exceeded 639 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 640 194.250.158.162 pchris.maison.mrs ICMP Time-to-live exceeded 641 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 642 194.250.158.162 pchris.maison.mrs ICMP Time-to-live exceeded 4 - Et ainsi de suite jusqu'à la destination... 744 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 745 212.234.244.93 pchris.maison.mrs ICMP Time-to-live exceeded 746 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 747 212.234.244.93 pchris.maison.mrs ICMP Time-to-live exceeded 748 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 749 212.234.244.93 pchris.maison.mrs ICMP Time-to-live exceeded 5 - 842 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 843 POS-6-0-0.NCMAR201.Marseille.raei.francetel... pchris.maison.mrs ICMP Time-to-live exceeded 844 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 845 POS-6-0-0.NCMAR201.Marseille.raei.francetel... pchris.maison.mrs ICMP Time-to-live exceeded 846 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 847 POS-6-0-0.NCMAR201.Marseille.raei.francetel... pchris.maison.mrs ICMP Time-to-live exceeded ... 9 - Notez ici la réponse qui a trop tardé à venir et considérée comme perdue Elle se traduit dans la réponse de tracert par une astérisque 950 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 951 POS-2-0.ARCG1.Archives.raei.francetelecom.net pchris.maison.mrs ICMP Time-to-live exceeded 952 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 1021 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 1022 POS-2-0.ARCG1.Archives.raei.francetelecom.net pchris.maison.mrs ICMP Time-to-live exceeded ... 11 - Et enfin la cible... 1071 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 1072 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping) reply 1073 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 1074 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping) reply 1075 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping) request 1076 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping) replyCe premier aperçu ne nous montre pas grand chose, finalement ; si ce n'est que la commande ''tracert'' utilise des pings vers la cible et que ce sont tour à tour les passerelles successives qui répondent par un « TTL expiré », jusqu'à la cible qui répond au ping. === Essayons tout de même d'en savoir un peu plus === Nous allons regarder de plus près le contenu de la première trame émise:
Frame 583 (106 on wire, 106 captured) Arrival Time: Jan 21, 2001 10:25:11.5597 Time delta from previous packet: 0.000000 seconds Frame Number: 583 Packet Length: 106 bytes Capture Length: 106 bytes Ethernet II Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) *** Adresse MAC de l'interface Eth1 de ma passerelle linux! Source: 00:20:18:b9:49:37 (pchris.maison.mrs) *** Adresse MAC de mon poste de travail Type: IP (0x0800) Internet Protocol Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 92 Identification: 0x3b7b Flags: 0x00 .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 1 *** Avec un TTL de 1 seconde (comme c'est dit dans les écritures) Protocol: ICMP (0x01) Header checksum: 0xee3e (correct) Source: pchris.maison.mrs (192.168.0.10) *** Niveau IP la source est toujours mon poste de travail Destination: ftp.oleane.net (195.25.12.28) *** Niveau IP la destination est bien ftp.oleane.net Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0 Checksum: 0xd0ff (correct) Identifier: 0x0200 Sequence number: 25:00 Data (64 bytes) ...Nous avons constaté ici quelques détails intéressants: * Pour le premier ping, le TTL est bien fixé à une seconde. * Bien que la cible IP soit ''%%ftp.oleane.net%%'', la cible Ethernet (Adresses MAC) **est la passerelle!** Mais voyons maintenant la première réponse :
Frame 584 (154 on wire, 154 captured) Arrival Time: Jan 21, 2001 10:25:11.5599 Time delta from previous packet: 0.000171 seconds Frame Number: 584 Packet Length: 154 bytes Capture Length: 154 bytes Ethernet II Destination: 00:20:18:b9:49:37 (pchris.maison.mrs) *** oui, normal... Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) *** Et c'est ma passerelle qui répond. C'est normal aussi, c'est elle qui a tué le paquet en mettant son TTL à 0 Type: IP (0x0800) Internet Protocol Version: 4 Header length: 20 bytes Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN: 0x00) 1100 00.. = Differentiated Services Codepoint: Class Selector 6 (0x30) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 140 Identification: 0xfb43 Flags: 0x00 .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 255 Protocol: ICMP (0x01) Header checksum: 0x3d18 (correct) Source: gw1.maison.mrs (192.168.0.250) Destination: pchris.maison.mrs (192.168.0.10) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) Code: 0 (TTL equals 0 during transit) *** Vous constaterez que l'on a ici toute l'explication du fonctionnement. Checksum: 0xf2ff (correct)Avez-vous compris le principe? Nous n'allons pas toutes les faire, nous allons juste regarder un dialogue un peu plus loin pour vérifier. La trame 923 (ne vous étonnez pas des numéros de trames, je n'étais pas le seul sur le réseau lorsque j'ai récupéré la trace, il a fallu filtrer un peu). Cette trame correspond à la première réponse du 8° routeur (P9-0.nraub201.Aubervilliers.francetelecom.net)
Frame 923 (106 on wire, 106 captured) Arrival Time: Jan 21, 2001 10:25:27.9036 Time delta from previous packet: 0.965007 seconds Frame Number: 923 Packet Length: 106 bytes Capture Length: 106 bytes Ethernet II Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) Source: 00:20:18:b9:49:37 (pchris.maison.mrs) *** Bien entendu, rien n'a changé, au niveau MAC, la remarque faite plus haut se re vérifie) Type: IP (0x0800) Internet Protocol Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 92 Identification: 0x3c20 Flags: 0x00 .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 8 *** Le TTL est ici de 8 (c'est normal, on cherche la 8° passerelle) Protocol: ICMP (0x01) Header checksum: 0xe699 (correct) Source: pchris.maison.mrs (192.168.0.10) Destination: ftp.oleane.net (195.25.12.28) Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0 Checksum: 0xbbff (correct) Identifier: 0x0200 Sequence number: 3a:00Et la réponse du 8° routeur...
Frame 924 (70 on wire, 70 captured) Arrival Time: Jan 21, 2001 10:25:27.9379 Time delta from previous packet: 0.034276 seconds Frame Number: 924 Packet Length: 70 bytes Capture Length: 70 bytes Ethernet II Destination: 00:20:18:b9:49:37 (pchris.maison.mrs) Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) *** Et la source? C'est pas le 8° routeur, c'est toujours ma passerelle à moi! *** (Nous sommes au niveau 2, au niveau Ethernet) Type: IP (0x0800) Internet Protocol Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 56 Identification: 0x0000 Flags: 0x00 .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 249 Protocol: ICMP (0x01) Header checksum: 0xc071 (correct) Source: P9-0.nraub201.Aubervilliers.francetelecom.net (193.251.126.165) *** Au niveau 3 (IP), c'est bien le routeur qui répond Destination: pchris.maison.mrs (192.168.0.10) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) Code: 0 (TTL equals 0 during transit) Checksum: 0xec57 (correct)Si je n'avais pas eu peur de vous fatiguer (ce qui, du reste, est peut-être tout de même le cas), je vous aurai laissé la totalité de la trace pour vérifier que, quelque soit le routeur qui tue le ping parce que son TTL a expiré durant le transit, l'adresse MAC de la source que reçoit mon poste de travail est **toujours** celle de ma passerelle (le premier routeur que je rencontre sur le chemin). Ceci confirme bien [[030_livraisons|ce que nous avons déjà vu à propos de la couche 2.]] ===== De l'autre côté... ===== Nous avons vu en détail le dialogue ICMP sur le réseau local. C'est bien, mais nous allons faire mieux... Un petit dessin : {{ :routage:hop.gif |Ping !}} Grâce à gw2, nous allons espionner les paquets ICMP qui traversent gw1 pour aller plus loin. La première salve, celle qui avait un TTL de 1 en partant de mon poste de travail, nous ne la verrons pas au delà de gw1, c'est normal, gw1 l'a tuée. La première que nous verrons passer, c'est celle qui partait de pchris avec un TTL de 2. Pour mieux suivre, nous comparons ces paquets avant passage de gw1 et après : ==== Envoi de l'écho. ==== ^ Sur le réseau local...\\ (entre pchris et gw1) ^ Sur la connexion Internet...\\ (entre gw1 et la passerelle FAI) | |
Frame 610 (106 on wire, 106 captured) ... Ethernet II Destination: 00:20:18:61:90:e3 (eth1 sur gw1) Source: 00:20:18:b9:49:37 (pchris) *** notez bien au passage de gw1 le changement d'adresses MAC source et destination ... Time to live: 2 ... Protocol: ICMP (0x01) Header checksum: 0xed31 (correct) Source: (192.168.0.10) *** Attention à l'IP... Destination: ftp.oleane.net (195.25.12.28) Internet Control Message Protocol Type: 8 (Echo (ping) request) ... Sequence number: 28:00 ...|
Frame 32 (106 on wire, 106 captured) ... Ethernet II Destination: 00:00:0c:07:ac:03 (pass. FAI) Source: 00:20:af:07:1a:3d (eth0 sur gw1) ... ... ... Time to live: 1 *** Le TTL a été décrémentée par gw1 Protocol: ICMP (0x01) Header checksum: 0xa0b1 (correct) Source: (213.56.56.250) *** ça, c'est le travail de "IP Masquerade" Destination: ftp.oleane.net (195.25.12.28) Internet Control Message Protocol Type: 8 (Echo (ping) request) ... Sequence number: 28:00 ...| Plusieurs points sont à retenir: * Au niveau Ethernet (niveau 2) les adresses MAC ont changé, elles correspondent chaque fois à l'émetteur et au destinataire **dans** le réseau concerné. * Le TTL du paquet a été décrémenté au passage de gw1. Nous savons déjà que, lorsque ce paquet va arriver sur la passerelle FTCI, il va être tué puisque son TTL va tomber à 0 et que cette passerelle va nous renvoyer un message ICMP "Time-to-live exceeded". * L'adresse IP a été modifiée, mais ceci est dû au masquage d'adresse introduit par gw1. Si gw1 avait été un "vrai" routeur, il n'aurait pas agi au niveau de l'IP ==== Réception de la réponse ==== (asseyez-vous confortablement, il va y avoir des surprises) ^ Sur le réseau local...\\ (entre pchris et gw1) ^ Sur la connexion Internet...\\ (entre gw1 et la passerelle FTCI) | |
Frame 611 (70 on wire, 70 captured) ... Ethernet II Destination: 00:20:18:b9:49:37 *** (pchris.maison.mrs) Source: 00:20:18:61:90:e3 *** (eth1 sur gw1) Type: IP (0x0800) Internet Protocol ... Source: ca-ol-marseille-1-2.abo.wanadoo.fr (62.161.96.2) Destination: pchris.maison.mrs (192.168.0.10) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) ...|
Frame 33 (70 on wire, 70 captured) ... Ethernet II Destination: 00:20:af:07:1a:3d *** (ca-ol-marseille-9-250.abo.wanadoo.fr) *** (joli nom de gw1 sur le Net) Source: 00:03:a0:83:0c:00 *** (ca-ol-marseille-25-2.abo.wanadoo.fr) Type: IP (0x0800) Internet Protocol ... Source: ca-ol-marseille-1-2.abo.wanadoo.fr (62.161.96.2) Destination: ca-ol-marseille-9-250.abo.wanadoo.fr (213.56.56.250) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) ...| Rappelons ici le résultat de la commande ''tracert'': Détermination de l'itinéraire vers ftp.oleane.net [195.25.12.28] avec un maximum de 30 sauts: 1 <10 ms <10 ms <10 ms gw1.maison.mrs [192.168.0.250] 2 20 ms 30 ms 20 ms ca-ol-marseille-1-2.abo.wanadoo.fr [62.161.96.2] 3 .... Nous avions déjà rencontré ce phénomène dans la présentation de la commande ''tracert'', nous le retrouvons identique ici. * Déjà, est-il normal que ce soit ca-ol-marseille-1-2.abo.wanadoo.fr (62.161.96.2) qui me réponde, alors que ma passerelle par défaut est ca-ol-marseille-9-1.abo.wanadoo.fr (213.56.56.1) ? La seconde serait logique puisqu'elle est dans le même réseau que gw1 côté public, mais ce n'est pas elle qui répond. Nous pourrions penser que c'est une astuce, il est possible en effet d'attribuer plusieurs adresses IP à la même interface réseau, mais dans ce cas, l'adresse MAC devrait correspondre... * Encore plus curieux, au niveau Ethernet, c'est 00:03:a0:83:0c:00 qui répond (ca-ol-marseille-25-2.abo.wanadoo.fr) ==== Résumons-nous : ==== * Sur un réseau « simple », il y a une passerelle par défaut, les paquets sortant vers un autre réseau et entrant depuis un autre réseau passent par elle, une analyse de trame et une étude de la table ARP le confirment. * Ici, tout se passe de façon plus compliquée: * Les paquets sortant ne peuvent passer que par la passerelle par défaut paramétrée par le serveur DHCP (ici 213.56.56.1, 00:00:0c:07:ac:03) Ce n'est pas possible autrement, ma machine connectée au COm21 n'en connaît pas d'autres. * Les paquets entrants, en revanche, arrivent par une autre passerelle: 00:03:a0:83:0c:00. Ce qui est encore plus curieux, c'est qu'au niveau IP elle est annoncée avec l'adresse 62.161.96.2, adresse située dans un autre réseau logique que le mien (213.56.56.0)