¿Qué causa que se envíe una bandera de reinicio TCP / IP (RST)?

Estoy tratando de descubrir por qué la conexión TCP / IP de mi aplicación sigue hipando cada 10 minutos (exactamente, en 1-2 segundos). Ejecuté Wireshark y descubrí que después de 10 minutos de inactividad, el otro extremo envía un paquete con el indicador de restablecimiento (RST) establecido. Una búsqueda en Google me dice “la bandera RESET indica que el receptor se ha confundido y quiere abortar la conexión”, pero eso es un poco corto de detalles que necesito. ¿Qué podría estar causando esto? ¿Y es posible que algún enrutador en el camino sea responsable de esto o que siempre provenga del otro extremo?

Editar: Hay un enrutador (específicamente un Linksys WRT-54G) que se encuentra entre mi computadora y el otro punto final. ¿Hay algo que debería buscar en la configuración del enrutador?

Un ‘enrutador’ podría estar haciendo cualquier cosa, en particular NAT, que podría implicar cualquier cantidad de errores plagados de tráfico …

Una razón por la que un dispositivo enviará un RST es en respuesta a recibir un paquete para un socket cerrado.

Es difícil dar una respuesta firme pero general, ya que todas las perversiones posibles se han visitado en TCP desde su inicio, y todo tipo de personas podrían estar insertando RST en un bash de bloquear el tráfico. (Algunos “cortafuegos nacionales” funcionan así, por ejemplo).

Ejecuta un rastreador de paquetes (por ejemplo, Wireshark) también en el par para ver si es el par quien envía el RST o alguien en el medio.

Acabo de pasar bastante tiempo solucionando este problema. Ninguna de las soluciones propuestas funcionó. Resultó que nuestro administrador de sistemas por error asignó la misma IP estática a dos servidores no relacionados pertenecientes a diferentes grupos, pero que se encontraban en la misma red. Los resultados finales fueron conexiones vnc de forma intermitente, el navegador tuvo que actualizarse varias veces para recuperar la página web y otras cosas extrañas.

Algunos firewalls hacen eso si una conexión está inactiva por x cantidad de minutos. Algunos ISP configuran sus enrutadores para que lo hagan por varias razones también.

En este día y edad, deberá manejar con elegancia (restablecer según sea necesario) esa condición.

RST se envía por el lado que realiza el cierre activo porque es el lado que envía el último ACK. Entonces, si recibe FIN desde el lado que hace el cierre pasivo en un estado incorrecto, envía un paquete RST que indica el otro lado que ha ocurrido un error.

Si hay un enrutador que hace NAT, especialmente un enrutador de bajo consumo con pocos recursos, envejecerá primero las sesiones TCP más antiguas. Para hacerlo, establece el indicador RST en el paquete que efectivamente le dice a la estación receptora (muy desagradablemente) que cierre la conexión. esto se hace para ahorrar recursos.