## Réseaux et algorithmes de routage

> Processus fondamental des réseaux informatiques, le routage  permet d’acheminer les paquets de données d’une source à une destination à travers un réseau.

### Le Programme

<img src="assets/bo.png" alt="bo_routage" style="zoom:50%;" />



<img src="assets/bo_2.png" alt="bo_graphe" style="zoom:50%;" />



Et oui, encore des graphes !

--------------

### Le routage, pourquoi faire ?

Lorsqu’un ordinateur envoie des données à un autre ordinateur situé sur un réseau différent, ces données doivent transiter par plusieurs équipements intermédiaires, appelés routeurs, qui déterminent le meilleur chemin à suivre.

L’acheminement efficace des données est crucial pour garantir la rapidité, la fiabilité et l’optimisation des ressources réseau. Sans un bon algorithme de routage, les réseaux seraient sujets à des retards importants, des congestions et des interruptions de communication.



<img src="assets/filius.png" alt="routage_filius" style="zoom: 67%;" />



### Mais dis moi Jamy, qu'est ce qu'un routeur ?



<img src="assets/allo.jpg" alt="allo" style="zoom:67%;" />



Un routeur est en quelque chose un hôte, un ordinateur, qui possède deux périphériques réseau, qui disposent d'une adresse IP chacun.

Lorsque des données transitent sur le réseau, chaque routeur va en recevoir, et pourra décider de les transmettre à telle ou telle machine. 
Pour ne pas se tromper et faire le bon choix, le routeur se servira de **tables de routage.**

Celles-ci peuvent être définies de manière **statique**, de manière **dynamique** ou tout simplement mises en place par défaut.

- **Routage statique** : Les routes sont définies manuellement par l’administrateur réseau et restent inchangées, sauf en cas d’intervention humaine.
- **Routage dynamique** : Les routes sont déterminées automatiquement grâce à des protocoles de routage qui s’adaptent aux changements du réseau.
- **Routage par défaut** : Utilisation d’une route unique lorsqu’aucune autre route spécifique n’est définie.



<img src="assets/yo.jpg" alt="yo" style="zoom:67%;" />



### Mais alors, ces tables de routage ?

Supposons un réseau représenté par ce graphe :

![reseau_exemple](assets/reseau_exemple.jpg)





Certaines tables de routage pourraient être celles-ci :

### Table de routage du routeur A
| Destination | Routeur suivant | Distance |
| ----------- | --------------- | -------- |
| B           | B               | 1        |
| C           | C               | 1        |
| D           | D               | 1        |
| E           | C               | 2        |
| F           | C               | 2        |
| G           | C               | 3        |

### Table de routage du routeur B
| Destination | Routeur suivant | Distance |
| ----------- | --------------- | -------- |
| A           | A               | 1        |
| C           | A               | 2        |
| D           | D               | 1        |
| E           | D               | 2        |
| F           | A               | 3        |
| G           | D               | 3        |



Comme on peut le voir, on dispose de plusieurs informations : 

Depuis le routeur X, pour atteindre une destination, on va indiquer par quel routeur on passera, et la distance / le coût pour atteindre notre destination.

On parle alors de **passerelle** quand un routeur permet d'accéder à un sous-réseau différent du notre. 



### Les algorithmes de routage

Il paraît évident qu'un réseau aussi grand qu'internet ne peut pas reposer sur des tables de routages manuelles. On a donc décidé d'automatiser cette tâche à l'aide d'algorithmes.
Ainsi, ceux-ci permettent aux routeurs de choisir le chemin optimal pour transmettre les données. On distingue deux grandes catégories :

- **Les algorithmes à état de liens (Link-State)** : Chaque routeur construit une carte du réseau et calcule les meilleurs chemins avec des algorithmes comme **Dijkstra**.
- **Les algorithmes à vecteur de distance (Distance-Vector)** : Chaque routeur échange des informations avec ses voisins et met à jour ses routes selon l’algorithme de **Bellman-Ford.**

#### RIP (Routing Information Protocol)

Ici, chaque routeur va attribuer une distance la plus courte possible à chaque destination accessible.
Cette distance sera indiquée en unité de sauts (hop), avec un saut = un routeur traversé.

Pour commencer, chaque routeur va écrire dans sa table les plus proches voisins, c'est à dire les routeurs accessibles à 0 de distance.

Puis, toutes les 30 secondes, chaque routeur va propager les informations de  sa table vers ses voisins immédiats, qui mettront leur propre table à jour avec ces informations, notamment si un chemin plus court vers une destination existe !

Puis que l'on dispose d'un routeur comme **direction**, et d'une **distance**, on a donc un **vecteur**.

**Attention** ! 

Si un routeur (et donc un réseau) n'est plus accessible passé 3 minutes, il sera supprimé des tables de routages.



À retenir : 

- Distance en terme de sauts (ou hop en anglais)
- Chaque routeur ne possède les informations que sur son voisinnage direct. On parle de ***routing by rumor*** : aucune vision globale du réseau, on fait confiance aux voisins pour savoir ce qu'il en est.
- Au delà de 15 sauts, on considère un routeur inaccessible.
- Utilise l’algorithme à vecteur de distance de Bellman-Ford et est simple à configurer, mais limité en performance.
- Convient aux petits réseaux
- Premiere algorithme de routage de l'histoire





<img src="assets/Vector_Distance.png" alt="resume_rip"  />





#### OSPF (Open Shortest Path First)

Basé sur l’algorithme de Dijkstra, il est plus rapide et plus efficace que RIP. 

Mis au point pour combler les lacunes du RIP, il est plus complet mais également plus complexe.

- Tous les routeurs ont une vision globale du réseau.
- Les distances sont mesurées en termes de coûts d'une liaison ou de débit d'une liaison.
- Le coût d'une liaison en OSPF est donné par la formule : 


$$
\text{coût} = \frac{10^8}{d}
$$


où d est le débit nominal en bits/seconde.

- Chaque réseau pourra être représenté sous forme de graphe.
- On recherchera les routes les moins couteuses, et sans cycle.
- Chaque routeur devient alors la racine d'un arbre contenant les meilleurs routes.



<img src="assets/Dijkstra_Animation.gif" alt="dijikstra" style="zoom:150%;" />







Enfin, il reste un algorithme :

**BGP (Border Gateway Protocol)** : Utilisé pour l’échange de routes entre différents fournisseurs d’accès à Internet (FAI).

Que nous ne verrons pas cette année.

Merci jamy ! 

![merci jamy](assets/jamy.png)





-----------

### Sources

- Hatier prépabac
- [Site d'Olivier Duranton](https://www.duranton.net/?darkmode=non&niveau=terminaleNSI&chapitre=11)
- Leçon réseau et algorithme de routage préparée lors du Capes  (et j'ai eu une bonne note, eh oui)

--------------



Auteur : Florian Mathieu

Licence CC BY NC

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.



