Le datagramme IP ; table de routage et principe d'acheminement ; routage statique ; passerelle par défaut ; ICMP avec ping et traceroute ; aperçu d'IPv6 et raisons de la transition.
Le chapitre 5 a donné aux machines des adresses globales et structurées. Ce chapitre répond à la question que cette structure rendait possible, et qui est l'autre moitié du cœur du cours : comment un paquet trouve son chemin d'un bout à l'autre d'Internet, en traversant des dizaines de réseaux appartenant à des opérateurs différents ?
La réponse est d'une élégance qui mérite d'être saisie : personne ne connaît le chemin complet. Chaque routeur ne décide que d'un pas — le prochain saut — puis passe le paquet au suivant, qui refait le même calcul. Le paquet avance de proche en proche, comme un voyageur qui, à chaque carrefour, demande seulement « quelle direction pour aller là-bas ? » sans jamais connaître l'itinéraire entier. C'est ce principe local qui rend Internet extensible à l'échelle de la planète.
Le datagramme IP
L'unité de la couche réseau est le datagramme (ou paquet) IP : les données, précédées d'un en-tête IP. Les champs qui comptent pour ce chapitre :
- l'adresse source et l'adresse destination (chapitre 5) — la destination est ce que chaque routeur lit pour décider ;
- le TTL (Time To Live) : un compteur décrémenté à chaque routeur traversé. Quand il
atteint zéro, le paquet est détruit. C'est le garde-fou contre les boucles de routage : sans
lui, un paquet mal aiguillé tournerait indéfiniment. C'est aussi le mécanisme qu'exploite
traceroute, plus bas.
IP est un service « au mieux » (best effort) : il fait de son mieux pour livrer, mais ne garantit rien — un datagramme peut être perdu, dupliqué, arriver en désordre. C'est le prix de la commutation de paquets (chapitre 1), et c'est un choix délibéré : la simplicité du cœur du réseau. Rétablir la fiabilité est laissé aux extrémités, à TCP (chapitre 7). Cette division du travail — un réseau simple et faillible, une intelligence aux bords — est le principe de conception fondateur d'Internet.
La table de routage et le plus long préfixe
Chaque routeur — et chaque machine — possède une table de routage : une liste de règles de la forme « pour telle destination (un réseau/préfixe), envoie vers tel prochain saut ». À la réception d'un paquet, le routeur lit l'adresse destination et cherche la route correspondante.
Souvent, plusieurs routes correspondent. Un paquet pour 10.1.5.42 peut correspondre à la fois
à une route 10.0.0.0/8, à 10.1.0.0/16 et à 10.1.5.0/24. Laquelle choisir ? La règle est
universelle :
Règle du plus long préfixe : parmi les routes qui correspondent, on choisit la plus spécifique — celle dont le préfixe est le plus long.
Ici, /24 l'emporte sur /16, qui l'emporte sur /8. L'intuition : plus le préfixe est long,
plus la route est précise, et une route précise « connaît mieux » la destination qu'une route
générale. C'est exactement le calcul que fait l'exercice de ce chapitre, et c'est le mécanisme au
cœur de tout routeur, du plus petit au plus gros.
Un routeur reçoit un paquet pour 10.1.5.42. Sa table contient des routes vers 10.0.0.0/8, 10.1.0.0/16 et 10.1.5.0/24, toutes correspondant à cette destination. Laquelle applique-t-il, et selon quelle règle ?
Routage statique et passerelle par défaut
Comment la table se remplit-elle ? De deux façons.
Le routage statique : un administrateur écrit les routes à la main. Simple, prévisible, adapté aux petits réseaux et aux cas figés. Son défaut : il ne s'adapte pas — si un lien tombe, la route reste dans la table et le paquet part dans le vide, jusqu'à ce qu'on corrige à la main.
La route par défaut, notée 0.0.0.0/0, est la clé de voûte. Son préfixe est le plus court
possible (zéro bit) : elle correspond donc à tout, mais, par la règle du plus long préfixe,
elle n'est choisie que si aucune autre route ne correspond. C'est le « pour tout le reste,
envoie par là ». Le prochain saut de cette route est la passerelle par défaut.
Chez vous, la passerelle par défaut est votre box. Votre ordinateur ne connaît qu'une poignée de routes (le réseau local) et une route par défaut vers la box ; tout ce qui n'est pas local part vers elle, et de là vers Internet. C'est pourquoi une passerelle mal configurée coupe tout accès extérieur tout en laissant le réseau local fonctionner — un symptôme que le chapitre 9 apprendra à diagnostiquer.
À grande échelle, écrire les routes à la main devient impossible : les routeurs échangent alors automatiquement leurs routes par des protocoles de routage dynamique (OSPF à l'intérieur d'un réseau, BGP entre opérateurs). Ils s'adaptent aux pannes en recalculant les chemins. Le détail est hors programme en L1 ; retenez qu'ils existent, et que la décision qu'ils produisent reste, à l'arrivée, la même règle du plus long préfixe.
ICMP : ping et traceroute
IP transporte les données ; ICMP transporte les messages de service du réseau — les erreurs et les diagnostics. Deux outils, que vous emploierez en TP et au chapitre 9, reposent dessus.
ping envoie un message ICMP « echo request » et attend un « echo reply ». Il répond à deux
questions : la machine est-elle joignable ? et en combien de temps ? (le RTT, la latence du
chapitre 1). C'est le premier réflexe de tout dépannage.
traceroute est plus astucieux, et il exploite le TTL vu plus haut. Il envoie des paquets avec
un TTL de 1, puis 2, puis 3, etc. Le paquet à TTL 1 est détruit par le premier
routeur, qui renvoie une erreur ICMP — révélant son adresse. Le TTL 2 atteint le deuxième
routeur, et ainsi de suite. En augmentant le TTL, traceroute cartographie le chemin saut par
saut jusqu'à la destination. C'est une illustration magnifique du routage de proche en proche : on
voit littéralement le paquet avancer d'un routeur à l'autre.
Comment traceroute parvient-il à révéler chaque routeur traversé sur le chemin vers une destination ?
Un aperçu d'IPv6
Le chapitre 5 l'a laissé entrevoir : les 4,3 milliards d'adresses IPv4 sont épuisées. La
réponse de fond est IPv6, qui porte les adresses à 128 bits — un espace si vaste
( adresses) qu'il est en pratique inépuisable. Une adresse IPv6 s'écrit en
hexadécimal, par blocs séparés de deux-points : 2001:db8::1.
Au-delà de la taille, IPv6 simplifie l'en-tête, intègre mieux l'autoconfiguration, et supprime le besoin de NAT — chaque machine peut de nouveau avoir une adresse unique et routable, ce qui restaure le principe de bout en bout d'origine. La transition est lente : IPv4 et IPv6 coexistent depuis des années, car changer un protocole aussi fondamental sur un réseau planétaire ne se décrète pas. En L1, retenez la raison (l'épuisement d'IPv4), la solution (128 bits) et le fait que les deux cohabitent — le détail relève des cours ultérieurs.
À vous
L'exercice met la décision d'acheminement entre vos mains. Vous implémentez le choix qu'un routeur
opère pour chaque paquet : parmi les routes qui correspondent à la destination, garder celle au
plus long préfixe. Vous voyez alors le /24 l'emporter sur le /16, le /16 sur le /8, et
la route par défaut 0.0.0.0/0 ne servir que de dernier recours — la passerelle vers Internet.
Le TP fait toucher du doigt le principe du chapitre : chaque routeur ne décide que du prochain saut, refait le même calcul, et le paquet avance de proche en proche. Personne n'a la carte complète — et c'est précisément ce qui fait tenir Internet.
Implémentez la décision d'acheminement d'un routeur : parmi les routes qui correspondent à la destination, choisir celle au plus long préfixe (la plus spécifique). Observez le rôle de la route par défaut 0.0.0.0/0 — la passerelle « pour tout le reste » — et le fait que chaque routeur ne décide que du prochain saut.
// Un routeur reçoit un paquet, lit son adresse IP DESTINATION, et consulte sa // TABLE DE ROUTAGE pour décider par où l'envoyer (le « prochain saut »). // // Chaque route dit : « pour cette destination (réseau/préfixe), va vers X ». // La route 0.0.0.0/0 est la ROUTE PAR DÉFAUT : elle correspond à TOUT — c'est // « pour tout le reste, envoie à la passerelle ». const table = [ { reseau: "10.0.0.0", prefixe: 8, saut: "interface locale A" }, { reseau: "10.1.0.0", prefixe: 16, saut: "routeur R2" }, { reseau: "10.1.5.0", prefixe: 24, saut: "routeur R3" }, { reseau: "0.0.0.0", prefixe: 0, saut: "passerelle Internet" }, // défaut ]; function versEntier(ip) { return ip.split(".").reduce((n, o) => (n * 256 + Number(o)) >>> 0, 0); } function masque(prefixe) { return prefixe === 0 ? 0 : (0xffffffff << (32 - prefixe)) >>> 0; } // Le paquet correspond-il à cette route ? (destination ET masque == réseau) function correspond(dst, route) { return (versEntier(dst) & masque(route.prefixe)) >>> 0 === (versEntier(route.reseau) & masque(route.prefixe)) >>> 0; } // ── À VOUS : la décision d'acheminement ───────────────────────────────────── // Parmi TOUTES les routes qui correspondent, choisir celle au préfixe le PLUS // LONG (la plus SPÉCIFIQUE). C'est la règle du plus long préfixe. function acheminer(dst) { let meilleure = null; for (const route of table) { if (correspond(dst, route)) { // à compléter : garder 'route' si son préfixe est plus long que celui // de 'meilleure' (ou si meilleure est null) } } return meilleure ? meilleure.saut : "INJOIGNABLE"; } // ── Vérification ──────────────────────────────────────────────────────────── const tests = ["10.1.5.42", "10.1.9.3", "10.9.9.9", "8.8.8.8"]; for (const dst of tests) { console.log(dst.padEnd(12) + " -> " + acheminer(dst)); }
Ce que la suite en fait
La couche réseau est complète : vous savez adresser (chapitre 5) et acheminer (ce chapitre). Mais IP est « au mieux » — il perd des paquets, les mélange, les duplique, sans jamais s'en soucier. Aucune application sérieuse ne peut vivre avec cela telle quelle.
Le chapitre 7, la couche transport, ajoute l'intelligence aux extrémités. TCP y rétablit la fiabilité — détection des pertes, retransmission, remise en ordre — que la couche liaison (chapitre 4) ne faisait que détecter sans corriger, et que IP ne fait pas du tout. On y verra aussi UDP, son opposé volontairement minimal, et les ports, qui permettent à plusieurs applications de partager une même adresse IP.
À retenir
Vous avez parcouru les 8 sections.
Marquez-la terminée pour faire avancer votre parcours, ou revenez sur un point avant de passer à la suite.