Główna zawartość
Podstawy informatyki - program rozszerzony
Kurs: Podstawy informatyki - program rozszerzony > Rozdział 2
Lekcja 5: Transportowanie pakietówProtokół kontroli transmisji (TCP)
Protokół sterowania transmisją (ang. Transmission Control Protocol, TCP) jest protokołem transportowym, który jest używany na szczycie protokołu IP w celu zapewnienia niezawodnej transmisji pakietów.
TCP zawiera mechanizmy rozwiązujące wiele problemów, które pojawiają się w przesyłaniu wiadomości opartych na pakietach, takich jak utracone pakiety, pakiety poza kolejnością, zduplikowane pakiety i uszkodzone pakiety.
Ponieważ TCP jest protokołem najczęściej stosowanym na szczycie IP, stos protokołów internetowych jest czasami określany jako TCP/IP.
Format pakietu
Podczas wysyłania pakietów za pomocą protokołu TCP/IP, część danych każdego pakietu IP jest formatowana jako segment TCP.
Każdy segment TCP zawiera nagłówek i dane. Nagłówek TCP zawiera o wiele więcej pól niż nagłówek UDP i może mieć rozmiar od do bajtów, w zależności od rozmiaru pola opcji.
Nagłówek TCP współdzieli niektóre pola z nagłówkiem UDP: numer portu źródłowego, numer portu docelowego i sumę kontrolną. Aby przypomnieć sobie, jak są one używane, przeczytaj artykuł o UDP.
Od początku do końca
Prześledźmy proces przesyłania pakietów za pomocą protokołu TCP/IP.
Krok 1: Nawiązanie połączenia
Kiedy dwa komputery chcą przesłać do siebie dane za pomocą protokołu TCP, muszą najpierw nawiązać połączenie za pomocą trójstronnego uścisku dłoni (ang. three-way handshake).
Pierwszy komputer wysyła pakiet z bitem SYN ustawionym na (SYN = "synchronize?"). Drugi komputer odsyła pakiet z bitem ACK ustawionym na (ACK = "acknowledge!") i bitem SYN ustawionym na . Pierwszy komputer odpowiada ACK.
Bity SYN i ACK są częścią nagłówka TCP:
W rzeczywistości, trzy pakiety biorące udział w trójstronnym uścisku dłoni (ang. three-way handshake) nie zawierają zazwyczaj żadnych danych. Kiedy komputery zakończą proces uścisku dłoni, są gotowe do odbioru pakietów zawierających rzeczywiste dane.
Krok 2: Wysyłanie pakietów danych
Kiedy pakiet danych jest wysyłany przez TCP, odbiorca musi zawsze potwierdzić to, co otrzymał.
Pierwszy komputer wysyła pakiet z danymi i numerem sekwencyjnym. Drugi komputer potwierdza to ustawiając bit ACK i zwiększając numer potwierdzenia o długość odebranych danych.
W rzeczywistości, trzy pakiety biorące udział w trójstronnym uścisku dłoni nie zawierają zazwyczaj żadnych danych. Kiedy komputery zakończą proces uścisku dłoni, są gotowe do odbioru pakietów zawierających rzeczywiste dane.
Numery sekwencji i potwierdzenia są częścią nagłówka TCP:
Te dwie liczby pomagają komputerom śledzić, które dane zostały pomyślnie odebrane, które dane zostały utracone, a które dane zostały przypadkowo wysłane dwukrotnie.
Krok 3: Zamknięcie połączenia
Każdy komputer może zamknąć połączenie, gdy nie chce już wysyłać lub odbierać danych.
Komputer inicjuje zamknięcie połączenia poprzez wysłanie pakietu z bitem FIN ustawionym na 1 (FIN = finish). Drugi komputer odpowiada pakietem ACK i kolejnym FIN. Po jeszcze jednym ACK od komputera inicjującego, połączenie zostaje zamknięte.
Wykrywanie utraconych pakietów
Połączenia TCP mogą wykrywać utracone pakiety za pomocą limitu czasu.
Po wysłaniu pakietu, nadawca uruchamia licznik czasu i umieszcza pakiet w kolejce retransmisji. Jeśli czas ten upłynie, a nadawca nie otrzymał jeszcze ACK od odbiorcy, wysyła pakiet ponownie.
Retransmisja może prowadzić do otrzymania przez odbiorcę zduplikowanych pakietów, jeśli pakiet nie został faktycznie utracony tylko bardzo wolno docierał lub był potwierdzany. Jeśli tak jest, odbiorca może po prostu odrzucić zduplikowane pakiety. Lepiej jest mieć dane dostarczone dwa razy niż wcale!
Obsługa nieuporządkowanych pakietów
Połączenia TCP mogą wykryć nieuporządkowane pakiety za pomocą numerów sekwencji i potwierdzenia.
Gdy odbiorca widzi wyższy numer sekwencji niż ten, który do tej pory potwierdził, wie, że brakuje mu co najmniej jednego pakietu pomiędzy nimi. W sytuacji przedstawionej powyżej, odbiorca widzi numer sekwencji 73, ale spodziewał się numeru sekwencji 37. Odbiorca daje znać nadawcy, że coś jest nie tak, wysyłając pakiet z numerem potwierdzenia ustawionym na oczekiwany numer sekwencji.
Czasami brakujący pakiet po prostu porusza się wolniejszą trasą przez Internet i dociera na miejsce wkrótce potem.
W innych przypadkach, brakujący pakiet może być w rzeczywistości utraconym pakietem i nadawca musi retransmitować pakiet.
W obu sytuacjach odbiorca musi sobie radzić z nieuporządkowanymi pakietami. Na szczęście, odbiorca może użyć numerów sekwencji, aby ponownie złożyć dane pakietu w prawidłowej kolejności.
🙋🏽🙋🏻♀️🙋🏿♂️Czy masz jakieś pytania na ten temat? Chętnie na nie odpowiemy — wystarczy, że zadasz pytanie w poniższym obszarze pytań!
Chcesz dołączyć do dyskusji?
Na razie brak głosów w dyskusji