Modèle TCP/IP
Progression
#Modèle TCP/IP
Le modèle TCP/IP est un ensemble de protocoles de communication qui permet l'interconnexion de réseaux hétérogènes. Il est organisé en quatre couches principales.
Objectifs d’apprentissage
- Expliquer l’encapsulation entre couches et l’adressage (IP, ports).
- Différencier TCP et UDP (fiabilité, ordre, congestion) et savoir quand utiliser l’un ou l’autre.
- Comprendre MTU/MSS, fragmentation et Path MTU Discovery (PMTUD).
- Décrire le 3‑way handshake, les flags TCP et les états de fermeture.
#Couches du modèle TCP/IP
#1. Couche Application
- Protocoles : HTTP, FTP, SMTP, DNS, etc.
- Responsabilités : Fournir des services réseau aux applications utilisateur.
#2. Couche Transport
- Protocoles : TCP (fiable) et UDP (rapide).
- Responsabilités :
- TCP : Contrôle de flux, correction d'erreurs, segmentation.
- UDP : Transmission rapide sans garantie.
#3. Couche Internet (IP)
- Protocole principal : IP (IPv4/IPv6).
- Responsabilités : Routage des paquets entre réseaux, adressage logique.
#4. Couche Lien (ou Accès réseau)
- Protocoles : Ethernet, WiFi, PPP, etc.
- Responsabilités : Transmission physique, adressage matériel (MAC).
#Encapsulation
L'encapsulation est le processus par lequel chaque couche ajoute ses propres en-têtes (et parfois une queue) aux données reçues de la couche supérieure.
- Données applicatives (message)
- Couche Transport : Ajout en-tête TCP/UDP → Segment
- Couche Internet : Ajout en-tête IP → Paquet
- Couche Lien : Ajout en-tête Ethernet → Trame
- Transmission sur le support physique → Bits
#TCP en bref: fiabilité et contrôle de congestion
- Handshake à 3 temps: SYN → SYN‑ACK → ACK. Fermeture: FIN/ACK et états (TIME_WAIT, CLOSE_WAIT).
- Séquencement: n° de séquence/ack; retransmission sur timeout (RTO) + Fast Retransmit (dupACKs).
- Contrôle de flux: fenêtre (rwnd). Contrôle de congestion: slow start, congestion avoidance (cwnd).
- Flags: SYN (ouverture), ACK (accusé), FIN (fermeture), RST (réinitialisation), PSH/URG (peu utilisés aujourd’hui).
#Diagramme: 3‑way handshake et fermeture
Quand l’ordre/fiabilité peut être géré par l’application et que la latence prime: DNS, QUIC (au‑dessus d’UDP), streaming temps réel… UDP n’a pas de congestion implicite: utiliser des stratégies applicatives.
#Animation: contrôle de congestion TCP
TCP Reno : fenêtre de congestion
Parcourez les RTT pour voir comment la fenêtre d’envoi (cwnd
) évolue selon les pertes. Les pertes par timeout et celles détectées par triple ACK n’ont pas le même impact.
Lien local rapide, une perte sporadique. Observe la transition slow start → avoidance.
Slow start double cwnd à chaque RTT tant que la limite ssthresh
n’est pas atteinte.
Après une perte détectée rapidement (triple ACK), TCP Reno passe en fast recovery sans repartir de 1.
#MTU, MSS et fragmentation
- MTU (Ethernet typique 1500 octets): taille maximale d’une trame L2.
- MSS: taille utile TCP maximale (≈ MTU − en‑têtes IP/TCP). Trop grande → fragmentation IP si DF=0, sinon ICMP « Fragmentation needed » avec PMTUD.
- Recommandation: éviter la fragmentation; PMTUD ajuste la MSS; attention aux pare‑feux qui bloquent ICMP → « black hole ».
Si les ICMP « Fragmentation needed » sont filtrés, des connexions semblent « geler ». Corriger les ACL/pare‑feux ou activer PLPMTUD côté hôte.
#Ports, NAT et état
- Ports: identifient les processus (TCP/UDP). Paires
{IP src, port src, IP dst, port dst}
définissent un flux. - NAT: traduit adresses et ports; garde un état (table); timeouts différents TCP/UDP.
- Effet: le serveur ne peut pas initier de connexion vers un client NATé; attention au keep‑alive.
#États de fermeture (aperçu)
- TIME_WAIT côté qui envoie le dernier ACK (double de MSL); évite que d’anciens segments ne perturbent une nouvelle connexion.
- CLOSE_WAIT quand l’app n’a pas encore fermé après réception de FIN; souvent signe d’app qui ne
close()
pas.
#Quiz éclair
#Exercice : Simulation d'encapsulation/décapsulation
Simulez le processus d'encapsulation et de décapsulation d'un message à travers les couches TCP/IP.
#Instructions
- Créez une classe pour chaque couche du modèle TCP/IP.
- Implémentez la méthode
encapsuler(donnees)
qui ajoute l'en-tête approprié. - Implémentez la méthode
decapsuler(trame)
qui extrait les données et l'en-tête. - Simulez l'envoi d'un message simple à travers toutes les couches.
#Exemple de code
1class CoucheApplication:2 def encapsuler(self, message):3 print("Couche Application: Message original")4 return f"[DONNEES]{message}[/DONNEES]"5 6 def decapsuler(self, donnees):7 # Extraction simplifiée8 contenu = donnees.replace("[DONNEES]", "").replace("[/DONNEES]", "")9 print("Couche Application: Message extrait")10 return contenu11 12class CoucheTransport:13 def encapsuler(self, donnees):14 print("Couche Transport: Ajout en-tête TCP")