Konfiguracja połączenia TCP
Kiedy przeglądamy sieć, wysyłamy wiadomość e -mail lub gramy w grę online, często nie myślimy o złożonym połączeniu sieciowym za nią. Jednak to pozornie małe kroki zapewniają stabilną komunikację między nami a serwerem. Jednym z najważniejszych kroków jest konfiguracja połączenia TCP, a rdzeniem tego jest trójstronny uścisk dłoni.
W tym artykule szczegółowo omówi zasadę, proces i znaczenie trójstronnego uścisku dłoni. Krok po kroku wyjaśnimy, dlaczego potrzebny jest trójstronny uścisk dłoni, w jaki sposób zapewnia stabilność i niezawodność połączenia oraz jak ważne jest dla przesyłania danych. Dzięki głębszym zrozumieniu trójstronnego uścisku dłoni lepiej zrozumiemy podstawowe mechanizmy komunikacji sieciowej i wyraźniejszy widok niezawodności połączeń TCP.
TRYWARDY PROCES PROCESU SZYBKI TCP i przejścia stanu
TCP to protokół transportu zorientowany na połączenie, który wymaga ustanowienia połączenia przed transmisją danych. Ten proces ustanowienia połączenia odbywa się w trójstronnym uścisku dłoni.
Przyjrzyjmy się bliżej pakietom TCP, które są wysyłane w każdym połączeniu.
Początkowo zarówno klient, jak i serwer są zamknięte. Po pierwsze, serwer aktywnie słucha w porcie i jest w stanie słuchania, co oznacza, że serwer musi zostać uruchomiony. Następnie klient jest gotowy, aby rozpocząć dostęp do strony internetowej. Musi nawiązać połączenie z serwerem. Format pierwszego pakietu połączenia jest następujący:
Gdy klient inicjuje połączenie, generuje losowy numer sekwencji początkowej (Client_ISN) i umieszcza go w polu „Numer sekwencji” nagłówka TCP. Jednocześnie klient ustawia pozycję flagi SYN na 1, aby wskazać, że pakiet wychodzący jest pakietem SYN. Klient wskazuje, że chce nawiązać połączenie z serwerem, wysyłając pierwszy pakiet SYN na serwer. Ten pakiet nie zawiera danych warstwy aplikacji (to znaczy wysłanych danych). W tym momencie status klienta jest oznaczony jako Syn-Sent.
Gdy 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 zarówno bity Syn, jak i ACK na 1. Wreszcie serwer wysyła pakiet do klienta, który nie zawiera danych warstwy aplikacji (i żadnych danych do wysyłania serwera). W tej chwili serwer jest w stanie Syn-RCVD.
Gdy klient otrzyma pakiet z serwera, musi wykonać następujące optymalizacje, aby odpowiedzieć na końcowy pakiet odpowiedzi: Po pierwsze, klient ustawia bit ACK nagłówka TCP pakietu odpowiedzi na 1; Po drugie, klient wprowadza wartość Server_ISN + 1 w polu „Polej numer odpowiedzi”; Wreszcie klient wysyła pakiet na serwer. Ten pakiet może przenosić dane z klienta na serwer. Po zakończeniu tych operacji klient wejdzie do ustalonego stanu.
Gdy serwer odbiera pakiet odpowiedzi od klienta, przełącza się również na ustalony stan.
Jak widać z powyższego procesu, podczas wykonania trójstronnego uścisku dłoni trzeci uścisk dłoni może nosić dane, ale pierwsze dwa uściski dłoni nie są. To pytanie często zadawane w wywiadach. Po zakończeniu trójstronnego uścisku dłoni obie strony wprowadzają ustalony stan, wskazując, że połączenie zostało pomyślnie ustalone, w którym to momencie klient i serwer mogą zacząć wysyłać dane do siebie.
Dlaczego trzy uściski dłoni? Nie dwa razy, cztery razy?
Wspólna odpowiedź brzmi: „ponieważ trójstronny uścisk dłoni gwarantuje możliwość odbierania i wysyłania”. Ta odpowiedź jest poprawna, ale jest to tylko powód powierzchniowy, nie przedstawia głównego powodu. Poniżej przeanalizuję przyczyny potrójnego uścisku dłoni z trzech aspektów, aby pogłębić nasze zrozumienie tego problemu.
Trójdrożny uścisk dłoni może skutecznie uniknąć inicjalizacji historycznie powtarzanych połączeń (główny powód)
Trójdrożny uścisk dłoni gwarantuje, że obie strony otrzymały niezawodny numer sekwencji początkowej.
Trójdrożny uścisk dłoni unika marnowania zasobów.
Powód 1: Unikaj historycznych duplikat
Krótko mówiąc, głównym powodem trójstronnego uścisku dłoni jest unikanie zamieszania spowodowanego przez 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ą przede wszystkim dotrzeć do hosta docelowego z powodu przeciążenia sieci i innych powodów. Aby tego uniknąć, TCP używa trójstronnego uścisku dłoni w celu ustalenia połączenia.
Gdy klient wysyła wiele pakietów ustanawiania połączeń SYN, w sytuacjach takich jak przeciążenie sieciowe mogą wystąpić następujące:
1- stare pakiety Syn docierają na serwer przed najnowszymi pakietami SYN.
2- Serwer odpowie klientowi pakietu SYN + ACK po otrzymaniu starego pakietu SYN.
3- Gdy klient odbiera pakiet SYN + ACK, określa, że połączenie jest połączeniem historycznym (numer sekwencji wygasł lub limit czasu) zgodnie z własnym kontekstem, a następnie wysyła pakiet RST na serwer w celu przerwania połączenia.
Przy połączeniu z dwoma rękami nie ma możliwości ustalenia, czy obecne połączenie jest kontaktem historycznym. Trójdrożny uścisk dłoni pozwala klientowi ustalić, czy bieżące połączenie jest historycznym połączeniem opartym na kontekście, gdy jest gotowe wysłać trzeci pakiet:
1- Jeśli jest to połączenie historyczne (numer sekwencji wygasł lub limit czasu), pakiet wysyłany przez trzeci uścisk dłoni jest pakietem RST do przerwania związku historycznego.
2- Jeśli nie jest to połączenie historyczne, pakiet wysłany po raz trzeci jest pakietem ACK, a dwie strony komunikujące z powodzeniem nawiązują połączenie.
Dlatego głównym powodem, dla którego TCP korzysta z trójstronnego uścisku dłoni jest to, że inicjuje połączenie, aby zapobiec powiązaniom historycznym.
Powód 2: zsynchronizować początkowe liczby sekwencji obu stron
Obie strony protokołu TCP muszą utrzymywać numer sekwencji, który jest kluczowym czynnikiem zapewniającym wiarygodną transmisję. Liczby sekwencji odgrywają ważną rolę w połączeniach TCP. Wykonują:
Odbiornik może wyeliminować zduplikowane dane i zapewnić dokładność danych.
Odbiornik może odbierać pakiety w kolejności numeru sekwencji, aby zapewnić integralność danych.
● Numer sekwencji może zidentyfikować pakiet danych, który został odebrany przez drugą stronę, umożliwiając wiarygodną transmisję danych.
Dlatego po ustaleniu połączenia TCP klient wysyła pakiety Syn z początkowym numerem sekwencji i wymaga od serwera odpowiedzienia z pakietem ACK wskazującym pomyślne odbiór pakietu SYN klienta. Następnie serwer wysyła pakiet SYN z początkowym numerem sekwencji do klienta i czeka, aż klient odpowie raz na zawsze, aby upewnić się, że początkowe numery sekwencji są niezawodnie zsynchronizowane.
Chociaż możliwe jest również czterokierunkowe uścisk dłoni, aby niezawodnie zsynchronizować początkowe liczby sekwencji obu stron, drugie i trzecie kroki można połączyć w jeden krok, co skutkuje trójstronnym uściskiem dłoni. Jednak dwa uściski dłoni mogą jedynie zagwarantować, że początkowa liczba sekwencji jednej ze stron zostanie pomyślnie odbierana przez drugą stronę, ale nie ma gwarancji, że można potwierdzić początkową liczbę sekwencji obu stron. Dlatego trójstronny uścisk dłoni jest najlepszym wyborem, aby zapewnić stabilność i niezawodność połączeń TCP.
Powód 3: Unikaj marnowania zasobów
Jeśli istnieje tylko „uścisk dwóch ręków”, gdy żądanie synchna klienta jest zablokowane w sieci, klient nie może odbierać pakietu ACK wysłanego przez serwer, więc syn będzie niechęt. Ponieważ jednak nie ma trzeciego uścisku dłoni, serwer nie może ustalić, czy klient otrzymał potwierdzenie ACK w celu ustalenia połączenia. Dlatego serwer może proaktywnie tworzyć połączenie dopiero po otrzymaniu każdego żądania SYN. Prowadzi to do następujących czynności:
Odpadanie zasobów: Jeśli żądanie SYN jest zablokowane, powodując powtarzającą się transmisję wielu pakietów SYN, serwer ustanowi wiele redundantnych niepoprawnych połączeń po otrzymaniu żądania. Prowadzi to do niepotrzebnego marnotrawstwa zasobów serwera.
Zatrzymanie wiadomości: Z powodu braku trzeciego uścisku dłoni serwer nie ma możliwości dowiedzenia się, 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 stale tworzy nowe połączenia. Zwiększy to zatłoczenie sieci i opóźnienie oraz negatywnie wpłynie na ogólną wydajność sieci.
Dlatego, aby zapewnić stabilność i niezawodność połączenia sieciowego, TCP używa trójstronnego uścisku dłoni w celu ustalenia połączenia, aby uniknąć wystąpienia tych problemów.
Streszczenie
.Broker pakietu sieciowegoUstanowienie połączenia TCP odbywa się z trójstronnym uściskiem dłoni. Podczas trójstronnego uścisku dłoni klient najpierw wysyła pakiet z flagą SYN na serwer, co wskazuje, że chce nawiązać połączenie. Po otrzymaniu żądania od klienta serwer odpowiada klientowi pakiet z flagami SYN i ACK, wskazując, że żądanie połączenia jest akceptowane i wysyła własny numer sekwencji. Wreszcie klient odpowiada serwerowi flagą ACK, aby wskazać, że połączenie zostało pomyślnie ustanowione. Tak więc obie strony są w ustalonym stanie i mogą zacząć wysyłać do siebie dane.
Ogólnie rzecz biorąc, trójstronny proces uścisku dłoni dla zakładu połączenia TCP został zaprojektowany w celu zapewnienia stabilności i niezawodności połączenia, uniknięcia zamieszania i marnotrawstwa zasobów w związku z historycznymi połączeniami oraz zapewnienie, że obie strony są w stanie odbierać i wysyłać dane.
Czas postu: 08-2025