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)
- SYN – klient wysyła segment z ustawioną flagą
SYNi numerem sekwencji x. - SYN‑ACK – serwer odpowiada segmentem z flagami
SYNiACK, numer sekwencji y oraz potwierdzeniem x+1. - 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.