3.C - Routage dans IP

Abordons maintenant le fonctionnement du routage des paquets sur Internet. Nous allons l'étudier principalement avec les adresses IPv4 mais le fonctionnement est identique avec les adresses IPv6. C'est surtout pour des facilités d'écriture que l'on présente cela avec les adresses IPv4.

À quoi servent le protocole IP et le routage ? Le protocole IP (Internet Protocol) est le protocole qui est au coeur de l'architecture d'Internet car il permet d'acheminer chaque paquet qui circule dans le réseau d'une source jusqu'à sa destination. C'est l'essence même d'un réseau que de déterminer où l'information doit aller et par où elle doit passer pour aller d'un point à un autre.

Les routeurs sont les équipements intermédiaires qui réalisent l'acheminement c'est-à-dire qui déterminent la route empruntée par chaque paquet. Que fait un routeur ? Il analyse chaque paquet qui rentre dans le routeur, extrait l'adresse IP destination qui se trouve dans l'entête IP du paquet puis cherche dans sa table de routage l'interface de sortie (la carte réseau) qui doit être utilisée pour atteindre la destination du paquet. Sur Internet, le routage se fait de proche en proche : pour chaque paquet/destination, un routeur connaît le routeur suivant permettant de s'approcher de la destination finale sans connaître le chemin complet. En plus d'acheminer les paquets, un routeur interconnecte plusieurs sous-réseaux. Pour cela, il dispose de plusieurs interfaces ou cartes réseaux, chaque interface se trouvant dans un sous-réseau distinct.

Chaque routeur ou équipement terminal (ordinateur, téléphone, etc.) dispose d'une table de routage. En voici un exemple :

destination netmask gateway interface cost
134.214.10.0 255.255.255.0 - eth0 0
134.213.30.0 255.255.255.240 134.214.10.7 - 1
default 0.0.0.0 134.214.10.8 - -

Une table de routage est constituée de plusieurs lignes. Chaque ligne correspond à un réseau destination et le moyen pour l'atteindre. Le réseau destination est donné par les colonnes destination et netmask, le netmask donne la taille du réseau dont l'adresse se trouve dans la première colonne. La colonne gateway (passerelle en français) donne l'adresse IP du prochain saut, c'est-à-dire l'adresse IP du routeur suivant permettant de se rapprocher de cette destination. La colonne interface indique la carte réseau qui doit être utilisée pour atteindre la destination. Par exemple, eth0 est la carte réseau ethernet 0 de la machine ou du routeur. Si la colonne gateway est vide pour une destination donnée, cela signifie que pour atteindre cette destination il n'y a pas besoin de traverser un autre routeur. Autrement dit, la machine ou le routeur est directement connecté à cette destination ; il peut l'atteindre en utilisant sa carte réseau. A l'inverse, si une adresse IP est présente dans la colonne gateway, il s'agit d'une destination "lointaine", on parle aussi d'un réseau distant car pour l'atteindre il faut traverser au moins un routeur. L'adresse IP du routeur suivant est nécessairement une adresse IP qui se trouve dans un réseau dans lequel la machine ou le routeur se trouve, un réseau auquel il est directement connecté sans passer par un routeur intermédiaire. Enfin, la colonne cost (coût en français) inqique le coût pour atteindre cette destination quand il est connu. Sur Internet, le coût pour atteindre une destination est généralement le nombre de sauts c'est-à-dire le nombre de routeurs traversés.

Si on réalise des échanges à l'intérieur d'un même sous-réseau, c'est-à-dire entre deux machines qui sont dans le même sous-réseau, on n'utilise pas de routeur. On transmet directement le paquet d'une carte réseau à la carte réseau destination qui se trouve dans le même sous-réseau.

Routage statique vs routage dynamique

Comment sont remplies les tables de routage ? Il y a deux manières de faire cela :

  • Le routage statique : la table de routage est construite par l'administrateur du réseau ; autrement dit, il ajoute les lignes une par une, par exemple à l'aide de commandes dans un terminal. La table de routage est statique car une fois saisies, les routes ne changent plus sauf si l'administrateur intervient à nouveau pour les modifier.
  • Le routage dynamique : les tables de routage sont remplies de manière automatique grâce à des protocoles spécifiques, les protocoles de routage dynamique. Un protocole de routage dynamique permet à un ensemble de routeurs de s'échanger des informations sur leur connaissance et l'état du réseau. Ces informations permettent de remplir les tables de routage et de les mettre à jour de manière automatique, sans intervention humaine. Ces tables peuvent alors s'adapter aux changements qui peuvent survenir dans le réseau. Par exemple, si un routeur tombe en panne ou s'il y a une coupure d'électricité ou encore si une carte réseau est débranchée, le routeur va le détecter et va diffuser cette information aux autres routeurs pour qu'ils adaptent leurs tables de routage en fonction des changements qui viennent d'avoir lieu. Cependant, cela se fait en générant un grand nombre de messages entre les routeurs à intervalles réguliers, par exemple toutes les 30 secondes.

Sur Internet, le routage dynamique est beaucoup utilisé pour pouvoir s'adapter aux changements de situation. Mais il ne peut pas être mis en oeuvre à l'échelle de tout l'Internet car les messages seraient trop nombreux et la convergence des tables de routage trop longue. Par contre, il est réalisé dans de nombreuses zones d'Internet. Le routage statique est principalement utilisé à l'intérieur d'une organisation ou chez soi car a priori il n'y a pas de raison qu'il y ait des changements dans les tables de routage, sauf bien sûr en cas de coupure d'électricité.

Les protocoles de routage dynamique ne sont pas vus dans le cadre de ce cours mais nous pouvons citer les principaux. Les protocoles RIP ou OSPF permettent de faire du routage dynamique plutôt à l'intérieur d'une organisation ou d'un système autonome sur Internet. Le protocole BGP est utilisé pour faire du routage dynamique entre systèmes autonomes. Le principe général de ces protocoles est le suivant : le routeur a des informations qui concernent son voisinage, comme par exemple l'état de ses liens ; ces informations contiennent les adresses des sous-réseaux qui sont directement connectés au routeur. Si cette information est diffusée aux routeurs voisins puis de proche en proche aux voisins des routeurs voisins, et ainsi de suite, cela permet au final de diffuser les informations que chaque routeur connaît à tous les autres routeurs et donc d'avoir une vision globale du réseau.

Tables de routage

Afin d'illustrer le routage, examinons le réseau suivant :

Topologie utilisée dans l'exemple. La table de routage est celle de la machine S2

Sur ce schéma, plusieurs réseaux sont représentés. Internet se trouve derrière le routeur R9. Chaque barre horizontale correspond à un réseau. Les routeurs (R7, R8, R9) permettent de passer d'un réseau à un autre. Ils ont deux cartes réseaux, représentées par les barres verticales, avec pour chaque carte réseau une adresse MAC et une adresse IP. Par exemple, le routeur R8 a deux cartes réseaux avec comme adresse MAC respectivement @m82 et @m81 puis comme adresse IP 134.214.20.8 et 134.214.10.8. Afin de ne pas surcharger le schéma, seuls les deux derniers octets de l'adresse IP sont indiqués que le schéma. De même, pour les adresses MAC, il ne s'agit pas du format réel mais simplement d'un identifiant. On a donc les routeurs qui permettent d'interconnecter les différents réseaux et les stations, notées S de S1 jusqu'à S6, qui sont des machines dans chacun des réseaux. Elles ont besoin de communiquer et éventuellement d'aller sur Internet. Pour cela, elle dispose d'une table de routage au même titre que les routeurs.

Par exemple, la table de routage examinée un peu plus haut est celle des machines S1 ou S2 ou S3 :

destination netmask gateway interface cost
134.214.10.0 255.255.255.0 - eth0 0
134.213.30.0 255.255.255.240 134.214.10.7 - 1
default 0.0.0.0 134.214.10.8 - -

Comment construire une table de routage ? On commence toujours par indiquer les lignes qui correspondent aux cartes réseau soit une ligne pour chaque carte réseau. Ici, cette station a une seule carte réseau, la carte eth0 qui a une adresse IP dans le réseau 134.214.10.0/24. C'est ce qu'indique la première ligne de la table de routage. Pour atteindre ce réseau, le coût est 0 car aucun routeur n'est traversé pour joindre les autres stations de ce réseau. Pour aller de S2 à S1 ou de S2 à S3, inutile de passer par un routeur.

Il faut ensuite indiquer comment joindre les autres réseaux c'est-à-dire les réseaux distants. En regardant le schéma, il n'y a que deux possibilités depuis S2 pour sortir de son réseau : soit en passant par R7 pour aller vers le réseau 134.214.30.0/28, soit par R8 pour aller ailleurs, c'est-à-dire vers Internet mais aussi le réseau 134.214.20.0/24. La deuxième ligne permet donc d'atteindre 134.214.30.0/28, /28 s'écrit 255.255.255.240 en décimal pointé. Le prochain saut est l'adresse IP du routeur R7 qui se trouve dans le même sous-réseau que S2 donc 134.214.10.7. L'adresse 134.214.30.7 ne peut pas être le prochain saut car elle n'est pas directement accessible depuis S2. Sur la deuxième ligne, le coût est égal à 1 car pour atteindre la destination depuis S2, seul le routeur R7 est traversé.

La troisième ligne est la route par défaut notée default. Elle correspond au réseau destination 0.0.0.0/0 qui englobe toutes les adresses d'Internet. Pour aller vers Internet, le prochain saut est bien 134.214.10.8 c'est-à-dire l'adresse du routeur R8 qui se trouve dans le même sous-réseau que S2. Il est inutile d'ajouter une ligne pour aller vers le réseau 134.214.20.0/24 car cette destination est incluse dans la route par défaut. La route par défaut est toujours la dernière ligne de la table de routage. C'est celle que l'on prend en dernier recours quand les autres lignes ne correspondent pas. Pour la route par défaut, aucun coût n'est indiqué car le nombre de routeurs traversés dépend de l'endroit où l'on va sur Internet.

Nous vous invitons à faire les autres tables de routage en exercice, par exemple celle de la station S5, celle du routeur R7 ou R8. La table de routage de S1 et S3 est identique à celle de S2 car elles sont dans le même sous-réseau.

Configuration des tables de routage

Un routeur peut être soit un ordinateur sous Linux ou Windows disposant de plusieurs cartes réseaux, soit un équipement dédié comme par exemple un routeur Cisco. La configuration se fait généralement en ligne de commande via la commande ip route. Cette commande permet d'afficher la table de routage mais aussi d'ajouter ou supprimer une ligne dans la table de routage :

ip route
ip route add 0.0.0.0/0 via 134.214.10.8
ip route del 134.214.20.0/24 via 134.214.10.8

ip route add permet d'ajouter une route et ip route delete de supprimer une route ou une ligne. Les routes directement connectées au routeur sont ajoutées lors de la configuration des cartes réseau, comme nous l'avons vu ici.

Voici maintenant un exemple de table de routage sous Windows :

Table de routage sous Windows

La commande netstat -r est exécutée sur le PC1 pour afficher sa table de routage. Cette commande fonctionne aussi sous Linux. Les deux lignes qui nous intéressent sont la première et cinquième lignes. Les autres lignes concernent localhost (127.0.0.1) ou des adresses multicast (224.0.0.0) ou de diffusion (qui se terminent par .255). La première ligne est la route par défaut qui permet de sortir du réseau depuis le PC1 en passant par l'adresse IP du routeur R1 qui se trouve dans le réseau du PC1 (192.168.10.0/24) : 192.168.10.1. La colonne Interface stocke l'adresse IP de l'interface qui va permettre d'atteindre le prochain saut, soit l'adresse IP du PC1 : 192.168.10.10. Le seul moyen de sortir de son réseau pour le PC1 est de passer par R1, il n'y a pas d'autres routeurs qui permettent de sortir du réseau. La cinquième ligne correspond au sous-réseau dans lequel se trouve PC1 et qui permet d'atteindre le routeur R1 et éventuellement d'autres machines qui seraient connectées sur le switch qui est au milieu. Ce sous-réseau est bien 192.168.10.0/24. Cette destination est atteinte directement via l'interface du PC1, c'est-à-dire sa carte réseau qui a pour adresse IP 192.168.10.10.

Passons à un dernier exemple qui intégre deux routeurs Cisco. Cisco est un constructeur d'équipements réseaux très répandus dans le monde entier. La syntaxe des commandes Cisco est légérement différentes des commandes Unix que nous avons vu précédemment.

Autre exemple de table de routage

Dans cet exemple, différents sous-réseaux sont interconnectés par deux routeurs, les routeurs R1 et R2. La commande show ip route est exécutée sur le routeur R1. Elle permet d'afficher la table de routage. On constate que le routeur R1 a trois cartes réseau :

  • Une carte réseau nommée G0/0 pour Gigabit Ethernet slot 0 / port 0 vers le PC1 dans le réseau 192.168.10.0/24 dont l'adresse IP est 192.168.10.1.
  • Une autre carte réseau G0/1 pour Gigabit Ethernet slot 0 / port 1 vers le PC2 dans le réseau 192.168.11.0/24 dont l'adresse IP est 192.168.11.1.
  • Une troisième carte réseau nommée S0/0/0 pour Serial 0/0/0 vers le routeur R2 dans le réseau 209.165.200.224/30 dont l'adresse IP est 209.165.200.225. C'est un très petit réseau qui permet de définir uniquement deux adresses IP pour relier R1 à R2.

Dans la table de routage, chaque carte réseau et leur réseau apparaissent sur les lignes qui commencent par la lettre C pour Connected. Les deux premières lignes de la table correspondent à des réseaux distants notés D. Il s'agit des deux réseaux à droite du routeur R2. Pour les atteindre, le prochain saut depuis R1 est bien l'adresse IP 209.165.200.226 de R2. Pour l'atteindre, R1 utilise son interface S/0/0.

Enfin, notez que dans cette table de routage, on devrait agréger les deux premières lignes puisque ces deux sous-réseaux utilisent le même prochain saut. Pour cela, il faudrait utiliser le masque /22.

Comment configurer une table de routage sur un routeur Cisco ? Voici un exemple, toujours en lien avec le schéma précédant :

Router> enable
Router# configure terminal
Enter configuration commands, one per line.  Terminez par CNTL/Z.
Router(config)# hostname R1
R1(config)#
R1(config)# ip route 100.1.1.0/24 209.165.200.226
R1(config)# ip route 100.1.2.0/24 209.165.200.226

Un routeur Cisco dispose de plusieurs modes de configuration. La commande enable permet de passer administrateur (root) du routeur. configure terminal permet d'accèder au mode de configuration du routeur. C'est dans ce mode que l'on peut par exemple ajouter les 2 routes avec la commande ip route.

Pour configurer les cartes réseau, il faut entrer dans le mode de configuration de chaque carte réseau, lui attribuer une adresse IP avec ip address et l'activer avec la commande no shutdown :

R1# conf t
Enter configuration commands, one per line.  Terminez par CNTL/Z.
R1(config)#
R1(config)# interface gigabitethernet 0/0
R1(config-if)# ip address 192.168.10.1 255.255.255.0
R1(config-if)# description Link to LAN-10
R1(config-if)# no shutdown
%LINK-5-CHANGED: Interface GigabitEthernet0/0, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/0, changed state to up
R1(config-if)# exit
R1(config)#
R1(config)# interface g0/1
R1(config-if)# ip address 192.168.11.1 255.255.255.0
R1(config-if)# description Link to LAN-11
R1(config-if)# no shutdown
%LINK-5-CHANGED: Interface GigabitEthernet0/1, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to up
R1(config-if)# exit
R1(config)#

La commande no shutdown est l'équivalent du ip link set up que l'on a vu pour activer une carte réseau sur un PC Linux. Enfin, la commande show ip interface brief permet de vérifier la configuration IP des interfaces et l'état des liens :

R1# show ip interface brief
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet0/0     192.168.10.1    YES manual up                    up
GigabitEthernet0/1     192.168.11.1    YES manual up                    up
Serial0/0/0            209.165.200.225 YES manual up                    up
Serial0/0/1            unassigned      YES NVRAM  administratively down down
Vlan1                  unassigned      YES NVRAM  administratively down down
R1#
R1# ping 209.165.200.226
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 209 165 200 226, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/9 ms
R1#

Les trois cartes réseaux sont up, c'est-à-dire qu'elles sont en état de fonctionnement et actives.

Table de routage IPv6

Pour terminer, voici un exemple de table de routage IPv6 sur un PC sous Windows :

Table de routage IPv6

Il y a deux adresses IPv6 qui sont attribuées : une adresse publique, celle qui commence par 2001 et une adresse de type link-local qui commence par fe80. Cette adresse link-local permet de communiquer à l'intérieur du sous-réseau pour joindre les équipements qui se trouvent dans le même sous-réseau, en particulier le routeur R1 qui est la porte de sortie pour aller ailleurs. Dans cette table de routage, il manque la route par défaut vers R1.