¿Necesito latir para mantener abierta una conexión TCP?

Tengo dos componentes que se comunican a través de TCP / IP. El Componente A actúa como servidor / oyente y el Componente B es el cliente. Los dos deben comunicarse lo más rápido posible. Solo puede haber una conexión en cualquier momento (aunque eso queda aparte de esta pregunta). Un desarrollador sénior de mi empresa ha dicho que necesito utilizar los latidos del corazón de la aplicación entre los dos componentes para garantizar que la conexión permanezca abierta.

Pensé que la conexión se mantiene abierta con TCP / IP, pero he leído una serie de blogs / sitios que dicen que es una práctica bastante común latir entre estas aplicaciones.

Sé que parte del componente de razón Un componente de heartbeats B es para que pueda informar al soporte si hay problemas de comunicación con el componente B (o el enlace está inactivo o el componente B no se está ejecutando). ¿Se necesitan latidos cardíacos por cualquier otra razón? ¿Tal como para asegurar que frecuentemente haya algo “en la tubería” para mantenerlo abierto?

El Componente A actualiza el componente B cada 20 segundos y cierra la conexión si no se recibe nada del componente B en 120 segundos. A continuación, reanuda la escucha de conexiones bajo la suposición de que el componente B intentará periódicamente una reconexión si el enlace está roto. Esto funciona con éxito.

Para reiterar mi pregunta: ¿Son necesarios los latidos del corazón para mantener viva una conexión TCP / IP?

La conexión debe permanecer abierta independientemente, pero sí, a menudo es común ver que los protocolos implementan un latido para ayudar a detectar conexiones muertas, IRC con el comando PING, por ejemplo.

Como muchos otros han notado, la conexión TCP permanecerá activa si se deja en sus propios dispositivos. Sin embargo, si tiene un dispositivo en el medio de la conexión que rastrea su estado (como un firewall), es posible que necesite keepalives para evitar que la entrada de la tabla de estado expire.

Si sus componentes:

  • están en una red cableada convencional
  • no hay firewalls o enrutadores NAT entre ellos
  • ninguno de ellos choca

entonces no necesitas tener un latido del corazón.

Si cualquiera de estas suposiciones es falsa (¡te estoy mirando a ti, GPRS!), Un latido se vuelve más rápido.

No necesita enviar latidos del corazón usted mismo. La conexión TCP permanecerá abierta independientemente del uso.

Tenga en cuenta que TCP implementa un mecanismo keepalive opcional, que puede usarse para identificar una conexión cerrada de manera oportuna, en lugar de requerir el envío de datos en una fecha posterior y solo luego descubrir que la conexión está cerrada.

Si usa Windows, tenga cuidado con el TCP Keep-alive. De manera predeterminada, está deshabilitado a menos que lo active globalmente con el registro de Windows o mediante setsockopt.

El intervalo predeterminado de mantener vivo es de 2 horas.

http://msdn.microsoft.com/en-us/library/ms819735.aspx

Es posible que necesite implementar su propio latido del corazón y deshabilitar TCP keep-alive en Windows si no es deseable mantener las 2 horas con vida activa.

¿Son necesarios los latidos del corazón para mantener viva una conexión TCP / IP?

Son útiles para detectar cuando una conexión ha muerto.

El latido del corazón es una buena manera de decirle al servidor que estás vivo, lo que significa que, si el servidor utiliza sistemas de prevención de ataques DoS, (el servidor) puede eliminar todos los recursos asignados para esa conexión en particular, después de que detectó en actividad por un período específico.
No tienen el mandato de implementar ningún mecanismo de latido.

Pero es bueno si está diseñando una aplicación, donde el criterio principal es la capacidad de respuesta. No le gustará perder tiempo en configuraciones de conexión, búsquedas de DNS y descubrimientos de rutas. Simplemente mantiene una conexión activa todo el tiempo, sigue enviando latidos, y la aplicación sabe que la conexión está activa y no se requiere configuración de conexión. Simplemente envíe y reciba.

TCP mantendrá viva la conexión. Los latidos de la aplicación son para las consideraciones de nivel de la aplicación, como la migración tras error, el equilibrio de carga o alertar a los administradores sobre posibles problemas.

Básicamente, una conexión TCP crea estados de enlace almacenados en conmutadores a lo largo de la ruta. Para detectar conexiones rotas (como cuando una contraparte falla (sin enviar una desconexión adecuada)), estos estados deben ser desalojados después de un período de inactividad. Y cuando esto sucede, su conexión TCP se ha cerrado. Aunque no puedo decir exactamente cuánto duran estos tiempos de espera, parecen depender de los fabricantes de dispositivos y / o de los proveedores de Internet. Recuerdo que mis sesiones inactivas de terminal SSH fueron rápidamente (menos de 15 minutos de inactividad) cerradas por mi antiguo proveedor de Internet 1 & 1 mientras permanecían abiertas durante varias horas cuando usaban una conexión proporcionada por Kabel-BW …

Finalmente, concluyo con mis oradores anteriores: un latido del corazón es una buena forma de saber si una conexión todavía está viva y coleando …

Lo que usted llama un latido del corazón es útil cuando se trata de establecer tiempos de espera. Su zócalo puede aparecer abierto, pero la persona en el otro extremo puede estar sufriendo un BSOD. Una de las maneras más fáciles de detectar clientes / servidores difuntos es establecer un tiempo de espera y asegurarse de que se reciba un mensaje cada cierto tiempo.

Algunas personas los llaman NOOPs (No Ops).

Pero no, no son necesarios para mantener la conexión viva, solo son útiles para saber cuál es el estado.

Diría que si no tienes un latido, no importa si tu conexión TCP / IP está abierta o no.

Heartbeat no es una necesidad para los protocolos TCP. Su implementación está allí para detectar si el otro lado ha terminado la conexión de una forma no estándar (es decir, no ha pasado por el proceso de destrucción).

La conexión permanecerá abierta; no es necesario implementar un latido, y la mayoría de las aplicaciones que usan sockets no lo hacen.

Una gran cantidad de protocolos implementan un latido del corazón o un estado de salud como Lloyd dijo. Para que sepas que la conexión aún está abierta y si te has perdido algo