Ch. 3 — Les protocoles : IP, ARP, ICMP, TCP et UDP
Le modèle TCP/IP et l'encapsulation, le service « au mieux » d'IP avec sa fragmentation et son TTL, ARP et ICMP côté réseau, puis la couche transport : ports, sockets, UDP et le TCP fiable, optimisé et équitable.
Ce que fait ce cours
Le ch. 1 répondait à « quelle adresse mettre sur une machine » ; ici on descend dans la machine : comment les données circulent réellement entre deux machines qui ont une adresse. Au programme : le modèle en couches et l'encapsulation, les protocoles de la couche réseau (IP, ARP, ICMP), puis ceux de la couche transport (UDP et TCP). C'est le socle des QCM de fin de TP — les définitions ci-dessous tombent mot pour mot.
Le modèle en couches TCP/IP
Le modèle TCP/IP est un modèle pragmatique, issu des travaux du Department of Defense (DOD) et d'ARPANET : il n'a pas été dessiné sur le papier avant l'implémentation, il décrit ce qui tourne. Sa couche 3 est entièrement occupée par le protocole Internet Protocol, et sa couche 4 offre deux protocoles au choix : TCP (mode connecté, fiable) et UDP (mode déconnecté, non fiable).
Deux organismes se partagent la normalisation : l'IEEE normalise les couches 1 et 2 (802.3 Ethernet, 802.11 Wi-Fi…), et l'IETF (Internet Engineering Task Force) produit les RFC (Request for Comments) qui décrivent les protocoles d'Internet — la plupart sont disponibles en français.
L'encapsulation
Quand une application envoie un message, chaque couche ajoute une en-tête propre à son protocole devant ce qu'elle reçoit de la couche supérieure — et les informations transmises par une couche sont opaques pour la couche inférieure. À l'arrivée, le destinataire décapsule dans l'ordre inverse.
Le vocabulaire suit la couche : message en application, segment une fois l'en-tête TCP ou UDP posée, paquet avec l'en-tête IP, trame une fois l'en-tête de liaison ajoutée.
IP : un service « au mieux »
IP (RFC 791) est un protocole de niveau réseau (3) destiné à acheminer des données d'une machine à une autre. Son contrat tient en un mot : best effort — le service rendu est « au mieux », rien n'est garanti :
- il y a une opération de routage à chaque sortie de réseau : chaque paquet est routé individuellement, donc des paquets pourront manquer ou arriver dans le désordre ;
- en contrepartie, IP fournit une vision unifiée du réseau : un mécanisme d'adressage et de routage de « haut niveau » (le ch. 1), et un mécanisme de correspondance entre adresse IP et adresse physique — c'est le rôle d'ARP, plus bas.
Comme les réseaux traversés n'ont pas tous les mêmes capacités, un mécanisme de fragmentation permet de transmettre les datagrammes partout : quand un datagramme dépasse le MTU (Maximum Transmission Unit, la taille maximale des données transportables dans une trame pour un réseau donné), IP le découpe, et les fragments sont rassemblés par le destinataire pour reconstituer le datagramme initial.
Trois valeurs de MTU à connaître
Ethernet : 1500 octets · PPPoE : 1492 · Wi-Fi (802.11) : 2304. C'est le MTU qui décide de la taille des segments TCP — d'où le MSS de 1460 vu plus loin (1500 − 20 d'en-tête IP − 20 d'en-tête TCP).
ARP : l'adresse MAC à partir de l'adresse IP
Lors de l'envoi d'un paquet, la machine compare son adresse de réseau avec celle du destinataire :
- même réseau → remise directe : la trame est émise vers cette machine ;
- réseau différent → le paquet est confié au routeur de sortie : la trame est émise vers le routeur.
Dans les deux cas, pour émettre une trame il faut une adresse de niveau 2 (adresse MAC). ARP
(Address Resolution Protocol, RFC 826) sert à apprendre les adresses MAC : requête en
diffusion, réponse directe de la machine concernée, et un cache pour limiter les requêtes —
consultable avec ip neigh (voir le mémo de la commande ip).
Le piège classique : joindre une machine d'un autre réseau
La requête ARP sert alors à trouver l'adresse MAC du routeur, pas celle du destinataire final. La trame porte la MAC du routeur ; le paquet IP, lui, garde l'adresse de destination finale intacte. Deux adresses, deux rôles — ne pas les confondre.
ICMP : le signalement des erreurs et les tests
IP n'est pas un protocole fiable : ICMP (Internet Control Message Protocol, RFC 792) vient
en appoint pour signaler les erreurs et pertes de paquets, indiquer des optimisations
possibles (choix du routeur de sortie) et faire des tests de connectivité — c'est lui qui fait
tourner ping. Les paquets ICMP sont transportés par IP, et la perte d'un paquet ICMP ne génère
pas d'erreur ICMP (sinon la perte d'un ICMP générerait un ICMP, qui en générerait un autre…).
| Type | Nom | Usage |
|---|---|---|
| 0 | Echo Reply | réponse à un ping |
| 3 | Destination Unreachable | impossible de joindre l'hôte ou l'application |
| 5 | Redirect | indique un autre routeur à utiliser |
| 8 | Echo | paquet de requête à un ping |
| 11 | Time Exceeded | TTL tombé à 0 |
| 12 | Parameter Problem | paquet ou en-tête malformé(e) |
Certains types sont raffinés en codes d'erreur plus précis. Et pour permettre à l'émetteur de retrouver les adresses et numéros de ports concernés, un paquet d'erreur ICMP transporte le début du paquet détruit (jusqu'à 576 octets).
Ce que vous manipulez sans le savoir
ping envoie un ICMP Echo (type 8) et attend un Echo Reply (type 0) ; quand un TTL tombe
à 0, le routeur détruit le paquet et renvoie un Time Exceeded (type 11) — c'est ce message
qu'exploitent les outils de traçage de route.
La couche transport : ports et sockets
La couche réseau identifie les machines ; la couche transport ajoute la notion de port pour identifier les applications. Une socket est l'association d'une adresse IP et d'un numéro de port : elle identifie une application sur une machine, et la combinaison de deux sockets identifie une connexion TCP (ou une communication UDP).
Côté serveur : on attend les connexions sur un numéro de port connu — les ports standards
sont recensés par l'IANA, et on les retrouve dans /etc/services. Côté client : le
système fournit à l'application un port éphémère (> 1024).
UDP : le service minimum
UDP (User Datagram Protocol) rend un service sans connexion : pas de gestion des pertes de datagrammes, qui peuvent arriver dans le désordre. Non fiable, mais pas inutile — trois cas d'emploi à retenir :
- quand le message tient dans un datagramme (une requête DNS, par exemple) ;
- quand on ne veut pas subir un contrôle de flux (le multimédia) ;
- pour les diffusions (broadcast) et le multicast — qu'une connexion TCP ne sait pas faire.
Son en-tête tient en 8 octets : ports source et destination, longueur (qui comprend l'en-tête et les données) et somme de contrôle — qui, selon le cours, porte sur l'en-tête uniquement.
Pour briller en QCM
TCP, lui, calcule sa somme de contrôle sur l'en-tête TCP, les données et certains champs de l'en-tête IP. La formulation du cours pour UDP (« en-tête uniquement ») est la simplification à retenir pour l'examen ; en toute rigueur, la RFC 768 y ajoute les données et un pseudo-en-tête IP.
TCP : fiable, optimisé, équitable
TCP (Transmission Control Protocol) promet trois choses : un protocole fiable (les segments arrivent tous et dans l'ordre), optimisé (attentif aux capacités du médium, aux variations de vitesse et à la capacité de réception du destinataire) et équitable (partage de la bande passante entre les connexions). Chaque promesse a son mécanisme.
La fiabilité : acquittements et numéros de séquence
Tout repose sur un mécanisme d'acquittement : chaque segment émis doit être acquitté, sinon il est réémis. Et chaque segment porte un numéro de séquence — un repère dans le flux qui permet au destinataire d'ordonner les données et de supprimer les doublons.
Le temporisateur ne doit ni déclencher trop tôt (réémissions inutiles) ni trop tard (attente inutile) : l'émetteur calcule le temps d'aller-retour de chaque segment (émission + réception de l'acquittement) et s'en sert de base :
tb ← α·tb + (1 − α)·tb_mesure moyenne glissante du temps de boucle
timer = min(ubound, max(lbound, β·tb)) la mesure est majorée d'un facteur β
0,8 ≤ α ≤ 0,9 · 1,3 ≤ β ≤ 2,0 · lbound = 1 s · ubound = 1 minOuvrir et fermer la connexion
Avant toute donnée, un three-way handshake partage un état cohérent entre les deux extrémités : l'échange des numéros de segment initiaux.
Trois à l'ouverture, quatre à la fermeture
Trois messages pour ouvrir (SYN, SYN + ACK, ACK) — le troisième ACK est envoyé par le client alors que la connexion est déjà établie dans son sens. À la fermeture, chaque partie doit clore sa connexion : quatre segments, deux FIN et deux ACK.
L'optimisation : contrôle de flux et découverte du MTU
Le récepteur indique dans chaque segment la taille disponible dans sa fenêtre de réception ;
l'émetteur ne peut pas envoyer plus de données, et la fenêtre se déplace au fur et à mesure des
acquittements et du traitement des données. La fenêtre d'émission W vaut le minimum de deux
bornes : W = min(cwnd, awnd) — cwnd, la fenêtre de congestion évaluée par TCP (ci-dessous), et
awnd, la fenêtre de réception annoncée par le destinataire.
Autre optimisation : éviter la fragmentation, coûteuse. Le MSS (taille maximale des segments, typiquement 1460) est échangé à l'établissement de la connexion, et TCP met en œuvre une découverte du MTU de chemin : bit DF à 1 dans l'en-tête IP, et ajustement de la taille des segments si un ICMP Destination Unreachable — Fragmentation Required revient.
L'équité : le contrôle de congestion
TCP conclut à une congestion en cas de perte de segment — c'est son seul signal. Il adapte alors son débit d'émission avec une fenêtre de congestion évaluée en deux régimes :
En démarrage lent, la fenêtre croît exponentiellement (doublement à chaque aller-retour) jusqu'à ce qu'une perte fixe le seuil de congestion — un seuil qui est divisé par 2 à chaque perte. Au-dessus du seuil, en évitement de congestion, la croissance devient unitaire : TCP sonde le réseau pour trouver la fenêtre de congestion sans l'étouffer.
À retenir
- Le modèle TCP/IP regroupe les 7 couches OSI en 4 : application, transport (TCP ou UDP), Internet (IP), accès réseau. Chaque couche encapsule (message → segment → paquet → trame) et les en-têtes sont opaques pour les couches inférieures.
- IP est un service best effort : routage individuel des paquets (pertes et désordre possibles), fragmentation selon le MTU (Identification, DF/MF, Offset — recollage à destination) et TTL décrémenté à chaque routeur (paquet détruit à 0).
- ARP apprend la MAC associée à une IP (requête en diffusion, réponse en direct, cache avec
ip neigh) ; ICMP signale les erreurs (ping, Destination Unreachable, Time Exceeded). - Un port identifie une application, une socket = IP + port, et deux sockets identifient
une connexion. Serveur : port connu (IANA,
/etc/services) ; client : port éphémère > 1024. - UDP : sans connexion, non fiable, en-tête de 8 octets. TCP : fiable (acquittements +
numéros de séquence + temporisateur), optimisé (fenêtres,
W = min(cwnd, awnd), MSS), équitable (démarrage lent ×2, seuil/2 après perte, évitement +1).
cours-3-protocoles.pdf
R3.06 · Cours — Yvan Peter, IUT de Lille · 47 diapositives
Chargement du document…
Dernière mise à jour le
Ch. 1 — Rappels, adressage IPv4
CIDR, IANA et les registres régionaux, adresses particulières, plages privées, sous-adressage et masques à taille variable (VLSM) : tout le socle d'adressage de R3.06.
Ch. 4 — IP version 6
Pourquoi IPv6 remplace IPv4 : 128 bits et notation abrégée RFC 5952, les types d'adresses (lien local, locales uniques, globales, multicast sollicitée, anycast), l'en-tête de 40 octets, la découverte de voisins ICMPv6, la SLAAC et la renumérotation.