TCP ( Transmission Control Protocol)

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, 1323, 1185, 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 zgodnione 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 otrzymasegmentzACK=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.
0                              7	8                            15	16                          23	24                          31	
Port źródłowy 	Port docelowy	
Numer sekwencji	
Numer potwierdzenia	
Liczba 32 bit słów w nagł.	Zarezerwowane	6-bitów flagi	Okno	
Suma kontrolna	Znacznik pilności	
Opcje	Dopełnienie zerami	
Bajty danych	

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ódlowy 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 i wtedy nadawca musi przerwać nadawanie. Wznowienie transmisji nastąpi w chwili, kiedy odbiorca wpisze w pole Okno liczbę większą od zera, a w polu 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 (Ungert Pointer field significant), ACK (Acknowledgment Pointer field significant), PSH (PushFunction) , RST (Reset the connection) , SYN (Synchronize sequence numbers) I i FIN (No more data tram sender). PSH - przesyłanie bezpośrednie - usławia t nadawca. W odpowiedzi odbiorca przesyła dane bezpośrednio do aplikacji, po- I mijając powszechne w TCP/IP buforowanie. SYN - synchronizacja numerów I sekwencyjnych - wiąże się z ACK (potwierdzenie). Podczas żądania połączenia ustawia się SYN=1 i ACK=O; SYN=O i ACK=1 oznaczają akceptację połączenia. Potwierdzenie ustalenia połączenia jest sygnowane ustawieniami: ACK=1 i SYN=O. 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.

UDP (User Datagram Protokol)

UOP (RFC 768), protokół alternatywny wobec TCP,  jest używany do transportu danych w trybie bezpołączeniowym, a więc bez gwarancji dostarczenia ich do odbiorcy. Jeśli pakiet nie dotrze do odbiorcy albo kiedy wyliczona suma kontrolna nie będzie zgodna z zawartą w nagłówku, to UDP nie podejmie żadnych działań zmierzających do korekty lub retransmisji pakietów. Dla różnych aplikacji wykonujących się na maszynie protokół UDP używa terminu "port", którego nie można utożsamiać z klasycznym pojęciem portu urządzeń sieciowych.
Nagłówek UDP zawiera m.in.: numer portu źródłowego i numer portu docelowego. Obydwa typy portów są identyfikatorami programów z wyższej warstwy aplikacyjnej. Na przykład FTP ma port 21 dla połączenia sterującego i dla połączenia utworzonego do transmitowania danych, a HTTP-80. Port źródłowy jest opcjonalny. Kiedy jego pole zawiera inne dane niż zera, to są one wspomnianym numerem aplikacji w komputerze nadawcy. Port źródłowy i adres IP źródła składają się na adres zwrotny pakietu.
Środkiem transportu dla UDP jest datagram IP podobnie jak dla wielu innych protokołów. Wpisanie w odpowiednie pole IP (Next header w 1Pv6) numeru 17 będzie oznaczało, że w polu danych znajduje się ładunek należący do UDP. Będą to datagramy w rodzaju komunikatów systemowych, rozgłaszania grupowego, głosu cyfrowego, TFTP czy RPC, dla których usługi TCP są zbyt pracochłonne albo nadmiarowe. Dotrą one do komputera odbiorcy na podstawie adresu docelowego z nagłówka IP a do określonej aplikacji dzięki adresowi z pola "Port docelowy" w nagłówku UDP. Usługi UOP sprowadzają się głównie do multipleksowania i demultipleksowania ruchu generowanego lub przyjmowanego przez aplikacje.

Porty źródłowe i docelowe stanowią szczególną formę dopełnienia adresów IP. Są to niewielkie dodatnie liczby całkowite identyfikujące programy wykonujące się na maszynie. Dzięki tym portom pakiet może trafić do określonej aplikacji. Porty źródłowe i docelowe są też nazywane portami wirtualnymi, a para w postaci adresu IP i portu - gniazdem (socket). DNS, HTTP, TELNET, FTP i wiele innych protokołów mają stałe numery portów we wszystkich implementacjach TCP/IP Takie numery portów należą do grupy powszechnie znanych portów (well-known ports).