¿Qué máquina está cerrando realmente el socket TCP y por qué?

¿Qué máquina está cerrando realmente el socket TCP y por qué?

Estoy trabajando en una aplicación C#, manejando sockets TCP.

Tengo una aplicación de servidor (Hércules) en la máquina remota, intentando mantener un socket abierto.
Tengo mi aplicación en mi máquina, suscribiéndome a ese socket abierto.

Estoy usandoVisor TCP de Microsoftpara seguir lo que está pasando.

Después de algunos minutos, veo que el socket pasa de un estado establecido a un estado de espera de tiempo y luego la conexión del socket se interrumpe.

He estado buscando en el visor de eventos de ambas computadoras el ID del evento 4227 en todas las ubicaciones generales (Registros/Aplicación de Windows, /Seguridad, /Configuración, /Sistema y /Eventos reenviados) pero no encontré nada.

¿Qué debo hacer para saber qué máquina está cerrando realmente el socket TCP y por qué?

Respuesta1

¿Qué debo hacer para saber qué máquina está cerrando realmente el socket TCP?

Para saber de qué lado se cierra la conexión, es necesario realizar una captura de paquetes. Verhttps://wiki.wireshark.org/TCP-4-times-close.mdcómo se ve una conexión cerrada en Wireshark. La parte que envía el FIN inicial es la que cerró la conexión.

... ¿y por qué?

Esto es imposible decirlo con sólo mirar el tráfico. Una conexión puede cerrarse porque el protocolo de la capa de aplicación espera o permite que se cierre. Es posible que se cierre porque el cliente o el servidor fallan. Es posible que una parte lo cierre debido a una violación del protocolo, es decir, si la otra parte se comporta de manera diferente a lo esperado... Entonces, para descubrir el motivo, necesita comprender el protocolo de la aplicación, mire los archivos de registro y verifique si Los procesos se están ejecutando, etc.

información relacionada