¿Cómo matar las conexiones de Windows Zombie TCP?


11

Estoy ejecutando beyondtv link en xp, conectando a beyondtv un host de vista. El programa Link se cuelga después de unos 20 minutos, y no tengo solución para esto. Cuando esto sucede, usando tcpview, veo que el host tiene aproximadamente 200 conexiones zombie tcp sobrantes de la conexión Link. No puedo borrarlos, son del mismo proceso inexistente. Las conexiones se quedan hasta que reinicie el host. Reiniciar es la única forma en que he encontrado para volver a conectar beyondtv Link. Creo que hay un error en beyondtv que está causando esto, pero no puedo obtener ninguna respuesta en sus foros. Pero en cualquier caso, me gustaría saber si hay una manera de eliminar todas esas conexiones.

Editar: en realidad, se acumulan unas 3000 conexiones WAIT_CLOSE después de aproximadamente 40 minutos, y aproximadamente entonces el cliente muere. Si cierro la aplicación del servidor, todos estos sockets ahora se muestran como propiedad de un proceso -no existente- en tcpview. Comprensible. Pero, ¿no hay una manera de cerrarlos sin reiniciar?


¿No hay una manera de comenzar una recompensa por las preguntas aquí? No veo un botón para eso.
P aul

puede ofrecer una recompensa después de que la pregunta haya estado abierta durante 2 días: superuser.com/faq
quack quixote

3
Fuego. Fuego o una escopeta.
Phoshi el

1
@phoshi: o atacarlo desde la órbita. Es la única manera de estar seguro.
quack quijote

1
Yo prefiero hacer mi manera de matar al fatalidad: superuser.com/questions/54937/3d-windows-managers/55130#55130
DaveParillo

Respuestas:


10

Puede usar los Currports de Nirsoft para monitorear y eliminar conexiones.

Puede automatizar la eliminación de un patrón de conexión con AutoHotKey.


7

CLOSE_WAIT significa que la conexión se cerró en el otro extremo.

Evidentemente, beyondtv no detecta esta condición y continúa enviando datos a la aplicación en el otro extremo. El otro extremo no puede enviar nada a través de esta conexión, ya que ha cerrado el final de la conexión.

La solución es establecer la entrada TcpTimedWaitDelay en

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

Esta entrada determina el tiempo que debe transcurrir antes de que TCP pueda liberar una conexión cerrada y reutilizar sus recursos. Este intervalo entre el cierre y la liberación se conoce como estado TIME_WAIT o estado 2MSL. Durante este tiempo, la conexión se puede volver a abrir a un costo mucho menor para el cliente y el servidor que el establecimiento de una nueva conexión.

De manera predeterminada en mi máquina, esto contiene el valor de -1, lo que considero que las conexiones cerradas nunca se liberan, que es exactamente el comportamiento que está observando.

Le sugiero que establezca el valor de esta entrada en el rango permitido de 30 a 300 segundos. Supongo que 300 segundos = 5 minutos son completamente suficientes para su caso, donde se requieren 40 minutos para congelar su computadora.


La búsqueda TIME_WAITme trajo aquí. Gracias por la explicación y el enlace.
Technext

hola gracias por la explicacion Todavía no cierra las conexiones TCP. CLOSE_WAIT aumentando. He configurado el tiempo de espera en 30 segundos
aadi1295

1

Es posible que pueda forzar a Windows a cerrar forzosamente todas las conexiones TCP al 1) deshabilitar y luego 2) volver a habilitar su interfaz de red. Si eso funciona, puede realizar un script por lotes de los pasos para ejecutar cuando sea necesario.

Busqué alguna forma de hacerlo a través de la línea de comandos, desde la netshutilidad (o similar), pero hasta ahora no he tenido suerte.

Por supuesto, la mejor manera de arreglar esto es arreglar la aplicación rota. Asegúrese de probar la última versión de la aplicación; seguir molestando a los desarrolladores; Si ya tiene la última versión, intente localizar una versión anterior del programa.


Actualicé la aplicación a la última versión, no ayudó, y tengo un ticket de soporte con ellos. Traté de deshabilitar en las propiedades de red, y también desinstalé en el administrador de dispositivos, y la lista de conexiones WAIT_CLOSE no se vio afectada. Parece que esta es una lista en algún lugar del sistema operativo que no puedo tocar.
P aul

1

Probablemente esté recibiendo estas sesiones CLOSE_WAIT debido al bloqueo del programa. No puedo decir si sospecha que son la causa, por lo que solo quería aclararlo.

Supongo que no se quedarán para siempre; probablemente solo por 2 horas y 5 segundos. Puede parecer una eternidad, lo sé. Puede intentar ajustar KeepAliveTime (probablemente requiera un reinicio final) para que su conexión de red se reduzca a algo pequeño, como 5 minutos. Eso podría ayudarlos a desaparecer más rápido, después de que su programa se cuelgue.

O si sabe que puede ejecutar el programa de manera confiable durante, por ejemplo, 10 minutos a la vez, puede reiniciarlo periódicamente. No sé si alguna de esas soluciones es útil para su situación particular; Estoy de acuerdo con ~ quack en que deberías deshacerte de la versión problemática de la aplicación lo antes posible.


Creo que el programa puede anular la configuración del sistema en el parámetro KeepAliveTime, por lo que puede que no ayude, pero estoy de acuerdo en que vale la pena intentarlo. Sin embargo, ajustarlo puede generar problemas con otras aplicaciones.
quack quijote

0

Vea si beyondtv está generando otro proceso que mantiene abiertas las conexiones. Process Explorer le mostrará si esto está sucediendo.


No puedo encontrar ningún proceso adicional. El cierre de beyondtv y todos sus procesos relacionados no tiene ningún efecto. Estas conexiones aparecen con <non-existent> para el proceso. El proceso ha finalizado pero las conexiones no se cerrarán.
P aul

Estaba jugando con los botones de calificación de respuesta arriba / abajo y no hay forma de volver a 0, es -1 o 1, así que lo dejé en 1. Sería mejor tener esta pregunta con 0 respuestas en este punto ya que esta respuesta no es útil: utilicé Process Explorer y tcpview durante algún tiempo antes de publicar esta pregunta.
P aul

0

¿Es posible que haya un problema con el firewall? Podría tratarse de una conexión incompleta que se está intentando y reintentando.

Deshabilitaría todos los firewalls en ambas máquinas, y si hay un enrutador también su firewall interno.


También hice eso antes. Reran el escenario, sin efecto, el problema persiste. Sin embargo, estoy mirando el enrutador Linksys, lo investigaré.
P aul

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.