El algoritmo de Nagle, llamado así por el 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 las aplicaciones TCP mediante un método llamado nagling. Detecta mensajes de tamaño pequeño y acumula esos mensajes en paquetes TCP más grandes antes de enviar datos a través del cable. Este proceso evita la generación de cantidades innecesariamente grandes de paquetes pequeños.
La especificación técnica del algoritmo de Nagle se publicó en 1984 como RFC 896. Las decisiones sobre cuántos datos acumular y cuánto tiempo esperar entre envíos son fundamentales para su rendimiento general.
Los beneficios de regañar
Nagling puede utilizar eficientemente el ancho de banda de una conexión de red a expensas de agregar retrasos o latencia. Un ejemplo descrito en RFC 896 ilustra los posibles beneficios del ancho de banda y el motivo de su creación:
- Si una aplicación TCP que intercepta las pulsaciones de teclado quiere comunicar cada carácter que se escribe a un receptor, puede generar una serie de mensajes, cada uno con 1 byte de datos.
- Antes de que estos mensajes puedan enviarse a través de la red, cada uno de ellos debe empaquetarse con la información del encabezado TCP según lo requiera TCP/IP. Cada encabezado varía en tamaño entre 20 y 60 bytes.
- Sin molestias, esta aplicación de ejemplo generaría mensajes de red que consisten en un 95 por ciento o más de información de encabezado (al menos 20 de 21 bytes) y un 5 por ciento o menos de datos reales del teclado del remitente. Usando el algoritmo de Nagle, los mismos datos podrían entregarse usando menos mensajes, lo que resulta en un gran ahorro de ancho de banda.
Las aplicaciones controlan su uso del algoritmo de Nagle con la opción de programación de socket TCP_NODELA. Los sistemas Windows, Linux y Java normalmente habilitan Nagle de forma predeterminada. Por lo tanto, las aplicaciones escritas para esos entornos deben especificar TCP_NODELAY para desactivar el algoritmo.
Limitaciones
Es posible que las aplicaciones que requieren una respuesta de red rápida, como videollamadas y juegos en línea, no funcionen bien cuando Nagle está habilitado. Los retrasos causados mientras el algoritmo toma más tiempo para ensamblar fragmentos de datos más pequeños pueden desencadenar un retraso notable visualmente en una pantalla o en una transmisión de audio digital. Tales aplicaciones normalmente deshabilitan Nagle.
Este algoritmo se desarrolló originalmente en un momento en que las redes informáticas admitían 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 la red de larga distancia, lenta y muy cargada de Ford tenían sentido. Cada vez hay menos situaciones en las que las aplicaciones de red pueden beneficiarse de su algoritmo.
El algoritmo de Nagle solo se puede usar con TCP. Otros protocolos, como UDP, no lo admiten.