Cours BUT Info

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.

Le modèle TCP/IP (centre) regroupe les sept couches OSI en quatre : l'application, le transport — TCP ou UDP au choix —, Internet (IP) et l'accès au réseau. Les couches 1-2 sont normalisées par l'IEEE, les protocoles des couches 3-4 par l'IETF sous forme de RFC.

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.

L'encapsulation : chaque couche ajoute une en-tête propre à son protocole devant ce qu'elle reçoit de la couche supérieure, et ces informations lui sont opaques. Le récepteur décapsule dans l'ordre inverse — trame, paquet, segment, message.

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).

L'en-tête IPv4 (RFC 791), 20 octets sans options. Surlignés : le trio Identification / drapeaux / Déplacement qui gère la fragmentation — quand un datagramme dépasse le MTU du réseau de sortie, IP le découpe et c'est le destinataire final qui recolle — et le TTL, qui borne le nombre de routeurs traversés.

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).

ARP (RFC 826) relie le monde IP au monde des trames : pour émettre, il faut l'adresse MAC du prochain destinataire direct. Une requête en diffusion, une réponse en direct, et un cache — consultable avec ip neigh — pour ne pas recommencer à chaque paquet.

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…).

TypeNomUsage
0Echo Replyréponse à un ping
3Destination Unreachableimpossible de joindre l'hôte ou l'application
5Redirectindique un autre routeur à utiliser
8Echopaquet de requête à un ping
11Time ExceededTTL tombé à 0
12Parameter Problempaquet 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).

La couche réseau identifie les machines (adresses IP), la couche transport identifie les applications (numéros de port). Une socket — IP + port — désigne un bout de communication : le serveur écoute sur un port connu, chaque client reçoit 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.

Huit octets suffisent à UDP ; TCP en dépense vingt. Les numéros de séquence et d'acquittement reconstruisent le flux, la taille de fenêtre règle le contrôle de flux, les drapeaux pilotent la connexion. La taille d'en-tête se lit en mots de 32 bits : 5 mots = 20 octets sans options.

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.

La fiabilité de TCP : chaque segment doit être acquitté — si le temporisateur expire avant, on réémet. Le numéro de séquence est un repère dans le flux : le récepteur range, repère les trous, et acquitte cumulativement ce qui est arrivé dans l'ordre ; le segment reçu trop tôt attend son tour dans le buffer.

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 min

Ouvrir 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.

L'ouverture en trois messages (three-way handshake) partage un état cohérent : les numéros de séquence initiaux x et y sont échangés avant la moindre donnée. À la fermeture, chaque sens de transmission est clos séparément — quatre segments pour tout démonter proprement.

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.

Le contrôle de flux rend TCP « optimisé » : le récepteur annonce dans chaque segment la place restante de son buffer (taille de fenêtre) et l'émetteur ne peut jamais dépasser la fenêtre — ni celle du récepteur, ni sa fenêtre de congestion W = min(cwnd, awnd). Elle glisse au fil des acquittements.

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 :

Le contrôle de congestion rend TCP « équitable » : une perte de segment est le seul signal de congestion dont TCP dispose. En démarrage lent, cwnd double à chaque aller-retour ; après la perte, le seuil est divisé par 2 et la croissance devient unitaire (évitement de congestion) — chaque connexion sonde le réseau sans l'étouffer.

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

Consultation seule — téléchargement désactivé

Chargement du document…

Dernière mise à jour le

Sur cette page