UDP
UDP(User Datagram Protocol) jest szybkim i prostym protokołem. Działa w oparciu o protokół IP. Wprowadza kilka dodatkowych paramentów na protokół IP, dzięki którym system może przekazać dany pakiet do konkretnej aplikacji oraz sprawdzić czy nie uległ uszkodzeniu. Narzut ze strony nagłówka jest minimalny, co z kolej przekłada się na mały narzut wydajności.
Rysunek poniżej przedstawia strukturę nagłówka UDP.

Port UDP działa w oparciu o mechanizm portów (który również występuje w TCP). Port to 16-bitowa liczba, wybrana przez aplikację wysyłającą lub odbierającą dane. W niektórych systemach operacyjnych wybranie portów z przedziału 0-1023 wymaga uprawnień administratora. Mechanizm portów pozwala kierować dane (lub informację o połączeniu) do konkretnej aplikacji lub usługi. Umożliwia to jednoczesną wymianę danych pomiędzy wieloma programami. Nadawca wiadomości musi podać numer portu docelowego, aby system mógł przekazać pakiet do właściwej aplikacji.
TCP
Do zapewnienia niezawodnej komunikacji wykorzystuje się protokół TCP(Transmission Control Protocol). Podobnie jak UDP działa w warstwie transportowej (czwarta warstwa). TCP stara się zagwarantować jak najwyższą niezawodność połączenia oraz integralność przesyłanych strumieniowo danych. W przeciwieństwie do UDP podczas transmisji TCP można mieć pewność, że dane dotrą w takim stanie jakim zostały wysłane. Jeśli korekcja błędów nie będzie możliwa, to rozmowa zostanie porzucona. Często obarczone jest ponownym wysyłaniem pakietów.
Struktura nagłówka TCP przedstawiona jest na rysunku poniżej.

Warto zwrócić uwagę na:
Bity sterujące m.in. ACK i SYN – wykorzystywane podczas nawiązywania połączenia.Suma kontrolna – 16-bitowa, umożliwia wykrycie uszkodzonych danych.Numer sekwencyjny oraz numer potwierdzający – służą do zapewnienia właściwej kolejności odbioru danych zgodnej z kolejnością ich wysyłania oraz do kontroli, czy wszystkie pakiety dotarły do odbiorcy.
TCP jest protokołem połączeniowym. W celu nawiązania połączenia jedna ze stron tworzy gniazdo nasłuchujące i wiąże je z określonym portem TCP oraz lokalnym adresem IP interfejsu sieciowego (lub może być powiązane z portem na wszystkich dostępnych interfejsach sieciowych – wówczas za adres IP przypisuje się 0.0.0.0).
Gdy gniazdo nasłuchujące jest gotowe, druga strona komunikacji może zainicjajizować połączenie. Odbywa się to to za pomocą mechanizmu trójetapowego negocjowania połączenia (three-way handshake). Przesyłane są specjalne pakiety (bez danych) do ustalenia celu komunikacji, potwierdzenia tożsamości i ustalenia początkowych numerów sekwencyjnych i potwierdzających. W uproszczeniu proces ten wygląda następująco:
- Klient wysyła do serwera pusty pakiet z ustawionym bitem SYN oraz początkowym numerem sekwencyjnym
- Serwer wysyła do klienta pakiet z ustawionymi bitami SYN i ACK
- Klient wysyła do serwera pakiet z ustawionym bitem ACK
Negocjowanie połączenia eliminuje możliwość prostego podszycia się pod jednego z rozmówców (istotne jest wybranie trudnych do przewidzenia początkowych numerów sekwencyjnych). Po udanej negocjacji połączenie jest nawiązane. Po stronie serwera zostaje utworzone drugie gniazdo, reprezentujące nawiązane połączenie, które służyć będzie do wymiany danych pomiędzy stronami. Gniazdo nasłuchujące nadal pozostaje aktywne i może służyć do nawiązania kolejnych połączeń.Zakończenie sesji następuje, gdy jedna ze stron wyśle pakiet z ustawionym bitem FIN oraz odpowiednim numerem sekwencyjnym. Jest możliwe również zakończenie połączenia w dowolnym momencie poprzez wysłanie pakietu RST.
Podsumowanie
TCP | UDP | |
Akronim | Transmission Control Protocol | User Datagram Protocol |
Stanowość | Połączeniowy | Bezpołączeniowy |
Kontrola danych | 16-bitowa suma kontrolna | 16-bitowa suma kontrolna |
Reakcja na uszkodzone dane | Ponowienie transmisji | Odrzucenie pakietu |
Kolejność danych | Kolejność odebranych danych zgodna z kolejnością ich wysyłania | Brak |
Potwierdzenia | Potwierdzenia po otrzymaniu segmentu danych | Brak |
Rozpoczęcie transmisji | Obie stony negocjują/potwierdzają chęć połączenia | Brak |
Zakończenie transmisji | Jedna ze stron może zażądać zakończenia połączenia lub po określonym czasie braku aktywności którejkolwiek ze stron | Brak |
Prędkość transmisji | Wolniejszy niż UDP | Szybszy niż TCP |
Używany przez | HTTP, HTTPS, FTP, SMTP, Telnet | DNS, DHCP, TFTP, VOIP |