답변:
last_ack 상태 (TCP 스택을 올바르게 호출 한 경우)는 이웃으로부터 연결을 종료하기 위해 FIN 메시지를 수신 한 상태이지만 여전히 연결을 플러시하고 종료해야합니다. 최종 FIN을 직접 보내고 ACK를 기다립니다.
일반적으로 last_ack에 매달려 있으면 다른 쪽 끝에서 데이터 전송을 마친 후에도 응용 프로그램에서 소켓을 열어 둔 상태로 유지됩니다. 여러 가지 이유로 발생할 수 있습니다. 클라이언트에서 마지막 ACK를 잃어버린 방화벽이나 다른로드 밸런서가있을 수 있으며 last_ack 상태에 머물러 있습니다. 몇 분 (10 정도 정도) 후에 연결 시간이 초과되지 않으면 버그 일 수 있습니다.
http://tangentsoft.net/wskfaq/articles/debugging-tcp.html 의 상태 다이어그램을 살펴보십시오.
LAST_ACK는 TCP 연결을 종료하기 직전의 마지막 상태입니다.
LAST_ACK는 상대방이 FIN을 수신하고 ACK를 전송하고 FIN을 전송했으며 피어에서 최종 ACK를 기다리고 있음을 의미합니다. 이 시점에서 응용 프로그램이 더 이상 할 수있는 일은 없습니다 : 소켓이 닫힙니다. 응용 프로그램이 종료되었을 수도 있습니다. 여기서부터는 최종 ACK를 얻거나 시간 초과 될 때까지 FIN을 다시 보내는 것은 TCP에 달려 있습니다. 네트워크를 조사하는 것 외에는 관리자로서 할 수있는 일은 없습니다.
@lmo는 "TCP 연결을 종료하기 직전의 마지막 상태"라고 말하면 정확하지만 wikipedia 페이지를 읽은 결과를 바탕으로 이것이 ""의 일부가 아니라는 점에 주목할 가치가 있습니다. Active Close "메커니즘은 (내 이해로는) 가장 잘 작동하는 연결의 끝이지만"Passive Close "시퀀스의 일부이며, 아마도 Bad Stuff Happening과 관련이 있습니다.
(FWIW, 저는 네트워크가 아닌 언어입니다. 네트워크 담당자의 설명을 기쁘게 생각합니다.)