Co to są stany CLOSE_WAIT i TIME_WAIT?

166

Gdy robię to netstat -ana moim komputerze z systemem Windows, otrzymuję listę portów z jednym z czterech stanów:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

Co CLOSE_WAITi co TIME_WAIToznacza / oznacza?

Lazer
źródło
zobacz „man netstat”, przewiń w dół do sekcji stanu: linux.die.net/man/8/netstat
MaQleod
1
Bezwstydna wtyczka do odpowiedzi na temat błędu serwera naszej witryny .
Hennes
Dupe z
różnych

Odpowiedzi:

179

Ze względu na sposób działania protokołu TCP / IP połączeń nie można natychmiast zamykać. Pakiety mogą przychodzić poza kolejnością lub być retransmitowane po zamknięciu połączenia. CLOSE_WAIT wskazuje, że zdalny punkt końcowy (druga strona połączenia) zamknął połączenie. TIME_WAIT wskazuje, że lokalny punkt końcowy (po tej stronie) zamknął połączenie. Połączenie jest utrzymywane, aby wszelkie opóźnione pakiety mogły zostać dopasowane do połączenia i odpowiednio obsługiwane. Połączenia zostaną usunięte, gdy przekroczą limit czasu w ciągu czterech minut. Więcej informacji na stronie http://en.wikipedia.org/wiki/Transmission_Control_Protocol .

BillThor
źródło
Ale czy nie oznacza to, że nawet jeśli pakiety dotrą po zwróceniu funkcji, nadal zostaną odrzucone przez aplikację?
MonsterMMORPG
@MonsterMMORPG Pakiety, które przychodzą nieczynne po zamknięciu połączenia, będą obsługiwane przez stos sieciowy. Zazwyczaj można je bezpiecznie usunąć zgodnie z normalnymi regułami dla duplikatów pakietów. Pakiety, które wydają się być powiązane z nieznanym aktywnym połączeniem, są zwykle odrzucane i generują odpowiedź. Stany WAIT chronią przed tym ruchem.
BillThor
29

Zasadniczo stany „WAIT” oznaczają, że jedna strona zamknęła połączenie, ale oczekuje się na ostateczne potwierdzenie zamknięcia.

Zobacz np. Ten schemat stanów TCP, aby uzyskać szczegółowe informacje:

http://www.jxos.org/Projects/TCP/tcpstate.html

Śleske
źródło
14
To dokładnie opisuje CLOSE_WAIT, ale nie TIME_WAIT. TIME_WAIT wskazuje, że lokalna aplikacja zamknęła połączenie, a druga strona potwierdziła i wysłała własny FIN. Teraz czekamy na jakiekolwiek bezpańskie duplikaty pakietów, które mogą zdenerwować nowego użytkownika tego samego portu.
Chris Smowton
1
@ChrisSmowton, więc kto używa właściwej terminologii? Schemat czy netstat? ( por. )
Pacerier
@Pacerier Myślę, że pasują do siebie - jak myślisz, gdzie się nie zgadzają?
Chris Smowton,
@ChrisSmowton Więc to oznacza, że ​​następny właściciel portu może otrzymać dodatkowe bajty, co może przerwać odpowiedź, jeśli ustawimy TIME_WAIT = 0?
MonsterMMORPG
Możliwe, ale bardzo mało prawdopodobne, ponieważ numery sekwencji musiałyby pasować do aplikacji, aby zobaczyć nieuczciwy pakiet splatany do strumienia, lub odbiornik musiałby buforować pozornie niedziałający pakiet, dopóki nie pojawi się właściwy numer sekwencji. Nie wiem wystarczająco dużo o praktycznych wdrożeniach, aby powiedzieć, czy te ostatnie są realizowane w praktyce.
Chris Smowton,
1

TIME_WAIT oznacza oczekiwanie na wystarczającą ilość czasu, aby mieć pewność, że zdalny TCP otrzymał potwierdzenie AC swojego żądania FIN. Zobacz en.wikipedia.org/wiki/Transmission_Control_Protocol (a także RFC 793)

Denio Mariz
źródło
1
Co to dodaje do informacji zawartych w istniejących odpowiedziach?
fixer1234
Dodaje odniesienie do RFC 793
Denio Mariz,