Retour au blog

Protocoles TCP/IP et Modèle OSI : Cours Complet

Ethernet, ARP, IP, ICMP, TCP et UDP ouverts champ par champ : ce que dit chaque en-tête, ce qu'un routeur réécrit, puis trois exercices corrigés de lecture de trames et de numéros TCP.

Cet article a été rédigé à des fins pédagogiques. Les informations présentées peuvent évoluer. Nous t’invitons à vérifier auprès de sources officielles.

Un protocole réseau, c'est d'abord un en-tête : des champs de taille fixe, que l'émetteur remplit et que le récepteur lit dans le même ordre. Une requête HTTP vers le port 80 d'un serveur part dans un segment TCP qui porte les ports, glissé dans un paquet IP qui porte les adresses IP, glissé dans une trame Ethernet qui porte les adresses MAC, celles des cartes réseau. Ici, tu ouvres ces en-têtes un par un, comme en TP : ce que dit chaque champ, et qui le lit.

Chaque protocole à sa couche

À l'émission, chaque couche ajoute son en-tête devant ce que lui confie la couche du dessus ; à l'arrivée, chacune lit le sien et le retire. C'est l'encapsulation. La RFC 1122, un des textes qui définissent Internet, nomme les quatre couches du modèle TCP/IP : application, transport, internet et liaison. Beaucoup de cours disent « accès réseau » pour la dernière.

ProtocoleCouche OSICouche TCP/IPCe que son en-tête désigne
HTTP, DNS7applicationaucune adresse réseau (DNS traduit les noms en adresses IP)
TCP, UDP4transportle programme, par son port
IP3internetla machine, par son adresse IP
Ethernet1 et 2liaisonla carte réseau du prochain saut, par sa MAC

TCP/IP ne découpe pas la couche application : ce qu'OSI range en couches 5 (session) et 6 (présentation) se fait à l'intérieur des protocoles d'application.

Ethernet et ARP

Une trame Ethernet s'ouvre sur 14 octets : MAC de destination (6 octets), MAC source (6), puis EtherType (2), qui dit en hexadécimal ce que transporte la trame : 0x0800 pour IPv4, 0x0806 pour ARP. Suivent les données, de 46 à 1 500 octets, puis 4 octets de FCS, un code de contrôle qui permet de jeter une trame abîmée.

Pour remplir la MAC de destination, ton PC ne connaît qu'une adresse IP. ARP (Address Resolution Protocol) fait le lien : ton PC demande à tout le réseau local, à l'adresse de diffusion ff:ff:ff:ff:ff:ff, « qui a 192.168.1.1 ? », et seule la machine concernée lui répond avec sa MAC. Ce message voyage dans la trame sans en-tête IP, d'où son classement hésitant entre couches 2 et 3.

Piège classique : pour joindre un serveur d'un autre réseau, ton PC ne demande jamais sa MAC. Son masque de sous-réseau lui dit que la destination est ailleurs : il demande la MAC de sa passerelle, le routeur de sortie du réseau. La trame porte l'IP du serveur, mais la MAC du routeur.

IP et ICMP

L'en-tête IPv4, défini par la RFC 791, fait au moins 20 octets. Six champs suffisent pour lire ce qu'affiche un analyseur de trames, le logiciel qui capture le trafic.

ChampTailleCe qu'il indique
Version4 bits4 pour IPv4
IHL (Internet Header Length)4 bitslongueur de l'en-tête, en mots de 4 octets : 5 donne 20 octets
Longueur totale16 bitsen-tête et données, en octets
TTL (Time To Live)8 bitsbaisse à chaque routeur ; à 0, le paquet est détruit
Protocole8 bitsce qui suit : 1 ICMP, 6 TCP, 17 UDP
Adresses32 bits chacunesource, puis destination

Le TTL évite qu'un paquet tourne sans fin dans une boucle. Chaque routeur le baisse d'au moins 1 ; celui qui le voit tomber à 0 jette le paquet et peut prévenir la source par un message ICMP « Time Exceeded » (type 11). C'est ce que traceroute exploite pour faire répondre un à un les routeurs du trajet.

ICMP, le protocole des messages d'erreur et du ping, est porté directement par IP (Protocole 1) : pas de TCP ni d'UDP, donc pas de port.

TCP et UDP

Leurs en-têtes commencent tous deux par le port source et le port destination, sur 16 bits chacun, donc de 0 à $2^{16} - 1 = 65\,535$. Côté serveur, le port désigne le service : 80 pour HTTP, 443 pour HTTPS, 53 pour DNS. Le client prend un port temporaire, que le serveur reprend comme destination dans sa réponse.

L'en-tête UDP s'arrête à 8 octets : les deux ports, la longueur et une somme de contrôle. Ni numéro ni accusé de réception : un datagramme perdu est perdu, à l'application de redemander.

TCP, défini par la RFC 9293, livre un flux d'octets complet et dans l'ordre. Son en-tête fait au moins 20 octets. Le numéro de séquence (32 bits) situe le premier octet de données du segment : TCP compte les octets, pas les segments. Le numéro d'acquittement (32 bits) annonce le prochain octet attendu. La fenêtre (16 bits) dit combien d'octets le récepteur accepte encore. Des drapeaux, dont SYN, ACK et FIN, donnent le rôle du segment.

Une connexion s'ouvre en trois segments.

Étape 1 : le client envoie un SYN, avec son numéro initial $x$.

Étape 2 : le serveur répond par un SYN-ACK, avec son propre numéro initial $y$ et l'acquittement $x + 1$.

Étape 3 : le client répond par un ACK, avec l'acquittement $y + 1$ ; ses données partiront du numéro $x + 1$.

Piège classique : l'acquittement annonce le prochain octet attendu, pas le dernier reçu. Après 100 octets numérotés à partir de 1001, il vaut 1101, pas 1100. Et le SYN, comme le FIN, consomme à lui seul un numéro, d'où le $x + 1$.

Ce qu'un routeur réécrit

Un routeur retire l'en-tête Ethernet, lit l'IP de destination et cherche dans sa table de routage, la liste des réseaux qu'il sait joindre, le prochain saut : routeur suivant ou machine finale. Il baisse le TTL, recalcule la somme de contrôle IP, qui couvre le TTL, puis fabrique une trame neuve : sa MAC en source, celle du prochain saut en destination. Les adresses MAC changent donc à chaque réseau traversé, alors que les adresses IP et les ports arrivent tels qu'ils sont partis.

Le NAT (traduction d'adresses) de ta box fait exception : il remplace l'adresse privée de ton PC par l'adresse publique de la box, et au besoin le port source.

Exercices corrigés

Cherche chacun sur ta feuille avant d'ouvrir la correction.

Exercice 1 : Un analyseur de trames affiche les 20 premiers octets d'un paquet IP, en hexadécimal : 45 00 00 3c 1c 46 40 00 40 06 20 aa c0 a8 01 0a cb 00 71 19. Donne la version, la longueur de l'en-tête, la longueur totale, le TTL, le protocole transporté, les deux adresses et la taille de ce qui suit l'en-tête IP.

Correction :

Le premier octet, 45, se lit en deux moitiés : 4 pour la version (IPv4), 5 pour l'IHL, soit $5 \times 4 = 20$ octets d'en-tête.

Les octets 3 et 4, 00 3c, donnent la longueur totale : $3 \times 16 + 12 = 60$ octets. Le neuvième, 40, est le TTL : $4 \times 16 = 64$. Le dixième, 06, annonce TCP.

Les huit derniers octets sont les adresses, un octet par nombre (c0 vaut $12 \times 16 = 192$) : source 192.168.1.10, destination 203.0.113.25.

Il reste $60 - 20 = 40$ octets pour le segment TCP.

Exercice 2 : Données fictives. Un client ouvre une connexion TCP avec le numéro initial 4000 ; le serveur choisit 9000. Le client envoie 250 octets, puis le serveur répond par 1 200 octets. Donne la séquence et l'acquittement des cinq segments : SYN, SYN-ACK, ACK, données du client, réponse du serveur.

Correction :

SYN : séquence 4000, pas d'acquittement (drapeau ACK baissé).

SYN-ACK : séquence 9000, acquittement 4001, car le SYN a consommé le numéro 4000.

ACK : séquence 4001, acquittement 9001 ; cet ACK seul ne consomme aucun numéro.

Données du client : séquence 4001, acquittement 9001. Les 250 octets portent les numéros 4001 à 4250.

Réponse du serveur : séquence 9001, acquittement $4001 + 250 = 4251$, le prochain octet qu'il attend. Le client acquittera ensuite par $9001 + 1200 = 10\,201$.

Exercice 3 : Ton PC a l'adresse 192.168.1.10, le masque 255.255.255.0 et la passerelle 192.168.1.1. Il envoie un ping vers 203.0.113.25, situé derrière trois routeurs, avec un TTL de départ de 64. Quelles adresses MAC et IP de destination porte la trame qui quitte ton PC ? Quel port de destination ? Quel TTL lit le serveur, si chaque routeur le baisse de 1 ?

Correction :

Le masque garde les trois premiers octets : 203.0.113.25 n'est pas dans le réseau 192.168.1.0. La trame part donc vers la passerelle : MAC de destination, celle de 192.168.1.1, trouvée par ARP ; IP de destination, 203.0.113.25, inchangée jusqu'au serveur.

Port : aucun. Le ping utilise ICMP, porté directement par IP, sans TCP ni UDP. Donner un numéro de port, c'est l'erreur visée.

TTL à l'arrivée : $64 - 3 = 61$.

À retenir

À retenir :

  • Chaque couche ne lit que son en-tête : MAC pour un saut, IP pour tout le trajet, port pour le programme au bout.
  • Pour un serveur lointain, ARP cherche la MAC de la passerelle, jamais celle du serveur.
  • IPv4 : 20 octets au moins ; Protocole 1 pour ICMP, 6 pour TCP, 17 pour UDP.
  • UDP : 8 octets d'en-tête. TCP : 20 au moins, et son acquittement annonce le prochain octet attendu.

Sources

Tu peux partager cette page librement, en citant ORBITECH AI Academy avec son lien.