TCP

TCP (ang. Transmission Control Protocol - protokół kontroli transmisji) – strumieniowy protokół komunikacji między dwoma komputerami. Został stworzony przez Vintona Cerfa i Roberta Kahna.

Jest on częścią większej całości określanej jako stos TCP/IP. W modelu OSI TCP odpowiada warstwie Transportowej.

Spis treści

[edytuj] Charakterystyka protokołu

W przeciwieństwie do UDP, TCP zapewnia wiarygodne połączenie dla wyższych warstw komunikacyjnych przy pomocy sum kontrolnych i numerów sekwencyjnych pakietów, w celu weryfikacji wysyłki i odbioru. Brakujące pakiety są obsługiwane przez żądania retransmisji. Host odbierający pakiety TCP porządkuje je według numerów sekwencyjnych tak, by przekazać wyższym warstwom modelu OSI pełen, złożony segment.

Chociaż protokół definiuje pakiet TCP, to z punktu widzenia wyższej warstwy oprogramowania, dane płynące połączeniem TCP należy traktować jako ciąg oktetów. W szczególności – jednemu wywołaniu funkcji API (np. send()) nie musi odpowiadać wysłanie jednego pakietu. Dane z jednego wywołania mogą zostać podzielone na kilka pakietów lub odwrotnie – dane z kilku wywołań mogą zostać połączone i wysłane jako jeden pakiet (dzięki użyciu algorytmu Nagle'a). Również funkcje odbierające dane (recv()) w praktyce odbierają nie konkretne pakiety, ale zawartość bufora stosu TCP/IP, wypełnianego sukcesywnie danymi z przychodzących pakietów.

Charakterystyczny dla TCP jest moment nawiązania połączenia, nazywany ang. three-way handshake. Host inicjujący połączenie wysyła pakiet zawierający segment TCP z ustawioną flagą SYN (synchronize). Host odbierający połączenie, jeśli zechce je obsłużyć, odsyła pakiet z ustawionymi flagami SYN i ACK (acknowledge – potwierdzenie). Inicjujący host powinien teraz wysłać pierwszą porcję danych, ustawiając już tylko flagę ACK (gasząc SYN). Jeśli host odbierający połączenie nie chce lub nie może odebrać połączenia, powinien odpowiedzieć pakietem z ustawioną flagą RST (Reset). Prawidłowe zakończenie połączenia polega na wysłaniu flagi FIN.

[edytuj] Zastosowania

Aplikacje, w których zalety TCP przeważają nad wadami (większy koszt związany z utrzymaniem sesji TCP przez stos sieciowy) to m.in. HTTP, SSH, FTP czy SMTP/POP3 i IMAP4.

[edytuj] Nagłówek TCP

Opis nagłówka TCP
  Bity 0 - 3 4 - 7 8 - 15 16 - 31
0 Port nadawcy Port odbiorcy
32 Numer sekwencyjny
64 Numer potwierdzenia
96 Długość nagłówka Zarezerwowane Flagi Szerokość okna
128 Suma kontrolna Wskaźnik priorytetu
160 Opcje (opcjonalnie)
160/192+  
Dane
 

[edytuj] Znaczenie pól nagłówka

Port nadawcy/odbiorcy - 16-bitowe numery oznaczające poszczególne porty, z których korzysta protokół TCP przy nawiązywaniu połączenia, oraz aplikacje, które z tego protokołu korzystają. Często jest podawany po adresie sieciowym, oddzielony od niego dwukropkiem.

Numer sekwencyjny - 32-bitowy identyfikator określający miejsce pakietu danych w pliku przed fragmentacją (dzięki niemu, można "poskładać" plik z poszczególnych pakietów).

Numer potwierdzenia - 32-bitowy numer będący potwierdzeniem otrzymania pakietu przez odbiorcę, przez co pozwala na synchronizację nadawanie-potwierdzenie.

Długość nagłówka - 4-bitowa liczba, która oznacza liczbę 32-bitowych wierszy nagłówka, co jest niezbędne przy określaniu gdzie zaczynają się dane. Przez to też nagłówek może mieć tylko taką długość, która jest wielokrotnością 32 bitów.

Zarezerwowane - 4-bitowy ciąg zer, zarezerwowany dla ewentualnego przyszłego użytku.

Flagi 8-bitowa informacja/polecenie dotyczące bieżącego pakietu. Poszczególne flagi oznaczają:

  • CWR - (ang. Congestion Window Reduced) flaga potwierdzająca odebranie powiadomienia przez nadawcę, umożliwia odbiorcy zaprzestanie wysyłania echa.
  • ECE - (ang. ECN-Echo) flaga ustawiana przez odbiorcę w momencie otrzymania pakietu z ustawioną flagą CE
  • URG - informuje o istotności pola "Priorytet"
  • ACK - informuje o istotności pola "Numer potwierdzenia"
  • PSH - wymusza przesłanie pakietu
  • RST - resetuje połączenie
  • SYN - synchronizuje kolejne numery
  • FIN - oznacza zakończenie przekazu danych

Szerokość okna - 16-bitowa informacja o tym, ile danych może aktualnie przyjąć nadawca. Wartość 0 wskazuje na oczekiwanie na segment z innym numerem tego pola. Jest to mechanizm zabezpieczający komputer nadawcy przed zbyt dużym napływem danych.

Suma kontrolna - 16-bitowa liczba, będąca wynikiem działań na bitach całego pakietu, przez co pozwala na sprawdzenie tego pakietu pod względem poprawności danych.

Wskaźnik priorytetu - jeżeli flaga URG jest włączona, informuje o ważności pakietu.

Opcje - czyli ewentualne dodatkowe informacje i polecenia:

  • 0 - koniec listy opcji
  • 1 - brak działania
  • 2 - ustawia maksymalna długość segmentu

W przypadku opcji 2 to tzw. Uzupełnienie, które dopełnia zerami długość segmentu do wielokrotności 32 bitów (patrz: informacja o polu "Długość nagłówka")

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne