Questo post fornirà dettagli sulle connessioni TCP che riportano gli stati "CLOSE_WAIT". I possibili valori di stato per i socket TCP sono i seguenti:
BOUND | Bound, pronto per connettersi o ascoltare. |
---|---|
CHIUSO | Chiuso. La presa non viene utilizzata. |
CHIUSURA | Chiuso, quindi spegnimento remoto; in attesa di riconoscimento. |
CLOSE_WAIT | Spegnimento remoto; in attesa che il socket si chiuda. |
STABILITA | La connessione è stata stabilita. |
FIN_WAIT_1 | Presa chiusa; chiusura della connessione. |
FIN_WAIT_2 | Presa chiusa; in attesa di spegnimento da remoto. |
IN FERMO | Inattivo, aperto ma non vincolato. |
LAST_ACK | Spegnimento remoto, quindi chiuso; in attesa di riconoscimento. |
ASCOLTA | Ascolto delle connessioni in entrata. |
SYN_RECEIVED | Sincronizzazione attiva/iniziata ricevuta e connessione in corso |
SYN_SENT | Tentativo attivo di stabilire la connessione. |
TIME_WAIT | Attendere dopo la chiusura per la ritrasmissione dello spegnimento remoto. |
'CLOSE_WAIT ' state significa che l'altra estremità della connessione è stata chiusa mentre l'estremità locale è ancora in attesa della chiusura dell'applicazione.
Dettagli
Lo stato "CLOSE_WAIT" sulle connessioni TCP si verifica se il sistema non ha ricevuto una chiamata di sistema di chiusura dall'applicazione, dopo aver ricevuto la notifica (pacchetto "FIN") dall'altro sistema che ha chiuso il suo endpoint. In altre parole significa che l'estremità locale della connessione ha ricevuto "FIN" dall'altra estremità, ma il sistema operativo è in attesa che il programma all'estremità locale chiuda effettivamente la connessione.
Il problema è che un programma in esecuzione sulla macchina locale non chiude il socket. Non è un problema di ottimizzazione TCP. Una connessione può rimanere in "CLOSE_WAIT" per sempre mentre il programma mantiene la connessione aperta. Quindi principalmente questo problema si verifica a causa di un bug dell'applicazione. Tuttavia, se i parametri TCP/IP non sono impostati correttamente, le connessioni TCP/IP chiuse rimarranno per molto tempo in vari stati "CHIUDI" che prendono i descrittori di file dal processo. Per risolvere questo problema, a volte è necessario regolare i parametri TCP/IP in /etc/sysctl.conf (come i parametri net.ipv4.tcp_xxx), in modo che le connessioni TCP/IP vengano chiuse in un breve lasso di tempo .