O que são os estados CLOSE_WAIT e TIME_WAIT?

166

Quando o faço netstat -ana minha máquina Windows, obtenho uma lista das portas com um dos quatro estados:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

O que CLOSE_WAITe TIME_WAITdizer / indica?

lazer
fonte
veja 'man netstat', role para baixo até a seção state: linux.die.net/man/8/netstat
MaQleod
1
Plugue sem vergonha para responder à falha do servidor no site da irmã .
Hennes 24/06
Dupe entre
Mokubai

Respostas:

179

Devido à maneira como o TCP / IP funciona, as conexões não podem ser fechadas imediatamente. Os pacotes podem chegar fora de serviço ou retransmitidos após o fechamento da conexão. CLOSE_WAIT indica que o terminal remoto (outro lado da conexão) fechou a conexão. TIME_WAIT indica que o terminal local (este lado) fechou a conexão. A conexão está sendo mantida em volta para que todos os pacotes atrasados ​​possam ser correspondidos à conexão e manipulados adequadamente. As conexões serão removidas quando atingirem o tempo limite em quatro minutos. Veja http://en.wikipedia.org/wiki/Transmission_Control_Protocol para mais detalhes.

BillThor
fonte
Mas isso não significa que, mesmo que os pacotes cheguem após o retorno da função, eles ainda serão descartados pelo aplicativo?
MonsterMMORPG
Pacotes @MonsterMMORPG que chegarem fora de ordem após o fechamento da conexão serão tratados pela pilha de rede. Geralmente, eles podem ser descartados com segurança, de acordo com as regras normais de pacotes duplicados. Pacotes que parecem estar relacionados a uma conexão ativa desconhecida são normalmente descartados e geram uma resposta. Os estados WAIT protegem contra esse tráfego.
BillThor
29

Basicamente, os estados "WAIT" significam que um lado fechou a conexão, mas a confirmação final do fechamento está pendente.

Veja, por exemplo, este diagrama de estados TCP para obter detalhes:

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

sleske
fonte
14
Isso descreve com precisão CLOSE_WAIT, mas não TIME_WAIT. TIME_WAIT indica que o aplicativo local fechou a conexão e o outro lado reconheceu e enviou um FIN próprio. Agora estamos aguardando pacotes duplicados perdidos que possam perturbar um novo usuário da mesma porta.
precisa saber é o seguinte
1
@ ChrisSmowton, então quem está usando a terminologia correta? O diagrama ou netstat? ( cf. )
Pacerier
@ Pacerier Eu acho que eles correspondem - onde você acha que eles discordam?
Chris Smowton
@ ChrisSmowton Então, isso significa que o próximo proprietário da porta poderá obter bytes extras e que poderá interromper a resposta se definirmos TIME_WAIT = 0?
MonsterMMORPG
Possível, mas muito improvável, pois os números de sequência precisariam corresponder para o aplicativo ver o pacote não autorizado emendado no fluxo ou o receptor precisaria armazenar em buffer o pacote aparentemente fora de ordem até que o número de sequência correto aparecesse. Não sei o suficiente sobre implementações práticas para dizer se o último é feito na prática.
Chris Smowton
1

TIME_WAIT representa aguardar tempo suficiente para garantir que o TCP remoto receba o ACK de sua solicitação FIN. Veja en.wikipedia.org/wiki/Transmission_Control_Protocol (e também o RFC 793)

Denio Mariz
fonte
1
O que isso acrescenta às informações fornecidas pelas respostas existentes?
Fixer1234 20/05
Adiciona uma referência à RFC 793
Denio Mariz 04/10