Réseaux TCP/IP : la pile TCP/IP
Un livre de Wikibooks.
| Les réseaux TCP/IP |
| Département Informatique |
| Sommaire |
| Bibliographie |
| Autres cours |
Sections |
[modifier] La pile TCP/IP
[modifier] Le datagramme IP (version 4)
Lorsque 2 machines communiquent en utilisant le protocole IP, elles s'échangent des datagrammes IP qui ont le format ci-dessous :
| 32 Bits / 4 octets | |||||
|---|---|---|---|---|---|
| N° Version | Longueur entete | Type de service | Longueur totale du datagramme | ||
| Identificateur (Recopiée dans chaque segment) | Drapeaux + place du segment | ||||
| Durée de vie | Protocole couche 4 | Checksum Entete | |||
| Adresse IP Source | |||||
| Adresse IP Destination | |||||
| Options | |||||
| Données | |||||
- Version (4bits) :
- le champ version indique la version de IP utilisée. Début 2006, la version de IP la plus fréquemment utilisée est la version 4. La version 6 commence à apparaître : il n'y aura pas de version 5. Les 4 bits de ce champs sont donc 0100 (4 écrit en binaire).
- IHL - IP Header Length=Longueur de l'entête IP (4 bits) :
- ce champ indique la longueur de l'entête IP. L'unité est le nombre de mots de 32 bits. pour la version 4 la longueur de cette entête est de 20 octets soit 5 fois 32 bits : ce champs vaut donc 0101.
- Type of service (8 bits) :
- ce champ permet d'indiquer que certains datagramme IP ont une priorité supérieure à d'autres. Il est peu utilisé sauf par quelques routeurs spécialisés dans la transmission de voix sur IP.
- Total length (16 bits) :
- ce champ indique le nombre d'octets du champs données de ce datagramme IP. La longueur maximale du datagramme en octets est 216-1 = 65 535 octets = 64Ko
- ID (16 bits) :
- ce champ est un identifiant du datagramme IP (le numéro du datagramme).
- F=Flags - les drapeaux (3 bits) :
- le premier bit est inutilisé
- le deuxième bit DF (don't fragment) permet d'interdire ou d'autoriser la fragmentation. positionné à 1, il est interdit de fragmenter ce datagramme IP.
- le troisième bit MF (more fragment) est utilisé lors de la fragmentation : il indique si le fragment est le dernier fragment du datagramme (MF=0) ou non (MF=1).
- TTL - Time to live - temps restant à vivre (8 bits) :
- il s'agit d'une valeur initialisée à 255 et qui est décrémenté de 1 à chaque fois que le datagramme traverse un routeur. Arrivé à 0, le datagramme est détruit : ce mécanisme assure la destruction des datagrammes qui se perdent sur le réseau. Ainsi ces datagrammes perdus n'encombrent pas indéfiniment le réseau.
- Protocole (8 bits) :
- ce champ indique la nature des données transportées par ce datagramme IP. 3 protocoles sont principalement utilisés au dessus de IP : ICMP (code 1), TCP (code 6) et UDP (code 17).
- Header Checksum - Somme de contrôle (16 bits) :
- il s'agit d'un code détecteur d'erreurs qui ne porte que sur l'entête : la somme des octets de l'entête regroupé par paquets de 16 bits (header checksum compris) doit valoir 216-1 modulo 216. En cas d'erreur sur l'entête le datagramme est détruit. IP n'est pas un protocole fiable puisqu'on ne garantit pas que les données arrivent, ni de leur fiabilité.
- IP source (32 bits) :
- adresse IP de l'expéditeur.
- IP destination (32 bits) :
- adresse IP du destinataire.
[modifier] La fragmentation IP
[modifier] Notion de MTU
La plupart des réseaux imposent une limite physique à la taille des données qu'ils peuvent transporter. Un datagramme IP peut avoir une taille maximale de 65535 octets, ce qui est trop grand pour la plupart des réseaux. Le MTU (Maximum Transfert Unit) correspond à la taille maximale des données transportables par le réseau. Le datagramme IP (entête comprise) aura comme taille maximale le MTU du réseau.
[modifier] Quelques valeurs du MTU
éthernet : MTU=1500 octets (fixé a 1492 pour optimiser sa connexion.)
FDDI : 4470 octets
[modifier] Découpage par le routeur
Si un routeur route des données d'un réseau A vers un réseau B et si les 2 réseaux ont des valeurs différentes de MTU (par exemple le réseau A est un réseau FDDI de MTU 4470 et le réseau B est un réseau éthernet de MTU 1500 octets), alors il peut être amené à découper un datagramme IP en plusieurs datagrammes plus petits.
[modifier] Le rôle des flags et du champs FO
Si un datagramme a été découpé, il faut être capable de réunir les différents morceaux dans le bon ordre à l'arrivée : les flags (3 bits) et le champs FO (Fragment Offset sur 13 bits) vont contenir les informations nécessaires à cette reconstruction.
[modifier] Les flags
- premier bit : inutilisé. La valeur est toujours à 0.
- deuxième bit : DF (Don't fragment) permet d'autoriser ou d'interdire la fragmentation du datagramme. Si le bit DF est à 0, la fragmentation est autorisée et s'il vaut 1, elle est interdite. Si le routeur doit découper un datagramme et que le bit DF est à 1, alors le datagramme IP sera détruit.
- troisième bit : MF (More Fragment) permet d'indiquer si le datagramme est le dernier ou non. Si MF est à 0, alors le fragment est le dernier, s'il vaut 1, alors il n'est pas le dernier.
[modifier] Le champs FO
Le nombre d'octets de données de chaque fragment, sauf le dernier, doit être un multiple de 8. Ainsi la position du premier octet de chaque fragment dans le datagramme d'orgine sera un multiple de 8. La valeur de FO de chaque fragment sera ce numéro divisé par 8 écrit en binaire sur 13 bits.
[modifier] Exemple :
- Un routeur doit router un datagramme IP dont la taille totale fait 4470 octets sur un réseau éthernet.
- Le datagramme initial comprend 20 octets d'entête et 4450 octets de données. Numérotons de 0 à 4449 ces octets.
- Chaque fragment aura une taille maximale de 1500 octets, soit 20 octets d'entête et 1480 octets de données.
- Répartition des données dans les fragments :
- On mettra dans le premier fragment les octets de 0 à 1479 du datagramme initial.
- On mettra dans le deuxième fragment les octets de 1480 à 2959 du datagramme initial.
- On mettra dans le troisième fragment les octets de 2960 à 4439 du datagramme initial.
- On mettra dans le quatrième fragment les octets de 4440 à 4449 du datagramme initial.
- La position du premier octet du fragment dans le datagramme initial sera donc :
- premier fragment : 0
- deuxième fragment : 1480
- troisième fragment : 2960
- quatrième fragment : 4440
- On s'aperçoit que la condition Chaque fragment sauf le dernier contient un nombre d'octets multiple de 8 a pour conséquence que dans tous les fragments y compris le dernier la position du premier octet du fragment dans le datagramme initial est un multiple de 8.
- Description des fragments :
- premier fragment : FO=0/8=0 et MF=1
- deuxième fragment : FO=1480/8=185 et MF=1
- troisième fragment : FO=2960/8=370 et MF=1
- quatrième fragment : FO=4440/8=555 et MF=0
[modifier] Le protocole ARP
[modifier] Encapsulation des protocoles
- Lorsqu'un datagramme IP est envoyé sur un réseau éthernet alors sur le réseau il ne va circuler que des trames éthernet. Ces trames éthernet contiendront dans leur champs de données un datagramme IP. On dit que le protocole IP est encapsulé dans éthernet.
- L'encapsulation peut être plus complexe. Lorsque une machine envoie un datagramme ICMP, celui-ci sera encapsulé dans un datagramme IP qui sera encapsulé dans une trame éthernet.
[modifier] Format de la trame éthernet
Une trame éthernet contient les champs suivants :
- un préambule sur 64 bits : 31 fois 01 suivi de 11. Le preambule sert à la synchronisation.
- l'adresse MAC du destinataire.
- l'adresse MAC de l'expéditeur.
- un code sur 16 bits indiquant le protocole utilisé au dessus d'éthernet. IP aura comme code 0800 (en hexadécimal) et ARP aura comme code 0806.
- les données
- un code détecteur d'erreur de type CRC permettant de savoir si la trame a été altérée ou non.
[modifier] Le problème
Imaginons qu'une machine A veuille envoyer un datagramme IP à une machine B via un réseau éthernet. Le datagramme IP sera encapsulé dans une trame éthernet. A va avoir besoin des informations suivantes :
- sa propre adresse IP. A connait son adresse IP car l'administrateur l'a configurée.
- l'adresse IP de B. A la connait : un serveur DNS lui a fourni l'adresse IP de B.
- sa propre adresse MAC : A la connait car elle est écrite sur sa carte éthernet.
- l'adresse MAC de B. A ne possède pas cette information ! A est incapable d'envoyer une trame éthernet à B sans cette information. Le protocole ARP va permetre à A de récupérer cette information.
[modifier] Rôle du protocole ARP
Address Resolution Protocol permet d'obtenir l'adresse MAC d'une machine à partir de son adresse IP.
[modifier] Le format de la trame ARP
| 32 Bits / 4 octets | |||
|---|---|---|---|
| champs 1 | champs 2 | ||
| champs 3 | champs 4 | Champs 5 | |
| champs 6 | |||
| champs 6 (suite) | champs 7 | ||
| champs 7 (suite) | champs 8 | ||
| champs 8 (suite) | champs 9 | ||
- champs 1 (2 octets) : type de réseau physique. Il s'agit d'un code indiquant la nature du réseau physique. Pour éthernet le code sera 01 (en hexadécimal)
- champs 2 (2 octets) : il s'agit du code du protocole réseau utilisé. IP aura comme code 0800 (en hexadécimal).
- champs 3 (1 octet) : longueur de l'adresse physique. Le protocole éthernet utilise des adresses de 48 bits soit 6 octets. Ce champs vaudra donc 6 pour un réseau éthernet.
- champs 4 (1 octet) : longueur de l'adresse protocole. Le protocole IP utilise des adresse de 32 bits soit 4 octets. Ce champs vaudra donc 4 pour un réseau IP.
- champs 5 (2 octets) : opération indique la nature de l'opération demandée. Une demande ARP aura comme code 01 et une réponse ARP le code 02.
- champs 6 (6 octets) : adresse physique de l'expéditeur.
- champs 7 (4 octets) : adresse protocole de l'expéditeur.
- champs 8 (6 octets) : adresse physique du destinataire. Pour les demandes ce champs est à 0.
- champs 9 (4 octets) : adresse protocole du destinataire.
[modifier] La table ARP
Les réponses des différentes demandes ARP sont mémorisées dans une table ARP qui contient les correspondances entre les adresses MAC et IP de différentes machines.
[modifier] Un exemple d'échange de trames ARP
On considère 2 machines A et B sur un même réseau. A souhaite connaître l'adresse MAC de B dont l'adresse IP est connue.
- A envoie en broadcast une demande ARP.
- B notifie dans sa table ARP la correspondance entre l'adresse IP de A et son adresse MAC.
- B répond à A en lui transmettant son adresse MAC.
- A mémorise les correspondances entre l'adresse MAC et IP de B dans sa table ARP.
Les données contenues dans la table ARP ont une validité de 20 minutes. Une fois ce delai dépassé, il faut refaire une demande ARP.
[modifier] Le protocole ICMP
[modifier] Le rôle de protocole ICMP
C'est un protocole au dessus d'IP. Il ne permet pas d'échange de données. Il est utilisé pour:
- tester le réseau. Par exemple, le datagramme de type 8 (demande d'écho) oblige le destinataire à répondre par un datagramme de type 0 (réponse à une demande d'écho).
- des petites optimisations du réseau
- gérer des messages d'erreurs
- Le champs type : sur 8 bits ce champs permet de déterminer la nature du datagramme ICMP.
- Code : sur 8 bits, il s'agit d'un code indiquant un sous-type du datagramme ICMP.
- Checksum : Un code détecteur d'erreurs.
- Inutilisé : 32 bits à 0.
- Données : des paramètres optionnels du datagramme ICMP.
[modifier] Différents types de datagramme ICMP
- Type 0 : réponse à une demande d'écho :
- Type 8 - Demande d'écho :
[modifier] Le protocole UDP
Le protocole UDP (User Datagram Protocol) utilise le protocole IP (adresses source et destinataire) pour l'envoi et la réception de trames de données (Datagram).
Ce protocole n'est pas "fiable" pour différentes raisons :
- Les paquets peuvent être reçus dans un ordre différent de celui utilisé lors de leur envoi. Ceci s'explique par le fait qu'ils peuvent suivre des routes différentes, subir des traitements différents, ...
- Il n'y a pas d'acquittement ou de retransmission des paquets de données.
- La connexion n'est pas maintenue entre le serveur (émetteur) et le client (récepteur), la transmission des paquets est ponctuelle.
Ce manque de "fiabilité" doit donc être compensé au niveau supérieur (application), en résolvant les points précédents de la manière suivante (par exemple) :
- Afin de reconstituer les données sources, inclure un numéro de paquet pour reconstituer les données dans l'ordre, ou ajouter une adresse dans le flux de donnée global,
- Afin de vérifier la bonne transmission de chaque paquet, ajouter une somme de vérification (CRC, code de hashage),
- Afin de vérifier la bonne transmission de tous les paquets, le client envoi un paquet d'acquittement pour chaque paquet reçu correctement, l'émetteur qui n'obtient pas cet acquittement dans un temps raisonnable retransmet à nouveau le paquet correspondant.
[modifier] Le protocole TCP
Le protocole TCP (Tranmission Control Protocol) résoud les problèmes de "fiabilité" du protocole UDP, et permet la transmission de données sous la forme d'un flux d'octets plutôt que sous la forme de paquets.
[modifier] Voir aussi ...
- IP version 4 : présentation du datagramme IP.
- Ethernet : présentation de la trame éthernet.
- ARP : présentation de ARP.

