UDP vs TCP, ile to jest szybsze? [Zamknięte]


194

Do ogólnej wymiany komunikatów w protokole, która może tolerować utratę niektórych pakietów. O ile bardziej wydajne jest UDP przez TCP?


Możesz także dodać tag „tcp”, ponieważ pytanie dotyczy również TCP.
Cristian Ciupitu,

5
Co oznacza „wymiana komunikatów protokołu ogólnego”? Pytanie musi wyjaśnić, na czym polega wydajność. Czy chcemy mieć mniejsze opóźnienia w przypadku małej wiadomości? Czy też chcemy wyższej przepustowości dla ciągłego strumienia danych?
Johan Boulé

Tcp ma więcej lepszych funkcji niż UDP oprócz prędkości.
RAJKUMAR NAGARETHINAM

3
Pytanie TCP a prędkość UDP jest dyskusyjne. Pytanie w nagłówku faktycznie nie pasuje do treści pytania. Zarówno pakiety TCP, jak i UDP przemieszczają się z dokładnie taką samą prędkością na tym samym nośniku.
Ron Maupin,

Odpowiedzi:


86

UDP jest szybszy niż TCP, a prostym powodem jest to, że jego nieistniejący pakiet potwierdzający (ACK), który zezwala na ciągły strumień pakietów, zamiast TCP, który potwierdza zestaw pakietów, obliczony na podstawie rozmiaru okna TCP i czasu podróży w obie strony (RTT).

Aby uzyskać więcej informacji, polecam proste, ale bardzo zrozumiałe wyjaśnienie Skullbox (TCP vs. UDP)


19
W rzeczywistości istnieje wiele przypadków, w których TCP jest w rzeczywistości szybszy niż UDP. Zobacz moją odpowiedź poniżej.
Robert S. Barnes

2
To, co jest szybsze, zależy całkowicie od charakterystyki ruchu.

4
Chociaż odpowiedź może być poprawna, nie odpowiada na pytanie i wielokrotnie powtarza wiedzę wymienioną w innym miejscu. Nie wspomina także, że niezawodne metody UDP z ACK mogą być znacznie szybsze niż TCP.
Elliot Woods,

268

Ludzie mówią, że najważniejszą rzeczą, jaką daje Ci TCP, jest niezawodność. Ale to nie do końca prawda. Najważniejszą rzeczą, jaką daje Ci TCP, jest kontrola przeciążenia: możesz uruchomić 100 połączeń TCP przez łącze DSL, wszystkie pracują z maksymalną prędkością, a wszystkie 100 połączeń będzie produktywnych, ponieważ wszystkie one „wyczuwają” dostępną przepustowość. Wypróbuj to dzięki 100 różnym aplikacjom UDP, wszystkie pchające pakiety tak szybko, jak to możliwe, i przekonaj się, jak dobrze ci idzie.

Na większą skalę to zachowanie TCP powstrzymuje Internet przed „zawaleniem się zatorów”.

Rzeczy, które mają tendencję do popychania aplikacji w kierunku UDP:

  • Semantyka dostarczania grupowego: możliwe jest niezawodne dostarczanie do grupy ludzi znacznie wydajniej niż potwierdzenie TCP z punktu do punktu.

  • Dostawa poza kolejnością: w wielu aplikacjach, dopóki otrzymujesz wszystkie dane, nie przejmujesz się, w jakiej kolejności je otrzymujesz; możesz zmniejszyć opóźnienie na poziomie aplikacji, akceptując blokadę braku zamówienia.

  • Nieprzyjaźń: na imprezie w sieci LAN możesz nie przejmować się, czy Twoja przeglądarka działa dobrze, o ile aktualizujesz sieć tak szybko, jak to możliwe.

Ale nawet jeśli zależy Ci na wydajności, prawdopodobnie nie chcesz korzystać z UDP:

  • Teraz zależy Ci na niezawodności, a wiele rzeczy, które możesz zrobić, aby wprowadzić niezawodność, może być wolniejsze niż to, co już robi TCP.

  • Teraz jesteś nieprzyjazny dla sieci, co może powodować problemy we współdzielonych środowiskach.

  • Co najważniejsze, zapory będą Cię blokować.

Możesz potencjalnie rozwiązać niektóre problemy z wydajnością i opóźnieniami TCP poprzez „trunking” wielu połączeń TCP razem; iSCSI robi to, aby obejść kontrolę nad przeciążeniami w sieciach lokalnych, ale możesz to również zrobić, aby utworzyć kanał komunikatów o pilnych komunikatach o niskim opóźnieniu (zachowanie „PILNE” protokołu TCP jest całkowicie zepsute).


18
Dobra odpowiedź, powiedziałbym nawet bardziej ogólną „kontrolę przepływu” (w przeciwieństwie do kontroli przeciążenia, która jest podzbiorem kontroli przepływu). Nie tylko wiele połączeń TCP może współdzielić jedno łącze, ale także zapobiegnie przepełnieniu bufora odbiorcy, jeśli z jakiegokolwiek powodu wstrzyma przetwarzanie danych przychodzących.
Alex B

1
@AaronLS: utrata pakietów i wzrost czasu RTT (czas podróży w obie strony) (które mogą być postrzegane jako proxy dla opóźnienia w kolejce ) są / mogą być (np .: sieci WiFi mogą stracić pakiety bez rzeczywistego przeciążenia, oszukując niektóre algorytmy kontroli przeciążenia TCP w celu uniknięcia przeciążenia) wskaźniki przeciążenia.
ninjalj

2
UDP to drań, z którym trzeba sobie poradzić ... Już mnie to wypaliło. Bez względu na to, co robię, nie mogę znaleźć równowagi między wydajnością, opóźnieniem, przepustowością, niezawodnością. Idealne do rzeczy w czasie rzeczywistym, takich jak liczniki czasu ... ale pracuję nad zastąpieniem TCP za pomocą UDP i Forward Error Correction i jest to o wiele trudniejsze, niż się spodziewałem. Kontrola zatorów. Uniwersalny system działający w sieciach 1 GB i sieciach bezprzewodowych jest dziełem sztuki. Mam wrażenie, że próbuję ponownie złożyć pakiety załadowane do strzelby.
Jason Nelson

1
Btw innym na korzyść TCP jest to, że z natury jest zorientowany na połączenie, co znacznie upraszcza logikę obsługi klienta aplikacji ( listen-> accept-> stan klienta jest oczywiście niezależny od innych klientów). W szczególności obsługa wielu połączeń z jednego klienta staje się bardzo prosta dzięki UDP. A zaletą UDP jest to, że stosy UDP są naprawdę łatwe do wdrożenia, co jest ogromnym plusem w systemach wbudowanych (mikrokontrolery, FPGA itp.), W szczególności implementacja TCP dla FPGA jest ogólnie rzeczą, którą po prostu chcesz kupić od kogoś innego i nie myśl o tym).
Jason C

1
To wszystko stoi tylko przy założeniu , że jesteśmy zainteresowani dostarczaniem sporej ilości danych (bez zbytniej dbałości o opóźnienia). W wielu aplikacjach (gry / VoIP) sytuacja jest drastycznie inna: mamy bardzo małą ilość danych, ale DUŻO dbamy o opóźnienia; jest to prosta rzecz, która stanowi 99% legalnego wykorzystania UDP. I kilka drobiazgów: (a) dostarczanie grupowe NIE DZIAŁA przez Internet (i jest mało prawdopodobne, że będzie), więc jest to dziedzina tylko intranetowa; (b) na Google, tylko 8-9% populacji Internetu ma problemy z UDP; (c) „nieprzyjazna sieć” nie dotyczy strumienia o stałej szybkości
Zając No-Bugs

93

W niektórych aplikacjach protokół TCP jest szybszy (lepsza przepustowość) niż protokół UDP.

Jest tak w przypadku wykonywania wielu małych zapisów w stosunku do rozmiaru MTU. Na przykład czytam eksperyment, w którym strumień 300 bajtów pakietów był przesyłany przez Ethernet (1500 bajtów MTU), a TCP był o 50% szybszy niż UDP .

Powodem jest to, że TCP spróbuje buforować dane i zapełnić pełny segment sieci, efektywniej wykorzystując dostępną przepustowość.

Z drugiej strony UDP natychmiast umieszcza pakiet na kablu, co powoduje przeciążenie sieci dużą ilością małych pakietów.

Prawdopodobnie nie powinieneś używać UDP, chyba że masz bardzo konkretny powód. Zwłaszcza, że ​​możesz zapewnić TCP taki sam opóźnienie jak UDP, wyłączając algorytm Nagle (na przykład, jeśli przesyłasz dane z czujników w czasie rzeczywistym i nie martwisz się o przeciążenie sieci dużą ilością małych pakietów).


3
Właściwie zrobiłem testy porównawcze dla tego efektu. Wysyłałem pakiety tak duże, że UDP obsługiwałoby je bez zgłaszania wyjątków (w Javie), a TCP był znacznie szybszy. Sądzę, że wiele optymalizacji systemu operacyjnego, sterowników i sprzętu również jest częścią tego.
Charlie,

14
@Myforwik: Po pierwsze, nie jest to implementacja zdefiniowana, jest częścią protokołu TCP. Nazywa się to algorytmem Nagle. Pomaga zapobiegać tak zwanemu zespołowi głupiego okna. Sprawdź oba warunki. Po drugie, nie ma koncepcji pakietów z pov TCP. Wreszcie, książka „Skuteczne programowanie TCP / IP” poświęca cały rozdział temu tematowi i wiele innych rozdziałów na temat pokrewnego tematu, kiedy należy wiedzieć, kiedy używać TCP vs. UDP. Poruszam tę sytuację (która jest dość powszechna), ponieważ PO zadał ogólne pytanie i jest to jedna z wielu możliwych odpowiedzi.
Robert S. Barnes

46
@Myforwik. Sugerując moronizm innym, spróbuj zrozumieć, że wszyscy mamy luki w naszej wiedzy - w tym ty. SO jest przecież forum wymiany wiedzy. Prawie wszystkie strzelanki FPS korzystają z UDP i rzadko wysyłają pakiety w rozmiarach zbliżonych do MTU. Jeśli chcesz pójść i zasugerować Johnowi Carmackowi, jaki był kretynem za wymyślenie takiego podejścia, najpierw zachęcam do gruntownej edukacji w tym zakresie. 15 lat, a warty wysokiej wydajności kod sieciowy w branży nie leży i nie umiera, ponieważ myślisz, że jest „kretyński”.
Inżynier

2
Czytałem eksperyment, w którym strumień 300 bajtów pakietów był przesyłany przez Ethernet (1500 bajtów MTU), a TCP był o 50% szybszy niż UDP. ” - czy możesz połączyć ten eksperyment?
Lewiatan

3
@Leviathan Jest w książce Skuteczne programowanie TCP / IP.
Robert S. Barnes,

31

z tolerancją na straty

Masz na myśli „z tolerancją strat”?

Zasadniczo UDP nie jest „odporny na straty”. Możesz wysłać komuś 100 pakietów, a oni mogą otrzymać tylko 95 takich pakietów, a niektóre mogą być w niewłaściwej kolejności.

W przypadku takich rzeczy, jak przesyłanie strumieniowe wideo i gry wieloosobowe, w których lepiej jest przegapić pakiet niż opóźnić wszystkie pozostałe pakiety za nim, jest to oczywisty wybór

Jednak w przypadku większości innych rzeczy brakujący lub „przestawiony” pakiet ma kluczowe znaczenie. Będziesz musiał napisać dodatkowy kod, który będzie działał na UDP, aby spróbować ponownie, jeśli coś pominie, i wymusić prawidłowe zamówienie. W niektórych miejscach spowodowałoby to niewielki narzut.

Na szczęście niektórzy bardzo inteligentni ludzie to zrobili i nazwali to TCP.

Pomyśl o tym w ten sposób: jeśli brakuje pakietu, wolisz po prostu pobrać następny pakiet tak szybko, jak to możliwe i kontynuować (użyj UDP), czy rzeczywiście potrzebujesz tych brakujących danych (użyj TCP). Koszty ogólne nie będą miały znaczenia, chyba że znajdziesz się w naprawdę wyjątkowym scenariuszu.


1
5 pakietów na 100? To całkiem sporo. Myślę, że to tylko przykład. Pytanie: w realnej sytuacji, ile pakietów można utracić? Ponieważ jeśli jest to na przykład 2 na 10000 (plus minus 1), nie martwiłbym się tym.
zakręcony

1
@freakish, tak, to był tylko przykład. Rzeczywista utrata pakietów zależy od twojego połączenia, sieci upstream itp. Kiedyś grałem w wiele gier online i stwierdziłbym, że gdybym tylko ja korzystał z połączenia internetowego, nie dostałbym utraty pakietów, ale jak tylko uruchomię pobieranie w tle, zacznę dostawać (może 10% -20%). Było to około 5 lat temu, a szybsze połączenia internetowe mogą pomóc.
Orion Edwards

2
Routery internetowe upuszczają udp przed tcp
user1496062

19

Który protokół działa lepiej (pod względem przepustowości) - UDP lub TCP - naprawdę zależy od charakterystyki sieci i ruchu w sieci. Na przykład Robert S. Barnes wskazuje na scenariusz, w którym TCP działa lepiej (zapisy w małych rozmiarach). Rozważmy teraz scenariusz, w którym sieć jest przepełniona i ma zarówno ruch TCP, jak i UDP. Nadawcy w sieci korzystający z protokołu TCP wyczują „zatłoczenie” i obniżą szybkość wysyłania. Jednak UDP nie ma żadnych mechanizmów unikania i kontroli przeciążenia, a nadawcy używający UDP nadal pompują dane z tą samą prędkością. Stopniowo nadawcy TCP zmniejszają szybkość wysyłania do absolutnego minimum, a jeśli nadawcy UDP mają wystarczającą ilość danych do wysłania przez sieć, zwiększają większość dostępnej przepustowości. W takim przypadku Nadawcy UDP będą mieli większą przepustowość, ponieważ uzyskają większą przepustowość przepustowości sieci. W rzeczywistości jest to aktywny temat badawczy - Jak poprawić przepustowość TCP w obecności ruchu UDP. Jednym ze znanych mi sposobów wykorzystania aplikacji TCP do zwiększenia przepustowości jest otwarcie wielu połączeń TCP. W ten sposób, mimo że przepustowość każdego połączenia TCP może być ograniczona, suma przepustowości wszystkich połączeń TCP może być większa niż przepustowość aplikacji korzystającej z UDP.


2
To nie jest poprawne routery upuszczają UDP przed TCP. Na wspólnym przewodzie możesz utopić się przez UDP, ale to, co może się zdarzyć w sytuacji nadpodaży, zależy od technologii, ale UDP dość łatwo zdegraduje do tego stopnia, że ​​bardzo niewiele jest wysyłanych tylko kolizjami.
user1496062

Podoba mi się twoje wyjaśnienie, ale nie dostaję ani jednego punktu. Jeśli połączenia UDP mogą uzyskać cały ruch (jeśli przepustowość jest niska lub dane są wysokie), wówczas aplikacja korzystająca z protokołu TCP jest zasadniczo zakładnikiem tych, którzy korzystają z protokołu UDP. Jeśli wszystkie aplikacje używają protokołu TCP, „dobrze się ze sobą bawią”. Dlaczego więc najpierw pozwolić UDP na rauter?
Igor Čordaš

@PSIXO: Cóż, TCP i UDP spełniają różne wymagania aplikacji, więc oba są używane przez aplikacje. Sugestia Twojej sugestii polega na tym, że powinniśmy mieć inną infrastrukturę sieciową dla ruchu TCP i UDP - jest to droga propozycja, a na pewno nie jest to coś, co możemy zrobić teraz, zwłaszcza przy wszystkich dokonanych już inwestycjach. Dlatego badacze są zajęci szukaniem alternatywnych sposobów zrównoważenia konfliktu w „oprogramowaniu”.
gjain

Zasadniczo tak, posiadanie dwóch infrastruktur byłoby idealnym rozwiązaniem, ale niestety nie jest prawdopodobne. To, co chciałem powiedzieć w moim komentarzu, to to, że przeceniasz UDP trafiające w TCP, ponieważ gdyby było to tak wysokie, ludzie po prostu wyłączyliby UDP na routerze (jak to czasem bywa w firmach), gdyby potrzebowali TCP do szybkiego działania. Należy również pamiętać, że pakiety UDP mają większą szansę na usunięcie niż TCP. Jeśli chodzi o resztę faktów w twojej odpowiedzi, w pełni się zgadzam i uważam, że jest to dość pomocne, ale myślę, że przeceniasz pewne efekty.
Igor Čordaš

18

Mówiąc o „tym, co jest szybsze” - istnieją co najmniej dwa bardzo różne aspekty: przepustowość i opóźnienie.

Mówiąc o przepustowości - kontrola przepływu TCP (jak wspomniano w innych odpowiedziach), jest niezwykle ważna i robienie czegokolwiek porównywalnego w stosunku do UDP, choć na pewno możliwe, byłoby dużym bólem głowy (tm). W rezultacie - korzystanie z UDP, gdy potrzebujesz przepustowości , rzadko kwalifikuje się jako dobry pomysł (chyba że chcesz uzyskać nieuczciwą przewagę nad TCP).

Jeśli jednak mówimy o opóźnieniach - cała sprawa jest zupełnie inna. Podczas gdy przy braku utraty pakietów TCP i UDP zachowują się bardzo podobnie (wszelkie różnice, jeśli występują, są marginalne) - po utracie pakietu cały wzorzec zmienia się drastycznie.

Po każdej utracie pakietu TCP będzie czekać na retransmisję przez co najmniej 200 ms (1 s na paragraf 2.4 RFC6298, ale praktyczne nowoczesne implementacje mają tendencję do zmniejszania go do 200 ms). Co więcej, dzięki TCP nawet te pakiety, które dotarły do ​​hosta docelowego - nie zostaną dostarczone do Twojej aplikacji, dopóki nie zostanie odebrany brakujący pakiet (tj. Cała komunikacja zostanie opóźniona o ~ 200 ms) - BTW, ten efekt, znany jako Head-of Blokowanie linii jest nieodłącznym elementem wszystkich niezawodnych uporządkowanych strumieni, czy to TCP, czy niezawodnych + uporządkowanych UDP. Co gorsza - jeśli retransmitowany pakiet również zostanie utracony, będziemy mówić o opóźnieniu ~ 600 ms (z powodu tak zwanego wykładniczego wycofania, 1. retransmisja to 200 ms, a drugi 200 * 2 = 400 ms). Jeśli nasz kanał ma 1% utraty pakietów (co nie jest złe według dzisiejszych standardów), i mamy grę z 20 aktualizacjami na sekundę - takie 600 ms opóźnienia będą występować średnio co 8 minut. A ponieważ 600 ms to więcej niż wystarczająca ilość, aby zabić Cię w szybkiej grze - no cóż, jest całkiem zła dla rozgrywki. Te efekty właśnie dlatego gamedevs często wolą UDP niż TCP.

Jednak w przypadku korzystania z UDP w celu zmniejszenia opóźnień - ważne jest, aby zdawać sobie sprawę, że samo „użycie UDP” nie jest wystarczające, aby uzyskać znaczną poprawę opóźnień, wszystko zależy od tego, JAK używasz UDP. W szczególności, podczas gdy biblioteki RUDP zwykle unikają tego „wykładniczego wycofania” i używają krótszych czasów retransmisji - jeśli są używane jako „niezawodny uporządkowany strumień”, nadal muszą cierpieć z powodu blokowania na początku linii (tak w przypadku podwójnego utrata pakietu, zamiast 600 ms otrzymamy około 1,5 * 2 * RTT - lub dla całkiem niezłego 80 ms RTT, opóźnienie to ~ 250 ms, co jest poprawą, ale nadal można to zrobić lepiej). Z drugiej strony, jeśli używa się technik omówionych w http://gafferongames.com/networked-physics/snapshot-compression/ i / lub http: // ithare. , możliwe jest całkowite wyeliminowanie blokowania Head-of-Line (więc w przypadku utraty podwójnego pakietu dla gry z 20 aktualizacjami na sekundę opóźnienie wyniesie 100 ms niezależnie od RTT).

Na marginesie - jeśli zdarza się, że masz dostęp tylko do TCP, ale nie ma UDP (np. W przeglądarce lub jeśli Twój klient stoi za jedną z 6-9% brzydkich zapór blokujących UDP) - wydaje się, że istnieje sposób na zaimplementuj UDP-over-TCP bez nadmiernych opóźnień, patrz tutaj: http://ithare.com/almost-zero-additional-latency-udp-over-tcp/ (pamiętaj, aby przeczytać komentarze również (!)).


13

Każde połączenie TCP wymaga wstępnego uzgodnienia przed przesłaniem danych. Ponadto nagłówek TCP zawiera dużo narzutu przeznaczonego na różne sygnały i wykrywanie dostarczania wiadomości. W przypadku wymiany komunikatów prawdopodobnie wystarczy protokół UDP, jeśli dopuszczalna jest niewielka szansa na awarię. Jeśli potwierdzenie musi zostać zweryfikowane, TCP jest najlepszą opcją.


Mała szansa na niepowodzenie i ograniczenie wielkości pakietu.

11

@Andrew , błagam się różnić. UDP jest wyborem w niektórych rodzajach aplikacji ze względu na wymagania dotyczące wydajności. Klasycznym przykładem jest wideokonferencja. Ten rodzaj aplikacji nie reaguje dobrze na sterowanie TCP.

Innym aspektem, który należy wziąć pod uwagę, jest to, czy będziesz potrzebować multiemisji. Jeśli tak, użyj UDP.


8
UDP jest również używany, ponieważ jeśli przegapisz pakiet lub dwa, prawdopodobnie i tak jest już za późno i prawdopodobnie najlepiej po prostu go pominąć i przejść dalej, aby móc kontynuować oglądanie. Mały szum w filmie z powodu niektórych upuszczonych pakietów jest znacznie lepszy niż tony przeciążenia.
Kibbee

1
Prawidłowo - wielokrotne przesyłanie sieci jest dość rzadkie, większość routerów ją blokuje.
user1496062

8

Jeśli chcesz szybko wysyłać wiadomości w sieci między dwoma adresami IP, które nawet jeszcze nie rozmawiały, UDP przybędzie co najmniej 3 razy szybciej, zwykle 5 razy szybciej.


1
Jakieś referencje?
Gerard

8

Wyjaśnię wszystko. TCP / UDP to dwa samochody jeżdżące po drodze. załóżmy, że znaki drogowe i przeszkody są błędami TCP dba o znaki drogowe, szanuje wszystko dookoła. Wolna jazda, ponieważ coś może się stać z samochodem. Podczas gdy UDP po prostu odjeżdża, pełna prędkość bez względu na znaki drogowe. Nic, szalony kierowca. UDP nie ma funkcji odzyskiwania po błędzie. Jeśli napotka przeszkodę, po prostu zderzy się z nią, a następnie kontynuuje. Podczas gdy TCP upewnia się, że wszystkie pakiety są wysyłane i odbierane idealnie, nie ma błędów, więc samochód po prostu mija przeszkody bez kolizji. Mam nadzieję, że to dobry przykład na zrozumienie, dlaczego UDP jest preferowane w grach. Gra wymaga szybkości. Preferowane jest pobieranie TCP , lub pobrane pliki mogą być uszkodzone.


7

UDP jest nieco szybszy z mojego doświadczenia, ale niewiele. Wybór nie powinien zależeć od wydajności, ale od treści wiadomości i technik kompresji.

Jeśli jest to protokół z wymianą wiadomości , sugerowałbym, że bardzo niewielki spadek wydajności, jaki bierzesz za pomocą TCP, jest więcej niż warty. Masz połączenie między dwoma punktami końcowymi, które zapewnią ci wszystko, czego potrzebujesz. Nie próbuj tworzyć własnego niezawodnego dwukierunkowego protokołu na bazie protokołu UDP, chyba że naprawdę, naprawdę pewny tego, co podejmujesz.


5

Należy pamiętać, że TCP zwykle przechowuje wiele wiadomości w sieci. Jeśli chcesz zaimplementować to w UDP, będziesz mieć sporo pracy, jeśli chcesz to zrobić niezawodnie. Twoje rozwiązanie będzie albo mniej niezawodne, mniej szybkie, albo niewiarygodne. Istnieją prawidłowe aplikacje UDP, ale jeśli zadajesz to pytanie, prawdopodobnie nie masz.


5

Wykonano pewne prace, aby umożliwić programistom czerpanie korzyści z obu światów.

SCTP

Jest to niezależny protolol warstwy transportowej, ale może być używany jako biblioteka zapewniająca dodatkową warstwę w stosunku do UDP. Podstawową jednostką komunikacji jest wiadomość (zmapowana na jeden lub więcej pakietów UDP). Wbudowana jest kontrola przeciążenia. Protokół ma pokrętła i pokrętła do włączenia

  • w celu dostarczenia wiadomości
  • automatyczna retransmisja utraconych wiadomości z parametrami zdefiniowanymi przez użytkownika

jeśli którykolwiek z tych elementów jest potrzebny do konkretnego zastosowania.

Jednym z problemów jest to, że nawiązywanie połączenia jest skomplikowanym (a zatem powolnym procesem)

Inne podobne rzeczy

Jeszcze jedna podobna zastrzeżona rzecz eksperymentalna

To również próbuje poprawić potrójny uścisk dłoni TCP i zmienić kontrolę przeciążenia, aby lepiej radzić sobie z szybkimi liniami.


3

Nie ma sensu rozmawiać o TCP lub UDP bez uwzględnienia stanu sieci. Jeśli sieć między dwoma punktami ma bardzo wysoką jakość, UDP jest absolutnie szybszy niż TCP, ale w niektórych innych przypadkach, takich jak sieć GPRS, TCP może być szybszy i bardziej niezawodny niż UDP.


1

Konfiguracja sieci ma kluczowe znaczenie dla wszelkich pomiarów. Ma to ogromną różnicę, jeśli komunikujesz się przez gniazda na lokalnej maszynie lub na drugim końcu świata.

Trzy rzeczy, które chcę dodać do dyskusji:

  1. Znajdziesz tutaj bardzo dobry artykuł o TCP vs. UDP w kontekście tworzenia gier.
  2. Dodatkowo, iperf ( jperf ulepsz iperf za pomocą GUI) jest bardzo fajnym narzędziem do samodzielnej odpowiedzi na twoje pytanie poprzez pomiar.
  3. Zaimplementowałem test porównawczy w Pythonie (zobacz to pytanie SO ). Średnio z 10 ^ 6 iteracji różnica dla wysyłania 8 bajtów wynosi około 1-2 mikrosekundy dla UDP.

1
Aby test porównawczy był odpowiedni do rzeczywistego Internetu, musisz go ponownie uruchomić za pomocą symulatora utraty pakietów, takiego jak netem. Jeśli zrobisz to dobrze (i przy symulowanym RTT powiedzmy 100ms i symulowanej utracie pakietu 1%), wyniki będą drastycznie się różnić. Krótko mówiąc - podczas gdy opóźnienia TCP i UDP są rzeczywiście takie same dla zerowej utraty pakietu - zaczynają się różnić DUŻO dla każdego utraconego pakietu.
No-Bugs Hare
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.