Le trafic clavier sur TCP envoie une charge utile minuscule par paquet : une seule frappe devient un segment de quelques dizaines d'octets enveloppé dans un en-tête de 40 octets. Sur les liaisons lentes, cela inonde le réseau de paquets qui ne transportent presque aucune donnée, le problème que Nagle appelait la maladie des petits paquets ou des fenêtres absurdes.
Les correctifs naïfs consistent à envoyer immédiatement (ce qui gaspille la bande passante) ou à attendre qu'un segment complet soit mis en tampon (ce qui ajoute de la latence). La règle de Nagle se situe entre les deux : garder un petit segment en attente et regrouper les autres derrière son accusé de réception.
Le regroupement est naturel parce que TCP attend déjà cet accusé de réception ; l'algorithme en fait simplement une règle plutôt qu'un accident, et les applications interactives obtiennent une faible latence pour une fraction du nombre de paquets.
Envoyer un petit paquet, regrouper les autres jusqu'à l'ACK
Les paquets d'un octet gaspillent la plupart de leurs octets en en-têtes.
Le regroupement derrière un ACK n'ajoute aucune attente fixe nouvelle.
Il réduit le nombre de paquets sans la latence de la mise en tampon de segments complets.
Pour corriger le gaspillage, autoriser une petite unité et regrouper les autres derrière son accusé de réception, en bornant le coût par une attente déjà en cours.
Suites
Spécifié dans la RFC 1122 comme une exigence importante de TCP, l'algorithme de Nagle a été livré dans pratiquement toutes les piles TCP et est devenu un exemple classique d'échange d'un peu de latence contre une forte baisse de charge.
VÉRIFIEZ LES SOURCES
Les sources
- RFC 896: Congestion Control in IP/TCP Internetworks IETF · rfc-editor.org
- RFC 1122: Requirements for Internet Hosts - Communication Layers IETF · rfc-editor.org