El algoritmo Nagle, que lleva el nombre del ingeniero John Nagle, fue diseñado para reducir la congestión de la red causada por «problemas de paquetes pequeños» con aplicaciones TCP. Las implementaciones de UNIX comenzaron a utilizar el algoritmo de Nagle en la década de 1980, y sigue siendo una característica estándar de TCP en la actualidad.
Cómo funciona el algoritmo de Nagle
El algoritmo de Nagle procesa datos en el lado de envío de aplicaciones TCP mediante un método llamado nagling. Detecta mensajes de pequeño tamaño y los acumula en paquetes TCP más grandes antes de enviar datos a través del cable, evitando así la generación de un número innecesariamente grande de paquetes pequeños. La especificación técnica del algoritmo de Nagle fue publicada en 1984 como RFC 896. Las decisiones sobre la cantidad de datos que deben acumularse y el tiempo de espera entre envíos son fundamentales para su rendimiento general.
Nagling puede utilizar más eficientemente el ancho de banda de una conexión de red a costa de añadir retrasos (latencia). Un ejemplo descrito en el RFC 896 ilustra los beneficios potenciales del ancho de banda y la razón de su creación:
- Una aplicación TCP que intercepta las pulsaciones de teclas del teclado y desea comunicar cada carácter que se escribe a un receptor, puede generar una serie de mensajes, cada uno de los cuales contiene 1 byte de datos.
- Antes de que estos mensajes puedan ser enviados a través de la red, cada uno de ellos debe ser empaquetado junto con la información de cabecera TCP según lo requiera TCP/IP. Cada encabezado tiene un tamaño de entre 20 y 60 bytes.
- Sin molestar, esta aplicación de ejemplo generaría mensajes de red que consisten en un 95% o más de información de cabecera (al menos 20 de 21 bytes) y un 5% o menos de datos reales del teclado del remitente. Usando el algoritmo de Nagle, los mismos datos podrían ser entregados usando muchos menos mensajes y teniendo el 95% del contenido como información de teclado – un ahorro de ancho de banda muy grande.
Las aplicaciones controlan su uso del algoritmo Nagle con la opción de programación de socket TCP_NODELAY. Los sistemas Windows, Linux y Java normalmente habilitan Nagle de forma predeterminada, por lo que las aplicaciones escritas para esos entornos deben especificar TCP_NODELAY cuando deseen desactivar el algoritmo.
Limitaciones
El algoritmo de Nagle sólo se puede usar con TCP. Otros protocolos, incluyendo UDP, no lo soportan.
Las aplicaciones TCP que necesitan una respuesta rápida de red, como las llamadas telefónicas por Internet o los juegos de disparos en primera persona, pueden no funcionar bien cuando Nagle está habilitado. Los retrasos causados mientras el algoritmo tarda más tiempo en ensamblar trozos más pequeños de datos juntos pueden provocar un retardo perceptible visualmente en una pantalla o en un flujo de audio digital. Estas aplicaciones normalmente desactivan Nagle.
Este algoritmo fue desarrollado originalmente en un momento en que las redes informáticas soportaban mucho menos ancho de banda que en la actualidad. El ejemplo descrito anteriormente se basó en las experiencias de John Nagle en Ford Aerospace a principios de la década de 1980, donde las molestas compensaciones en su red de larga distancia lenta y muy cargada tenían sentido. Cada vez hay menos situaciones en las que las aplicaciones de red pueden beneficiarse de su algoritmo en la actualidad.