que - Relación entre la duración de HTTP Keep Alive y la duración del tiempo de espera de TCP
keep-alive vue (3)
Estoy tratando de entender la relación entre TCP / IP y los valores de tiempo de espera de HTTP. ¿Son estos dos valores de tiempo de espera diferentes o iguales? La mayoría de los servidores web permiten a los usuarios establecer el valor del tiempo de espera de Mantener activo en HTTP a través de alguna configuración. ¿Cómo es este valor utilizado por los servidores web? ¿Se acaba de establecer este valor en el socket TCP / IP subyacente, es decir, es el tiempo de espera de Mantenerse vivo HTTP y el Tiempo de espera Vivo de TCP / IP igual? o son tratados de manera diferente?
Mi entendimiento es (quizás incorrecto): el servidor web usa el tiempo de espera predeterminado en el socket TCP subyacente (es decir, indefinido) independientemente del tiempo de espera de Keep Alive de HTTP configurado y crea un subproceso de trabajo que cuenta el intervalo de tiempo de espera de HTTP especificado. Cuando el hilo Worker llega a cero, cierra la conexión.
EDITAR: Mi pregunta es sobre la relación o la diferencia entre las dos duraciones de tiempo de espera, es decir, ¿qué ocurrirá cuando la duración del tiempo de espera de mantenimiento de HTTP y el tiempo de espera en el Socket (SO_TIMEOUT) que usa el servidor web sea diferente? ¿Debería preocuparme si estos dos son iguales o no?
Directiva KeepAliveTimeout
Descripción: Cantidad de tiempo que el servidor esperará las solicitudes subsiguientes en una conexión persistente Sintaxis: KeepAliveTimeout segundos Predeterminado: KeepAliveTimeout 15 Contexto: configuración del servidor, host virtual Estado: núcleo Módulo: núcleo La cantidad de segundos que Apache esperará una solicitud posterior antes de cerrarse la conexión. Una vez que se ha recibido una solicitud, se aplica el valor de tiempo de espera especificado por la directiva de Tiempo de espera.
Establecer KeepAliveTimeout en un valor alto puede causar problemas de rendimiento en servidores muy cargados. Cuanto mayor sea el tiempo de espera, más procesos del servidor se mantendrán ocupados esperando en las conexiones con los clientes inactivos.
En un contexto de host virtual basado en nombre, se utilizará el valor del primer host virtual definido (el host predeterminado) en un conjunto de NameVirtualHost. Los otros valores serán ignorados.
Directiva TimeOut
Descripción: Cantidad de tiempo que el servidor esperará ciertos eventos antes de fallar una solicitud Sintaxis: Tiempo de espera segundos Valor predeterminado: TimeOut 300 Contexto: configuración del servidor, host virtual Estado: núcleo Módulo: núcleo La directiva TimeOut actualmente define la cantidad de tiempo que Apache esperará tres cosas:
La cantidad total de tiempo que lleva recibir una solicitud GET. La cantidad de tiempo entre la recepción de paquetes TCP en una solicitud POST o PUT. La cantidad de tiempo entre ACK en las transmisiones de paquetes TCP en las respuestas. Planeamos hacer que estos sean configurables por separado en algún punto del camino. El temporizador solía ir por defecto a 1200 antes de 1.2, pero se ha reducido a 300, que aún es mucho más de lo necesario en la mayoría de las situaciones. No se establece más bajo de forma predeterminada porque aún puede haber lugares extraños en el código donde el temporizador no se reinicia cuando se envía un paquete.
Son dos mecanismos separados; el nombre es una coincidencia
HTTP keep-alive (también conocido como conexiones persistentes) mantiene el socket TCP abierto para que se pueda realizar otra solicitud sin configurar una nueva conexión.
TCP keep-alive es una comprobación periódica para asegurarse de que la conexión aún está activa y en funcionamiento. A menudo se usa para asegurar que una caja NAT (por ejemplo, un enrutador DSL) no "olvide" la asignación entre una ip / puerto interna y externa.
Un socket TCP abierto no requiere ninguna comunicación entre las dos partes (llamémoslas Alice y Bob) a menos que se envíen datos reales. Si Alice ha recibido reconocimientos por todos los datos que ha enviado a Bob, no hay forma de que pueda distinguir entre los siguientes casos:
- Bob ha sido desenchufado, o es inaccesible para Alice.
- Bob se ha reiniciado o se ha olvidado del socket TCP abierto que había establecido con Alice.
- Bob está conectado con Alice y sabe que tiene una conexión abierta, pero no tiene nada que decir.
Si Alice no ha tenido noticias de Bob por un tiempo y quiere distinguir entre las condiciones anteriores, puede reenviar su último byte de datos, envuelto en un marco TCP adecuado para que sea reconocible como una retransmisión, esencialmente fingiendo que no ha escuchado el reconocimiento . Si Bob está desenchufado, no escuchará nada, incluso si envía repetidamente el paquete durante un período de muchos segundos. Si Bob ha reiniciado u olvidado la conexión, responderá inmediatamente diciendo que la conexión no es válida. Si Bob está contento con la conexión y simplemente no tiene nada que decir, responderá con un reconocimiento de la retransmisión.
El tiempo de espera indica cuánto tiempo está dispuesta a esperar Alice cuando envía un paquete que exige una respuesta. El tiempo Keepalive indica cuánto tiempo debe dejar transcurrir antes de que retransmita su último bit de datos y exija un reconocimiento. Si Bob desaparece, la suma de los valores de Keepalive y Timeout indicará el peor de los casos entre que Alice reciba su último bit de datos y su decisión de que Bob está muerto.