encyklopedia.space

TCP (Transmission Control Protocol)

Transmission Control Protocol (TCP) – protokół warstwy transportowej modelu OSI oraz stosu TCP/IP. Zapewnia on niezawodną, połączeniową transmisję danych między aplikacjami działającymi na różnych komputerach w sieci Internet. Dzięki mechanizmom kontroli błędów, potoku danych oraz przeciwdziałania zatłoczeniu, TCP jest jednym z najważniejszych protokołów używanych w współczesnych systemach komunikacji komputerowej.

Historia

Prace nad TCP rozpoczęły się w latach 1973 w ramach projektu ARPANET. Najważniejsze koncepcje sformułowali Vint Cerf i Robert Kahn. Pierwotna specyfikacja łączyła funkcje, które później zostały podzielone na dwa oddzielne protokoły: TCP (warstwa transportowa) i IP (warstwa sieciowa). Pierwsza wersja TCP została opublikowana w dokumencie RFC 793 w 1981 roku i od tego czasu stała się standardem de‑facto dla transmisji danych w Internecie.

Podstawowe założenia

  • Połączeniowość – przed wymianą danych dwa końce muszą ustanowić połączenie (tzw. handshake trójstopniowy).
  • Niezawodność – każdy segment jest potwierdzany (ACK), a utracone lub uszkodzone pakiety są retransmitowane.
  • Kontrola przepływu – mechanizm window scaling zapewnia, że nadawca nie przepełni bufora odbiorcy.
  • Kontrola zatłoczenia – algorytmy takie jak TCP Reno, TCP Vegas czy CUBIC dostosowują szybkość transmisji do warunków sieciowych.
  • Porządek – segmenty są dostarczane w takiej samej kolejności, w jakiej zostały wysłane.

Budowa segmentu TCP

Segment TCP składa się z nagłówka oraz danych aplikacji (payload). Najważniejsze pola nagłówka to:

Pole Rozmiar (bity) Opis
Source Port 16 Numer portu źródłowego.
Destination Port 16 Numer portu docelowego.
Sequence Number 32 Numer pierwszego bajtu w segmencie.
Acknowledgment Number 32 Numer kolejnego oczekiwanego bajtu (ACK).
Data Offset 4 Długość nagłówka w słowach 32‑bitowych.
Reserved 3 Zarezerwowane do przyszłego użytku.
Flags 9 Flagi sterujące (URG, ACK, PSH, RST, SYN, FIN).
Window Size 16 Rozmiar okna odbiorcy (kontrola przepływu).
Checksum 16 Suma kontrolna – wykrywa uszkodzenia.
Urgent Pointer 16 Wskaźnik danych pilnych (jeśli flaga URG jest ustawiona).
Options zmienna Rozszerzenia, np. MSS, Timestamp, SACK.

Proces ustanawiania połączenia (handshake trójstopniowy)

  1. SYN – klient wysyła segment z ustawioną flagą SYN i numerem sekwencji x.
  2. SYN‑ACK – serwer odpowiada segmentem z flagami SYN i ACK, numer sekwencji y oraz potwierdzeniem x+1.
  3. ACK – klient wysyła segment z flagą ACK, potwierdzając y+1. Po tej wymianie połączenie jest otwarte.

Po zakończeniu transmisji połączenie jest zamykane poprzez czterostopniowy proces z użyciem flag FIN i ACK.

Mechanizmy kontrolne

Kontrola przepływu (Flow Control)

Używany jest mechanizm sliding window. Odbiorca informuje nadawcę o rozmiarze dostępnego bufora w polu Window Size. Dzięki temu nadawca nie wysyła więcej danych niż odbiorca jest w stanie przyjąć.

Kontrola zatknięcia (Congestion Control)

Algorytmy kontrolujące zatłoczenie dostosowują rozmiar okna congestion window (cwnd) w zależności od wykrytej utraty pakietów lub zwiększonego opóźnienia. Najważniejsze etapy:

  • Slow Start – początkowo cwnd rośnie wykładniczo.
  • Congestion Avoidance – po przekroczeniu progu (ssthresh) wzrost staje się liniowy.
  • Fast Retransmit & Fast Recovery – po trzech powtórnych potwierdzeniach (duplicate ACK) następuje natychmiastowa retransmisja utraconego segmentu.

Warianty i rozszerzenia

W ciągu lat opracowano wiele modyfikacji protokołu, które wprowadzają nowe funkcje lub optymalizują istniejące mechanizmy:

  • TCP Reno – klasyczny algorytm kontroli zatknięcia.
  • TCP Vegas – wykorzystuje pomiar opóźnienia w celu wczesnego wykrywania zatknięcia.
  • TCP CUBIC – domyślny w systemach Linux, zoptymalizowany pod kątem szybkich łączy.
  • TCP SACK (Selective Acknowledgment) – umożliwia potwierdzanie nieciągłych fragmentów danych, zwiększając efektywność retransmisji.
  • TCP Timestamp – dodaje znaczniki czasu, pomagając w pomiarze RTT i w detekcji spurious retransmissions.

Porównanie z UDP

Protokół UDP (User Datagram Protocol) również działa w warstwie transportowej, lecz w przeciwieństwie do TCP jest bezpołączeniowy i nie zapewnia niezawodności. Wybór między TCP a UDP zależy od wymagań aplikacji: TCP jest preferowany tam, gdzie ważna jest integralność i kolejność danych (np. przeglądanie WWW, poczta elektroniczna), natomiast UDP – w aplikacjach czasu rzeczywistego (np. VoIP, gry online), gdzie opóźnienia mają wyższy priorytet niż utrata kilku pakietów.

Zastosowania

TCP jest wykorzystywany w setkach protokołów aplikacyjnych, m.in.:

  • HTTP/HTTPS – przeglądanie stron internetowych.
  • SMTP – wymiana poczty elektronicznej.
  • FTP – transfer plików.
  • SSH – zdalny dostęp i szyfrowana komunikacja.
  • Telnet – niezaszyfrowane sesje terminalowe.

Bezpieczeństwo

Choć TCP sam z siebie nie zapewnia szyfrowania ani uwierzytelniania, jest podstawą dla protokołów zabezpieczających połączenia, takich jak TLS czy IPsec. Mechanizmy kontroli zatknięcia i retransmisji mogą być wykorzystywane w atakach typu Denial of Service (DoS), dlatego w nowoczesnych implementacjach stosuje się dodatkowe filtry i algorytmy ograniczające liczbę jednoczesnych połączeń.

Implementacje i standardy

Implementacje TCP znajdują się w praktycznie wszystkich systemach operacyjnych: Linux, Windows, macOS, a także w systemach wbudowanych. Standardy opisane są w serii dokumentów RFC, najważniejsze z nich to:

  • RFC 793 – podstawowa specyfikacja TCP.
  • RFC 1323 – rozszerzenia dotyczące okna i znacznika czasu.
  • RFC 2018 – prefiksowanie opcji SACK.
  • RFC 6182 – wprowadzenie algorytmu CUBIC.

Patrzenie w przyszłość

Rozwój sieci o dużej przepustowości (np. 100 Gb/s, 400 Gb/s) wymusza dalszy rozwój TCP. Badania koncentrują się na:

  • Lepszych algorytmach kontroli zatknięcia, które lepiej wykorzystują duże opóźnienia (high‑latency) i szerokie pasma.
  • Integracji TCP z technologiami QUIC i HTTP/3, które przenoszą część funkcjonalności transportowych na warstwę aplikacyjną.
  • Usprawnienia w kryptografii, aby zapewnić poufność i uwierzytelnianie już na poziomie transportu (np. TLS 1.3).

Podsumowując, TCP pozostaje kluczowym elementem współczesnej infrastruktury sieciowej, łączącym wymóg niezawodności z elastycznością, niezbędną do funkcjonowania najróżniejszych usług internetowych.