TCP (Transmission Control Protocol)

ITpedia

TCP (RFC 793) jest protokołem alternatywnym wobec UDP, wykorzystywanym do transportu danych w trybie połączeniowym, a więc z gwarancją dostarczenia ich odbiorcy. Różne uzupełnienia i rozszerzenia tego protokołu, są opisane w RFC 1122, RFC 1323, RFC 2001 i kilku innych.

Wszystkie połączenia TCP są wirtualne, rozpoznawane po adresach i portach komputerów źródłowych i docelowych. Transmisje są głównie dupleksowe, ale protokół dopuszcza wyłączenie jednego z kierunków. Informacje TCP są przesyłane w datagramach IP. Pakiety noszą nazwę segmentów TCP.

TCP negocjuje warunki połączenia w 3 etapach i jeśli nie nastąpi przerwanie uzgodnione lub wymuszone, to utrzymuje je do końca sesji:

  • najpierw nadawca wysyła pod określonym adresem swój segment z ustawionym SYN=1 i proponowanym numerem inicjującym w polu Numer sekwencji;
  • w razie przyjęcia propozycji nadawca otrzyma segment z ACK=1, SYN=1 i numerem sekwencji, od której odbiorca rozpocznie liczenie kolejnych segmentów;
  • jeśli w tym czasie nic się nie zmieniło, nadawca wysyła pierwsze dane i ustawia ACK=1. Transmisja będzie trwała aż do końca sesji.

Mechanizm sterowania przepływem danych może być w razie potrzeby wyłączany zadeklarowaniem danych jako pilnych (urgent). Wtedy nadawca ustawia URG=1, a w polu Wskaźnik pilności określa położenie pilnych danych w segmencie danych, ale nic więcej. TCP nie zajmuje się więcej tymi danymi. Poza tym TCP sprawdza i porządkuje pakiety, obsługuje wiele strumieni danych, wysyła potwierdzenia, sprawdza poprawność danych i koryguje błędy – pakiety uszkodzone lub zagubione są ponownie przesyłane.

Każdy pakiet przed wysłaniem jest rejestrowany przez nadawcę, a w chwili wysłania uruchamia się zegar odmierzający czas oczekiwania na potwierdzenie odbioru (ACK). Kiedy ACK nie pojawi się w przewidywanym czasie, nadawca retransmituje pakiet. Ten mechanizm znany jest pod nazwą Pozytywne potwierdzenie z retransmisją – PAR (Positive Acknowledgment with Retransmission).

Nagłówek TCP, którego długość musi być wielokrotnością 32 bitów, zawiera m.in. pola dla numeru portu źródłowego, numeru portu docelowego, numeru sekwencyjnego, numeru potwierdzenia i rozmiaru okna. Port źródłowy, który zainicjował sesję, oraz adres źródłowy IP tworzą adres zwrotny. Natomiast w polach Port docelowy i Port źródłowy znajdują się adresy interfejsów programów wyższej warstwy aplikacji w komputerach odbiorcy i nadawcy, które używają połączenia TCP.

Z kolei 16-bitowe pole Okno (rozmiar okna przesuwnego) umożliwia przystosowanie transmisji do warunków sieci: większy natłok – mniejsza szybkość transmisji. W to pole urządzenie odbiorcze wpisuje liczbę bajtów danych, którą są w stanie przyjąć jego bufory. Może również wpisać zero. Wtedy nadawca musi przerwać nadawanie. Wznowienie transmisji nastąpi w chwili, kiedy odbiorca wpisze w pole Okno liczbę większą od zera, a w pole Numer potwierdzenia – kolejny numer sekwencyjny oczekiwanego segmentu. Dzięki takim procedurom sieć TCP/IP jest odporna na przeciążenia.

Flagi jednobitowe są w RFC 793 określone następująco:

  • URG (Urgent Pointer field significant),
  • ACK (Acknowledgment field significant),
  • PSH (Push Function),
  • RST (Reset the connection),
  • SYN (Synchronize sequence numbers),
  • FIN (No more data from sender).

PSH – przesyłanie bezpośrednie – ustawia nadawca. W odpowiedzi odbiorca przesyła dane bezpośrednio do aplikacji, pomijając powszechne w TCP/IP buforowanie. SYN – synchronizacja numerów sekwencyjnych – wiąże się z ACK (potwierdzenie). Podczas żądania połączenia ustawia się SYN=1 i ACK=0; SYN=0 i ACK=1 oznaczają akceptację połączenia. Potwierdzenie ustalenia połączenia jest sygnowane ustawieniami: ACK=1 i SYN=0. RST (wyzerowanie połączenia) = 1 oznacza konieczność ponownego nawiązania połączenia, gdyż dotychczasowe uważa się z pewnych przyczyn za nieważne. Wreszcie FIN=1 rozpoczyna proces rozłączenia.

Numer sekwencyjny umożliwia odbiorcy skompletowanie pakietów przenoszących kolejne fragmenty pewnej całości danych. Pakiety mogą jednak przybywać różnymi drogami, a ponadto z przerwami spowodowanymi fizycznym uszkodzeniem trasy i ponownym ustalaniem połączenia. Numer sekwencyjny określa położenie pierwszego bajtu bieżącego segmentu w całym ciągu danych przesyłanych porcjami. Pole Numer potwierdzenia wypełnia odbiorca kolejnym numerem oczekiwanego segmentu. W ten sposób informuje jednocześnie nadawcę, że zdążył odebrać poprzedni segment.

TCP ma identyfikator 6, który wpisuje się w odpowiednie pole IP. Wiadomo wówczas, że w polu danych pakietu IP znajduje się ładunek TCP.

-
-