If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Protokół 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.
Schemat segmentu TCP w pakiecie IP. Pakiet IP zawiera sekcje nagłówka i danych. Sekcja danych IP jest segmentem TCP, który sam zawiera sekcje nagłówka i danych.
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 20 do 60 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).
Schemat dwóch komputerów ze strzałkami pomiędzy.
  • Strzałka przechodzi z komputera 1 do komputera 2 z etykietą "SYN".
  • Strzałka przechodzi z komputera 2 do komputera 1 z etykietą "ACK SYN".
  • Strzałka przechodzi z komputera 1 do komputera 2 z etykietą "ACK".
Pierwszy komputer wysyła pakiet z bitem SYN ustawionym na 1 (SYN = "synchronize?"). Drugi komputer odsyła pakiet z bitem ACK ustawionym na 1 (ACK = "acknowledge!") i bitem SYN ustawionym na 1. Pierwszy komputer odpowiada ACK.
Bity SYN i ACK są częścią nagłówka TCP:
Schemat nagłówka TCP z rzędami pól. Każdy rząd ma długość 32 bitów. Pierwszy rząd zawiera 16-bitowy numer portu źródłowego i 16-bitowy numer portu docelowego. Drugi rząd zawiera 32-bitowy numer sekwencyjny. Trzeci rząd zawiera 32-bitowy numer potwierdzenia. Czwarty wiersz zawiera 4-bitowy numer przesunięcia danych, 6 bitów oznaczonych jako zarezerwowane, 6 bitów kontrolnych (URG, ACK, PSH, RST, SYN i FIN) oraz 16-bitowy numer rozmiaru okna. Piąty rząd zawiera 16-bitową sumę kontrolną i 16-bitowy wskaźnik priorytetu. Nagłówek kończy się opcjami i uzupełnieniem, które może mieć różną długość.
Bity ACK i SYN są zaznaczone w czwartym wierszu nagłówka.
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ł.
Schemat dwóch komputerów ze strzałkami pomiędzy.
  • Strzałka przechodzi z komputera 1 do komputera 2 i pokazuje ramkę z danymi binarnymi oraz etykietę "Sekwencja #1".
  • Strzałka przechodzi z komputera 2 do komputera 1 z etykietą "ACK".
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:
Schemat nagłówka TCP z rzędami pól. Każdy rząd ma długość 32 bitów. Pierwszy rząd zawiera 16-bitowy numer portu źródłowego i 16-bitowy numer portu docelowego. Drugi rząd zawiera 32-bitowy numer sekwencyjny. Trzeci rząd zawiera 32-bitowy numer potwierdzenia. Czwarty wiersz zawiera 4-bitowy numer przesunięcia danych, 6 bitów oznaczonych jako zarezerwowane, 6 bitów kontrolnych (URG, ACK, PSH, RST, SYN i FIN) oraz 16-bitowy numer rozmiaru okna. Piąty rząd zawiera 16-bitową sumę kontrolną i 16-bitowy wskaźnik priorytetu. Nagłówek kończy się opcjami i uzupełnieniem, które może mieć różną długość.
Podświetlone są 32-bitowe numery sekwencji i potwierdzenia.
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.
Schemat dwóch komputerów ze strzałkami pomiędzy.
  • Strzałka przechodzi z komputera 1 do komputera 2 z etykietą "FIN".
  • Strzałka przechodzi z komputera 2 do komputera 1 z etykietą "ACK FIN".
  • Strzałka przechodzi z komputera 1 do komputera 2 z etykietą "ACK".
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.
Schemat przedstawiający ponowną transmisję pakietu z jednego komputera do drugiego. Strzałka przechodzi z pierwszego komputera na drugi i jest oznaczona "sekwencją #1" oraz ciągiem danych binarnych. Stoper jest pokazywany w różnych etapach po strzałce, najpierw z upływem 0 czasu, potem połowy czasu, potem całego czasu i w stanie alarmowym. Kolejna strzałka przechodzi z pierwszego do drugiego laptopa, oznaczonego tak samo jak pierwszy.
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.
Schemat dwóch komputerów ze strzałkami pomiędzy.
  • Strzałka biegnie od komputera 1 do komputera 2 i pokazuje pole danych binarnych z etykietą "Seq #1".
  • Strzałka przechodzi z komputera 2 do komputera 1 z etykietą "Ack #37".
  • Strzałka przechodzi z komputera 1 do komputera 2 i pokazuje pole z danymi binarnymi z etykietą "Seq #73".
  • Strzałka biegnie od komputera 2 do komputera 1 z etykietą "Ack #37".
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.
Diagram pakietów TCP przychodzących poza kolejnością. Dwa komputery są pokazane ze strzałkami biegnącymi w tę i z powrotem, a ich pionowe położenie wskazuje czas wysłania i przybycia:
  • Strzałka oznaczona jako "Seq #1" zaczyna się od komputera 1 i kończy się wkrótce potem na komputerze 2.
  • Strzałka oznaczona jako "Ack #37" zaczyna się w Komputerze 2 i kończy się wkrótce potem w Komputerze 1.
  • Strzałka oznaczona "Seq #37" zaczyna się od komputera 1 i kończy się dopiero po chwili na komputerze 2.
  • Strzałka oznaczona "Seq #73" zaczyna się od komputera 1 i kończy się wkrótce potem w komputerze 2 (przed strzałką dla "Seq #37").
  • Strzałka oznaczona jako "Ack #37" zaczyna się w Komputerze 2 i kończy się wkrótce potem w Komputerze 1 (przed strzałką dla "Seq #37").
W innych przypadkach, brakujący pakiet może być w rzeczywistości utraconym pakietem i nadawca musi retransmitować pakiet.
Diagram pakietów TCP przychodzących poza kolejnością. Dwa komputery są pokazane ze strzałkami biegnącymi w tę i z powrotem, a ich pionowe położenie wskazuje czas wysłania i przybycia:
  • Strzałka oznaczona jako "Seq #1" zaczyna się od komputera 1 i kończy się wkrótce potem na komputerze 2.
  • Strzałka oznaczona jako "Ack #37" zaczyna się w Komputerze 2 i kończy się wkrótce potem w Komputerze 1.
  • Strzałka oznaczona "Seq #37" zaczyna się od komputera 1 i kończy się przed dotarciem do komputera 2, a znak X oznacza, że została utracona.
  • Strzałka oznaczona "Seq #73" zaczyna się od komputera 1 i kończy się wkrótce potem w komputerze 2.
  • Strzałka oznaczona jako "Ack #37" zaczyna się od komputera 2 i kończy się wkrótce potem w komputerze 1.
  • Strzałka oznaczona "Seq #37" zaczyna się od komputera 1 i kończy się wkrótce potem na komputerze 2.
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.
Schemat ponownego scalania danych TCP.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️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
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.