ACK retardado
# ACK retardado

ACK retardado es una técnica usada en varias implementaciones de TCP (Transmission Control Protocol) con el objetivo de mejorar el rendimiento de redes. En esencia, se pueden combinar varias confirmaciones de recepción (ACKs) en una sola respuesta, reduciendo la sobrecarga del protocolo. Sin embargo en ciertas circunstancias, esta técnica puede reducir el rendimiento de la aplicación.

## Método y ventajas

Esta técnica está descrita en el RFC 1122, un host puede retrasar el envío de una respuesta ACK hasta 500ms. Además, en un flujo continuo de entrada de segmentos, las respuestas ACK se deben enviar siempre en un segundo segmento.

La técnica de confirmaciones retardadas dan la posibilidad a las aplicaciones de actualizar la ventana de recepción TCP y, cuando sea posible, enviar datos o respuestas inmediatas, junto con las respuestas de confirmación. Para determinados protocolos, como Telnet, el envío de confirmaciones retardadas puede reducir el número de respuestas enviadas por el servidor en un factor de 3, combinando las respuestas ACK, la actualización de ventana TCP y los datos de respuesta en un solo segmento.

## Problemas

El tiempo de espera adicional introducido por una confirmación retardada puede causar mayores retrasos cuando se interactúa con algunas aplicaciones y configuraciones. Si el algoritmo de Nagle está siendo usado para el envío por partes, los datos se quedarán en cola de envío hasta recibir una nueva confirmación. Si el transmisor no envía datos del tamaño máximo permitido por segmento (por ejemplo, si el rendimiento es dos veces menor escribiendo, se producirá un bloqueo en la lectura) entonces la transferencia puede pausarse hasta que venza el temporizador de ACK retardado.

Por ejemplo, consideramos la situación en la que Homer está enviado datos a Marge. La capa socket de Homer tiene en cola datos para enviar con tamaño menor que un paquete completo. Por el algoritmo de Nagle, este no será enviado hasta que se reciba una confirmación para los datos que ya han sido enviados. Al mismo tiempo la capa de aplicación de Marge no enviará respuesta hasta que no reciba todos los datos esperados. Si Marge está utilizado ACKs retardados, su capa socket no enviará un ACK hasta que venza el temporizador de ACK retardado.

Si la aplicación está transmitiendo datos en pequeños trozos y espera confirmaciones de recepción periódicas, el uso de confirmaciones retardadas pueden ser negativas. Para prevenir este retardo, la capa de aplicación necesita enviar constantemente datos sin esperar respuestas de confirmación. Alternativamente, el algoritmo de Nagle puede ser desactivado, de forma unilateral para el envío de datos, por la aplicación.

