Czytałem już, że do zakończenia połączenia TCP potrzebne są 3 uzgodnienia: FIN, FIN ACK i ACK. Jednak podczas zamykania połączenia, Wireshark wyświetla FIN ACK, FIN ACK, ACK; nigdy sam nie wyświetla FIN.

Jednak podczas ustanawiania połączenia Wireshark wyraźnie wyświetla trzy uściski dłoni: SYN, SIN ACK ACK.

Jestem trochę zdezorientowany, dlaczego podczas zamykania połączenia te trzy uściski dłoni nie są wyświetlane w ten sposób.

Odpowiedź

Implementacja TCP może wysłać samodzielny FIN w pierwszym segmencie zamykającym, ale zamiast tego może także wysłać FIN ACK.

Ten ostatni jest znacznie lepsza: implementacja może łączyć „darmowe” potwierdzenie z segmentem FIN bez wydłużania go. Dzieje się tak, ponieważ jeśli nie zrobisz ACK, w segmencie jest miejsce na numer ACK, który zostanie zignorowany, i marnowanie przepustowości. Stąd ostatnio wysłane ACK jest po prostu wysyłane ponownie, na wypadek gdyby odbiorca go przegapił.

Dotyczy to wszystkich segmentów TCP. Stąd, z wyjątkiem pierwszego segmentu SYN, w którym nadawca nie ma informacji o numerze ACK, wszystkie pozostałe segmenty będą zwykle miały włączoną flagę ACK.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *