We wcześniejszych latach Internetu protokół internetowy (IP) był jedynym protokołem używanym przez ludzi do łączenia się z Internetem. Problem z IP polegał na tym, że można było wysłać wiadomość i nie mieć pewności, czy odbiorca ją otrzyma, czy nie. Z tego powodu powstał protokół TCP/IP.

TCP/IP zapewnia, że ​​wszystkie wysyłane przez Ciebie dane dotrą do odbiorcy. Robi to, zapewniając klientowi i serwerowi bezpieczne połączenie przed wysłaniem danych. To bezpieczne połączenie jest nawiązywane w procesie zwanym uzgadnianiem trójetapowym, znanym również jako uzgadnianie TCP/IP.

Co to jest uścisk dłoni trójstronny?

Źródło obrazu: Rozdrabniacz/Wikimedia

Uzgadnianie trójetapowe (uzgadnianie TCP/IP) to pierwsze trzy interakcje między klientem a serwerem próbującym nawiązać połączenie TCP. Te początkowe interakcje są niezbędne do nawiązania bezpiecznego połączenia. Na tym etapie zarówno klient, jak i serwer uzgodnią parametry, których będą używać do sprawdzania i weryfikacji przychodzących i wychodzących pakietów danych. Parametry te będą miały postać segmentów TCP.

instagram viewer

Co to jest segment TCP?

W połączeniu TCP/IP wszystkie przesyłane dane muszą być pocięte i ustrukturyzowane w tak zwanych segmentach TCP. Segmenty te zawierają informacje, takie jak adresy IP, porty, bity flag, numery sekwencyjne, numery potwierdzeń oraz opcjonalne dane lub ładunek.

Pierwsze trzy interakcje (trójstronne uzgadnianie) będą zawierać tylko nagłówki segmentów TCP bez ładunku lub dołączonych danych. Oto próbka segmentu TCP

Źródło obrazu: Ere/Wikimedia

Zauważ, że powyższa ilustracja dotyczy tylko protokołu TCP. Pełny segment TCP/IP wymaga obu Adresy IP od nadawcy i odbiorcy na górze segmentu TCP powyżej.

Za każdym razem, gdy wysyłasz paczkę do osoby, firma kurierska zobowiązuje Cię do wypełnienia formularza informacyjnego, a następnie dołączenia go do przesyłki przed wysyłką. Podobnie protokół TCP wymaga, aby nadawca dołączył nagłówek segmentu (formularz informacji) do danych (paczki) przed rozpoczęciem wysyłania segmentu (paczki) do odbiorcy.

Za każdym razem, gdy klient komunikuje się z serwerem, obie strony będą musiały sformatować swoje interakcje w formie segmentu TCP. Segment TCP składa się z nagłówka segmentu TCP dołączonej do danych, które próbujesz wysłać. Nadawca będzie musiał podać informacje wymagane przez nagłówek segmentu.

W przypadku uzgadniania trójstronnego nadawca będzie musiał wypełnić następujące informacje:

  • Port źródłowy: Identyfikuje port nadawcy
  • Port docelowy: Identyfikuje port odbiornika
  • Numer sekwencji: Wskazuje sekwencję segmentów
  • Numer potwierdzenia: Oznacza, że ​​segment został potwierdzony przez dodanie jednego do podanego numeru sekwencji

Oprócz wypełnienia pól nagłówka segmentu, nadawca musi również wybrać bit flagi. W sumie jest sześć bitów flagi, ale do uzgadniania trójstronnego potrzebne będą tylko dwa:

  1. SYN: Podaje numer sekwencyjny. Ten numer sekwencji będzie używany do zliczania sekwencji wszystkich przychodzących segmentów do końca interakcji.
  2. POTWIERDZENIE: Wskazuje, że odbiorca numeru SYN akceptuje żądanie połączenia poprzez dodanie jednego (1) do podanego numeru SYN.

Teraz, gdy wiesz, czym jest segment TCP, zobaczmy, jak jest używany w trójetapowym uścisku dłoni.

Jak działa trójetapowy uścisk dłoni

Uzgadnianie trójstronne jest ustanawiane, gdy zarówno klient, jak i host wymieniły informacje i potwierdziły swoje numery sekwencyjne. Jak sama nazwa wskazuje, trójetapowy uścisk dłoni odbywa się w trzech krokach.

Najpierw klient wysyła czysty segment SYN wskazujący, że chce połączenia. Po drugie, serwer odpowiada segmentem SYN-ACK, co oznacza, że ​​potwierdził żądanie i wysyła własny numer SYN do potwierdzenia przez klienta. Po trzecie, klient wysyła segment ACK do serwera, aby powiadomić go, że numer SYN serwera został potwierdzony i będzie używany do dalszego połączenia.

Potrójny uścisk dłoni będzie wyglądał mniej więcej tak:

Kredyt zasobu: Rozdrabniacz/Wikimedia

Podzielmy to i spójrzmy na segmenty, aby wiedzieć, co dokładnie się dzieje, gdy klient i serwer wymieniają i potwierdzają numery sekwencyjne.

Krok 1: Klient wysyła segment SYN

Kredyt zasobu: Rozdrabniacz/Wikimedia

Klient wysyła połączenie żądania, wysyłając segment SYN do serwera. Klient używa adresu IP klienta do zlokalizowania serwera i wysłania segmentu TCP.

Aby zmniejszyć złożoność segmentu, zignorujmy kilka pól segmentu i skoncentrujmy się na podstawowych potrzebach połączenia trójstronnego uzgadniania. Obejmuje to port źródłowy, port docelowy, numer sekwencyjny, numer potwierdzenia i typ używanego bitu flagi.

W związku z tym segment SYN/żądanie powinien wyglądać tak:

Obraz wykonany przez pisarza 

Port klienta to losowa liczba z zakresu od 49152 do 65536. Ten zakres portów to uzgodniony zakres, z którego urządzenia publiczne mogą dynamicznie korzystać do łączenia się z Internetem. Zakresy portów od 1024 do 49151 są prywatne. Będą musiały zostać zarejestrowane przez podmiot, aby korzystać z portu w określonym zakresie. Numery portów poniżej 1024 to porty zarezerwowane dla różnych funkcji i protokołów internetowych, takich jak FTP (port 20), SMTP (port 25), DNS (port 53) i HTTP (port 80).

W rzeczywistości numer sekwencyjny jest liczbą losową. Na przykład użyliśmy 0000000000, aby ułatwić wizualizację.

Zwróć uwagę na numer sekwencji w miarę postępów w kolejnych krokach. Obecnie jest to 00000000. Obecnie nie ma numeru potwierdzenia, ponieważ nie ma czego potwierdzać.

Krok 2: Serwer odpowiada za pomocą segmentu SYN-ACK

Kredyt zasobu: Rozdrabniacz/Wikimedia

Gdy serwer otrzyma segment SYN, odpowie, wysyłając segment ACK zawierający numer potwierdzenia. Numer potwierdzenia będzie numerem sekwencyjnym klienta plus jeden (1).

Obraz wykonany przez pisarza

Spójrz na port źródłowy. Pokazuje, że segment pochodzi z portu 20, co oznacza, że ​​pochodzi z serwera w odpowiedzi.

Teraz spójrz na numer potwierdzenia. Jest to 0000000001, czyli numer sekwencyjny klienta (00000000000) plus jeden (1). W ten sposób śledzony jest segment. Załóżmy, że klient otrzymał odpowiedź segmentu ACK, w której numer potwierdzenia to 0000000002. Wskazuje to klientowi, że brakuje segmentu 0000000001 i że klient będzie musiał poczekać na jego przybycie więc nie doświadczasz utraty pakietów.

Jak widać, aktywowane są dwa bity flagi — SYN i ACK.

Oprócz potwierdzenia numeru sekwencyjnego klienta, serwer wyśle ​​również własny numer sekwencyjny do klienta w celu potwierdzenia numeru sekwencyjnego serwera plus jeden (1). W naszym przykładzie użyliśmy 1111111111 jako numeru sekwencyjnego serwera. Ponownie, w prawdziwym świecie ta liczba jest losowa.

Zauważ, że numery sekwencyjne klienta i serwera nie muszą się zgadzać. Dopóki obie strony uznają nawzajem swój unikalny numer sekwencyjny, połączenie będzie niezawodne.

Krok 3: Klient odpowiada za pomocą segmentu ACK

Kredyt zasobu: Rozdrabniacz/Wikimedia

Na koniec klient potwierdza numer sekwencyjny serwera.

Obraz wykonany przez pisarza

Ostatni segment to segment ACK od klienta.

Jak możesz, klient potwierdzi numer sekwencyjny serwera, odpowiadając numerem sekwencyjnym serwera (1111111111) plus jeden (1), czyli 1111111112.

Klient i serwer nie będą już wysyłać numeru sekwencji, ponieważ początek sekwencji został już potwierdzony. Obie strony będą jednak oczekiwać segmentów potwierdzeń zawierających numery sekwencyjne plus jeden (1) i liczbę bajtów przez całą interakcję. W takim przypadku klient oczekuje, że następna odpowiedź serwera będzie miała ACK 0000000002 (jeśli nie ma dołączonych danych).

Po czym następuje trójetapowy uścisk dłoni!

Zrozumienie, jak działają połączenia sieciowe

Teraz, gdy nauczyłeś się, jak działa uzgadnianie trójetapowe, łatwiej będzie Ci również zrozumieć, jak działa protokół TCP po uścisku dłoni. Klient i serwer zaczną wysyłać dane po ustanowieniu uzgadniania. Tym razem zostanie użyty pełny format segmentu oraz opcjonalne dane lub ładunek.

Dane są zwykle dzielone na segmenty / cięte na mniejsze kawałki w celu łatwiejszego przenoszenia. Każdy segment danych ma własny nagłówek segmentu zawierający numer sekwencyjny i numer potwierdzenia. Powodem numeru sekwencji jest znajomość kolejności segmentów, kiedy ostatecznie zostaną one ponownie złożone. Numery potwierdzeń służą do weryfikacji z nadawcą, czy jego segment został odebrany i czy pasuje do sekwencji przychodzących segmentów.

Liczenie numerów sekwencyjnych i weryfikacja ich z potwierdzeniem to sposób, w jaki TCP może niezawodnie transportować ogromne porcje danych bez żadnych brakujących pakietów danych.

Dzięki temu powinieneś mieć całkiem dobre pojęcie o tym, jak działa TCP.