- Algorithme TCP
-
Il existe des algorithmes de TCP différents pour répondre à l'augmentation de la bande passante des liaisons : en effet les premiers algorithmes utilisés historiquement seraient incapables de faire monter le débit suffisamment rapidement pour saturer un lien réseau à 100 Mbit/s, débit typique des réseaux locaux dans les années 2000.
Les différents algorithmes TCP sont, parmi les plus connus :
- TCP tahoe
- TCP Reno
- TCP new Reno
- TCP Vegas
Il faut comprendre que l'algorithme TCP ne connait jamais le débit optimal à utiliser pour un lien : d'ailleurs il est difficile à estimer. IP, qui porte TCP, ne garantit pas que le chemin sera stable dans le temps à travers le réseau, d'où une impossibilité à prédire le débit à utiliser. De plus le débit est aussi conditionné par d'autres facteurs comme l'existence de flux concurrents sur une partie du chemin (par exemple vous pouvez avoir plusieurs téléchargements simultanés sur des serveurs ayant différents niveaux de performance).
C'est ainsi que TCP va essayer de deviner le meilleur débit à utiliser en essayant de toujours augmenter le débit jusqu'à la survenue d'une perte de paquet parce que le réseau n'arrive pas à absorber tout le débit. En effet, les réseaux informatiques sont conçus pour être les plus simples possibles et c'est la seule possibilité qu'a un réseau pour avertir les utilisateurs qu'il est saturé.
On distingue les algorithmes TCP par la forme du slow-start (démarrage lent) et leur façon d'utiliser la bande passante disponible. On parle parfois d'agressivité du protocole.
TCP tahoe - slowstart and congestion avoidance
Lors d’une congestion, TCP réagit en réduisant le débit de la connexion. Le protocole a la possibilité de mesurer l’importance du problème en observant l’augmentation du temps de réponse. Si le protocole ne réagit pas aux congestions, le nombre de retransmission peut continuer à augmenter et aggraver ainsi la congestion. C’est la raison pour laquelle un algorithme de contrôle réduit le flux en cas de congestion. Cet algorithme, appelé slowstart and congestion avoidance, littéralement « départ lent et évitement de congestion», doit être entièrement distribué puisqu’il n’existe pas de système central de contrôle dans TCP. Son principe consiste à débuter d’une fenêtre de taille 1 et à doubler la taille de la fenêtre chaque fois que l’ensemble des paquets de la fenêtre a été bien reçu avant la fin des temporisateurs de reprise respectifs. Lorsqu’un fragment arrive en retard, c’est-à-dire après que le temporisateur est arrivé à échéance, il est retransmis en redémarrant à une fenêtre de 1. Au cours de la deuxième phase de l’algorithme, congestion avoidance, lorsqu’un retard est détecté, qui oblige à un redémarrage sur une fenêtre de 1, la taille de la fenêtre N qui a provoqué le retard est divisée par 2 (N/2). À partir de la valeur de la taille 1 de redémarrage, la taille double jusqu’à ce que la taille de la fenêtre dépasse N/2. À ce moment, on revient à la taille précédente, qui était inférieure à N/2, et, au lieu de doubler, on ajoute seulement 1 à la taille de la fenêtre. Ce processus d’ajout de 1 se continue jusqu’à ce qu’un retard d’acquittement redémarre le processus à la fenêtre de taille 1. La nouvelle valeur qui déclenche la partie congestion avoidance est calculée à partir de la fenêtre atteinte divisée par deux. Un exemple de comportement de cet algorithme est illustré à la figure[1].
Ces différents critères sont :
- augmentation linéaire/exponentielle du débit ;
- diminution linéaire/exponentielle du débit après un événement (perte de paquets, dépassement d'un seuil, …) ;
- l'existence de seuils de débit dans l'algorithme (par exemple l'augmentation peut devenir prudente une fois qu'elle arrive au niveau de sa dernière meilleure performance).
Il n'est pas aisé de parler de meilleure version TCP : il y a des versions adaptées aux réseaux très hauts débits, il y a des versions adaptées aux petits débits, il y a des versions adaptées aux réseaux qui font beaucoup d'erreurs.
Enfin, on observe que les algorithmes TCP sont tous compatibles entre eux (puisqu'il n'y a pas de modification du segment TCP mais seulement une variation sur leur vitesse d'arrivée). Par exemple, Windows Vista utilise Compound TCP alors que les noyaux Linux utilisent TCP CUBIC depuis la version 2.6.19.
Notes et références
- Eyrolles - 2008 - Les Réseaux - 6e édition
Wikimedia Foundation. 2010.