El tráfico de teclado sobre TCP envía una carga útil diminuta por paquete: una sola pulsación de tecla se convierte en un segmento de unas pocas docenas de bytes envuelto en una cabecera de 40 bytes. En enlaces lentos esto inunda la red con paquetes que no llevan casi datos, el problema que Nagle llamó la enfermedad del paquete pequeño o de la ventana tonta.
Las soluciones ingenuas son enviar de inmediato (lo que desperdicia ancho de banda) o esperar hasta que se almacene en búfer un segmento completo (lo que añade latencia). La regla de Nagle se sitúa entre ambas: mantener un segmento pequeño pendiente y agrupar el resto detrás de su acuse de recibo.
La agrupación es natural porque TCP ya espera ese acuse de recibo; el algoritmo simplemente lo convierte en una regla en lugar de un accidente, y las aplicaciones interactivas obtienen baja latencia con una fracción del número de paquetes.
Enviar un paquete pequeño, agrupar el resto hasta el ACK
Los paquetes de un byte desperdician la mayor parte de sus bytes en cabeceras.
Agrupar detrás de un ACK no añade ninguna espera fija nueva.
Reduce el número de paquetes sin la latencia del almacenamiento en búfer de segmentos completos.
Para corregir el desperdicio, permitir una unidad pequeña y agrupar el resto detrás de su acuse de recibo, acotando el costo mediante una espera que ya se estaba haciendo.
Especificado en la RFC 1122 como un requisito importante de TCP, el algoritmo de Nagle se distribuyó en prácticamente todas las pilas TCP y se convirtió en un ejemplo clásico de intercambiar un poco de latencia por una gran reducción de la carga.
CONSULTA LAS PRUEBAS
Las fuentes
- RFC 896: Congestion Control in IP/TCP Internetworks IETF · rfc-editor.org
- RFC 1122: Requirements for Internet Hosts - Communication Layers IETF · rfc-editor.org