Les routeurs : Principe du routage (4/6)

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


L’objectif premier d’un routeur c’est de router les paquets sur le réseau afin qu’ils arrivent à bon port. Pour cela les routeurs ont à leurs dispositions plusieurs outils qui leurs permettront de mener à bien cette tâche. Tout au long de cet article nous verrons comment se déroule le processus de routage.

Pour cela j’utiliserai cette architecture qui repose sur trois réseaux : 192.168.1.0/24, 192.168.2.0/24 et 192.168.254.0/24 :

exempleroutage.png

Les deux premiers réseaux contiennent chacun un ordinateur (respectivement PC1 et PC2). Le troisième réseau nous permet, quant à lui, de relier nos deux premiers réseaux. Dans cet exemple, le PC1 enverra un paquet au PC2. Au commencement nous avons donc notre paquet qui se trouve ici :

debutmessage

La première chose que le PC1 va devoir déterminer c’est si le PC2 se trouve sur le même réseau que lui. En se servant du schéma on peut facilement dire que non : le PC1 se trouve sur le réseau 192.168.1.0/24 et le PC2 sur le réseau 192.168.2.0/24. Pour arriver à cette conclusion, le PC1 va exécuter une opération logique AND entre son adresse IP et son masque de sous réseau :

    192.168.1.1
AND 255.255.255.0

Le résultat de cette opération nous donne l’adresse de réseau 192.168.1.0. La même opération va être réaliser entre l’adresse IP du PC2 et le masque de sous réseau du PC1 :

    192.168.2.1
AND 255.255.255.0

Cette fois il va récupérer cette adresse de réseau : 192.168.2.0. En comparant les deux résultats il va pouvoir en déduire que le destinataire ne se trouve pas sur le même réseau que lui.

Étant donné que le destinataire ne se trouve pas sur le même réseau, le PC1 va automatiquement envoyer son paquet à la gateway : c’est à dire au routeur. Pour rappel la gateway c’est la seule et unique porte d’entrée/sortie d’un réseau et si vous voulez voir quelle est votre gateway, il vous suffit d’entrer ces commandes :

route #Sur Linux
ipconfig #Sur Windows

gateway.png

Cependant l’adresse IP n’est pas suffisante pour pouvoir envoyer un message sur un réseau. En effet un équipement informatique a aussi besoin de l’adresse MAC du destinataire. De manière générale retenez qu’on se sert des adresses IP pour router les paquets entre les réseaux tandis qu’on se sert des adresses MAC pour délivrer des paquets sur un réseau local.

Pour récupérer ces adresses MAC, on va se servir du protocole ARP qui va nous permettre de faire la translation entre une adresse IP et une adresse MAC :

arp # Sur Linux
arp -a # Sur Windows

tablearp.png

Maintenant que le PC1 dispose à la fois de l’adresse IP du routeur et de son adresse MAC il va pouvoir créer un datagramme puis un paquet puis une trame et enfin traduire le tout en binaire avant d’envoyer le paquet sur le réseau.

Cette dernière phrase vous a peut être un peu perdu. En effet j’ai parlé à la fois de datagramme, de paquet et de trame et si vous n’avez jamais vu ce qu’est le modèle OSI alors vous aurez sûrement du mal à comprendre de quoi je parle.  Je ne vais volontairement pas détailler le fonctionnement de ce modèle dans cet article. En effet ce n’est pas  son but premier et ça ne ferait que l’alourdir En revanche, vous trouverez des informations supplémentaires sur ce modèle et sur le processus d’encapsulation ici.

Vous devez cependant vous rappeler de quatre informations :
-Les adresses IP du destinataire et de l’expéditeur sont attribuées au niveau de la couche 3 du modèle OSI (couche réseau).
-Les adresses MAC du destinataire et de l’expéditeur sont attribuées au niveau de la couche 2 du modèle OSI (couche liaison de données).
-Avant qu’un paquet ne soit émis sur le réseau il doit passer par les 7 couches du modèle OSI en commençant par la couche 7 (application) et en descendant jusqu’à la couche 1 (physique)
-Quand un paquet est reçu, il doit passer par les 7 couches du modèle OSI en commençant par la couche 1 (physique) et en remontant jusqu’à la couche 7 (application) :

descenteremonte.png

Notre paquet est donc envoyé sur le réseau et se trouve maintenant sur l’interface réseau du routeur R1 :

messager1.png

Le routeur va traiter le paquet. Pour cela il va désencapsuler le paquet couche après couche afin d’en extraire les données (encore une fois je vous invite à lire cet article si vous ne savez pas de quoi je parle) . Le routeur commence donc par la couche 1 (physique) qu’il va désencapsuler afin de récupérer la trame dans laquelle on trouve les adresses MAC de l’expéditeur et du destinataire ainsi que le protocole utilisé au niveau de la couche 3 (UDP ou TCP).

couche2.png

Bien évidemment l’adresse MAC qui intéresse le plus le routeur c’est l’adresse MAC de destination. Le routeur va donc la lire et…  se rendre compte que l’adresse MAC de destination est la sienne.

Il va donc en déduire que ce message lui est destiné puis désencapsuler la trame afin de récupérer le paquet dans lequel on trouve les adresses IP source et destinataire :

couche3.png

Et là nous avons un problème. En effet le routeur va voir que l’adresse IP de destination (192.168.2.1) ne correspond pas à son pool d’adresses IP (192.168.2.1 n’est pas compris dans 192.168.254.0/24) donc le destinataire de ce paquet ne se trouve pas sur son réseau.

Instinctivement le routeur va partir du principe que si le destinataire de ce paquet ne se trouve pas sur son réseau c’est que ce paquet est destiné à une machine présente sur un autre réseau. Il va donc rechercher dans sa table de routage s’il existe un chemin menant au réseau du destinataire (192.168.2.0/24).

Par chance, la table de routage du routeur R1 contient une entrée statique qui lui indique que le réseau 192.168.2.0/24 est atteignable via l’adresse IP 192.168.254.2 :

tablederoutage.png

Le routeur va donc ré-encapsuler notre paquet en modifiant l’adresse MAC de la source (par son adresse MAC) et l’adresse MAC de destination (par celle du routeur R2). Puis il va envoyer le tout au routeur R2.

messager2.png

Le routeur R2 va effectuer les mêmes opérations que le routeur R1. Il va regarder au niveau de la couche 2 quelle est l’adresse MAC de destination et voir que c’est la sienne donc il va désencapsuler la trame afin de lire le contenu du paquet. Cette fois-ci il va remarquer que l’adresse IP de destination (192.168.2.1) correspond à son pool d’adresses IP (192.168.2.1 est compris dans 192.168.2.0/24) donc que le destinataire du paquet se trouve sur son réseau.

Le routeur va donc ré-encapsuler le paquet dans une trame en modifiant les adresses MAC de l’expéditeur et du destinataire (respectivement par son adresse MAC et l’adresse MAC du PC2) puis il va envoyer le paquet au PC2 :

messagepc2.png

A la réception, le PC2 va regarder dans la couche 2 si c’est bien lui le destinataire. Comme il va y trouver son adresse MAC il va accepter la trame, la désencapsuler puis lire l’adresse IP du destinataire. Cette fois l’adresse IP du destinataire correspondra à l’adresse IP du PC2 donc le PC2 va définitivement accepter la paquet et en lire le contenu.

Voilà ! Notre paquet a bien été routé. Visuellement voici ce qui s’est passé au niveau de la lecture des données dans chaque couche :

schemarecapitulatif.png

Voilà comment fonctionne le routage entre plusieurs réseaux. J’ai conscience que beaucoup d’informations peuvent paraître étranges. L’encapsulation est quelque chose d’assez compliqué à comprendre. Donc si vous avez des questions par rapport à cet article ou celui sur le modèle OSI n’hésitez pas à me contacter via ma page Facebook !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s