Skip to content

Paquets et routage

Tu envoies un message à quelqu'un à l'autre bout du monde. Il arrive en une fraction de seconde. Pourtant, aucune machine sur le trajet ne connaît le chemin complet.

Comment est-ce possible ? C'est la plus belle idée d'Internet, et elle tient en deux principes : on découpe, et on demande son chemin.

Découper en paquets

Ton message n'est pas envoyé d'un bloc. Il est découpé en petits morceaux appelés des paquets.

Chaque paquet voyage seul, avec sur lui, comme sur une enveloppe :

  • l'adresse IP de destination (où aller) ;
  • l'adresse IP de l'expéditeur (d'où il vient) ;
  • son numéro (paquet 3 sur 7) ;
  • un compteur de sauts, dont on reparlera.

paquet 1/4« Salut »paquet 2/4« comment »paquet 3/4« vas- »paquet 4/4« tu ? »

Exercice - Pourquoi découper ?

Envoyer un gros fichier d'un seul bloc semblerait plus simple. Trouve deux raisons de le découper.

Correction
  1. Partager la route. Si un fichier de 2 Go voyageait d'un bloc, il bloquerait le câble pendant tout son transfert, et personne d'autre ne pourrait rien envoyer. Avec des paquets, les messages de tout le monde s'entremêlent sur les mêmes câbles, chacun avance.
  2. Résister aux erreurs. Si un bloc de 2 Go est abîmé en route, il faut tout renvoyer. Si un paquet minuscule est perdu, on ne renvoie que lui.

Une troisième, plus subtile : les paquets peuvent emprunter des chemins différents et contourner une panne.

Router : demander son chemin

Les paquets voyagent de machine en machine. Ces machines relais s'appellent des routeurs.

Et voici le point que presque personne ne comprend :

Aucun routeur ne connaît le chemin complet

Un routeur ne connaît que ses voisins immédiats. Il ne possède aucune carte du monde, aucun plan d'Internet, et il serait bien incapable de te dire par où ton paquet va passer.

Quand un paquet arrive, il fait une seule chose : il regarde l'adresse de destination, et il le passe au voisin qui semble aller dans la bonne direction. Puis il l'oublie.

C'est exactement ce que tu ferais, perdu dans une ville étrangère : tu ne demandes pas l'itinéraire complet, tu demandes « c'est par où, la gare ? », on te dit « tout droit puis à gauche », et tu redemanderas plus loin.

De proche en proche, le paquet arrive. Sans que personne n'ait jamais eu le plan.

Pourquoi faire aussi bizarre ?

Parce qu'une carte complète d'Internet serait impossible à tenir à jour : des millions de routeurs, qui changent tout le temps, avec des pannes en permanence.

En ne demandant à chacun de connaître que ses voisins, le système devient énorme sans que personne ne soit débordé. C'est ce qui permet à Internet de fonctionner à l'échelle de la planète.

Le compteur de sauts (TTL)

Cette méthode a un défaut évident. Si les routeurs se trompent, un paquet peut tourner en rond : A l'envoie à B, qui le renvoie à A, indéfiniment. En quelques secondes, Internet serait saturé de paquets fantômes.

La solution est brutale et efficace. Chaque paquet part avec un compteur de sauts, appelé TTL (time to live, durée de vie), réglé par exemple à 64.

Chaque routeur traversé enlève 1 au compteur. Quand le compteur atteint 0, le paquet est détruit.

Pas de discussion, pas d'exception. Un paquet qui se perd finit par mourir, et il ne pollue pas le réseau éternellement.

Exercice - Suivre un TTL

Un paquet part avec un TTL de 5. Il traverse successivement 7 routeurs.

  1. Que vaut son TTL après le 3e routeur ?
  2. Arrivera-t-il à destination ?
  3. Que se passe-t-il exactement ?
Correction
  1. Il vaut 2 (5 moins 3).
  2. Non.
  3. Au 5e routeur, le compteur tombe à 0 : ce routeur détruit le paquet. Il prévient l'expéditeur en lui renvoyant un message d'erreur (« durée de vie dépassée »), mais le paquet, lui, est perdu.

Note bien : ce n'est pas une panne. C'est le fonctionnement normal du système, sa sécurité contre les paquets qui tournent en rond.

Ce défaut est devenu un outil

Cette destruction, on peut la provoquer exprès pour espionner le chemin.

Envoie un paquet avec un TTL de 1 : le premier routeur le détruit et se signale. Tu connais donc le premier routeur du trajet. Recommence avec un TTL de 2 : le deuxième se signale. Et ainsi de suite.

En augmentant le TTL un par un, tu découvres tout le trajet, routeur par routeur. C'est exactement ce que fait la commande tracert, que tu utiliseras à la prochaine séance.

IP et TCP : deux métiers différents

Il te manque une pièce. IP fait voyager les paquets, mais IP ne promet rien :

  • il peut perdre un paquet ;
  • il peut les livrer dans le désordre (chacun ayant pris sa propre route) ;
  • il peut en livrer un en double.

IP est un service de livraison rapide, mais négligent. Alors comment tes messages arrivent-ils complets et dans l'ordre ?

Parce qu'un deuxième protocole, TCP, travaille par-dessus, sur les machines aux deux bouts (la tienne, et celle d'en face). Les routeurs, eux, ne s'en occupent pas.

IP TCP
Son métier Acheminer les paquets Fiabiliser la conversation
Il travaille dans les routeurs et les machines uniquement dans les machines aux extrémités
Il garantit rien que tout arrive, complet et dans l'ordre

Concrètement, TCP fait trois choses, à l'arrivée :

  1. Il remet les paquets dans l'ordre, grâce à leur numéro.
  2. Il repère les manquants (il a reçu les paquets 1, 2 et 4 : le 3 manque) et redemande au seul expéditeur de le renvoyer.
  3. Il ralentit si le réseau est saturé, pour ne pas aggraver l'embouteillage.

L'idée de génie

Le réseau (IP) est bête et rapide. L'intelligence (TCP) est aux extrémités.

C'est ce qui permet aux routeurs d'être simples, donc rapides, donc nombreux. Si chaque routeur devait garantir la fiabilité, mémoriser les conversations et gérer les renvois, Internet serait des milliers de fois plus lent, et n'aurait jamais atteint cette taille.

Fiable, oui. À l'heure, non.

Attention à ne pas confondre deux promesses très différentes.

TCP garantit que ton message arrivera en entier et dans l'ordre. Il ne garantit pas quand.

Si des paquets se perdent, TCP les redemande, ce qui prend du temps. Le message arrive, mais en retard.

Pour un fichier ou un message, aucune importance : quelques dixièmes de seconde ne changent rien. Mais pour un appel vidéo ou un jeu en ligne, arriver en retard, c'est comme ne pas arriver du tout. Une image de visioconférence livrée avec 3 secondes de retard est inutilisable.

C'est pourquoi la visioconférence et le streaming en direct n'utilisent souvent pas TCP : ils préfèrent perdre un peu d'image (et afficher un flou passager) plutôt que d'attendre. Mieux vaut une image dégradée maintenant qu'une image parfaite trop tard.

Exercice - Fiabilité ou vitesse ?

Pour chacun, dis s'il vaut mieux tout recevoir, quitte à attendre, ou recevoir tout de suite, quitte à perdre un peu :

  1. télécharger un fichier PDF
  2. un appel vidéo
  3. envoyer un message texte
  4. un jeu en ligne rapide
Correction
  1. Tout recevoir. Un PDF avec des morceaux manquants est illisible. On attend.
  2. Tout de suite. Une image un peu dégradée passe inaperçue ; 2 secondes de retard rendent la conversation impossible.
  3. Tout recevoir. Un message tronqué n'a aucun sens.
  4. Tout de suite. Mieux vaut un petit saut à l'écran qu'un jeu figé le temps de récupérer un paquet perdu.

Ce qu'on retient

  • Un message est découpé en paquets, qui voyagent indépendamment. Cela permet de partager les câbles et de ne renvoyer que ce qui se perd.
  • Les routeurs ne connaissent que leurs voisins. Aucun ne connaît le trajet complet : chacun passe le paquet dans la bonne direction, de proche en proche. C'est ce qui rend Internet possible à l'échelle de la planète.
  • Chaque paquet a un TTL (compteur de sauts). Chaque routeur enlève 1 ; à 0, le paquet est détruit. Cela empêche les paquets de tourner en rond, et c'est ce que tracert détourne pour cartographier un trajet.
  • IP achemine (sans rien garantir) ; TCP fiabilise (remise en ordre, renvoi des manquants, gestion de la congestion). Le réseau est bête, l'intelligence est aux extrémités.
  • TCP garantit que tout arrive, pas quand. D'où les usages (vidéo, jeu) qui préfèrent la vitesse à la fiabilité.

Et ensuite

Tu n'as jamais tapé 185.15.58.224 dans ton navigateur. Tu tapes wikipedia.org. Qui fait la traduction ?