Różnica między TCP i UDP?

144

Jaka jest różnica między protokołem TCP i UDP?

Wiem, że TCP jest używany w przypadku aplikacji niekrytycznych czasowo, a UDP jest używany do gier lub aplikacji, które wymagają szybkiej transmisji danych. Wiem, że protokół TCP jest używany do obsługi protokołów HTTP, HTTP, FTP, SMTP i Telnet. Wiem, że UDP jest używany do DNS i DHCP.

Ale dlaczego? Jakie cechy TCP i UDP sprawiają, że jest on przydatny w ich odpowiednich przypadkach użycia?

user749414
źródło
13
A to ( skullbox.net/tcpudp.php ) - który był pierwszym hitem Google - nie było wystarczająco jasne? Co w tym było niejasnego? Może to jest lepsze? tcpipguide.com/free/...
S.Lott
1
Jestem naprawdę ciekawy, dlaczego to pytanie otrzymało (w chwili pisania) 3 głosy za. Pierwsze zdanie nawet nie ma sensu, a materiałów na ten temat dostępnych jest wiele, jeśli się szuka.
MattH
21
@MattH: 1) To dobre pytanie, jeśli jest dość szerokie i jego duplikat ma już dobrą odpowiedź. 2) Masz więcej niż wystarczającą reputację, aby naprawić literówkę w pierwszym zdaniu. 3) Nie ma znaczenia, że ​​informacje na ten temat istnieją gdzie indziej. Stack Overflow ma stać się repozytorium wiedzy i odpowiada tutaj kanonicznie na pytania .
ire_and_curses
2
Ciekawe, że prawie nikt nie wspomina, że ​​DHCP używa broadcast, ale wszyscy myślą, że „odpowiedź” dotyczy gwarancji dostarczenia i retransmisji.
Heath Hunnicutt
1
Tylko dla każdego, kto będzie czytał to w przyszłości, wspomniana powyżej witryna Skullbox zawiera MALWARE według Google (zatrzymało mnie, gdy na nią kliknąłem). Radziłbym tam nie jechać.
Alan006

Odpowiedzi:

119

TCPto strumień zorientowany połączeniowo w sieci IP. Gwarantuje, że wszystkie wysłane pakiety dotrą do miejsca docelowego we właściwej kolejności. Oznacza to użycie pakietów potwierdzeń odsyłanych z powrotem do nadawcy i automatycznej retransmisji, co powoduje dodatkowe opóźnienia i ogólnie mniej wydajną transmisję niż UDP.

UDPjest protokołem bezpołączeniowym. Komunikacja jest zorientowana na datagram . Integralność jest gwarantowana tylko w przypadku pojedynczego datagramu. Datagramy docierają do celu i mogą pojawić się w nieprawidłowej kolejności lub w ogóle nie dotrzeć. Jest bardziej wydajna niż TCPdlatego, że nie używa ACK . Zwykle jest używany do komunikacji w czasie rzeczywistym, gdzie niewielki procent wskaźnika utraty pakietów jest lepszy niż narzut TCPpołączenia.

W niektórych sytuacjach UDPjest używany, ponieważ umożliwia transmisję pakietów rozgłoszeniowych. Jest to czasami fundamentalne w przypadkach takich jak DHCPprotokół, ponieważ komputer kliencki nadal nie otrzymał IPadresu (jest to DHCPcel protokołu negocjacji) i nie będzie żadnego sposobu na ustanowienie TCPstrumienia bez samego IPadresu.

Heisenbug
źródło
5
Przykładem użycia UDP jest transmisja wideo i audio, gdzie utrata kilku pakietów tu i tam zwykle nie ma tak dużego znaczenia (kolor ramki może być wyłączony lub maleńka nanosekunda dźwięku może zostać wycięta lub zmieniona - niezbyt zauważalne dla ludzi). Oczywiście, jeśli twoje połączenie jest naprawdę złe, możesz stracić tak wiele pakietów, że wideo wydaje się rozmyte / pikselowane, a dźwięk staje się niewyraźny i często się zacina.
Niko Bellic
53

Z artykułu Skullbox:

TCP (Transmission Control Protocol) jest najczęściej używanym protokołem w Internecie. Powodem tego jest to, że TCP oferuje korekcję błędów. Gdy używany jest protokół TCP, istnieje „gwarantowana dostawa”. Wynika to w dużej mierze z metody zwanej „kontrolą przepływu”. Kontrola przepływu określa, kiedy dane muszą zostać ponownie wysłane, i zatrzymuje przepływ danych do momentu pomyślnego przesłania poprzednich pakietów. Działa to, ponieważ w przypadku wysłania pakietu danych może wystąpić kolizja. W takim przypadku klient ponownie żąda pakietu od serwera, aż cały pakiet jest kompletny i jest identyczny z oryginalnym.

UDP (User Datagram Protocol) to inny powszechnie używany protokół w Internecie. Jednak protokół UDP nigdy nie jest używany do wysyłania ważnych danych, takich jak strony internetowe, informacje z baz danych itp. UDP jest powszechnie używany do przesyłania strumieniowego audio i wideo. Media strumieniowe, takie jak pliki audio Windows Media (.WMA), Real Player (.RM) i inne używają protokołu UDP, ponieważ zapewnia szybkość! Przyczyną tego, że UDP jest szybszy niż TCP, jest brak kontroli przepływu lub korekcji błędów. Na dane przesyłane przez Internet mają wpływ kolizje i będą występować błędy. Pamiętaj, że UDP dotyczy tylko szybkości. Jest to główny powód, dla którego media strumieniowe nie są wysokiej jakości.

1) TCP jest zorientowany na połączenie i niezawodny, podczas gdy UDP jest mniejszym połączeniem i zawodnym.

2) TCP wymaga więcej przetwarzania na poziomie interfejsu sieciowego, podczas gdy tak nie jest w przypadku UDP.

3) TCP używa, potrójnego uzgadniania, kontroli przeciążenia, kontroli przepływu i innych mechanizmów zapewniających niezawodną transmisję.

4) UDP jest najczęściej używany w przypadkach, gdy opóźnienie pakietów jest poważniejsze niż utrata pakietów.

p27
źródło
1
+1 Dość dobre podsumowanie. Chociaż is the most commonly used protocol on the Internetstwierdzenie jest dyskusyjne i naprawdę zależy od tego, jak zdefiniujesz most commonly used, protocoli the Internet. Na przykład protokół internetowy jest bardziej prawdopodobnym pretendentem do tej konkretnej korony.
MattH
-1: Powód, dla którego protokół UDP jest używany dla DHCP nie ma nic wspólnego z opóźnieniem lub utratą pakietów.
Heath Hunnicutt
2
Podczas wysyłania dużej ilości danych w czystym kanale, TCP jest często szybszy niż UDP. Powodem, dla którego UDP jest używany do takich rzeczy, jak przesyłanie strumieniowe na żywo audio lub wideo, jest to, że gdy zniknie pakiet TCP, aplikacja odbierająca nie zobaczy nic więcej, dopóki brakujące dane nie zostaną ponownie przesłane i odebrane. W wielu aplikacjach do przesyłania strumieniowego dane, które docierają z opóźnieniem, będą bezużyteczne, więc nie ma sensu wstrzymywać wszystkiego w oczekiwaniu na retransmisję, która i tak będzie bezużyteczna.
supercat
Protokół UDP jest używany na potrzeby DHCP, ponieważ protokół TCP nie obsługuje emisji. DHCP polega na wykorzystaniu transmisji w celu uzyskania adresu IP dla serwera DHCP. Zobacz stackoverflow.com/questions/21266008/…
ScottSmudger
41

Pomyśl o TCP jako o dedykowanym, zaplanowanym odbiorze / nadaniu paczek UPS / FedEx między dwoma lokalizacjami, podczas gdy UDP jest odpowiednikiem wrzucenia pocztówki do skrzynki pocztowej.

UPS / FedEx zrobi wszystko, co w ich mocy, aby paczka, którą wysyłasz, dotarła na miejsce i dotarła tam na czas. Dzięki kartce pocztowej masz szczęście, jeśli w ogóle dotrze, a może ona nadejść nieuporządkowana lub spóźniona (ile razy dostałeś kartkę pocztową od kogoś po powrocie do domu z wakacji?)

Protokół TCP jest tak bliski gwarantowanemu protokołowi dostarczania, jak to tylko możliwe, podczas gdy UDP to po prostu „najlepszy wysiłek”.

Marc B.
źródło
1
Przyzwoita odpowiedź. Dodam, że w strumieniu TCP pakiety są potwierdzane przez miejsce docelowe, a uszkodzone pakiety / brakujące pakiety są ponownie wysyłane przez nadawcę. W UDP pakiety są wysyłane, a odbiorca odbiera je w dowolnej kolejności i nie potwierdza odbioru.
Erik Nedwidek
2
Trochę myląca analogia być może bardziej
pasująca
11
Bardzo podoba mi się ta analogia, ale jedna rzecz, którą ta odpowiedź nieco przekłamuje, to szybkość. wydaje się, że TCP jest szybsze, podczas gdy w rzeczywistości UDP jest, ponieważ jest mniej narzutu.
iliketocode
22

Powody, dla których UDP jest używany dla DNS i DHCP:

DNS - TCP wymaga więcej zasobów od serwera (który nasłuchuje połączeń) niż od klienta. W szczególności, gdy połączenie TCP jest zamknięte, serwer musi zapamiętać szczegóły połączenia (zatrzymując je w pamięci) przez dwie minuty, w stanie znanym jako TIME_WAIT_2. Jest to funkcja, która chroni przed błędnie powtarzanymi pakietami z poprzedniego połączenia, które są interpretowane jako część bieżącego połączenia. Utrzymanie TIME_WAIT_2 zużywa pamięć jądra na serwerze. Żądania DNS są małe i często pochodzą od wielu różnych klientów. Ten wzorzec użycia zwiększa obciążenie serwera w porównaniu z klientami. Uważano, że użycie protokołu UDP, który nie ma połączeń ani stanu do utrzymania na kliencie lub serwerze, złagodzi ten problem.

DHCP - DHCP jest rozszerzeniem BOOTP. BOOTP to protokół, którego komputery klienckie używają do pobierania informacji konfiguracyjnych z serwera podczas rozruchu klienta. Aby zlokalizować serwer, wysyłana jest transmisja z pytaniem o serwery BOOTP (lub DHCP). Transmisje mogą być wysyłane tylko za pośrednictwem bezpołączeniowego protokołu, takiego jak UDP. Dlatego BOOTP wymagał co najmniej jednego pakietu UDP do rozgłaszania lokalizującego serwer. Ponadto, ponieważ BOOTP działa, gdy klient ... uruchamia się, i jest to okres, w którym klient może nie mieć załadowanego i uruchomionego całego stosu TCP / IP, UDP może być jedynym protokołem, który klient jest gotowy do obsługi. czas. Wreszcie, niektórzy klienci DHCP / BOOTP mają na pokładzie tylko UDP. Na przykład niektóre termostaty IP obsługują tylko UDP.

Jak wspominali inni, UDP jest również przydatny do przesyłania strumieniowego multimediów, zwłaszcza audio. Rozmowy brzmią lepiej w przypadku opóźnień w sieci, jeśli po prostu porzucisz opóźnione pakiety. Możesz to zrobić za pomocą UDP, ale w przypadku TCP wszystko, co dostajesz podczas lagów, to pauza, po której następuje dźwięk, który zawsze będzie opóźniony o tyle, ile już został wstrzymany. W przypadku dwukierunkowych rozmów telefonicznych jest to niedopuszczalne.

Heath Hunnicutt
źródło
17

Jedna z różnic jest w skrócie

UDP : wyślij wiadomość i nie patrz wstecz, jeśli dotarła do celu, protokół
bezpołączeniowy TCP : wyślij wiadomość i zagwarantuj dotarcie do celu, protokół zorientowany na połączenie

caltuntas
źródło
9

TCP ustanawia połączenie przed faktyczną transmisją danych, UDP nie. W ten sposób UDP może zapewnić szybszą dostawę. Aplikacje takie jak DNS, dostęp do serwera czasu używają zatem protokołu UDP.

W przeciwieństwie do UDP, TCP używa kontroli przeciążenia. Reaguje na obciążenie sieci. W przeciwieństwie do UDP spowalnia, gdy zbliża się przeciążenie sieci. Tak więc aplikacje takie jak multimedia preferujące stałą przepustowość mogą skorzystać z protokołu UDP.

Poza tym UDP jest zawodny, nie reaguje na utratę pakietów. Dlatego aplikacje wrażliwe na straty, takie jak transmisja multimediów, preferują UDP. Jednak TCP jest niezawodnym protokołem, więc aplikacje wymagające niezawodności, takie jak przesyłanie internetowe, poczta e-mail, pobieranie plików, preferują TCP.

Poza tym w dzisiejszym Internecie UDP nie jest tak przyjemny jak TCP ze względu na środkowe pola. Niektóre aplikacje, takie jak skype, przechodzą do TCP, gdy zakłada się, że połączenie UDP jest zablokowane.

Timir
źródło
2

Krótkie i proste różnice między protokołami Tcp i Udp:

1) Tcp - protokół kontroli transmisji i Udp - protokół datagramu użytkownika.

2) Tcp to niezawodny protokół, podczas gdy Udp jest zawodnym protokołem.

3) Tcp jest zorientowanym na strumień, gdzie Udp jest protokołem zorientowanym na komunikaty.

4) Tcp jest wolniejsze niż Udp.

msc
źródło
1

Wbiegnij w ten wątek i spróbuję to wyrazić w ten sposób.

TCP

Uzgadnianie trójetapowe

Bob: Hej Amy, chciałbym ci zdradzić sekret
Amy: OK, śmiało, jestem gotowy
Bob: OK

Komunikacja
Bob: „I”, to jest pierwsza litera
Amy: Otrzymałem pierwszy list, proszę o przesłanie mi drugiego listu
Bob: „”, to jest druga litera
Amy: Drugi list otrzymałem, proszę o przesłanie mi trzeciego listu
Bob: „L ', to jest trzecia litera
Po chwili
Bob: ' L ', to trzecia litera
Amy: Trzeci list otrzymałem, proszę o przesłanie mi czwartej litery
Bob: ' O ', to czwarta litera
Amy: ...
... ...

Uścisk dłoni w 4 kierunkach
Bob: Mój sekret został ujawniony, teraz znasz moje serce.
Amy: OK. Nie mam nic do powiedzenia.
Bob: OK.

UDP

Bob: I LOVE U
Amy otrzymał: OVI LE

TCP jest bardziej niezawodny niż UDP z gwarantowaną równą kolejnością wiadomości, dlatego UDP jest bez wątpienia lżejszy i wydajniejszy.

Eugene
źródło
0

Proste wyjaśnienie przez analogię

TCP jest taki.

Wyobraź sobie, że masz kumpla na Marsie (komunikowaliśmy się za pomocą pisemnych listów w dawnych dobrych czasach przed Internetem).

Musisz wysłać swojemu przyjacielowi korespondencyjnemu siedem nawyków wysoce skutecznych ludzi. Decydujesz się więc wysłać go w siedmiu oddzielnych literach:

  1. List 1 - Bądź proaktywny
  2. List 2 - Zacznij od końca ...

itp.

etc..Liter 7 - Naostrzyć piłę

Wymagania:

Chcesz mieć pewność, że korespondencyjny kolega otrzyma wszystkie Twoje listy - w kolejności i że dotrą one idealnie . Jeśli twoja pensja otrzyma list 7 przed literą 1 - to niedobrze. jeśli twój przyjaciel korespondencyjny otrzyma wszystkie listy z wyjątkiem litery 3 - to również nie jest dobre.

Oto, w jaki sposób zapewniamy, że nasze wymagania są spełnione:

  • List potwierdzający: Twój kumpel korespondencyjny wysyła więc list potwierdzający z napisem „Otrzymałem list 1”. W ten sposób wiesz, że Twój korespondent go otrzymał. Jeśli list nie dotrze lub nadejdzie nieprawidłowo, musisz się zatrzymać, wrócić i ponownie wysłać ten list i wszystkie kolejne.
  • Kontrola przepływu: W okolicach Świąt Bożego Narodzenia wiesz, że Twój przyjaciel korespondencyjny będzie otrzymywał dużo poczty, więc zwalniasz, ponieważ nie chcesz przytłoczyć swojego kumpla. (Twój przyjaciel korespondencyjny wysyła ci ciągłe aktualizacje o liczbie nieprzeczytanych wiadomości w skrzynce pocztowej - jeśli twój przyjaciel mówi, że skrzynka odbiorcza zaraz wybuchnie, ponieważ jest tak pełna, to zwalniasz wysyłanie listów - ponieważ twój kolega pisarz nie będzie w stanie ich przeczytać.
  • Idealny przyjazd. Czasami podczas wysyłania listu pocztą może się on podrzeć lub ślimak może zjeść jego połowę. Skąd wiesz, że cały Twój list dotarł w idealnym stanie? Twój korespondencyjny kumpel da ci mechanizm, za pomocą którego możesz sprawdzić, czy ma pełny list i czy to dokładnie ten list, który wysłałeś. (np. poprzez liczbę słów itp.). podstawowa analogia.
BKSpurgeon
źródło
0

TLDR;

  • TCP - zorientowany strumieniowo, wymaga połączenia, niezawodny, wolny
  • UDP - zorientowany na wiadomości, bezpołączeniowy, zawodny, szybki

Zanim zaczniemy, pamiętajmy, że wszystkie wady czegoś są kontynuacją jego zalet . Jest tylko odpowiednie narzędzie do pracy, nie ma panaceum. TCP / UDP współistnieją od dziesięcioleci nie bez powodu.

TCP

Został zaprojektowany tak, aby był wyjątkowo niezawodny i bardzo dobrze spełnia swoje zadanie. Jest tak złożony, ponieważ wykonuje trudne zadanie: udowodnienie niezawodnego transportu przez zawodny protokół IP.

Ponieważ cała złożona logika TCP jest umieszczona w stosie sieciowym, nie musisz wykonywać wielu pracochłonnych, podatnych na błędy niskopoziomowych czynności w warstwie aplikacji.

Kiedy wysyłasz dane przez TCP, zapisujesz strumień bajtów do gniazda u nadawcy, gdzie są one dzielone na pakiety, przekazywane w dół stosu i przesyłane przez kabel. Po stronie odbiorcy pakiety są ponownie składane w ciągły strumień bajtów.

Utrzymanie tej ładnej abstrakcji kosztuje pod względem złożoności i wydajności. Jeśli pierwszy pakiet ze strumienia bajtów zostanie utracony, odbiornik opóźni przetwarzanie kolejnych pakietów, nawet tych, które już przybyły.

Ponadto, aby być niezawodnym, TCP implementuje to:

  • Protokół TCP wymaga nawiązanego połączenia, które wymaga trzech połączeń w obie strony („niesławny” potrójny uzgadnianie).
  • Protokół TCP ma funkcję zwaną „powolnym startem”, polegającą na stopniowym zwiększaniu szybkości transmisji po ustanowieniu połączenia, aby umożliwić odbiornikowi nadążanie za danymi.
  • Każdy wysłany pakiet musi zostać potwierdzony, inaczej nadawca przestanie wysyłać więcej danych
  • I dalej i dalej i dalej ...

Wszystko to pogarsza się w powolnych, zawodnych sieciach bezprzewodowych, podczas gdy protokół TCP został zaprojektowany dla sieci przewodowych, w których można przewidzieć opóźnienia, a utrata pakietów nie jest tak powszechna. Ponadto, jak wiele osób już wspomniało, w niektórych przypadkach TCP po prostu nie działa (DHCP). Jednak w stosownych przypadkach TCP nadal działa wyjątkowo dobrze.

Posługując się analogią do poczty, sesja TCP jest podobna do opowiadania historii sekretarce, która dzieli ją na maile i wysyła przez kiepską usługę pocztową do wydawcy. Po drugiej stronie inny sekretarz łączy wiadomości w jeden fragment tekstu. Niektóre wiadomości gubią się, inne ulegają uszkodzeniu, dlatego niezawodne dostarczenie wymaga bardzo złożonej procedury, a 10-stronicowa historia może zająć dużo czasu, zanim wydawca dotrze.

UDP

Z drugiej strony, UDP jest zorientowany na komunikaty, więc odbiorca zapisuje wiadomość (pakiet) do gniazda, a następnie jest przesyłana do odbiornika w stanie takim, w jakim jest, bez żadnego podziału / składania.

W porównaniu z TCP jego specyfikacja jest bardzo prosta. Zasadniczo wszystko, co robi dla Ciebie, to dodanie sumy kontrolnej do pakietu, aby odbiornik mógł wykryć jego uszkodzenie. Wszystko inne musi zostać wdrożone przez Ciebie, programistę. Przeczytaj teraz obszerną specyfikację TCP i spróbuj pomyśleć o ponownym wdrożeniu niektórych jej części.

Niektórzy poszli tą drogą i uzyskali bardzo przyzwoite wyniki, do tego stopnia, że ​​HTTP / 3 używa QUIC - protokołu opartego na UDP. Jednak jest to raczej wyjątek. Typowe zastosowania UDP to strumieniowanie audio / wideo i aplikacje konferencyjne, takie jak Skype, Zoom lub Google Hangout, w których utrata pakietów nie jest tak ważna w porównaniu z opóźnieniem wprowadzanym przez TCP.

raiks
źródło