Internet et les réseaux IP sont composés d'un ensemble de réseaux reliés via des machines particulières que l'on appelle routeurs.
Le protocole IP est capable de choisir un chemin (on dit aussi une route) suivant lequel les paquets de données seront relayés de proche en proche jusqu'au destinataire. C'est ainsi que le routage IP fonctionne de façon totalement décentralisée au niveau des machines qui constituent le réseau. Aucune n'a une vision globale de la route que prendront les paquets de données.
Le présent document s'inspire largement du dossier «Initiation au routage 1ère partie» de Linux Magazine n° 42.
Le routage IP repose sur quatre principes que nous passons en revue très brièvement :
Premier principe : des adresses IP bien structurée
Chaque interface réseau d'une machine possède une adresse unique dans tout son réseau. Cette adresse est structurée en deux parties :
- la première partie que l'on appelle aussi préfixe donne le numéro du réseau.
- la deuxième partie donne le numéro de l'interface dans ce réseau.
Les adresses IP sont regroupées par classe de réseau.
On définit des masques de réseau (en général un masque par classe de réseau).
A partir de l'adresse IP d'une interface dans un réseau et du masque de réseau (ou de la classe de réseau), on détermine l'adresse du dit réseau (le préfixe) en procédant à un ET logique entre l'adresse de l'interface et le masque.
Ainsi par exemple pour une interface eth0 d'adresse 192.168.2.254 (une adresse de classe C) et un masque réseau 255.255.255.0, on obtient le préfixe réseau 192.168.2.0
Deuxième principe : Les paquets comportent les adresses IP des machines émettrice et destinataire
Lors de l'émission, le protocole découpe les données en plus petits paquets (aussi appelés datagrammes IP). Ces paquets comportent une en-tête et une zone de données comme on peut le voir ci-dessous
EN-TETE |
ZONE DE DONNEES |
L'en-tête contient, entre autres, les adresses de l'émetteur et du destinataire et permet l'aiguillage du paquet de proche en proche jusqu'à sa destination.
Troisième principe : Chaque machine du réseau possède une table de routage gérée par le logiciel IP
C'est une liste contenant les adresses de réseau destination et les interfaces ou adresses des machines proches par lesquelles on peut atteindre ces destinations. Nous donnons ci-dessous un exemple d'une telle table.
Réseau |
Moyens de l'atteindre |
192.168.2.0 |
eth0 |
100.0.0.0 |
eth1 |
101.0.0.0 |
eth2 |
192.168.1.0 |
100.0.0.1 |
192.168.3.0 |
101.0.0.2 |
Explications :
La machine qui a cette table de routage possède trois interfaces réseau (eth0, eth1 et eth2) ainsi que les adresses IP des réseaux qui sont directement reliés à ces interfaces.
On connaît les adresses IP de deux routeurs. On sait aussi qu'il existe deux réseaux atteignables depuis notre machine (192.168.1.0 et 192.168.3.0) et qu'ils sont derrière les routeurs 100.0.0.1 et 101.0.0.2 respectivement.
Quatrième principe : Toutes les machines sous IP exécutent le même algorithme
Lors de l'émission d'un paquet de données, l'algorithme exécuté est le suivant :
Calculer le préfixe réseau de l'adresse destination avec notre masque ;
Rechercher ce préfixe dans notre table de routage ;
Quatre possibilités existent :
- Le préfixe calculé correspond à celui d'un réseau directement connecté : il y a remise directe du paquet sur le réseau et le routage est terminé ;
- Ce préfixe correspond à celui d'un réseau accessible via un routeur : on récupère l'adresse IP de ce routeur et on lui transmet le paquet.
- Ce préfixe n'a pas de correspondance dans la table, mais il existe un routeur par défaut dans la table : on transmet le paquet au routeur par défaut ;
- Si aucun des cas précédents n'est rencontré, on déclare une erreur de routage.
L'étude portera sur la maquette d'un réseau composé de trois routeurs (R1, R2 et R3) et de trois stations (S1, S2 et S3) avec des interfaces opérationnelles et actives.
La station S1 est relié directement au routeur R1 dans le réseau 192.168.1.254
La station S2 est relié directement au routeur R2 dans le réseau 192.168.2.254
La station S3 est relié directement au routeur R3 dans le réseau 192.168.3.254
Les routeurs R1 et R2 sont directement reliés dans le réseau 100.0.0.0
Les routeurs R2 et R3 sont directement reliés dans le réseau 100.0.0.0
Les routeurs R1 et R2 sont directement reliés dans le réseau 101.0.0.0
Les interfaces des machines sont listées dans le tableau ci-dessous
R1 |
eth1=100.0.0.1 |
eth1=100.0.0.2 |
R2 |
eth2=101.0.0.1 |
eth1=101.0.0.2 |
R3 |
|
|
|
|
|||
|
|
|
|
|
|
|
S1 |
|
|
S2 |
|
|
S3 |
192.168.1.1 |
|
|
192.168.2.1 |
|
|
192.168.3.1 |
255.255.255.0 |
|
|
255.255.255.0 |
|
|
255.255.255.0 |
Plaçons nous dans le shell de la station S1 et affichons la configuration de ses interfaces :
# ifconfig
eth0 Lien encap:Ethernet Hwaddr 00:50:56:40:40:98
inet adr:192.168.1.1 Bcast:192.168.1.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:89 errors:0 dropped:0 overruns:0 frame:0
TX packets:58 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:100
RX bytes:6771 (6.6 Kb) TX bytes:3357 (3.2 Kb)
Interruption:10 Adresse de base:0x1080
lo Lien encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:77 errors:0 dropped:0 overruns:0 frame:0
TX packets:77 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0
RX bytes:4758 (4.6 Kb) TX bytes:4758 (4.6 Kb)
Explications sommaires : Cette machine dispose d'une interface Ethernet active nommée eth0 et de l'interface de bouclage logiciel lo. Toute machine fonctionnant sous IP possède cette dernière interface car de nombreux logiciels en ont besoin pour bien fonctionner même si la machine est isolée, hors de tout réseau.
Afin d'afficher le contenu de la table de routage sur S1, utilisons la commande route :
# route
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
Cette table élémentaire est déduite par le logiciel IP à partir des adresses IP des interfaces de l'ordinateur.
Toutes les machines dont l'adresse commence par «192.168.1.» sont forcément sur le réseau connecté à l'interface eth0. Ainsi on peut «pinguer» le routeur S1 par son interface eth0.
Malheureusement on peut vérifier qu'à ce stade de la configuration, on ne peut pas contacter l'interface eth1 du même routeur R1.
S1 # ping 100.0.0.1
Pour résoudre le problème, il faut renseigner la table de routage de S1 en y indiquant que le moyen d'atteindre le réseau 100.0.0.0 est l'adresse 192.168.1.254 (l'adresse IP de l'interface du routeur qui se situe sur le même réseau que S1, ce dernier ne connaissant pour le moment que les adresses du réseau 192.168.1.0) ; par la commande suivante :
S1 # route add -net 100.0.0.0 netmask 255.0.0.0 gw 192.168.254
Traduction : Le réseau 100.0.0.0/8 (masque réseau sur huit bits est derrière le routeur (gw ==> gateway) d'adresse 192.168.1.254.
Dans le cas présent (c'est le cas pour tous les réseaux d'extrémité), on peut noter tous les réseaux accessibles pour S1 sont nécessairement derrière R1. D'où la commande précédente peut être remplacée par la suivante, plus simple :
S1 # route add default gw 192.168.1.254
<A ce stade la table de routage se pésente comme suit :
# route
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
100.0.0.0 192.168.1.254 255.0.0.0 U 0 0 0 eth0
default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
L'avant-dernière ligne devient du coup inutile et nous pouvons la supprimer :
S1 # route del -net 100.0.0.0 netmask 255.0.0.0 gw 192.168.254
Résultat : On peut maintenant contacter (pinguer 100.0.0.1 mais pas 100.0.0.2.
PING 100.0.0.2 (100.0.0.2) from 192.168.1.1 : 56(84) bytes of data.
(il ne se passe rien ; obligation de taper CTRL-C pour avoir la main)
--- 100.0.0.2 ping statistics ---
10 packets transmitted, 0 packets received, 100% packet loss
S1 n'indique pas de message d'erreur mais les paquets transmis ne sont jamais retournés. Ceci est dû au fait que le routeur R2 ne sait pas comment joindre S1. On s'en convainc en scrutant l'interface eth1 de R2 :
R2 # tcpdump -nt -i eth1
tcpdump: listening on eth1
192.168.1.1 > 100.0.0.2: icmp echo request (DF)
192.168.1.1 > 100.0.0.2: icmp echo request (DF)
Donc il est nécessaire de renseigner la table de routage de R2 :
R2 # route add -net 192.168.1.0 netmask 255.255.255.0 gw 100.0.0.1
Et ainsi de suite.