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?
tcp
network-programming
udp
protocols
user749414
źródło
źródło
Odpowiedzi:
TCP
to 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
.UDP
jest 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żTCP
dlatego, ż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ż narzutTCP
połączenia.W niektórych sytuacjach
UDP
jest używany, ponieważ umożliwia transmisję pakietów rozgłoszeniowych. Jest to czasami fundamentalne w przypadkach takich jakDHCP
protokół, ponieważ komputer kliencki nadal nie otrzymałIP
adresu (jest toDHCP
cel protokołu negocjacji) i nie będzie żadnego sposobu na ustanowienieTCP
strumienia bez samegoIP
adresu.źródło
Z artykułu Skullbox:
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.
źródło
is the most commonly used protocol on the Internet
stwierdzenie jest dyskusyjne i naprawdę zależy od tego, jak zdefiniujeszmost commonly used
,protocol
ithe Internet
. Na przykład protokół internetowy jest bardziej prawdopodobnym pretendentem do tej konkretnej korony.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”.
źródło
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.
źródło
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
źródło
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.
źródło
Prawo nieszczelnych abstrakcji Joela Spolsky'ego
http://www.joelonsoftware.com/articles/LeakyAbstractions.html
źródło
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.
źródło
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.
źródło
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:
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:
źródło
TLDR;
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:
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.
źródło