Exemples de découverte de voisins

From Livre IPv6

Revision as of 08:41, 19 November 2005 by Laurent Toutain (Talk | contribs) (Configuration de la route par défaut)

Ping et résolution d'adresses

Les paquets suivants ont été obtenus lors d'un ping entre deux stations IPv6 situées sur le même réseau physique de type Ethernet.

uma# ping6 ganesha
trying to get source for ganesha
source should be 3ffe:302:12:3:a00:20ff:fe0a:aa6d
PING ganesha (3ffe:302:12:3::3): 56 data bytes
64 bytes from 3ffe:302:12:3::3: icmp6_seq=0 ttl=255 time=5.121 ms

Avant de pouvoir émettre un paquet ICMPv6 de demande d'écho, l'émetteur a besoin de connaître l'adresse physique de l'équipement destinataire. Il utilise le protocole de découverte des voisins et émet une trame de sollicitation d'un voisin.

Ethernet Src : 8:0:20:a:aa:6d Dst : 33:33:ff:0:0:3 Type : 0x86dd
IPv6
 Version : 6 Classe : 0xf0 Label : 000000
 Longueur : 32 octets (0x0020) Protocole : 58 (0x3a, ICMPv6)
 Nombre de sauts : 255 (0xff)
 Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
 Desti. : ff02::1:ff00:3 (multicast sollicité associé à 3ffe:302:12:3::3)
ICMPv6
 Type : 135 (0x87, Sollicitation de voisin) Code : 0 Checksum : 0x4d7f
 Cible : 3ffe:302:12:3::3 (ganesha)
 Option :
 Type : 1 (Adresse physique source) Lg : 8 octets (0x01) : 08-00-20-0a-aa-6d 

0000: 6f 00 00 00 00 20 3a ff 3f fe 03 02 00 12 00 03
0010: 0a 00 20 ff fe 0a aa 6d ff 02 00 00 00 00 00 00
0020: 00 00 00 01 ff 00 00 03|87 00 4d 7f 00 00 00 00
0030: 3f fe 03 02 00 12 00 03 00 00 00 00 00 00 00 03|
0040: 01 01 08 00 20 0a aa 6d

Dans l'en-tête IPv6, l'adresse de la source est l'adresse globale de l'interface d'émission. On aurait pu penser que l'émetteur utilisait l'adresse locale au lien comme adresse de la source. L'utilisation de l'adresse source globale, comme on le verra par la suite, permet au destinataire de remplir directement sa table de correspondance entre adresse IPv6 et adresse physique, puisque ce dernier trouvera dans la suite du datagramme l'adresse physique de l'émetteur.

L'adresse de destination est l'adresse de multicast sollicité associée à l'adresse recherchée et l'adresse Ethernet de destination est l'adresse associée (cf. Supports de transmission RFC 2464).

L'en-tête ICMPv6 contient dans le champ cible l'adresse IPv6 de la machine dont l'adresse physique est recherchée. On peut remarquer que les trois derniers octets correspondent au groupe de multicast de l'en-tête IPv6.

Le champ option contient l'adresse physique de l'émetteur de la requête.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 8:0:20:a:aa:6d Type : 0x86dd
IPv6
 Version : 6 Classe : 0xf0 Label : 000000
 Longueur : 32 octets (0x20) Protocole : 58 (0x3a, ICMPv6)
 Nombre de sauts : 255 (0xff)
 Source : fe80::1800:20ff:fe0c:7a34 (ganesha, lien-local)
 Desti. : 3ffe:302:12:3:0a00:20ff:fe0a:aa6d (uma)
ICMPv6
 Type : 136 (0x88, Annonce de voisin) Code : 0 Checksum : 0xd7fb
 Bits (0x7) R = 1, S = 1, O = 1
 Cible : 3ffe:302:12:3::3 (ganesha)
 Option :
 Type : 2 (Adresse physique cible) Lg : 8 octets (0x01) : 1a-00-20-0c-7a-34

La machine ganesha, qui écoute sur tous les groupes multicast sollicité associés à ses adresses, reçoit le message de sollicitation de voisin, reconnaît dans la cible une de ses adresses IPv6, et répond. L'adresse source utilisée est locale au lien. Le bit R indique que l'équipement qui répond a une fonction de routeur. Le bit S indique que ce message est une réponse à une demande explicite (le message précédent). Le bit O indique que cette réponse doit remplacer toute valeur connue précédemment. Le champ cible rappelle l'adresse IPv6. Le champ option donne l'adresse physique recherchée.

Ethernet Src : 8:0:20:a:aa:6d Dst : 1a:0:20:c:7a:34 Type : 0x86dd
IPv6
 Version : 6 Classe : 0x00 Label : 000000
 Longueur : 64 octets (0x0040) Protocole : 58 (0x3a, ICMPv6)
 Nombre de sauts : 255 (0xff)
 Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
 Desti. : 3ffe:302:12:3::3 (ganesha)
ICMPv6
 Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0x0f20
 Identificateur : 0x00c0 Numéro de séquence : 0x0000
 Données : Date : 0x3468c4c7.000631c7 Remplissage ...

L'émetteur envoie un message ICMPv6 Demande d'écho.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 8:0:20:a:aa:6d Type : 0x86dd
IPv6
Version : 6 Classe : 0x00 Label : 000000
Longueur : 64 octets (0x0040) Protocole : 58 (0x3a, ICMPv6)
Nombre de sauts : 255 (0xff)
Source : 3ffe:302:12:3::3 (ganesha)
Desti. : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
ICMPv6
Type : 129 (0x81, Réponse d'écho) Code : 0 Checksum : 0x0e20
Identificateur : 0x00c0 Numéro de séquence : 0x0000
Données : Celles de la demande

Le destinataire acquitte en retournant un message ICMPv6 Réponse d'écho. Il n'est pas nécessaire de relancer une phase de résolution d'adresse puisque la précédente a permis de remplir le cache.

Les échanges ICMP Demande d'écho et Réponse d'écho continuent ensuite toutes les secondes. Si les échanges continuent assez longtemps, les deux machines vérifieront périodiquement que le correspondant est toujours correct (il a pu tomber en panne ou être remplacé avec changement d'adresse Ethernet) en utilisant le protocole NUD. Aussi de temps en temps, chaque machine va émettre une trame sollicitation d'un voisin. Une réponse (annonce de voisin avec le bit S) montre que le correspondant est toujours valide.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 8:0:20:a:aa:6d Type : 0x86dd
IPv6
 Source : fe80::1800:20ff:fe0c:7a34 (ganesha, lien-local)
 Desti. : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
ICMPv6
 Type : 135 (0x87, Sollicitation de voisin) Code : 0
 Cible : 3f fe 03 02 00 12 00 03 0a 00 20 ff fe 0a aa 6d
Option : aucune

On remarque que le message de sollicitation est directement adressé au destinataire, avec l'adresse qui est enregistrée dans les tables de correspondance. Si une réponse n'arrive pas, la machine émettrice effacera l'entrée de son cache «Résolution de voisin». Tout trafic ultérieur reprendra l'enquête de résolution au début, avec diffusion vers l'adresse multicast sollicité-- au cas où l'adresse Ethernet aurait changée.

Configuration de la route par défaut

En IPv6 seuls les routeurs utilisent des protocoles de routage pour définir leurs tables de routage. Le routage des autres machines repose sur la notion de route par défaut. Comme avec IPv4, l'envoi de messages de redirection est utilisé pour installer de meilleures routes. Périodiquement les routeurs envoient des Annonces du routeur qui permettent aux machines sur le câble de choisir un routeur par défaut, et aussi de calculer leur adresse (dans le mode d'autoconfiguration sans état stateless).

CS55.gif

Un même câble Ethernet relie 3 machines (cf. figure Annonces de routeurs) :

   * deux routeurs ganesha et tuna,
   * et une autre machine uma.

Les routeurs émettent périodiquement sur le réseau des messages d'annonce.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 33:33:0:0:0:1 Type : 0x86dd
IPv6
 Version : 6 Classe : 0xf Label : 000000
 Longueur : 56 octets (0x0038) Protocole : 58 (0x3a, ICMPv6)
 Nombre de sauts : 255 (0xff)
 Source : fe80::1800:200c:7a34 (ganesha, lien-local)
 Desti. : ff02::1 (multicast, tous les n??uds du lien)
ICMPv6
 Type : 134 (0x86, Annonce de routeur) Code : 0 Checksum : 0x773c
 Nombre de sauts : 0 (non précisé) Gestion d'adresse : 0 (Pas de DHCP)
 Validité : 6000 secondes (0x1770) Timers : 0, 0 (non précisés)
 Options :
  Type : 1 (Adresse physique source) Lg : 8 octets (0x01) : 1a-00-20-0c-7a-34
  Type : 3 (Information sur le préfixe) Lg : 32 octets (0x04)
   Drapeaux : L=1, A=1 Durée de validité : -1, -1 (infinie)
  Préfixe : 3ffe:302:12:3::/64
0000: 6f 00 00 00 00 38 3a ff fe 80 00 00 00 00 00 00
0010: 18 00 20 ff fe 0c 7a 34 ff 02 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 01|86 00 77 3c 00 00 17 70
0030: 00 00 00 00 00 00 00 00|01 01 1a 00 20 0c 7a 34|
0040: 03 04 40 c0 ff ff ff ff ff ff ff ff 00 00 00 00
0050: 3f fe 03 02 00 12 00 03 00 00 00 00 00 00 00 00

Ce message est envoyé par le routeur ganesha (l'adresse source est l'adresse locale, commençant par fe80), à destination de tous les noeuds sur le câble Ethernet (adresse de destination IPv6 «Tous les noeuds sur le lien» ff02::1 et l'adresse de destination physique est l'adresse MAC de multicast associée). Les informations donnent la durée de vie de cette annonce, des paramètres de configuration pour les noeuds, dont le type de construction d'adresse : mode d'autoconfiguration ''stateless'' en créant une adresse permanente à partir du préfixe 3ffe:302:12:3::/64.

La table de routage d'uma après réception de ce message contient :

uma# netstat -nrf inet6
Routing tables IPv6:
Destination                    Gateway                   Flags Refs Use Mtu  Interf
default                        fe80::1800:20ff:fe0c:7a34 UGS    0   17  1500 le0
fe80::1800:20ff:fe0c:7a34      1a:0:20:c:7a:34 U         HDL    1   2   1500 le0
.....

La ligne avec le drapeau L correspond à une machine directement accessible, le champ Gateway contient l'adresse IEEE 802. Il s'agit des informations contenues dans la table de correspondance construite par le protocole de découverte des voisins.

Le routeur tuna avait lui aussi émis des annonces de routeur. On pourrait donc aussi enregistrer une route par défaut via tuna ; mais le système ne conserve qu'une route par défaut, et la route possible par tuna est ignorée. De même, il n'y a pas de ligne de correspondance adresse IPv6-adresse Ethernet pour tuna car cette adresse n'a pas été utilisée comme destination.

Indication de redirection

La configuration donnée figure Routage par défaut non optimal après la configuration des routes par défaut conduit aux tables de routage suivantes : la route par défaut d'uma pointe sur ganesha, et la route vers la machine externe 3ffe:200:1:3::1 sur ganesha pointe sur tuna.

CS56.gif

La machine uma envoie un ping à la machine externe 3ffe:200:1:3::1 en utilisant la route par défaut, non optimale.

uma# ping6 3ffe:200:1:3::1
trying to get source for 3ffe:200:1:3::1
source should be 3ffe:302:12:3:a00:20ff:fe0a:aa6d
PING 3ffe:200:1:3::1: 56 data bytes
64 bytes from 3ffe:200:1:3::1: icmp6_seq=0 ttl=253 time=79.689 ms
.....

En observant le réseau, on trouve le trafic suivant.

Ethernet Src : 8:0:20:a:aa:6d Dst : 1a:0:20:c:7a:34 Type : 86dd
IPv6
Version : 6 Classe : 0x00 Label : 000000
Longueur : 64 octets (0x0040) Protocole : 58 (0x3a, ICMPv6)
Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
Desti. : 3ffe:200:1:3::1 (gw-uni)
ICMPv6
Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0xd775
Identificateur : 0x00d6 Numéro de séquence : 0x0000
Données : Date : 0x3469a2a4.000d8c8b Remplissage ...
Le message ICMPv6 d'écho est transmis vers l'adresse Ethernet de ganesha, routeur par défaut  d'uma.
Ethernet Src : 1a:0:20:c:7a:34 Dst : 0:0:c0:86:e2:e9 Type : 86dd
IPv6
Version : 6 Classe : 0x00 Label : 000000
Longueur : 64 octets (0x0040) Protocole : (0x3a, ICMPv6)
Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
Desti. : 3ffe:200:1:3::1 (gw-uni)
ICMPv6
Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0xd775
Identificateur : 0x00d6 Numéro de séquence : 0x0000
Données : Date : 0x3469a2a4.000d8c8b Remplissage ...

ganesha retransmet le paquet IPv6 non modifié vers l'adresse Ethernet de tuna, qui est le premier relais sur la route vers la destination finale.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 8:0:20:a:aa:6d Type : 86dd
IPv6
Version : 6 Classe : 0xf0 Label : 000000
Longueur : 160 octets (0x00a0) Protocole : (0x3a, ICMPv6)
Source : fe80::1800:20ff:fe0c:7a34 (ganesha,lien-local)
Desti. : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
ICMPv6
Type : 137 (0x89, Redirection) Code : 0 Checksum : 0x869d
Meilleur routeur : fe80::200:c0ff:fe86:e2e9 (tuna, lien-local)
Destination : 3ffe:200:1:3::1 (gw-uni)
Options :
Type : 2 (Adresse physique cible) Lg : 8 octets (0x01) : 00-00-c0-86-e2-e9
Type : 4 (Paquet ayant causé le message) Longueur : 112 octets (0x0e)
Début du paquet IPv6 ayant causé le message

ganesha constate que le paquet d'écho a été réémis sur l'interface qui l'avait reçu, et génère donc un message de redirection vers uma pour lui indiquer qu'une meilleure route vers 3ffe:200:1:3::1 utilise le routeur fe80::200:c0ff:fe86:e2e9.

En IPv6 l'adresse Ethernet du routeur est fournie, ce qui évite une résolution supplémentaire.

Ethernet Src : 8:0:20:a:aa:6d Dst : 0:0:c0:86:e2:e9 Type : 86dd
IPv6
Version : 6 Classe : 0x00 Label : 000000
Longueur : 64 octets (0x0040) Protocole : (0x3a, ICMPv6)
Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
Desti. : 3ffe:200:1:3::1 (gw-uni)
ICMPv6
Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0xf51f
Identificateur : 0x00d6 Numéro de séquence : 0x0001
Données : Date : 0x3469a2a6.000d6edd Remplissage ...

Le paquet de demande d'écho suivant est envoyé directement vers l'adresse Ethernet de tuna.

La table de routage d'uma est maintenant :

uma# netstat -nrf inet6
Routing tables IPv6:
Destination Gateway Flags Refs Use Mtu Interf
default fe80::1800:20ff:fe0c:7a34 UGS 0 17 1500 le0
3ffe:200:1:3::1 fe80::200:c0ff:fe86:e2e9 UGHD 0 2 1500 le0
fe80::200:c0ff:fe86:e2e9 0:0:c0:86:e2:e9 UHDL 1 0 1500 le0
fe80::1800:20ff:fe0c:7a34 1a:0:20:c:7a:34 UHDL 1 2 1500 le0
.....

Indication de redirection externe

En IPv4, le mécanisme de redirection n'est prévu que pour les machines auxquelles on accède par l'intermédiaire d'un routeur ; la machine émettrice doit connaître les adresses IPv4 directement accessibles (le numéro de réseau correspondant au lien physique), un «ICMP Redirect» ne fonctionne pas pour celles-ci.

En IPv6, il n'est plus nécessaire de connaître tous les préfixes IPv6 correspondant au lien physique, une machine peut se contenter de connaître son adresse, un routeur par défaut, et envoyer tout le trafic inconnu sur ce routeur. Le mécanisme de redirection permettra de rediriger le trafic vers la destination la meilleure dans tous les cas.

Dans l'exemple correspondant à la See Routage par défaut non optimal, supposons que guma a pour adresse globale sur l'interface partagée avec uma 3ffe:302:12:4::4, et que uma n'a pas pris en compte dans ses tables de routage que le câble contient des machines appartenant à un préfixe 3ffe:302:12:4::4/64. Ceci peut être dû au fait que uma n'analyse pas tous les préfixes, ou parce que le préfixe n'est pas annoncé sur le câble. Ce cas de figure est courant si le lien reliant uma et guma est réseau ATM.

La machine uma veut accéder à guma :

uma# ping6 3ffe:302:12:4::4
trying to get source for 3ffe:302:12:4::4
source should be 3ffe:302:12:3:a00:20ff:fe0a:aa6d
PING 3ffe:302:12:4::4: 56 data bytes
64 bytes from 3ffe:302:12:4::4: icmp6_seq=0 ttl=255 time=7.267 ms
.....

Date : 19:57:43.177504
Ethernet Src : 8:0:20:a:aa:6d Dst : 1a:0:20:c:7a:34 Type : 86dd
IPv6
Version : 6 Classe : 0x00 Label : 000000
Longueur : 64 octets (0x0040) Protocole : (0x3a, ICMPv6)
Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
Desti. : 3ffe:302:12:4::4 (guma)
ICMPv6
Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0x43cc
Identificateur : 0x00fd Numéro de séquence : 0x0000
Données : Date : 0x337b4e95.0002725d Remplissage ...


Puisque uma ne sait pas que guma est directement accessible, le message ICMP d'écho est transmis vers l'adresse Ethernet de ganesha, routeur par défaut d'uma.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 0:0:c0:89:e2:e6 Type : 86dd
IPv6
Version : 6 Classe : 0x00 Label : 000000
Longueur : 64 octets (0x0040) Protocole : (0x3a, ICMPv6)
Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
Desti. : 3ffe:302:12:4::4 (guma)
ICMPv6
Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0x43cc
Identificateur : 0x00fd Numéro de séquence : 0x0000
Données : Date : 0x337b4e95.0002725d Remplissage ...

ganesha retransmet le paquet non modifié vers guma.

Ethernet Src : 1a:0:20:c:7a:34 Dst : 8:0:20:a:aa:6d Type : 86dd
IPv6
Version : 6 Classe : 0xf0 Label : 000000
Longueur : 160 octets (0x00a0) Protocole : (0x3a, ICMPv6)
Source : fe80::1800:20ff:fe0c:7a34
Desti. : 3ffe:302:12:3:a00:20ff:fe0a:aa6d
ICMPv6
Type : 137 (0x89, Redirection) Code : 0 Checksum : 0xfe45
Meilleur routeur : 3ffe:302:12:4::4 (guma)
Destination : 3ffe:302:12:4::4 (guma)
Options :
Type : 2 (Adresse physique cible) Lg : 8 octets (0x01) : 00-00-c0-89-e2-e6
Type : 4 (Paquet ayant causé le message) Longueur : 112 octets (0x0e)
Début du paquet IPv6 ayant causé le message

De plus ganesha envoie à uma un message de redirection. C'est une redirection vers une machine sur le lien physique, ce qui est indiqué par le fait que les champs «Meilleur routeur» et «Destination» sont égaux (le premier relais est la destination finale).

Ethernet Src : 0:0:c0:89:e2:e6 Dst : 8:0:20:a:aa:6d Type : 86dd
IPv6
Version : 6 Classe : 0xf0 Label : 000000
Longueur : 64 octets (0x0040) Protocole : (0x3a, ICMPv6)
Source : 3ffe:302:12:4::4
Desti. : 3ffe:302:12:3:a00:20ff:fe0a:aa6d
ICMPv6
Type : 129 (0x81, Réponse d'écho) Code : 0 Checksum : 0x42cc
Identificateur : 0x00fd Numéro de séquence : 0x0001
Données : Celles de la demande

La réponse de guma parvient à uma (les messages de sollicitation de voisin échangés ne sont pas montrés dans cet exemple).

Ethernet Src : 8:0:20:a:aa:6d Dst : 0:0:c0:89:e2:e6 Type : 86dd
IPv6
Version : 6 Classe : 0xf0 Label : 000000
Longueur : 64 octets (0x0040) Protocole : (0x3a, ICMPv6)
Source : 3ffe:302:12:3:a00:20ff:fe0a:aa6d (uma)
Desti. : 3ffe:302:12:4::4 (guma)
ICMPv6
Type : 128 (0x80, Demande d'écho) Code : 0 Checksum : 0x43be
Identificateur : 0x00fd Numéro de séquence : 0x0001
Données : Date : 0x337b4e96.00027269 Remplissage ...

Les demandes d'écho suivantes sont adressées directement à l'adresse Ethernet de guma. La table de routage d'uma est maintenant :

uma# netstat -nrf inet6
Routing tables IPv6:
Destination Gateway Flags Refs Use Mtu Interf
default fe80::1800:20ff:fe0c:7a34 UGS 0 17 1500 le0
3ffe:302:12:4::4 0:0:c0:89:e2:e6 UHDL 0 3 1500 le0
3ffe:200:1:3::1 fe80::200:c0ff:fe86:e2e9 UGHD 0 2 1500 le0
fe80::200:c0ff:fe86:e2e9 0:0:c0:86:e2:e9 UHDL 1 0 1500 le0
fe80::1800:20ff:fe0c:7a34 1a:0:20:c:7a:34 UHDL 1 2 1500 le0
.....

On voit qu'il y a maintenant une ligne avec le drapeau L pour la machine guma. Le drapeau L et l'absence de drapeau G indiquent une machine directement accessible, sans routeur intermédiaire.

Personal tools