Odkryłem, że powodem, dla którego aktywna osoba zbliża się do CZASU OCZEKIWANIA, jest upewnienie się, że końcowe potwierdzenie nie zostanie utracone. Ale skąd ma wiedzieć, czy końcowe ACK zostało utracone? Czy pasywnie bliżej ponownie wyśle FIN, a następnie aktywny bliżej wie, że ACK zostało utracone? Oto zdjęcie TCP FSM.
12
Odpowiedzi:
Tak. Cytowanie z ilustrowanego tomu 1 TCP / IP w sekcji Zarządzanie połączeniami TCP:
Upłynął limit czasu. Po
LAST_ACK
wejściu pasywne zbliżenie zostanie ponownie wysłane,FIN
gdy upłynie limit czasu, zakładając, że zostało utracone. Jeśli rzeczywiście został zgubiony, aktywny bliżej w końcu odbierze retransmisjęFIN
i wejdzieTIME_WAIT
. JeśliFIN
nie został utracony, ale finałACK
został utracony, aktywny bliżej jest wTIME_WAIT
środku i odbieraFIN
ponownie. Kiedy to nastąpi - OdbieranieFIN
wTIME_WAIT
- wACK
jest retransmitowany.Wartość limitu czasu w NIE
TIME_WAIT
jest używana do celów retransmisji. Kiedy upłynie limit czasu , zakłada się, że finał został pomyślnie dostarczony, ponieważ pasywne zbliżenie nie retransmitowało pakietów. Tak więc limit czasu to tylko czas, po którym możemy bezpiecznie założyć, że jeśli drugi koniec niczego nie wysłał, to dlatego, że otrzymał końcową i zamknął połączenie.TIME_WAIT
ACK
FIN
TIME_WAIT
ACK
źródło
Ponieważ nie otrzymano go w terminie. Wiem, że to odpowiedź „duh”, ale właśnie dlatego te stany i limity czasu istnieją.
Nie, chyba że do tego strumienia dotrą kolejne pakiety, a to spowoduje wysłanie „RST” (reset).
Cały proces jest skomplikowanym stanem maszyny do wykonania uporządkowanego zamknięcia pomimo możliwości awarii sieci. Sieci ulegają awarii, łącza występują błędy, łącza stają się nasycone i muszą upuszczać pakiety, urządzenia ulegają awarii itp. W ramach ćwiczenia uruchom drzewo stanu dla aktywnego połączenia, gdy jeden z punktów końcowych po prostu zniknie (np. Awaria zasilania).
TL; DR To drzewo stanów jest zaprojektowane do obsługi każdego możliwego trybu awarii.
źródło
Celem TIME_WAIT jest umożliwienie sieci rozróżnienia pakietów, które przychodzą jako należące do „starego, istniejącego” połączenia od nowego. Zaleca się ustawienie timera TIME_WAIT na dwukrotność maksymalnego czasu życia segmentu (MSL), w moim systemie MSL wynosi 1 minutę, więc połączenia pozostają w stanie TIME_WAIT przez 2 minuty.
Po tym czasie przychodzące pakiety nie są już powiązane ze starym połączeniem.
TIME_WAIT nie jest bezpośrednio oczekiwany na wysyłanie pakietów ACK; sterowane stanami CLOSE_WAIT i FIN_WAIT. Po przejściu do stanu TIME_WAIT gniazdo jest już zamknięte.
Odnośniki: http://www.tcpipguide.com/free/t_TCPConnectionTermination-3.htm https://en.wikipedia.org/wiki/Maximum_segment_lifetime http://www.lognormal.com/blog/2012/09/27/ linux-tcpip-tuning /
źródło