Come uccidere le connessioni di windows zombie tcp?


11

Sto eseguendo il collegamento Beytv su XP, connettendomi a BeyondV un host Vista. Il programma Link si blocca dopo circa 20 minuti e non ho alcuna soluzione per questo. Quando ciò accade, usando tcpview, vedo che l'host ha circa 200 connessioni zombie tcp rimaste dalla connessione Link. Non posso cancellarli, provengono dallo stesso processo inesistente. Le connessioni restano in attesa fino al riavvio dell'host. Il riavvio è l'unico modo che ho trovato per riconnettermi al di là di Link Link. Penso che ci sia un bug in Beytv che sta causando questo, ma non riesco a ottenere alcuna risposta sui loro forum. Ma in ogni caso, vorrei sapere se esiste un modo per uccidere tutte quelle connessioni.

Modifica: in realtà si tratta di circa 3000 WAIT_CLOSE connessioni che si accumulano dopo circa 40 minuti e circa quindi il client muore. Se chiudo l'app del server, tutti questi socket ora vengono mostrati come appartenenti a un processo non esistente in tcpview. Comprensibile. Ma non c'è un modo per chiuderli senza riavviare?


Non c'è un modo per iniziare una taglia sulle domande qui? Non vedo un pulsante per quello.
P

puoi offrire una taglia dopo che la domanda è scaduta da 2 giorni: superuser.com/faq
quack quixote

3
Fuoco. Fuoco o un fucile da caccia.
Phoshi,

1
@phoshi: o nuke dall'orbita. è l'unico modo per esserne sicuri.
Quack Quixote

1
Preferisco fare il mio modo di uccidere nel modo
peggiore

Risposte:


10

È possibile utilizzare Currports di Nirsoft per monitorare e interrompere le connessioni.

È possibile automatizzare l'uccisione di un modello di connessione utilizzando AutoHotKey.


7

CLOSE_WAIT significa che la connessione è stata chiusa dall'altra parte.

Evidentemente, beyondtv non rileva questa condizione e continua a inviare dati all'altra estremità. L'altra estremità non può inviare nulla indietro su questa connessione, poiché ha chiuso la sua estremità della connessione.

La soluzione è impostare la voce TcpTimedWaitDelay in

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

Questa voce determina il tempo che deve trascorrere prima che TCP possa rilasciare una connessione chiusa e riutilizzarne le risorse. Questo intervallo tra chiusura e rilascio è noto come stato TIME_WAIT o 2MSL. Durante questo periodo, la connessione può essere riaperta a costi molto inferiori per client e server rispetto alla creazione di una nuova connessione.

Per impostazione predefinita sulla mia macchina, questo contiene il valore -1, che presumo significhi che le connessioni chiuse non vengono mai rilasciate, che è esattamente il comportamento che stai osservando.

Suggerisco di impostare il valore di questa voce nell'intervallo consentito di 30–300 secondi. Suppongo che 300 secondi = 5 minuti siano del tutto sufficienti per il tuo caso, dove occorrono 40 minuti per bloccare il computer.


La ricerca di TIME_WAITmi ha portato qui. Grazie per la spiegazione e il link.
Technext,

ciao, grazie per la spiegazione. Non sta ancora chiudendo le connessioni TCP. CLOSE_WAIT in aumento. Ho impostato Timeout su 30 secondi
aadi1295,

1

Potresti essere in grado di forzare Windows a forzare la chiusura di tutte le connessioni TCP 1) disabilitando , quindi 2) riattivando la tua interfaccia di rete. Se funziona, puoi eseguire lo script in batch dei passaggi da eseguire quando necessario.

Ho cercato in qualche modo di farlo tramite la riga di comando, netshdall'utilità (o simili), ma finora non ho avuto fortuna.

Naturalmente, il modo migliore per risolvere questo problema è quello di riparare l'applicazione non funzionante. Assicurati di provare l'ultima versione dell'applicazione; continua a infastidire gli sviluppatori; se disponi già dell'ultima versione, prova a individuare una versione precedente del programma.


Ho aggiornato l'app all'ultima versione, non ho aiutato e ho un ticket di supporto con loro. Ho provato a disabilitare nelle proprietà di rete e ho anche disinstallato in Gestione dispositivi e l'elenco delle connessioni WAIT_CLOSE non è stato interessato. Questa è una lista da qualche parte nel sistema operativo che non riesco a toccare sembra.
P

1

Probabilmente stai ricevendo queste sessioni CLOSE_WAIT a causa del blocco del programma - non posso dire se le sospetti come causa, quindi volevo solo chiarirlo.

La mia ipotesi è che non resteranno in giro per sempre; probabilmente solo per 2 ore e 5 secondi. Può sembrare per sempre, lo so. Puoi provare a sintonizzare KeepAliveTime (probabilmente richiede un riavvio finale) per la tua connessione di rete fino a qualcosa di piccolo, come 5 minuti. Ciò potrebbe aiutarli a scomparire più velocemente, dopo che il programma si è bloccato.

Oppure, se sai che puoi eseguire il programma in modo affidabile per, diciamo, 10 minuti alla volta, puoi semplicemente riavviarlo periodicamente. Non so se una di queste soluzioni è utile per la tua situazione particolare; Concordo con ~ Quack sul fatto che dovresti abbandonare la versione dell'app problematica il prima possibile.


penso che il programma sia autorizzato a sovrascrivere le impostazioni di sistema sul parametro KeepAliveTime, quindi potrebbe non essere d'aiuto, ma concordo che varrebbe la pena provare. la modifica può tuttavia causare problemi con altre applicazioni.
Quack Quixote

0

Verifica se beyondtv sta generando un altro processo che tiene aperte le connessioni. Process Explorer ti mostrerà se questo sta accadendo.


Non riesco a trovare altri processi. La chiusura di Beytv e tutti i relativi processi non ha alcun effetto. Queste connessioni vengono visualizzate con <esistente> per il processo. Il processo è terminato ma le connessioni non si chiuderanno.
P

Stavo giocando con i pulsanti su / giù per la valutazione delle risposte e non c'è modo di tornare a 0, è -1 o 1, quindi l'ho lasciato a 1. Sarebbe meglio avere questa domanda con 0 risposte a questo punto da allora questa risposta non è utile: ho usato Process Explorer e tcpview per qualche tempo prima di pubblicare questa domanda.
P

0

È possibile che ci sia un problema con il firewall? Potrebbe essere una connessione incompleta tentata e riprovata.

Disabiliterei tutti i firewall su entrambe le macchine e se c'è un router anche il suo firewall interno.


L'ho fatto anche prima. Ripeti lo scenario, nessun effetto, il problema persiste. Sto guardando il router Linksys, tuttavia, indagherò.
P

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.