- Architectures Matérielles -
Protocoles De Routage

Internet est grand ! En août 2020, Google référence plus de \(55\) milliards de pages web…

Ces pages sont enregistrées sur des millions de serveurs. Lorsqu’un utilisateur souhaite consulter une page, une requête parcourt le web jusqu’au serveur et celui-ci renvoie les données demandées.

Bien sûr il n’existe pas un câble unique entre chaque utilisateur d’internet (relier \(n\) utilisateurs nécessiteraient alors \(\frac{n(n-1)}{2}\) câbles !). Le réseau est construit de façon décentralisée, distribuée. Cette structure est plus efficace (en particulier dans le cas de la panne d’un routeur) mais complique l’acheminement d’un paquet entre deux postes : quelle route choisir lorsque personne ne connaît l’ensemble de la carte du réseau ?

Les différentes architectures de réseau

I. Le plus court chemin dans un graphe

Le réseau internet peut être modélisé comme un graphe pondéré :

On pourrait encore affiner la description en considérant que le graphe est orienté (la liaison \(A \rightarrow B\) diffère de \(B \rightarrow A\)) mais ce n’est pas nécessaire dans le cadre de ce cours.

Considérons le graphe suivant de la figure 2. Les arcs sont orientés mais nous n’en tiendrons pas compte.

Un graphe pondéré

On souhaite déterminer le plus court chemin entre les sommets \(1\) et \(6\). L’algorithme classique utilisé sur le graphe dans ce cas de figure est l’algorithme de Dijkstra. L’idée est de parcourir tout le graphe à partir du sommet de départ en faisant en sorte que chaque sommet soit associé à son prédécesseur dans le plus court chemin le reliant à l’origine.

Concrètement, on commence par donner des poids à tous les sommets :

Attribution des poids

Ensuite, tant que l’on n’a pas visité tous les sommets du graphe on procède aux étapes suivantes :

Calcul des nouveaux poids
Le sommet \(3\) est le plus proche. Notez la mise à jour du poids de \(4\)

Lorsque tous les sommets ont été visités, on peut reconstruire le plus court chemin entre le sommet de départ et n’importe quel sommet en partant de l’arrivé et en “remontant” à l’orgine à l’aide des données des sommets précédents.

Fin de l’algorithme

Dans le cas qui nous occupe, les étapes suivantes de l’algorithme sont représentées sur la figure 6.

A la fin du parcours, les sommets sont associés aux valeurs listées dans le tableau .

Sommet 1 2 3 4 5 6
Poids 0 2 1 3 2 4
Précédent / 1 1 5 3 5

Le chemin le plus court du sommet \(1\) au \(6\) est donc \(1 \rightarrow 3 \rightarrow 5 \rightarrow 6\) (on part de la colonne \(6\) et on remonte les prédecesseurs). Sa longueur est de \(4\).

Cet algorithme est optimal : il fournit toujours l’un des plus courts chemins (il peut en exister plusieurs). Pour un graphe comportant \(n\) sommets et \(a\) arcs, sa complexité est de \(O(a+nlog(n))\).

Il présente toutefois un très grand défaut dans le cadre d’internet : il faut en effet connaître l’ensemble du graphe afin de déterminer le meilleur chemin. Sur un réseau tel qu’internet c’est une condition irréalisable…

II. Routing Information Protocol

Dès l’orgine du réseau ARPAnet, d’autres méthodes de routage ont été utilisées. L’une d’entre elles est le protocole Routing information Protocol qui s’appuie lui-même sur l’algorithme de Bellman-Ford. Ces algorithmes utilisent une technique à vecteur de distance.

L’intérêt de ce protocole est que les sommets interagissent de façon individuelle et n’ont pas besoin de connaître l’ensemble du réseau (sa carte complète) afin de router les paquets selon le meilleur chemin.

L’un des points importants de ce protocole est d’utiliser le nombre de sauts comme métrique pour mesurer la longueur d’un chemin. Ainsi, si le chemin allant de \(A\) à \(C\) est \(A \rightarrow B \rightarrow C\) alors \(C\) est à \(2\) sauts de \(A\).

L’idée est la suivante :

Cette dernière comparaison est assez simple : si le routeur \(A\) reçoît de \(B\) une table lui indiquant que ce dernier peut joindre \(C\) en \(3\) sauts, alors \(A\) peut en déduire que \(C\) est à \(4\) sauts de lui (\(1\) pour aller en \(B\) puis \(3\) de \(B\) à \(C\)). Si la table de routage de \(A\) comprenait un chemin en \(5\) sauts ou plus vers \(C\), le routeur peut la mettre à jour en indiquant que désormais le meilleur chemin vers \(C\) fait \(4\) sauts de long et passe par \(B\).

Outre sa simplicité, ce protocole a l’avantage de converger (de tendre) vers une solution optimale. Il réagit très rapidement aux “bonnes nouvelles” (l’existence d’un nouveau chemin très court se propage très rapidement le long du réseau). Par contre, si un routeur tombe en panne, cette information met beaucoup de temps à être diffusée et peut même, à long terme, engendrer des chemins de taille infinie dans les tables ! Pour cette raison, l’algorithme RIP est limité au chemins de taille inférieures à \(16\) sauts ce qui restreint son utilisation à certains “petits” réseaux.

III. Open Shortest Path First

Le protocole Open Shortest Path First (OSPF) date des années 1990 et a été développé afin de pallier aux faiblesses des RIP en particulier sa faible adaptation aux réseaux des grande taille.

Il fait partie des protocoles par état de lien.

Régulièrement les routeurs du réseau envoient la liste de leurs voisins ainsi que le coût de la liaison correspondante. Ce coût est inversement proporitonnel au débit (en bits par secondes) de la ligne (plus le débit est important, plus le coût est faible).

Lorsqu’un routeur reçoit un tel message, il le transmet lui aussi à ses voisins : on parle de diffusion par inondation. Totuefois, afin d’éviter que ces messages ne circulent infiniment sur le réseau (en étant relayés encore et encore), ils sont accompagnés de données sur l’âge des informations. Lorsque l’âge est trop grand, le message est ignoré et non relayé.

Une fois qu’il a reçu les informations de nombreux routeurs, un poste peut construire la carte complète du réseau. Il aura alors la possibilité de faire fonctionner un algorithme de “plus court chemin” afin de déterminer les routes à utiliser.

Chaque routeur contient donc l’ensemble de la carte du réseau… A l’échelle d’internet c’est impossible. C’est pourquoi OSPF fonctionne à l’échelle de systèmes autonomes. Un système autonome peut par exemple être le réseau géré par une université ou l’ensemble des routeurs administrés par un fournisseur d’accès. Il en existe près de \(100\,000\) à l’échelle du globe !

Système autonome

Un système autonome est construit autour d’une épine dorsale (backbone en anglais). Celle-ci permet de mettre en relation différentes zones (area en agnlais). On peut alors distinguer différents types de routeurs selon qu’ils sont intérieurs (de l’épine dorsale ou d’une zone) ou à l’interface entre elles.

Ces routeurs de frontières ont un statut particulier car ils doivent connaître l’ensemble des informations des deux espaces auxquels ils appartiennent (épine dorsale et zone). Les routeurs internes eux ne connaissent que les informations concernant leur espace propre.

Lorsqu’un message est adressé à l’intérieur d’une zone, le routage est direct. Si le destinataire est par contre situé dans une autre zone, le routage se fait en trois temps :

  1. routage jusqu’au routeur de frontière le plus proche
  2. routage dans l’épine dorsale jusqu’à la zone de destination
  3. routage dans la zone de destination

Et si le message est destiné à un poste situé hors du système autonome ? Il est alors acheminé à un routeur de frontière d’épine dorsale et transmis à un autre protocole qui aura pour tâche de l’acheminer au bon système autonome. Le plus utilisé actuellement est Border Gateway Protocol (BGP) qui recense plus de \(500\,000\) routes reliant des systèmes autonomes (notons au passage que ce nombre est si important que d’anciens routeurs n’ont pas la mémoire suffisante pour sauvegarder la table de routage et deviennent dès lors dysfocntionnels).

IV. Identification des réseaux

Il est possible de consulter les tables de routages de notre poste en utilisant les commandes suivantes :

Table de routage Windows

Comme on peut le voir sur la figure 8, les destinations sont affichées sous la forme 192.168.1.0/24. Cette façon de faire désigne un sous-réseau.

Une adresse IP en version 4 est, nous l’avons vu en 1ère, composée de \(32\) bits (la version 6, en cours de mise en place, utilise \(128\) bits). Cette nomenclature permet de manipuler \(2^{32} =4\,294\,967\,296\), ce qui est beaucoup trop peu face à la multiplication des terminaux connectés à internet… Il a donc fallu trouver une astuce.

L’idée est de donner la même adresse à des terminaux différents mais en distinguant le réseau auquel ils appartiennent. Une adresse réseau est ainsi fournie sous la forme X.X.X.X/bitsX.X.X.X est une adresse IP classique et bits indique le nombre de bits (en partant de la gauche) qui identifient le réseau.

Le routeur, à l’interface entre réseau privé et réseau public (internet), possède une adresse privée (celle du réseau) et une adresse publique. Autant l’adresse privée peut être identique entre deux sous-réseaux (il y a fort à parier que votre box a la même IP 192.168.1.1 privée que celle de votre voisin), autant les adresses publiques sont obligatoirement différentes sans quoi les messages n’arriveraient pas au bon destinataire.

Un sous-réseau

Ainsi, l’adresse 192.168.1.0/24 identifie le réseau par les \(24\) premiers bits ce qui en laisse \(8\) pour nommer les machines au sein du réseau. Comme \(2^8=256\), on peut utiliser cette adresse de réseau pour les structures de petite taille (moins de \(256\) postes).

Lorsqu’une machine envoie un message, le destinataire est identifié par son adresse IP. Afin de savoir s’il fait partie du même réseau que l’émetteur, on effectue l’opération binaire IP_dest AND IP_réseau. On peut ainsi comparer bit par bit les deux adresses. Si le résultat est égal à l’IP_réseau alors le message peut être acheminé en local.

Comparaison d’IP, le destinataire est hors réseau

Il existe trois plages d’IP réservées permettant de gérer des réseaux de tailles différentes.

Adresse Bits réseau Bits machine Nombre de machines possibles
10.0.0.0/8 8 24 \(2^{24} = 16\,777\,216\)
172.16.0.0/12 12 20 \(2^{20} = 1\,048\,576\)
192.168.0.0/16 16 16 \(2^{16} = 65\,536\)

Les réseaux domestiques utilisent courament la dernière plage d’adresses : les IP des machines varient alors entre 192.168.0.1 et 192.168.255.254 (on réserve les adresses avec que des bits à 0 ou à 1 à des usages particuliers).