Pregunta ¿Cómo determina la utilidad de telnet de Inetutils si una conexión aún está activa?


Empecé a usar sockets en programación con Java (tengo experiencia con Python) y mientras probaba un servidor que había escrito con el telnet comando, me di cuenta de que la utilidad responde de inmediato al servidor que se está matando. Cuando escribo un cliente con Java (o Python), se requieren al menos unos segundos para que el programa indique que se ha desconectado. Hasta donde yo sé, no hay forma de comprobar si un socket está conectado, salvo un mensaje de latido, que mi servidor no fue escrito para aceptar o recibir.

Mi pregunta es, ¿cómo saben las personas de GNU cuando mi socket se desconectó? ¿Hay alguna parte de TCP que no pude encontrar en mi búsqueda que permita esto? Gracias.


2


origen




Respuestas:


Hay dos formas de cerrar una sesión TCP, la forma correcta para una sesión establecida es un corte tripartito, que implica:

 Closing party -> Other end: FIN
 Other end -> Closing party: FIN ACK
 Closing party -> Other end: ACK

Entonces, esta secuencia le permite a ambos extremos saber que el otro extremo entiende que la sesión debe cerrarse.

El otro método es un RST o paquete de restablecimiento, que normalmente se envía en caso de un problema. Se envía inmediatamente cuando la parte receptora no está escuchando en el puerto TCP que se está conectando, y también se puede enviar en caso de error en la aplicación.

En su caso, la secuencia FIN ACK sería la forma en que la conexión debería finalizar, y esto debería ser instigado por la biblioteca que esté utilizando cuando cierre el socket.

Si yo fuera tú, obtendría un "wireshark" o una instalación similar y vería exactamente lo que sucede durante un derribo.


0



Por cierto, si la sesión no se cierra correctamente y el otro extremo "desaparece", se eliminará de la tabla de sesión en el futuro, esto varía desde el sistema operativo al sistema operativo. - Paul
No veo cómo eso explica la diferencia en el tiempo que tarda la utilidad telnet en notarlo frente a mi utilidad. ¿Hay una diferencia en las bibliotecas de socket que están usando? - Michael Smith
Es imposible dar cuenta de las diferencias sin saber más acerca de lo que hace su utilidad en respuesta al tráfico que ve, por lo que sugerí wireshark. Si ve que aparece la secuencia fin-ack, y aun así su utilidad todavía tiene el socket definido como abierto, es un error en la biblioteca subyacente o en la propia utilidad. - Paul