Kluczowe tajemnice połączeń TCP z brokerem pakietów sieciowych: wyjaśniono potrzebę potrójnego uzgadniania

Konfiguracja połączenia TCP
Przeglądając Internet, wysyłając e-maile lub grając w gry online, często nie myślimy o skomplikowanym połączeniu sieciowym, które się za tym kryje. Jednak to właśnie te pozornie małe kroki zapewniają stabilną komunikację pomiędzy nami a serwerem. Jednym z najważniejszych kroków jest konfiguracja połączenia TCP, a podstawą tego jest trójstronny uzgadnianie.

W tym artykule szczegółowo omówiono zasadę, proces i znaczenie trójstronnego uścisku dłoni. Krok po kroku wyjaśnimy, dlaczego potrzebny jest trójstronny uzgadnianie, w jaki sposób zapewnia on stabilność i niezawodność połączenia oraz jakie znaczenie ma on dla transferu danych. Dzięki głębszemu zrozumieniu trójstronnego uzgadniania uzyskamy lepsze zrozumienie podstawowych mechanizmów komunikacji sieciowej i jaśniejszy obraz niezawodności połączeń TCP.

Proces trójstronnego uzgadniania protokołu TCP i przejścia stanów
TCP to protokół transportowy zorientowany na połączenie, który wymaga nawiązania połączenia przed transmisją danych. Proces nawiązywania połączenia odbywa się poprzez trójstronne uzgadnianie.

 Uzgadnianie trójstronne TCP

Przyjrzyjmy się bliżej pakietom TCP wysyłanym w każdym połączeniu.

Początkowo zarówno klient, jak i serwer są ZAMKNIĘTE. Po pierwsze, serwer aktywnie nasłuchuje na porcie i znajduje się w stanie LISTEN, co oznacza, że ​​serwer musi zostać uruchomiony. Następnie klient jest gotowy do rozpoczęcia dostępu do strony. Musi nawiązać połączenie z serwerem. Format pierwszego pakietu połączenia jest następujący:

 Pakiet SYN

Kiedy klient inicjuje połączenie, generuje losowy początkowy numer sekwencyjny (client_isn) i umieszcza go w polu „Numer sekwencyjny” nagłówka TCP. Jednocześnie klient ustawia flagę SYN na 1, aby wskazać, że pakiet wychodzący jest pakietem SYN. Klient sygnalizuje, że chce nawiązać połączenie z serwerem, wysyłając do serwera pierwszy pakiet SYN. Pakiet ten nie zawiera danych warstwy aplikacji (tzn. wysłanych danych). W tym momencie status klienta jest oznaczony jako SYN-SENT.

Pakiet SYN+ACK

Kiedy serwer odbiera pakiet SYN od klienta, losowo inicjuje swój własny numer seryjny (server_isn), a następnie umieszcza ten numer w polu „Numer seryjny” nagłówka TCP. Następnie serwer wprowadza client_isn + 1 w polu „Numer potwierdzenia” i ustawia bity SYN i ACK na 1. Na koniec serwer wysyła do klienta pakiet, który nie zawiera żadnych danych warstwy aplikacji (ani danych dla serwera wysłać). W tej chwili serwer znajduje się w stanie SYN-RCVD.

Pakiet ACK

Gdy klient odbierze pakiet z serwera, musi przeprowadzić następujące optymalizacje, aby odpowiedzieć na końcowy pakiet odpowiedzi: Najpierw klient ustawia bit ACK nagłówka TCP pakietu odpowiedzi na 1; Następnie klient wpisuje wartość serwer_isn + 1 w polu „Potwierdź numer odpowiedzi”; Na koniec klient wysyła pakiet do serwera. Pakiet ten może przenosić dane od klienta do serwera. Po zakończeniu tych operacji klient przejdzie w stan ESTABLISHED.

Gdy serwer odbierze pakiet odpowiedzi od klienta, również przechodzi do stanu ESTABLISHED.

Jak widać z powyższego procesu, podczas trójstronnego uzgadniania, trzeci uścisk dłoni może przenosić dane, ale pierwsze dwa nie. To pytanie, które często pojawia się na rozmowach kwalifikacyjnych. Po zakończeniu trójstronnego uzgadniania obie strony wchodzą w stan USTANOWIONY, co oznacza, że ​​połączenie zostało pomyślnie nawiązane i w tym momencie klient i serwer mogą rozpocząć przesyłanie danych do siebie.

Dlaczego trzy uściski dłoni? Nie dwa razy, cztery razy?
Najczęstszą odpowiedzią jest: „Ponieważ trójstronny uścisk dłoni gwarantuje możliwość odbierania i wysyłania”. Ta odpowiedź jest poprawna, ale jest to tylko przyczyna powierzchowna, nie przedstawiająca przyczyny głównej. Poniżej przeanalizuję przyczyny potrójnego uścisku dłoni w trzech aspektach, aby pogłębić nasze zrozumienie tej kwestii.

Trójstronny uzgadnianie może skutecznie uniknąć inicjalizacji historycznie powtarzanych połączeń (główny powód)
Trójstronny uścisk dłoni gwarantuje, że obie strony otrzymały wiarygodny początkowy numer kolejny.
Trójstronny uścisk dłoni pozwala uniknąć marnowania zasobów.

Powód 1: Unikaj historycznych zduplikowanych połączeń
W skrócie, głównym powodem trójstronnego uzgadniania jest uniknięcie nieporozumień spowodowanych starą, zduplikowaną inicjalizacją połączenia. W złożonym środowisku sieciowym transmisja pakietów danych nie zawsze jest wysyłana do hosta docelowego zgodnie z określonym czasem, a stare pakiety danych mogą najpierw dotrzeć do hosta docelowego z powodu przeciążenia sieci i innych powodów. Aby tego uniknąć, protokół TCP wykorzystuje trójstronne uzgadnianie w celu nawiązania połączenia.

trójstronny uzgadnianie pozwala uniknąć historycznych zduplikowanych połączeń

Gdy klient wysyła kolejno wiele pakietów ustanawiania połączenia SYN, w sytuacjach takich jak przeciążenie sieci może wystąpić następująca sytuacja:

1- Stare pakiety SYN docierają do serwera przed najnowszymi pakietami SYN.
2- Serwer odpowie klientowi na pakiet SYN + ACK po odebraniu starego pakietu SYN.
3- Gdy klient odbierze pakiet SYN + ACK, ustala, że ​​połączenie jest połączeniem historycznym (numer kolejny wygasł lub przekroczono limit czasu) zgodnie z własnym kontekstem, a następnie wysyła pakiet RST do serwera, aby przerwać połączenie.

W przypadku połączenia wymagającego uzgadniania nie ma możliwości ustalenia, czy bieżące połączenie jest połączeniem historycznym. Uzgadnianie trójstronne pozwala klientowi określić, czy bieżące połączenie jest połączeniem historycznym, na podstawie kontekstu, w którym jest gotowy do wysłania trzeciego pakietu:

1- Jeśli jest to połączenie historyczne (numer kolejny wygasł lub przekroczono limit czasu), pakiet wysłany w ramach trzeciego uzgadniania jest pakietem RST mającym na celu przerwanie połączenia historycznego.
2- Jeśli nie jest to połączenie historyczne, pakiet wysłany po raz trzeci jest pakietem ACK i dwie komunikujące się strony pomyślnie nawiązują połączenie.

Dlatego głównym powodem, dla którego protokół TCP używa trójstronnego uzgadniania, jest inicjalizacja połączenia, aby zapobiec połączeniom historycznym.

Powód 2: Aby zsynchronizować początkowe numery sekwencyjne obu stron
Obie strony protokołu TCP muszą utrzymywać numer sekwencyjny, który jest kluczowym czynnikiem zapewniającym niezawodną transmisję. Numery sekwencyjne odgrywają ważną rolę w połączeniach TCP. Wykonują następujące czynności:

Odbiorca może wyeliminować zduplikowane dane i zapewnić dokładność danych.

Odbiornik może odbierać pakiety w kolejności numeru sekwencyjnego, aby zapewnić integralność danych.

● Numer sekwencyjny może identyfikować pakiet danych odebrany przez drugą stronę, umożliwiając niezawodną transmisję danych.

Dlatego po nawiązaniu połączenia TCP klient wysyła pakiety SYN z początkowym numerem sekwencyjnym i wymaga od serwera odpowiedzi pakietem ACK wskazującym pomyślny odbiór pakietu SYN klienta. Następnie serwer wysyła do klienta pakiet SYN z początkowym numerem sekwencyjnym i czeka, aż klient raz na zawsze odpowie, aby zapewnić niezawodną synchronizację początkowych numerów sekwencyjnych.

Zsynchronizuj początkowe numery seryjne obu stron

Chociaż możliwe jest również czterostronne uzgadnianie, aby niezawodnie zsynchronizować początkowe numery sekwencyjne obu stron, drugi i trzeci krok można połączyć w jeden, uzyskując trójstronny uzgadnianie. Jednakże dwa uściski dłoni mogą jedynie zagwarantować, że początkowy numer kolejny jednej strony zostanie pomyślnie odebrany przez drugą stronę, ale nie ma gwarancji, że początkowy numer kolejny obu stron zostanie potwierdzony. Dlatego trójstronny uzgadnianie jest najlepszym wyborem, aby zapewnić stabilność i niezawodność połączeń TCP.

Powód 3: Unikaj marnowania zasobów
Jeśli nastąpi tylko „uzgadnianie dwóch transakcji”, gdy żądanie SYN klienta zostanie zablokowane w sieci, klient nie będzie mógł odebrać pakietu ACK wysłanego przez serwer, więc sygnał SYN zostanie wysłany ponownie. Ponieważ jednak nie ma trzeciego uzgadniania, serwer nie może ustalić, czy klient otrzymał potwierdzenie ACK w celu nawiązania połączenia. Dlatego serwer może proaktywnie nawiązać połączenie dopiero po otrzymaniu każdego żądania SYN. Prowadzi to do następujących sytuacji:

Marnowanie zasobów: Jeśli żądanie SYN klienta zostanie zablokowane, co spowoduje wielokrotną transmisję wielu pakietów SYN, serwer po otrzymaniu żądania ustanowi wiele redundantnych, nieprawidłowych połączeń. Prowadzi to do niepotrzebnego marnowania zasobów serwera.

Przechowywanie wiadomości: Z powodu braku trzeciego uścisku dłoni serwer nie ma możliwości sprawdzenia, czy klient poprawnie otrzymał potwierdzenie ACK w celu nawiązania połączenia. W rezultacie, jeśli wiadomości utkną w sieci, klient będzie ciągle wysyłał żądania SYN, powodując, że serwer będzie stale nawiązywał nowe połączenia. Zwiększy to przeciążenie i opóźnienia sieci oraz negatywnie wpłynie na ogólną wydajność sieci.

Unikaj marnowania zasobów

Dlatego, aby zapewnić stabilność i niezawodność połączenia sieciowego, protokół TCP wykorzystuje trójstronne uzgadnianie w celu nawiązania połączenia, aby uniknąć wystąpienia tych problemów.

Streszczenie
TheBroker pakietów sieciowychNawiązanie połączenia TCP odbywa się za pomocą trójstronnego uzgadniania. Podczas trójstronnego uzgadniania klient najpierw wysyła do serwera pakiet z flagą SYN, wskazując, że chce nawiązać połączenie. Po otrzymaniu żądania od klienta serwer odpowiada klientowi na pakiet z flagami SYN i ACK, wskazując, że żądanie połączenia zostało przyjęte, i wysyła swój własny początkowy numer sekwencyjny. Na koniec klient odpowiada serwerowi flagą ACK, aby wskazać, że połączenie zostało pomyślnie nawiązane. Tym samym obie strony znajdują się w stanie ESTABLISHED i mogą rozpocząć przesyłanie sobie danych.

Ogólnie rzecz biorąc, proces trójstronnego uzgadniania nawiązywania połączenia TCP ma na celu zapewnienie stabilności i niezawodności połączenia, uniknięcie zamieszania i marnowania zasobów w przypadku połączeń historycznych oraz zapewnienie, że obie strony będą mogły odbierać i wysyłać dane.


Czas publikacji: 08 stycznia 2025 r