Aller au contenu principal

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.

  1. Données applicatives (message)
  2. Couche Transport : Ajout en-tête TCP/UDP → Segment
  3. Couche Internet : Ajout en-tête IP → Paquet
  4. Couche Lien : Ajout en-tête Ethernet → Trame
  5. 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

Client
Serveur
1. SYN seq=x
2. SYN‑ACK seq=y ack=x+1
3. ACK ack=y+1
4. FIN
5. ACK puis FIN
6. ACK (→ TIME_WAIT)
Quand UDP ?

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
Congestion avoidance
Fast recovery
Phase : Slow startcwnd ≈ 2.0 MSSssthresh ≈ 32.0

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 ».
PMTUD brisé

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

Quel signal ouvre une connexion TCP ?
Quel signal ouvre une connexion TCP ?
Quelle affirmation est vraie sur la fragmentation ?
Quelle affirmation est vraie sur la fragmentation ?

#Exercice : Simulation d'encapsulation/décapsulation

Simulez le processus d'encapsulation et de décapsulation d'un message à travers les couches TCP/IP.

#Instructions

  1. Créez une classe pour chaque couche du modèle TCP/IP.
  2. Implémentez la méthode encapsuler(donnees) qui ajoute l'en-tête approprié.
  3. Implémentez la méthode decapsuler(trame) qui extrait les données et l'en-tête.
  4. Simulez l'envoi d'un message simple à travers toutes les couches.

#Exemple de code

pythonpython
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")
Chargement de l’éditeur...