Acuse de recibo retrasado de TCP


El reconocimiento retardado de TCP es una técnica utilizada por algunas implementaciones del Protocolo de control de transmisión en un esfuerzo por mejorar el rendimiento de la red . En esencia, varias respuestas ACK pueden combinarse en una sola respuesta, lo que reduce la sobrecarga del protocolo. Sin embargo, en algunas circunstancias, la técnica puede reducir el rendimiento de la aplicación.

Como se describe en RFC 1122, un host puede retrasar el envío de una respuesta ACK hasta 500 ms. Además, con un flujo de segmentos entrantes de tamaño completo, las respuestas ACK deben enviarse para cada segundo segmento.

Los ACK retrasados ​​pueden dar a la aplicación la oportunidad de actualizar la ventana de recepción de TCP y posiblemente también enviar una respuesta inmediata junto con el ACK. Para ciertos protocolos como Telnet , los ACK retrasados ​​pueden reducir la cantidad de respuestas enviadas por el servidor en un factor de 3, al combinar el ACK, la actualización de la ventana y los datos de respuesta en un segmento. [1]

El tiempo de espera adicional introducido por el ACK demorado puede causar más demoras al interactuar con ciertas aplicaciones y configuraciones. Si el remitente utiliza el algoritmo de Nagle, el remitente pondrá en cola los datos hasta que se reciba un ACK. Si el remitente no envía suficientes datos para llenar el tamaño máximo del segmento (por ejemplo, si realiza dos escrituras pequeñas seguidas de una lectura de bloqueo), la transferencia se detendrá hasta el tiempo de espera de retraso de ACK. Linux 2.4.4+ admite una TCP_QUICKACKopción de socket que deshabilita el ACK retrasado. [2]

Por ejemplo, considere una situación en la que Bob envía datos a Carol. La capa de conexión de Bob tiene menos de un paquete completo de datos restantes para enviar. Según el algoritmo de Nagle, no se enviará hasta que reciba un ACK por los datos que ya se han enviado. Al mismo tiempo, la capa de aplicación de Carol no enviará una respuesta hasta que obtenga todos los datos. Si Carol está utilizando ACK retrasados, su capa de socket no enviará un ACK hasta que se alcance el tiempo de espera.

Si la aplicación transmite datos en fragmentos más pequeños y espera respuestas de confirmación periódicas, puede ocurrir esta interacción negativa. Para evitar este retraso, la capa de aplicación necesita enviar datos continuamente sin esperar respuestas de reconocimiento. Alternativamente, el algoritmo de Nagle puede ser deshabilitado por la aplicación en el lado de envío.