Un keepalive ( KA ) es un mensaje que envía un dispositivo a otro para comprobar que el enlace entre ambos está funcionando o para evitar que el enlace se interrumpa.
Una vez que se ha establecido una conexión TCP, se define que esa conexión es válida hasta que un lado la cierra. Una vez que la conexión ha entrado en el estado conectado, permanecerá conectada indefinidamente. Pero, en realidad, la conexión no durará indefinidamente. Muchos sistemas de firewall o NAT cerrarán una conexión si no ha habido actividad en un período de tiempo. La señal Keep Alive se puede utilizar para engañar a los hosts intermedios para que no cierren la conexión debido a la inactividad. También es posible que un host ya no esté escuchando (por ejemplo, una aplicación o un fallo del sistema). En este caso, la conexión se cierra, pero nunca FIN
se envió ningún mensaje. En este caso, se puede utilizar un paquete KeepAlive para interrogar a una conexión y comprobar si sigue intacta.
Una señal de keepalive se envía a menudo a intervalos predefinidos y desempeña un papel importante en Internet . Después de enviar una señal, si no se recibe respuesta, se supone que el enlace está inactivo y los datos futuros se enrutarán por otra ruta hasta que el enlace vuelva a funcionar. Una señal de keepalive también se puede utilizar para indicar a la infraestructura de Internet que se debe preservar la conexión. Sin una señal de keepalive, los enrutadores intermedios habilitados para NAT pueden interrumpir la conexión después de un tiempo de espera.
Dado que el único propósito es encontrar enlaces que no funcionan o indicar conexiones que deben conservarse, los mensajes keepalive tienden a ser breves y no ocupan mucho ancho de banda . Sin embargo, su formato preciso y las condiciones de uso dependen del protocolo de comunicación.
Los keepalives del Protocolo de Control de Transmisión (TCP) son una característica opcional y, si se incluyen, deben estar desactivados de manera predeterminada. [1] El paquete keepalive no contiene datos. En una red Ethernet , esto da como resultado tramas de tamaño mínimo (64 bytes [2] ). Hay tres parámetros [3] relacionados con el keepalive:
Cuando dos hosts están conectados a través de una red mediante TCP/IP, se pueden usar paquetes Keepalive de TCP para determinar si la conexión aún es válida y finalizarla si es necesario.
La mayoría de los hosts que admiten TCP también admiten TCP Keepalive. Cada host (o par) envía periódicamente un paquete TCP a su par que solicita una respuesta. Si se envía una cierta cantidad de keepalives y no se recibe ninguna respuesta (ACK), el host que envía finalizará la conexión desde su extremo. Si se finalizó una conexión debido a un tiempo de espera de TCP Keepalive y el otro host finalmente envía un paquete para la conexión anterior, el host que finalizó la conexión enviará un paquete con el indicador RST configurado para indicar al otro host que la conexión anterior ya no está activa. Esto obligará al otro host a finalizar su extremo de la conexión para que se pueda establecer una nueva conexión.
Por lo general, los mensajes Keepalive TCP se envían cada 45 o 60 segundos en una conexión TCP inactiva, y la conexión se interrumpe después de que se pierden 3 ACK secuenciales. Esto varía según el host, por ejemplo, de manera predeterminada, las PC con Windows envían el primer paquete Keepalive TCP después de 7200000 ms (2 horas), luego envían 5 mensajes Keepalive a intervalos de 1000 ms, interrumpiendo la conexión si no hay respuesta a ninguno de los paquetes Keepalive. Los hosts Linux envían el primer paquete Keepalive TCP después de 2 horas (predeterminado desde Linux 2.2), luego envían 9 sondas Keepalive (predeterminado desde Linux 2.2) a intervalos de 75 segundos (predeterminado desde Linux 2.4), interrumpiendo la conexión si no hay respuesta a ninguno de los paquetes Keepalive. [4]
Dado que la función keepalive de TCP es opcional, varios protocolos (por ejemplo, SMB [5] y TLS [6] ) implementan su propia función keepalive sobre TCP. También es común que los protocolos que mantienen una sesión a través de un protocolo sin conexión, por ejemplo, OpenVPN sobre UDP, [7] implementen su propia función keepalive.
El Protocolo de Transferencia de Hipertexto utiliza la palabra clave "Keep-Alive" en el encabezado "Connection" para indicar que la conexión debe mantenerse abierta para futuros mensajes (este es el valor predeterminado en HTTP 1.1, pero en HTTP 1.0 el valor predeterminado era utilizar una nueva conexión para cada par solicitud/respuesta). [8] A pesar del nombre similar, esta función no está relacionada en absoluto.