Co to jest TCP i UDP? Proste wyjaśnienie

Internet opiera się na dwóch protokołach do wymiany informacji między komputerami. Te protokoły komunikacyjne definiują zasady, które określają, jak odbywa się transfer danych między dowolnymi dwiema stronami zaangażowanymi, czy to jeden-do-jednego, czy jeden-do-wielu. Transmission Control Protocol (TCP) i User Datagram Protocol (UDP) to dwa protokoły, których możesz użyć do przesyłania danych przez sieci. Oba działają na warstwie transportowej modelu OSI. 

Podobne, a jednak różne, te dwa protokoły wykonują swoje zadania efektywnie. Podczas gdy jeden jest zorientowany na połączenia i wymaga nawiązania połączenia przed rozpoczęciem transferu danych, drugi nie wymaga połączenia i wysyła dane bez wcześniejszego informowania urządzenia docelowego. To, co robią te protokoły, to jednak nie wszystko, jak przekonasz się poniżej. Ten artykuł skupia się na TCP i UDP — jak działają, ich zalety, wady i różnice.

## Co to jest TCP?

Transmission Control Protocol to protokół komunikacyjny, który zajmuje się głównie transferem pakietów danych w internecie. Działa na warstwie transportowej (warstwa 4) modelu Open Systems Interconnection (OSI). Ten protokół pomaga w przesyłaniu pakietów danych między urządzeniem/aplikacją klienta a serwerem (wraz z UDP). 

TCP jest protokołem zorientowanym na połączenia, co oznacza, że klient i serwer muszą nawiązać połączenie przed wysłaniem danych w jakimkolwiek kierunku. Ponadto, jest to protokół niezawodny, ponieważ sprawdza błędy i zapewnia, że pakiety danych dotrą do miejsca przeznaczenia w takiej kolejności, jaką zamierzało urządzenie lub aplikacja wysyłająca. 

## Jak działa TCP?

Podczas korzystania z TCP, klient i serwer nawiązują połączenie za pomocą mechanizmu znanego jako trójfazowe uzgadnianie połączenia, zanim rozpocznie się dwukierunkowa wymiana pakietów danych. Zanim rozpocznie się trójfazowe uzgadnianie połączenia, serwer musi nasłuchiwać na porcie, aby zaakceptować połączenie. Uzgadnianie rozpoczyna się od wymiany trzech wiadomości (lub flag) znanych jako SYN, SYN/ACK i ACK między klientem a serwerem.

Przyjrzyjmy się krok po kroku procesowi wymiany poniżej.

Klient wysyła do serwera pakiet danych SYN. Pakiet SYN zawiera losowy numer sekwencji (X), który przypisuje klient. Celem tego pakietu jest sprawdzenie, czy serwer jest dostępny dla nowego połączenia.

2. Serwer otrzymuje pakiet SYN i potwierdza go, wysyłając pakiet SYN/ACK. Serwer ustawia numer potwierdzenia na jeden plus numer sekwencji (1+X), który klient przypisał do początkowego pakietu SYN i ustawia kolejny losowy numer sekwencji (Y). W ten sposób serwer wysyła dwa numery sekwencji wraz ze swoim pakietem SYN/ACK do klienta.

3. Klient otrzymuje pakiet SYN/ACK od serwera i potwierdza go, wysyłając pakiet ACK. Klient ustawia numer potwierdzenia na jeden plus numer sekwencji (1+Y), który otrzymał od serwera.

Po zakończeniu procesu trójstronnego uzgadniania (three-way handshake), klient i serwer mogą wysyłać i odbierać od siebie dane. 

## Zalety i wady TCP

Jak większość protokołów, TCP nie jest bez wad; ma swoje zalety i wady. Przyjrzyjmy się poniżej zaletom i wadom korzystania z TCP.

## Zalety

1. Niezawodny

TCP jest niezawodny, ponieważ zapewnia, że pakiety danych docierają do miejsca przeznaczenia we właściwej kolejności. Gdy TCP przesyła segment danych, uruchamia timer i czeka na potwierdzenie z miejsca docelowego. Jeśli nie otrzyma żadnego potwierdzenia, ponownie wyśle segment. Ponadto, używa sekwencji, aby wiedzieć, kiedy pakiety danych przybywają w niewłaściwej kolejności.

2. Wykrywanie i naprawa błędów

TCP używa sumy kontrolnej od końca do końca, aby sprawdzić, czy w pakietach nie nastąpiły żadne zmiany, gdy dotrą do miejsca przeznaczenia. Odrzuca pakiety z błędami i czeka, aż nadawca je ponownie wyśle. Ponadto odrzuca również duplikaty danych. 

3. Kontrola przeciążenia

TCP używa buforowania i mechanizmu okien w celu radzenia sobie z zatorami. Zatory mogą wystąpić, gdy odbierająca strona połączenia TCP otrzymuje więcej pakietów danych, niż jest w stanie przetworzyć w danym momencie. TCP wykorzystuje bufory do obsługi zatorów, ale gdy bufory zostają zapełnione, stosuje mechanizm okien, aby zmniejszyć ilość danych, które nadawca może wysłać jednocześnie.

## Wady

1. Wolna prędkość

W porównaniu do UDP, TCP jest wolne. Po pierwsze, konieczny trzyetapowy proces nawiązywania połączenia zajmuje czas. Następnie, jest redukcja prędkości, którą powodują kontrola przepływu, kontrola zatorów i sprawdzanie błędów podczas transferu danych. W takich przypadkach, TCP poświęca prędkość dla niezawodności.

2. Podatne na ataki DoS

Trzyetapowe uzgadnianie połączenia w TCP sprawia, że jest ono podatne na ataki DoS lub ataki DDoS. Jednym z takich ataków jest SYN flood, gdzie złośliwa jednostka powoduje niedostępność serwera przez zalewanie go pakietami SYN. Celem tego ataku jest przeciążenie serwera, uniemożliwiając mu odpowiedź na prawdziwe żądania. 

## Co to jest UDP?

User Datagram Protocol (UDP) to protokół komunikacyjny podobny do TCP, który działa na warstwie transportowej modelu OSI. W przeciwieństwie do TCP, jest to protokół bezpołączeniowy, co oznacza, że klient nie musi nawiązywać połączenia z serwerem przed przesłaniem pakietów danych. W rezultacie nie ma trójstronnego uzgadniania połączenia, kontroli przepływu i sekwencjonowania. 

UDP nie dba o to, czy wysłane datagramy dotrą do celu, ani czy dotrą w kolejności, w jakiej zostały wysłane przez klienta. To czyni go mniej niezawodnym niż TCP, ale szybszym, ponieważ nie musi czekać na potwierdzenia ani ponownie przesyłać danych. Jednak UDP dba o integralność danych i używa sumy kontrolnej, aby potwierdzić, że dane nie zostały zmienione przez osoby trzecie.

## Jak działa UDP?

W przypadku UDP, przesyłanie datagramów od ich źródła do miejsca docelowego jest prostym procesem. Po dodaniu swojego nagłówka do pakietów IP, które otrzymuje z warstwy sieciowej, wysyła datagramy bezpośrednio do serwera docelowego, bez konieczności najpierw nawiązywania jakiegokolwiek połączenia. To właśnie prosta natura tego procesu sprawia, że UDP jest protokołem bezpołączeniowym. 

Ponadto, UDP jest idealny do komunikacji wrażliwej na czas, gdzie utrata danych w trakcie transmisji jest akceptowalna. Na przykład, komunikacja głosowa i wideo wykorzystuje UDP.

## Zalety i wady UDP

Brak kontroli przepływu i retransmisji danych w UDP jest zarówno zaletą, jak i wadą. Poniżej przyglądamy się zaletom i wadom korzystania z UDP.

## Zalety

1. Szybka transmisja danych

Ponieważ UDP nie musi potwierdzać datagramów przed otrzymaniem kolejnych przez komputer docelowy i nie dokonuje retransmisji danych, jest szybsze niż TCP. Ponadto brak trójstronnego uzgadniania połączenia skutkuje mniejszym obciążeniem i szybszym przesyłaniem danych. 

2. Wykrywanie błędów

Podobnie jak TCP, UDP wykorzystuje sumę kontrolną od końca do końca, aby wykryć, czy datagramy zawierają jakiekolwiek błędy. Dzięki temu zachowuje integralność danych i odrzuca datagramy z błędami. Ponieważ nie ma mechanizmu ponownego przesyłania, UDP nie odzyskuje ani nie wysyła ponownie odrzuconych datagramów. 

## Wady

1. Nierzetelny

Cechy, które sprawiają, że połączenie jest niezawodne, nie występują w połączeniach UDP. W przeciwieństwie do TCP, UDP nie gwarantuje, że wysłane datagramy dotrą do celu. W rezultacie datagramy nie mają timera ani nie muszą być potwierdzane przez urządzenie odbierające. Ponadto, nie ma pewności, że datagramy dotrą do miejsca przeznaczenia we właściwej kolejności.

2. Brak kontroli zatorów

UDP nie posiada mechanizmu kontroli zatorów. Ponieważ nie potwierdza odbioru datagramów ani nie używa mechanizmu okienkowego do kontroli transmisji danych, nie ma sposobu, aby zapobiec zatorom. W rezultacie, duże porywy danych mogą prowadzić do zatorów. 

## Różnice między TCP a UDP

Poniżej przyjrzymy się różnicom między zorientowanym na połączenia TCP a bezpołączeniowym UDP.

1. Niezawodność

TCP jest protokołem bardziej niezawodnym w porównaniu z UDP. TCP potwierdzi dotarcie segmentu danych do celu przed wysłaniem kolejnego. Co więcej, zapewni, że segmenty przybędą w tej samej kolejności, w jakiej zostały wysłane oraz ponownie wyśle dane, które nie dotrą do miejsca przeznaczenia. Dodatkowo, TCP używa kontroli przepływu, aby upewnić się, że klient nie wysyła pakietów szybciej, niż serwer może je przetworzyć. Przeciwnie, UDP nie wykonuje żadnej z powyższych czynności i bardziej dba o jak najszybsze przesyłanie danych.

2. Prędkość

Cechy TCP, które czynią go niezawodnym, sprawiają, że jest wolniejszy niż TCP. Trójstronne uzgadnianie połączenia, kontrola przepływu, kontrola zatorów i mechanizm retransmisji nie są częścią UDP. W rezultacie, przy mniejszym obciążeniu, UDP jest szybsze niż TCP.

3. Użycie

Orientacja na połączenia w TCP sprawia, że jest on odpowiedni dla aplikacji wymagających niezawodności i nieakceptujących utraty danych. Na przykład, wspiera protokoły takie jak HTTP, SSH, FTP, SMTP i IMAP. Z drugiej strony, szybkość UDP sprawia, że jest on odpowiedni dla aplikacji lub protokołów wrażliwych na czas, które mogą zaakceptować utratę danych, takich jak transmisje wideo lub audio na żywo, Voice over IP, zapytania DNS i gry online.

## Podsumowanie

TCP i UDP stanowią fundament komunikacji w internecie. Bez tych dwóch protokołów urządzenia podłączone do internetu miałyby trudności z komunikacją między sobą. TCP to protokół do wyboru, jeśli potrzebujesz niezawodności i dokładności. Z drugiej strony, UDP to protokół, którego potrzebujesz, jeśli mniej obchodzi Cię utrata pakietów danych, a bardziej zależy Ci na tym, aby dotarły one do celu szybko.