Le modèle TCP/IP
Ce cours ouvre la partie Réseau du chapitre Fondations. Il s'adresse à toute personne qui déploie ou exploite des applications et qui, face à un « connection refused » ou à un délai d'attente dépassé, ne sait pas par où commencer : développeurs, administrateurs système, profils DevOps. Il suppose l'aisance en ligne de commande du cours Linux : premiers pas, et rien de plus.
L'approche
Le réseau s'enseigne souvent par le modèle OSI, ses sept couches et ses définitions à apprendre par cœur. Ce cours prend le chemin inverse : il suit un vrai paquet, la requête GET /sante envoyée à l'API Signalements, et l'accompagne du programme qui l'écrit jusqu'au câble, puis de routeur en routeur, jusqu'au serveur qui répond. Chaque protocole apparaît au moment où le paquet en a besoin, avec les champs de ses en-têtes et les commandes Linux qui le rendent visible.
Les leçons s'appuient sur les RFC, qui font foi, sur la documentation du noyau Linux et sur des captures que vous pouvez refaire. Les exemples d'adresses utilisent les plages réservées à la documentation (192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 en IPv4, 2001:db8::/32 en IPv6) et des plages privées, jamais des adresses réelles.
Les cours suivants de la partie Réseau (DNS en profondeur, HTTP et les API web, TLS et PKI, SSH) partent de ces bases.
Ce qu'il faut
- Une machine Linux sur laquelle vous avez les droits
sudo, de préférence une machine virtuelle jetable : plusieurs exercices créent des interfaces, des espaces de noms réseau et des règles de pare-feu. - Les outils
iproute2(ip,ss),iputils-ping,tracerouteoutracepath,tcpdump,netcat-openbsdetcurl, presque tous présents sur Ubuntu Server. - Facultatif : Wireshark sur votre poste, pour ouvrir les captures faites avec
tcpdump.
Les leçons
- Pourquoi des couches : le modèle TCP/IP, OSI, et l'encapsulation.
- Ethernet et ARP
- Les adresses IPv4
- Découper en sous-réseaux
- Le routage
- ICMP, ping, traceroute et la MTU
- La traduction d'adresses (NAT)
- IPv6
- UDP et les ports
- TCP : établir et fermer une connexion
- TCP : fiabilité, débit et congestion
- Diagnostiquer un problème réseau
Pour valider : le quiz (niveau 100) et le lab (niveau 200).
Plan du cours
- Pourquoi des couches
100 Comprendre
Faire communiquer des machines différentes sur des réseaux différents : le découpage en couches du modèle TCP/IP, ce qu'il emprunte et refuse au modèle OSI, l'encapsulation octet par octet d'une requête GET /sante, le principe de bout en bout, et où vit la pile réseau dans Linux. - Ethernet et ARP
100 Comprendre
La couche la plus basse que l'on manipule au quotidien : la trame Ethernet et ses adresses MAC, le commutateur qui apprend, le domaine de diffusion et les VLAN, puis ARP, qui traduit une adresse IP en adresse MAC, son cache sous Linux, ses annonces et ses failles. - Les adresses IPv4
100 Comprendre
L'en-tête IPv4, l'adresse de 32 bits et sa notation, le préfixe et le masque, la fin des classes et la notation CIDR, les adresses spéciales (boucle locale, lien local, privées, documentation), l'épuisement des adresses, et ce que veut dire écouter sur 0.0.0.0 ou sur 127.0.0.1. - Découper en sous-réseaux
200 Pratiquer
Découper un bloc d'adresses IPv4 en sous-réseaux et les regrouper, calculer à la main par le binaire ou le nombre magique, bâtir un plan d'adressage à tailles variables pour Signalements, et éviter les chevauchements qui cassent le jour où l'on relie deux réseaux : RFC 1918, Docker, VPN, adresses réservées par les fournisseurs cloud. - Le routage
200 Pratiquer
Comment une machine décide où envoyer un paquet : remise directe ou par une passerelle, table de routage Linux lue ligne par ligne, règle du plus long préfixe, route par défaut, ip route get, tables multiples, ce que fait un routeur, routage asymétrique et filtrage du chemin inverse, puis le routage entre opérateurs avec BGP et ce que ses incidents ont appris. - ICMP, ping, traceroute et la MTU
200 Pratiquer
Le protocole de messages d'erreur d'IP : ce que ping et traceroute prouvent vraiment, comment le TTL dessine le chemin, ce qu'est la MTU, comment la fragmentation et la découverte du MTU du chemin fonctionnent, et le trou noir PMTU qui fait se figer une connexion SSH ou TLS quand un pare-feu bloque ICMP. - La traduction d'adresses (NAT)
200 Pratiquer
Pourquoi des millions de machines partagent une même adresse IPv4 publique : NAT source et masquerade, traduction des ports, table de suivi de connexion, redirection de port, NAT de l'opérateur (CGNAT), ce que le NAT casse, ce qu'il ne protège pas, et ce qu'il devient dans le cloud et sous Linux, en suivant la requête GET /sante de la box jusqu'au serveur. - IPv6
200 Pratiquer
Le protocole qui rend une adresse publique à chaque machine : état du déploiement en France, adresses de 128 bits et leur notation, types d'adresses, préfixes /64 et autoconfiguration, découverte des voisins, en-tête simplifié, ICMPv6 indispensable, double pile et Happy Eyeballs, et ce que la fin du NAT change pour la sécurité. - UDP et les ports
100 Comprendre
La couche transport et ses ports : ce qu'est une socket, le quintuplet qui identifie un échange, les ports bien connus et éphémères, puis UDP, le plus simple des protocoles de transport, ce qu'il garantit et surtout ce qu'il ne garantit pas, qui l'utilise, et pourquoi il sert aux attaques par amplification. - TCP : établir et fermer une connexion
200 Pratiquer
Ce que TCP garantit et ce qu'il ne garantit pas, l'en-tête TCP, la poignée de main en trois temps, les files d'attente d'un serveur, la fermeture, la différence entre « connection refused » et un délai dépassé, les états TIME-WAIT et CLOSE-WAIT, le keepalive et les attaques par inondation de SYN, observés sur des connexions réelles avec ss. - TCP : fiabilité, débit et congestion
200 Pratiquer
Comment TCP rend un réseau imparfait fiable et rapide : acquittements, retransmissions sur délai et rapides, SACK, contrôle de flux et fenêtres, produit débit par délai, contrôle de congestion avec CUBIC et BBR, algorithme de Nagle, et ce que tout cela change pour une application, mesuré avec ss et nstat. - Diagnostiquer un problème réseau
200 Pratiquer
Une méthode pour diagnostiquer un problème réseau sous Linux sans tâtonner : avancer couche par couche ou par dichotomie, lire les messages d'erreur pour ce qu'ils disent vraiment, interroger la machine avec ip, ss, nc et curl, capturer avec tcpdump, puis cinq pannes réelles de Signalements résolues pas à pas.
Sources
- RFC 1122, Requirements for Internet Hosts, Communication Layers
- RFC 791, Internet Protocol
- RFC 9293, Transmission Control Protocol (TCP)
- RFC 8200, Internet Protocol, Version 6 (IPv6) Specification
- W. Richard Stevens, Kevin R. Fall, TCP/IP Illustrated, Volume 1 (2e éd., Addison-Wesley, 2011)
- The Linux man-pages project : ip(8), ss(8), tcp(7), ip(7)