Quali sono gli stati CLOSE_WAIT e TIME_WAIT?


166

Quando lo faccio netstat -asul mio computer Windows, ottengo un elenco delle porte con uno dei quattro stati:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

Cosa significano CLOSE_WAITe TIME_WAITsignificano / indicano?



vedi 'man netstat', scorri verso il basso fino alla sezione state: linux.die.net/man/8/netstat
MaQleod

1
Spudorata spina per una risposta sul nostro Fault Server sorelle .
Hennes,

Risposte:


179

A causa del modo in cui TCP / IP funziona, le connessioni non possono essere chiuse immediatamente. I pacchetti possono arrivare fuori servizio o essere ritrasmessi dopo la chiusura della connessione. CLOSE_WAIT indica che l'endpoint remoto (l'altro lato della connessione) ha chiuso la connessione. TIME_WAIT indica che l'endpoint locale (questo lato) ha chiuso la connessione. La connessione viene mantenuta in modo che eventuali pacchetti ritardati possano essere abbinati alla connessione e gestiti in modo appropriato. Le connessioni verranno rimosse quando scadono entro quattro minuti. Vedi http://en.wikipedia.org/wiki/Transmission_Control_Protocol per maggiori dettagli.


Ma questo non significa che, anche se i pacchetti arrivano dopo che la funzione è stata restituita, verrebbero comunque scartati dall'applicazione?
MonsterMMORPG

@MonsterMMORPG I pacchetti che arrivano fuori servizio dopo la chiusura della connessione saranno gestiti dallo stack di rete. Questi possono di solito essere scartati in modo sicuro secondo le normali regole sui pacchetti duplicati. I pacchetti che sembrano essere correlati a una connessione attiva sconosciuta vengono normalmente scartati e generano una risposta. Gli stati WAIT proteggono da questo traffico.
BillThor,

29

Fondamentalmente gli stati "ATTENDERE" indicano che un lato ha chiuso la connessione ma è in attesa la conferma finale della chiusura.

Vedi ad esempio questo diagramma degli stati TCP per i dettagli:

http://www.jxos.org/Projects/TCP/tcpstate.html


14
Questo descrive accuratamente CLOSE_WAIT ma non TIME_WAIT. TIME_WAIT indica che l'applicazione locale ha chiuso la connessione e l'altra parte ha riconosciuto e inviato un proprio FIN. Ora stiamo aspettando eventuali pacchetti duplicati vaganti che potrebbero sconvolgere un nuovo utente della stessa porta.
Chris Smowton,

1
@ChrisSmowton, quindi chi sta usando la terminologia giusta? Il diagramma o netstat? ( cfr. )
Pacerier,

@Pacerier Penso che corrispondano - dove pensi che non siano d'accordo?
Chris Smowton,

@ChrisSmowton Quindi questo significa che il prossimo proprietario della porta potrebbe ottenere byte extra e che potrebbe interrompere la risposta se impostiamo TIME_WAIT = 0?
MonsterMMORPG

Possibile ma molto improbabile, poiché i numeri di sequenza dovrebbero corrispondere affinché l'applicazione possa vedere il pacchetto errato impiombato nel flusso, oppure il ricevitore dovrebbe bufferizzare il pacchetto apparentemente fuori servizio fino a quando non si verifica il numero di sequenza corretto. Non so abbastanza sulle implementazioni pratiche per dirti se quest'ultimo è fatto in pratica.
Chris Smowton,

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.