Algorithme de Nagle

Un article de Wikipédia, l'encyclopédie libre.

L'algorithme de Nagle est un algorithme important pour le fonctionnement de TCP défini par John Nagle dans la RFC 896 (RFC 896).

L'objectif de cet algorithme est d'améliorer l'efficacité du protocole en réduisant le nombre de paquets nécessaires à un transfert. En effet, les paquets TCP/IP étant doté d'un en-tête de 40 octets, l'efficacité des plus petits paquets est extrêmement limitée : par exemple, pour 1 octet unique envoyé dans un paquet TCP, qui représente donc au final 41 octets, le rendement est de 2,4%. Cette situation a lieu par exemple lors de l'utilisation de Telnet, où chaque appui sur une touche entraine généralement l'envoi immédiat du caractère correspondant. Beaucoup de données seront alors envoyées pour peu de données utiles. Si on envoie au contraire, par exemple, 20 caractères en même temps, le rendement passe à 33%.

Pour optimiser les échanges de données et éviter ainsi la congestion eventuelle du réseau due à une telle situation, l'application de l'algorithme de Nagle va provoquer l'empilement des nouvelles données à envoyer dans un buffer tant que les précédentes données envoyées n'ont pas été confirmées (acquittement) ou que ce buffer ne soit plein. Cet algorithme évite donc que des paquets dont la charge utile est très faible ne soient envoyés à la file.

On peut résumer son fonctionnement ainsi :

  1. le premier octet reçu par TCP est envoyé immédiatement.
  2. Tant que l'accusé de réception n'a pas été reçu, les octets à envoyer sont stockés dans un tampon. Après l'acquittement du premier octet, les données du tampon sont envoyées en un seul paquet (si la taille du tampon atteint la taille maximale d'un paquet, l'envoi des données a lieu).
  3. On stocke de nouveau les données dans le tampon en attendant l'acquittement.

Généralement, les implémentations TCP permettent la désactivation de l'algorithme de Nagle (correspondant typiquement à l'option TCP_NODELAY).