Jeśli serwer Windows ma kilka tysięcy otwartych portów w LAST_ACK
stanie (jak pokazuje netstat), co to może znaczyć? Czy to dlatego, że jeden punkt końcowy czeka na odpowiedź drugiego?
15
Stan last_ack (jeśli prawidłowo pamiętam mój stos TCP) to stan, w którym otrzymałeś wiadomość FIN, aby zamknąć połączenie z sąsiadem, ale nadal musisz opróżnić i zamknąć połączenie. Sam wysyłasz ostateczne FIN i czekasz na ACK.
Zwykle zawieszenie się na last_ack oznacza, że aplikacja utrzymuje otwarte gniazdo, nawet gdy drugi koniec zakończy wysyłanie danych. Może się to zdarzyć z wielu powodów. Może istnieć zapora ogniowa lub inny moduł równoważenia obciążenia, który traci ostatnie potwierdzenie ACK od klienta i pozostawia Cię w stanie ostatniego_ack. Jeśli połączenia nie przekroczą limitu czasu po kilku minutach (około 10), prawdopodobnie masz błąd.
Spójrz na diagram stanu na http://tangentsoft.net/wskfaq/articles/debugging-tcp.html
LAST_ACK jest ostatnim stanem tuż przed zamknięciem połączenia TCP.
źródło
LAST_ACK oznacza, że twój koniec otrzymał FIN od peera, wysłał ACK, wysłał FIN i czeka na końcowe ACK od peera. W tym momencie nic więcej nie może zrobić aplikacja: gniazdo jest zamknięte. Aplikacja mogła nawet wyjść. Odtąd TCP musi ponownie wysłać FIN, dopóki nie otrzyma ostatecznego potwierdzenia lub przekroczy limit czasu. Niewiele możesz zrobić jako administrator, oprócz zbadania sieci.
źródło
Uważam, że @lmo ma rację mówiąc, że jest to „ostatni stan tuż przed zamknięciem połączenia TCP”, ale oprócz tego, na podstawie mojego czytania strony wikipedia, warto zauważyć, że nie jest to część „ Mechanizm Aktywnego Zamykania, który (w moim rozumieniu) jest zakończeniem większości dobrze zachowanych połączeń, ale raczej częścią sekwencji „Pasywnego Zamykania”, która przypuszczalnie jest związana ze Zdarzeniem Bad Stuff.
(FWIW, jestem językiem, a nie siecią. Z chęcią udzielę wyjaśnień osobie z sieci).
źródło