Hace poco tuve una discusión con alguien que se había topado con la configuración de su firewall corporativo. El cortafuegos limpiará su tabla de estado de cualquier conexión que haya estado inactiva durante más de 10 minutos. Desafortunadamente su comportamiento cuando recibe un segmento para una conexión que no está en su tabla de estado es dejar caer silenciosamente el segmento. Esto significa que puede tomar más de 8 minutos para que una aplicación STCP se dé cuenta de que ya no puede comunicarse con su punto final y reestablecer la conexión. Esto molestaba a sus usuarios.
En este punto sugerí que la aplicación se modificara para incluir un mensaje configurable de capa de aplicación "keep-alive". Desafortunadamente, cambiar la aplicación no es una opción. La aplicación tampoco establece la opción del socket SO_KEEPALIVE, por lo que incluso cambiar el temporizador del sistema keep-alive de las 2 horas por defecto a 9 minutos no resolverá el problema.
La solución es un segmento de mantenimiento de la capa TCP de terceros. Se trata de un segmento de capa TCP keep-alive que parece provenir de la aplicación (utilizando la dirección IP del módulo como dirección de origen y el puerto TCP de la aplicación como puerto de origen) y que se envía a la dirección IP y al puerto del host remoto. El cortafuegos anota esto como actividad y mantiene la conexión en su tabla de estado.
La explicación y los ejemplos de mi herramienta 3rd_party_keep_alive son demasiado largos para esta entrada del blog, así que puedes encontrar los detalles aquí.