Previous Up Next

Chapitre 4  Les protocoles de l’Internet

4.1  Le protocole IP

IP est un protocole permettant d’avoir une adresse logique pour les machines (contrairement aux adresses physiques d’Ethernet). Ces adresses sont fixées par l’administrateur du réseau (ce sont donc des adresses qui permettent d’organiser les adresses sur le réseau indépendament des machines). Une autre particularité des adresses Ethernet est qu’elles sont globales : une adresse IP publique est censée être unique dans le monde entier.

4.1.1  Trame ARP

Les réseaux locaux sont des réseaux utilisant les adresses physiques des cartes. Par contre, si on ne connaît que l’adresse IP d’une machine il faut pouvoir retrouver son adresse MAC. Le mécanisme de résolution d’adresse proposé ici est le protocole ARP (Address Resolution Protocol) qui permet en deux échanges de trames de retrouver l’adresse MAC d’une machine à partir de son adresse IP.

Le protocole ARP est bien un protocole de niveau 3 car il permet au niveau réseau de savoir avec qui il veut communiquer sur le lien Ethernet. ARP est en fait indépendant d’Ethernet et fonctionne avec n’importe quel type de réseau de niveau 2. Après la résolution ARP, la couche de niveau 3 ne connaît que la taille des identifiants de niveau 2 et des valeurs numériques pour joindre les machines distantes. De cette façon IP peut fonctionner sur plusieurs types de protocoles de niveau 2 sans changer le principe de base de la résolution d’adresse ARP. Les requêtes ARP sont véhiculées dans des trames de niveau 2.


Figure 4.1: Trame ARP

Une requête/réponse ARP est véhiculée par une trame Ethernet (sur Ethernet donc) de type 0x0806. La machine émettrice envoie une requête en broadcast (FF:FF:FF:FF:FF:FF) afin de contacter toutes les machines du réseau local au niveau Ethernet. La machine qui reconnaît son adresse IP peut renvoyer une réponse ARP en utilisant l’adresse Ethernet inscrite dans la requête comme adresse de destination. Voici un exemple de requête/réponse entre une machine d’adresse IP 129.104.254.6 cherchant à contacter la machine 129.104.254.5.

Requête ARPRéponse ARP
  
  • Partie Ethernet
      itemvFF:FF:FF:FF:FF:FF broadcast adresse itemv08:00:20:02:45:9E adresse source itemv0x0806 type de trame ethernet question ARP
  • Partie ARP
      itemv0x0001 type de réseau de niveau 2 (ethernet) itemv0x0800 type de réseau de niveau 3 (IP) itemv0x06 taille des adresses de niveau 2 itemv0x04 taille des adresses de niveau 3 itemv0x0001 opcode : requête itemv08:00:20:02:45:9E adresse Ethernet source itemv81.68.fe.06 adresse IP source (129.104.254.6) itemv00:00:00:00:00:00 itemv81.68.fe.05 adresse IP demandée.
  • Partie Ethernet
      itemv08:00:20:02:45:9E itemv08:00:20:07:0B:94 itemv0x0806
  • Partie ARP
      itemv0x0001 itemv0x0800 itemv0x06 itemv0x04 itemv0x0002 réponse ARP itemv08:00:20:02:45:9E itemv81.68.fe.06 itemv08:00:20:07:0B:94 itemv81.68.fe.05
  


Certains systèmes d’exploitation apprennent les adresses Ethernet des autres machines en écoutant les requêtes ARP qui passent sur le réseau.

Les traductions IP/ARP sont conservées dans une machine de façon temporaire dans une table ARP. Vous pouvez voir le contenu de la table de la machine sur laquelle vous êtes en tapant la commande (sous Unix) arp -a.
0.8@percent

4.1.2  En-tête du datagramme IP


Figure 4.2: En-tête du datagramme IP

Une liste des protocoles supportés par IP est disponible sur les machines Unix dans le fichier
/etc/protocols. Dans la suite du cours nous ne nous interesserons qu’aux protocole ICMP (numéro 1), UDP (numéro 17) et TCP (numéro 6)

4.1.3  Adressage IP

Les adresses IP sont des nombres sur 32 bits dont la représentation usuelle est un groupe de 4 entiers sur 8 bits séparés par des points. Ainsi l’adresse 2262191317 (en décimal) correspond à l’adresse 134.214.76.213 dans la notation usuelle. Les adresses IP sont des adresses logiques qui sont fixées par configuration logicielle de la machine. Une machine a au moins autant d’adresses IP que d’interfaces (cartes) réseaux. Elle peut éventuellement en avoir plus.

Les adresses sur Internet sont gérées par l’organisme IANA. C’est l’organisme chargé de répartir les adresses IP dans le monde. Une première liste pour voir à qui appartiennent les tranches d’adresses est disponibles ici. La gestion est ensuite faite par des organismes régionaux (voir Ripe NCC).

La configuration d’une machine pour avoir une connexion IP se résume donc, pour l’instant aux paramètres suivants:

4.1.4  Décision de routage dans IP

Le réseau local auquel est relié la machine est calculé en effectuant un et logique entre l’adress IP de la machine et son masque de réseau. Pour savoir si une machine destination est dans le même réseau il faut faire la même opération avec l’adresse que l’on souhaite joindre et son propre masque de réseau. Si le résultat est le même alors les deux machines sont dans le même réseau local et la communication peut s’effectuer via le réseau local. Dans le cas contraire la machine source doit envoyer le datagramme au routeur de sortie (dont elle connait l’adresse IP par configuration et qu’elle peut joindre en utilisant le LAN). Le routeur se chargera de trouver le prochain saut et ainsi d’acheminer le datagramme un peu plus loin dans le réseau jusqu’à destinaition. Le nombre maximum de sauts autorisés (passage de routeurs) est fixé au départ par la valeur du champs TTL. Si le TTL arrive à 0 pendant le transport, alors le paquet est détruit et on reçoit en retour un message ICMP de type 11 et de code 0.
0.8@percent
0.8@percent

4.1.5  Fragmentation

La fragmentation fait intervenir les champs ID, Flags et Offset de l’entête pour remettre dans l’ordre les morceaux d’un paquet IP fragmenté au cours du routage dans le réseau.

Les routeurs intermédiaires peuvent fragmenter un paquet mais ne font pas la défragmentation. C’est à la machine destinatrice d’attendre et de remettre les fragments dans l’ordre. La machine utilise le champs TTL pour mesurer le temps maximum d’attente une fois qu’elle commence à réassembler un datagramme. Si ce TTL passe à 0 alors le datagramme est jeté car les morceaux n’ont pas été reçus à temps.

Le bit DF (don’t fragment) indique que l’on ne souhaite pas qu’un paquet puisse être fragmenté. Si le cas se présente le datagramme est jeté et un message ICMP est renvoyé à la source (type 3, code 4). Ce bit DF permet de faire de la découverte de MTU sur le chemin. Cette "MTU de chemin" est donc le plus gros datagramme que l’on puisse envoyer de bout en bout sans qu’il soit fragmenté (on a donc la MTU la plus petite de tous les réseaux traversés).

4.1.6  Diagnostic sur IP : ICMP

ICMP (Internet Control Message Protocol) est utilisé pour avoir des retours d’information sur l’état du réseau et des machines.


Figure 4.3: En-tête du datagramme ICMP

Les données, quand il y en a, dépendent du type de paquet ICMP. Si le paquet ICMP est un signalement d’erreurs alors le contenu des données est pris dans les 8 premiers octets des données du datagramme ayant généré l’erreur.


type 0code=0echo reply (requête)
type 3 destination unreachable (messages d’erreurs)
 code 0network unreachable
 code 1host unreachable
 code 2protocol unreachable
 code 3port unreachable
 code 4fragmentation needed but don’t-fragment bit set
 code 5source route failed
 code 6destination network unknown
 code 7destination host unknown
 code 8source host isolated (obsolete)
 code 9destination network administratively prohibited
 code 10destination host administratively prohibited
 code 11network unreachable for TOS
 code 12host unreachable for TOS
 code 13communication administratively prohibited by filtering
 code 14host precedence violation
 code 15precedence cutoff in effect
type 4code=0source quench (contrôle de flux) (messages d’erreurs)
type 5 redirect (messages d’erreurs)
 code 0redirect for network
 code 1redirect for host
 code 2redirect for type-of-service and network
 code 3redirect for type-of-service and host
type 8code=0echo request (ping) (requête)
type 9code=0router advertisement (requête)
type 10code=0router solicitation (requête)
type 11 TTL (messages d’erreurs)
 code 0TTL = 0 during transit
 code 1TTL = 0 during reassembly
type 12 parameter problem (messages d’erreurs)
 code 0IP header bad
 code 1required option missing
type 13code=0timestamp request
type 14code=0timestamp reply
type 17code=0address mask request
type 18code=0address mask reply
Tableau 4.1: Table des types et codes ICMP

4.1.7  ToS : Type of Service

Le champs ToS permet de donner une information sur la nature des données contenues dans le datagramme IP. Cette information peut être utilisée pour améliorer et diriger le routage. Il faut que les routeurs soient configurés pour en tenir compte. En pratique très peu de routeurs acceptent de prendre en compte le champs ce qui le rend inutile en pratique.

4.1.8  Protocoles de transports

IP permet de communiquer avec une machine. Pour atteindre un service (application) il faut donc plus de précision dans l’adresse logique du destinataire du datagramme.

Les protocoles de transport UDP et TCP font l’interface entre le réseau (comment atteindre une machine) et les applications (comment atteindre un programme précis qui tourne dans une machine).

De la même manière que pour les adresses IP (il faut connaître une adresse IP à l’avance pour communiquer avec une machine), il faut connaître le port (numéro d’accès au service ou programme) pour accéder à un service particulier sur un serveur. Il existe pour cela une liste de référence connue sous le nom de "well known ports" qui est la même pour toutes les machines. Il s’agit ici d’établir une communication de bout en bout. Les deux protocoles utilisés sur l’Internet sont UDP et TCP.

4.2  UDP: User Datagram Protocol

UDP est un protocole en mode datagramme et propose seulement le service de multiplexage applicatif par rapport à IP. UDP ne propose pas de service supplémentaire et on reste donc dans un mode non connecté avec des problèmes potentiels de perte de paquets dans le réseau (ce ne sera pas le cas de TCP).

UDP reste néanmoins un protocole rapide qui est très efficace et est utilisé par de nombreuses applications dont le service de nommage DNS (port 53)


Figure 4.4: Structure du datagramme UDP

4.2.1  Propriétés des datagramme UDP

UDP utilise IP comme support, il est donc soumis aux mêmes contraintes

Les données sont envoyées dès que l’application effectue une écriture. Chaque écriture de l’application génère un datagramme UDP. Les lectures des datagrammes depuis l’application se font sur des datagrammes complets.

4.3  TCP : Transmission Control Protocol

TCP permet d’avoir une connexion entre programmes ayant des propriétés bien plus complexes que les datagrammes UDP. TCP propose, par l’intermédiaire d’acquittements, d’avoir un contrôle de perte de paquet avec délivrement des données à l’application dans l’ordre d’envoi ainsi qu’un contrôle de congestion du réseau.


Figure 4.5: Structure du segment TCP

Les numéros de séquences et d’acquittements identifient le nombre d’octets transmis sur la connexion. Le compteur ne commence pas de zéro mais du nombre annoncé lors de la synchronisation d’ouverture de connexion (ISN: Initial Sequence Number).

Une communication TCP est identifiée par le quadruplet (adresse IP source, port source, adresse IP destination, port destination ).

L’option la plus courante dans TCP est l’annonce de la taille maximum de segment (MSS : Maximum Segment Size). Cette option est présente dans les segments ayant le bit SYN positionné pour indiqué quelle est la quantité maximale de données que veut recevoir l’émetteur. Lorsque la connexion est locale le MSS est fixé à la MTU du protocole de niveau 2 moins la taille des entêtes IP et TCP : pour un réseau ethernet le MSS sera fixé à 1460 dans la plupart des cas (cela peut dépendre des systèmes d’exploitation) sinon, pour une connexion distante, le MSS est fixé à 536 (la plus petite MTU sur Internet est fixée à 576 octets).

Les acquittements ne sont pas envoyés dès que l’on reçoit des données. Une temporisation de 500ms (au maximum) est mise en place pour augmenter la probabilité d’avoir des données à transmettre en même temps que l’acquittement et ainsi augmenter le débit utile du réseau.


Figure 4.6: Établissement et ferneture de connexion TCP

Le mécanisme d’ouverture de connexion TCP est prévu pour fonctionner dans le cas où les deux machines font une ouverture simultanée (cas très rare). Dans ce cas, une seule connexion TCP bidirectionnelle résulte de cette double ouverture.

4.3.1  États d’une connexion TCP


Figure 4.7: États d’une connexion TCP


Figure 4.8: États d’une connexion TCP dans le temps

L’état TIME_WAIT est appelé état d’attente 2MSL. Un MSL est la durée de vie maximum d’un segment, cette valeur est comprise entre 30s et 2 min. C’est la durée maximale pendant laquelle un segment peut exister sur le réseau avant d’être rejeté.

Dans le cas d’une fermeture simltanée, la partie gauche et la partie droite passent par les états FIN_WAIT_1, CLOSING et TIME_WAIT au lieu de passer par les états mentionnés sur la figure précédente.

TCP propose des mécanismes pour désynchroniser les envois de segment des acquittements. Chaque machine annonce la quantité de mémoire disponible dans son buffer de réception (champs window dans l’entête TCP). L’émetteur sait alors quelle quantité de données il peut espérer envoyer sans saturer le destinataire. La taille de cette fenêtre peut varier de 8Ko à 16Ko (ou plus) selon les systèmes.


Figure 4.9: Fenêtre glissante de TCP

Une application qui aurait indiqué une fenêtre vide dans son dernier acquittement doit réémettre un segment avec le même numéro d’acquittement que le précédent pour réanoncer sa nouvelle taille de fenêtre.

L’envoi des segments ainsi que l’envoi des acquittements peut être différé par rapport aux données envoyées et lues de l’application (algorithmes de Clark et Nagle vus en TD)

4.3.2  Contrôle de congestion

Le contrôle de congestion sert à adapter le débit de TCP par rapport aux pertes de paquets pouvant arriver dans le réseau. L’adaptation du débit dans TCP est appelé slow start.

La fenêtre de réception permet à l’émetteur d’envoyer rapidement plusieurs segments TCP sans attendre d’acquittement entre l’envoi des segments. Ce mécanisme fonctionne très bien sur un même LAN mais peut poser des problème en cas de congestion du réseau.

TCP possède une fenêtre de gestion de la congestion appelée congestion window (cwnd). Cette fenêtre est locale à l’émetteur et sa valeur n’est pas inscrite dans l’entête de segment. Alors que la fenêtre annoncée dans les entêtes TCP conditionne la quantité de données traitées côté récepteur, la fenêtre de congestion conditionne la quantité de données qui peut être envoyée côté émetteur.

L’émetteur peut émettre à hauteur du minimum entre la taille de la fenêtre annoncée et la taille de la fenêtre de congestion.

L’émetteur commence à émettre un segment et attend l’acquittement. Une fois l’acquittement reçu, l’émetteur peut alors émettre deux segments et attendre les acquittements. La taille de la fenêtre de congestion est agrandie de façon exponentielle jusqu’à trouver la limite de congestion du réseau. Une fois cette limite atteinte, des segments commencent à se perdre et l’émetteur retombe alors à une fenêtre de congestion à 1. Il recommence le "slow start" exponentiel jusqu’au précédent point de rupture. Une fois le point de rupture atteint l’augmentation devient linéaire jusqu’au prochain seuil de rupture (et ainsi de suite).


Figure 4.10: Démarrage lent de TCP : slow start


Previous Up Next