Co oznacza LAST_ACK, jako wartość stanu w netstat?

15

Jeśli serwer Windows ma kilka tysięcy otwartych portów w LAST_ACKstanie (jak pokazuje netstat), co to może znaczyć? Czy to dlatego, że jeden punkt końcowy czeka na odpowiedź drugiego?

Nick Bolton
źródło

Odpowiedzi:

10

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

pehrs
źródło
4
Niepoprawne. Opisujesz CLOSE_WAIT.
user207421,
4

LAST_ACK jest ostatnim stanem tuż przed zamknięciem połączenia TCP.

Imo
źródło
1
Dzięki, co może spowodować zawieszenie się portu w tym stanie?
Nick Bolton
Czy jest to serwer internetowy IIS (lub inna usługa), na którym widzisz tę aplikację, czy też Twoja aplikacja?
Imo
Aplikacja implementuje klienta XML-RPC „Cook Computing” (z Asp.Net, uruchamianego przez IIS) i rozmawia z serwerem Java-RPC Java.
Nick Bolton
1
To ostatnie etapy rozmowy TCP z klientem. Twoje oprogramowanie chce zamknąć () sesję TCP i wysyła LAST_ACK do klienta. Następnie klient powinien odesłać potwierdzenie odebrania LAST_ACK. Zgadzam się z pehrsami w tym kliencie (być może zapora ogniowa) mogła tego nie potwierdzić lub pakiet mógł zostać utracony ... są to dwa najbardziej prawdopodobne przypadki.
Imo
1
Nie „wysyła LAST_ACK do klienta”. Wysyła FIN i obecnie czeka na ACK, po otrzymaniu FIN i wysłaniu ACK. To ostatni stan po zamknięciu połączenia.
user207421,
2

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.

użytkownik207421
źródło
0

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).

John Clements
źródło
Nie ma racji, mówiąc to, i nie ma nic złego w pasywnym zamknięciu. Oznacza to tylko, że peer został zamknięty przed tobą.
user207421,