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:

  1. 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”.
  2. Destination 127.0.0.0
    C'est la boucle interne, celle qui permet à l'hôte de se parler à lui même.
  3. 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.
  4. 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).
  5. Pour réaliser un broadcast sur mon réseau, il faudra utiliser 192.168.0.10
  6. Si l'on souhaite faire du multicast, même chose
  7. Si l'on souhaite faire du broadcast étendu, encore la même chose.
  8. 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é.

  1. Pour atteindre le réseau 192.168.0.0 (masque 255.255.255.0), il faut passer par l'interface eth1
  2. Pour atteindre le réseau 213.56.56.0 (masque 255.255.248.0), il faut passer par eth0 
  3. Pour atteindre le réseau 127.0.0.0, il faut passer par l'interface locale (127.0.0.1)
  4. 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 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.

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 1).

  • 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.250

C'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) reply

Ce 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:00

Et 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 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 :

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)
1)
En ces temps bénis, il était possible en effet d'obtenir deux adresses IP publiques, ce qui a permis cette manipulation, maintenant impossible