Dlaczego widzę pakiet RST, ACK zamiast pakietu RST?

42

Patrząc w Wireshark, często widzę, że strumienie TCP kończą się pakietem RST, ACK zamiast pakietu RST. Czy ktoś wie, dlaczego tak jest?

Przykład tego, co widzę:

SYN SYN, ACK ... dane ... RST, ACK

Wireshark nie odbiera pakietu RST przed pakietem RST, ACK.

program paczkujący
źródło
2
Jak myślisz, dlaczego przed RST / ACK powinien istnieć segment RST? Może mógłbyś podać przykład takiego śledzenia pakietu?
Gerben
Czy ACK piggyback RST w tym samym pakiecie?
generalnetworkerror
Czy jakaś odpowiedź ci pomogła? jeśli tak, powinieneś zaakceptować odpowiedź, aby pytanie nie wyskakiwało wiecznie, szukając odpowiedzi. Alternatywnie możesz podać i zaakceptować własną odpowiedź.
Ron Maupin
POTWIERDZAM,

Odpowiedzi:

55

RST / ACK nie jest potwierdzeniem RST, tak samo jak SYN / ACK nie jest dokładnie potwierdzeniem SYN. Ustanowienie protokołu TCP jest w rzeczywistości procesem czterokierunkowym: host inicjujący wysyła SYN do hosta odbierającego, który wysyła ACK dla tego SYN. Host odbierający wysyła SYN do hosta inicjującego, który odsyła ACK z powrotem. Ustanawia to komunikację stanową.

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

Aby uczynić to bardziej wydajnym, host odbierający może potwierdzić SYN i wysłać własny SYN w tym samym pakiecie, tworząc trójstronny proces, do którego jesteśmy przyzwyczajeni.

SYN -->
    <-- SYN/ACK
ACK -->

W przypadku RST / ACK, urządzenie potwierdza potwierdzenie wszelkich danych wysłanych w poprzednich pakietach w sekwencji za pomocą ACK, a następnie powiadamia nadawcę, że połączenie zostało zamknięte za pomocą RST. Urządzenie po prostu łączy dwa pakiety w jeden, podobnie jak SYN / ACK. Polecenie RST / ACK zwykle nie jest normalną odpowiedzią na zamknięcie sesji TCP, ale niekoniecznie wskazuje na problem.

Santino
źródło
4
Przykładowy scenariusz wysyłania RST / ACK ma miejsce, gdy host odbierający nie nasłuchuje na docelowym porcie TCP.
Indika K
W rzeczy samej. Kiedyś próbowałem symulować atak DDoS (do celów edukacyjnych;)) z komputera A na komputer B na porcie 80. Ale port B 80 nie jest otwarty. Widzę więc, że maszyna B wysyła wiele RST ACKodpowiedzi na fałszywy adres źródłowy.
smwikipedia,
Czy odpowiedź RST / ACK może zależeć od zawartości pakietu? Tj. Serwer odbiera pakiet, a ponieważ zawartość pakietu spełniała pewien warunek, sesja została zamknięta.
skooog,
1

Po ustanowieniu połączenia wszystkie pakiety muszą mieć ustawione ACK i pasować do numeru sekwencyjnego odebranych pakietów, aby zapewnić niezawodny transport / bezpieczeństwo. RST bez ACK nie będą akceptowane. Gdy jedna strona wysyła RST, gniazdo jest natychmiast zamykane, a strona odbierająca również zamyka gniazdo natychmiast po otrzymaniu prawidłowego RST. Nie musi być i nie można tego potwierdzić.

po uzgadnianiu protokołu TCP

A ---> B Syn = x, Ack = y, len = z, Flaga ACK

B ---> A Syn = y, Ack = x + z, len = o, Flaga ACK

A ---> B Syn = x + z, Ack = y + o, len = p, flaga ACK

B ---> A Syn = y + o, ACK = x + z + p, len = q, RST, ACK Flag

B zamyka gniazdo po wysłaniu ostatniego pakietu, a A zamyka gniazdo po otrzymaniu.

(nie biorąc pod uwagę okna TCP tutaj, lub może być więcej pakietów z jednego końca przed potwierdzeniem)

Flaga ACK, numer potwierdzenia i procedura potwierdzenia są powiązane, ale nie to samo.

Zgodnie z RFC793

RFC793

Numer potwierdzenia: 32 bity

If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive.  Once a connection is established this is always sent.

Zresetuj przetwarzanie

We wszystkich stanach oprócz SYN-SENT wszystkie segmenty resetujące (RST) są sprawdzane przez sprawdzenie ich pól SEQ. Reset jest ważny, jeśli jego kolejny numer znajduje się w oknie. W stanie SYN-SENT (RST odebrany w odpowiedzi na początkową SYN), RST jest akceptowalny, jeśli pole ACK potwierdza SYN.

Odbiornik RST najpierw go sprawdza, a następnie zmienia stan. Jeśli odbiornik był w stanie LISTEN, ignoruje go. Jeśli odbiornik był w stanie SYN-RECEIVED i wcześniej był w stanie LISTEN, wówczas odbiornik powraca do stanu LISTEN, w przeciwnym razie odbiornik przerywa połączenie i przechodzi w stan ZAMKNIĘTY. Jeśli odbiornik był w jakimkolwiek innym stanie, przerywa połączenie i doradza użytkownikowi i przechodzi w stan ZAMKNIĘTY.

sdaffa23fdsf
źródło