Tengo dos componentes que se comunican a través de TCP / IP. El componente A actúa como servidor / escucha 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 es aparte de esta pregunta). Un desarrollador senior de mi empresa ha dicho que necesito usar latidos de nivel de aplicación entre los dos componentes para asegurar que la conexión permanezca abierta.
Pensé que la conexión permanece abierta con TCP / IP, pero he leído varios blogs / sitios que dicen que es una práctica bastante estándar latir entre estas aplicaciones.
Sé que parte de la razón por la que el componente A late al componente B es para que pueda informar al soporte si hay problemas de comunicación con el componente B (el enlace está inactivo o el componente B no se está ejecutando). ¿Se necesitan los latidos del corazón por alguna otra razón? ¿Como para asegurarse de que con frecuencia hay algo "en la tubería" para mantenerla abierta?
El componente A actualmente late el componente B cada 20 segundos y cierra la conexión si no se recibe nada del componente B en 120 segundos. Luego reanuda la escucha de conexiones bajo el supuesto de que el componente B intentará periódicamente una reconexión si el enlace está roto. Esto funciona satisfactoriamente.
Para reiterar mi pregunta: ¿Son necesarios los latidos del corazón para mantener activa una conexión TCP / IP?
Respuestas:
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.
fuente
Como muchos otros han señalado, la conexión TCP se mantendrá activa si se deja en sus propios dispositivos. Sin embargo, si tiene un dispositivo en 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.
fuente
Si sus componentes:
entonces no necesita tener latidos.
Si alguna de estas suposiciones es falsa (¡te estoy mirando, GPRS!), Un latido se vuelve necesario con bastante rapidez.
fuente
No es necesario que usted mismo envíe los latidos del corazón. 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 solicitarle que envíe datos en una fecha posterior y solo entonces descubra que la conexión está cerrada.
fuente
Si usa Windows, tenga cuidado con TCP Keep-Alive. De forma predeterminada, está deshabilitado a menos que lo encienda globalmente con el registro de Windows o mediante setsockopt.
El intervalo de tiempo de vida predeterminado es de 2 horas.
http://msdn.microsoft.com/en-us/library/ms819735.aspx
Es posible que deba implementar su propio latido del corazón y deshabilitar el mantenimiento de vida de TCP en Windows si no desea mantener vivo de 2 horas.
fuente
Son útiles para detectar cuándo se ha interrumpido una conexión.
fuente
TCP mantendrá viva la conexión. Los latidos de la aplicación se deben a consideraciones de nivel de aplicación, como la conmutación por error, el equilibrio de carga o la alerta a los administradores sobre problemas potenciales.
fuente
El latido del corazón es una buena manera de decirle al servidor que está vivo, por lo que me refiero a que, si el servidor está utilizando 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 haya detectado en actividad durante un período específico.
No tienen mandato para implementar ningún mecanismo de latidos.
Pero es bueno si está diseñando una aplicación, donde el criterio principal es la capacidad de respuesta. No le gustará perder el tiempo en configuraciones de conexión, búsquedas de DNS y descubrimientos de rutas. Simplemente mantenga una conexión todo el tiempo, siga enviando latidos y la aplicación sabrá que la conexión está activa y que no es necesario configurar la conexión. Simplemente envíe y reciba.
fuente
TCP / IP como protocolo se especifica como no cerrado hasta que envíe un paquete de cierre. He tenido enchufes abiertos incluso después de tener conexiones inalámbricas o de Internet irregulares.
Sin embargo, todo esto depende mucho de las implementaciones. Lo más probable es que haya un "tiempo de espera", que significa la cantidad máxima de tiempo para esperar una respuesta antes de considerar que la conexión está "muerta". A veces, esto se basa en la propia aplicación, a veces en enrutadores NAT.
Por lo tanto, le recomiendo encarecidamente que mantenga un "latido" para detectar malas conexiones y mantenerlas abiertas.
fuente
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 productores del dispositivo y / o de los proveedores de Internet. Recuerdo que mis sesiones de terminal SSH inactivas fueron cerradas rápidamente (menos de 15 minutos de tiempo inactivo) 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 manera de saber si una conexión sigue viva y coleando ...
fuente
Lo que llama un latido es útil cuando se intenta establecer tiempos de espera. Su enchufe puede parecer abierto, pero la persona en el otro extremo puede estar sufriendo un BSOD. Una de las formas más fáciles de detectar clientes / servidores inactivos es establecer un tiempo de espera y asegurarse de que se reciba un mensaje de vez en cuando.
Algunas personas los llaman NOOP (No Ops).
Pero no, no son necesarios para mantener viva la conexión, solo son útiles para saber cuál es el estado.
fuente
Yo diría que si no tiene latido, no importa si su conexión TCP / IP está abierta o no.
fuente
Heartbeat no es una necesidad para los protocolos TCP. Su implementación está ahí para detectar si el otro lado ha terminado la conexión de una manera no estándar (es decir, no ha pasado por el proceso de desmontaje).
fuente
La conexión permanecerá abierta; no es necesario implementar un latido y la mayoría de las aplicaciones que utilizan sockets no lo hacen.
fuente
Muchos protocolos implementan un latido del corazón o un tipo de estado de salud como dijo Lloyd. Solo para que sepa que la conexión aún está abierta y si es posible que se haya perdido algo
fuente