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?

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


4
Niepoprawne. Opisujesz CLOSE_WAIT.
user207421,

4

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


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.


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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.