O que LAST_ACK significa, como um valor de estado em netstat?

15

Se um servidor Windows tiver vários milhares de portas abertas no LAST_ACKestado (como mostrado pelo netstat), o que isso significa? É porque um terminal está esperando o outro responder?

Nick Bolton
fonte

Respostas:

10

O estado last_ack (se bem me lembro da minha pilha TCP) é o estado em que você recebeu sua mensagem FIN para fechar a conexão do seu vizinho, mas você ainda precisa liberar e desligar a conexão. Você mesmo envia a FIN final e aguarda um ACK.

Normalmente, pendurar last_ack significa que seu aplicativo mantém um soquete aberto, mesmo quando a outra extremidade termina de enviar dados. Isso pode acontecer por vários motivos. Pode haver um firewall ou outro balanceador de carga que perca a última ACK do cliente e o deixe preso no estado last_ack. Se as conexões não atingirem o tempo limite após alguns minutos (10 ou mais), você provavelmente terá um erro.

Dê uma olhada no diagrama de estado em http://tangentsoft.net/wskfaq/articles/debugging-tcp.html

pehrs
fonte
4
Incorreto. Você está descrevendo CLOSE_WAIT.
user207421
4

LAST_ACK é o último estado antes de fechar a conexão TCP.

Imo
fonte
1
Obrigado, o que pode causar uma porta travar nesse estado?
Nick Bolton
É um servidor Web do IIS (ou outro serviço) em que você está vendo isso ou seu próprio aplicativo?
Imo
O aplicativo implementa o cliente XML-RPC "Cook Computing" (do Asp.Net, executado no IIS) e está conversando com um servidor Java XML-RPC.
Nick Bolton
1
São os estágios finais da conversa do TCP com o cliente. Seu software parece fechar () a sessão TCP e envia um LAST_ACK ao cliente. O cliente deve então devolver uma confirmação de que o LAST_ACK foi recebido. Concordo com os pehrs nesse cliente (talvez o firewall) possa não ter reconhecido ou o pacote pode ter sido perdido ... esses são os dois casos mais prováveis.
Imo
1
Não 'envia um LAST_ACK para o cliente'. Ele envia um FIN e atualmente está aguardando um ACK, já tendo recebido um FIN e enviado um ACK. É o último estado após o fechamento da conexão.
user207421
2

LAST_ACK significa que seu final recebeu um FIN do par, enviou um ACK, enviou um FIN e está aguardando o ACK final do mesmo. Neste ponto, não há mais nada que o aplicativo possa fazer: o soquete está fechado. O aplicativo pode até ter saído. Daqui em diante, cabe ao TCP reenviar o FIN até receber o ACK final ou o tempo limite para fazê-lo. Você não pode fazer muito como administrador, exceto investigar a rede.

user207421
fonte
0

Acredito que o @lmo está correto ao dizer que é "o último estado antes de encerrar a conexão TCP", mas além disso, com base na minha leitura da página da wikipedia, vale a pena notar que isso não faz parte do " Mecanismo de fechamento ativo "que (no meu entender) é o fim da maioria das conexões bem comportadas, mas parte da sequência" Fechamento passivo ", presumivelmente associado ao Bad Stuff Happening.

(FWIW, sou idiomas, não redes. Ficaria feliz em esclarecer com uma pessoa da rede.)

John Clements
fonte
Ele não está certo ao dizer isso, e não há nada de ruim em um fechamento passivo. Significa apenas que o ponto fechado antes de você.
user207421