2011-01-29 12 views
13

Chciałbym poznać ogólny koszt utworzenia nowego połączenia w porównaniu z UDP. Wiem, że TCP wymaga początkowej wymiany pakietów (3-drożnego uzgadniania). Jakie byłyby inne koszty? Na przykład czy w jądrze jest jakiś rodzaj magii potrzebny do ustawienia buforów itp.?Ogólne obciążenie związane z tworzeniem połączenia TCP

Powód, dla którego pytam, czy mogę zachować istniejące połączenie otwarte i ponownie użyć go w razie potrzeby. Jednakże, jeśli nie będzie zbyt dużego napowietrzania, zmniejszy to złożoność.

+2

Myślę, że opóźnienie uścisku dłoni jest najbardziej znaczącym kosztem. – CodesInChaos

+0

Ahh dobry punkt. Połączenie nie jest uznawane za otwarte, dopóki nie zakończy się cały uścisk dłoni. Jednak po otwarciu można przesyłać dane bez oczekiwania na potwierdzenie w każdym segmencie (z powodu przesuwanego okna) – seand

+0

nie ma "potwierdzenia w każdym segmencie". – EJP

Odpowiedz

6

W porównaniu do opóźnienia wymiany pakietów, wszystkie inne koszty, takie jak czasy instalacji jądra są niewielkie.

9

Po zrzuceniu pakietu UDP na przewód, stos protokołu UDP może całkowicie zapomnieć o nim. W przypadku TCP istnieje minimum informacji o połączeniu (źródle/porcie docelowym i źródłowym/docelowym IP), numerze kolejnym, rozmiarze okna połączenia itp. Nie jest to ogromna ilość danych, ale szybko się sumuje serwer zajęty z wieloma połączeniami.

A także 3-drożny uścisk dłoni. Niektóre systemy braindead (i/lub złośliwe systemy) mogą nadużywać tego procesu (poszukaj "synowej powodzi") lub po prostu zrzucić połączenie po zakończeniu, pozostawiając system oczekujący na odpowiedź lub bliskie powiadomienie, które nigdy nie nadejdzie. Zaletą jest to, że przy TCP system zrobi wszystko, aby upewnić się, że pakiet trafia tam, gdzie musi. W przypadku UDP nie ma żadnych gwarancji.

4

OPCJA 1: Ogólny koszt utworzenia połączenia TCP są:

  1. Tworzenie połączenia z gniazdem
  2. Wysyłanie danych
  3. Zburzyć połączenia z gniazdem

Krok 1: Wymaga wymianę pakietów, dlatego opóźnienie to z powodu opóźnienia sieci i czasu serwisowego serwera docelowego opóźnia się o &. Nie ma znaczącego użycia procesora w jednym z tych pól.

Krok 2: Zależy od wielkości wiadomości.

Krok 3: IIRC, po prostu wysyła pakiet "zamknięcie teraz", bez czekania na potwierdzenie celu, więc nie ma opóźnień.

Opcja 2: Koszty UDP: *

  1. Tworzenie obiektu UDP
  2. Wysyłanie danych
  3. W pobliżu obiektu UDP

Krok 1: wymaga minimalnej konfiguracji, bez latencji martwi , bardzo szybki.

Krok 2: BARDZO TRZEBA ROZMIARU, nie ma retransmisji w UDP, ponieważ nie obchodzi go, czy pakiet został odebrany przez kogokolwiek, czy nie. Słyszałem, że im większa wiadomość, tym większe prawdopodobieństwo, że otrzymywane dane zostaną uszkodzone, a regułą jest to, że stracisz pewien procent wiadomości powyżej 20 MB.

Krok 3: Minimalna praca, minimalny czas.

Opcja 3: Wykorzystanie ZeroMQ Zamiast

Ty porównując TCP UDP w celu zmniejszenia czasu włączeniem. NIESAMOWITY KOMPROMIS: Gniazda ZeroMQ.

ZMQ pozwala skonfigurować gniazdo do publikowania, w którym nie obchodzi Cię, czy ktoś nasłuchuje (np. UDP), i ma wiele detektorów na tym gnieździe. To NIE jest gniazdo UDP - jest to alternatywa dla obu tych protokołów.

Patrz: ZeroMQ.org w celu uzyskania szczegółowych informacji.

Jest bardzo szybki i odporny na uszkodzenia, i jest z tego powodu coraz popularniejszy w branży finansowej.

+2

Nie jestem pewien, skąd masz numer 20 MB dla UDP. W IPV4 maksymalny rozmiar wiadomości wynosi 65 507 bajtów (65 535 - 8 bajtowych nagłówków UDP - 20 bajtowych nagłówków IP), według Wikipedii. Może zakładasz IPV6? – Joe

+0

Nie chodziło mi o rozmiar pakietu, ale o rozmiar wiadomości. Dodatkowo liczba jest heurystyczna. Sytuacja: w stosunkowo szybkim wewnętrznym centrum danych centrum za pośrednictwem UDP, w każdym zestawie N wiadomości o rozmiarze 20 MB, 5% z N (N * 0,05) z nich było uszkodzone. Były to dane z jednego WIELKIEGO OGROMNEGO/OGROMNEGO, z różnymi zestawami skrzynek, które nasłuchują wiadomości skierowanych do nich. Przepraszam za zamieszanie. Jego przesłanie (mojego współpracownika) było takie, że gdyby używał większych kawałków, wyższy procent miałby błędy i nic by nie wysłał. Miał backchannel z prośbą o ponowne wysłanie. –

+2

UDP nie ma koncepcji wiadomości większej niż pojedynczy datagram 64k, ponieważ pole rozmiaru w nagłówku UDP ma 16 bitów (https://tools.ietf.org/html/rfc768). Jest to zwykle większa niż MTU podstawowej warstwy transportowej, więc IP prawdopodobnie będzie fragmentować i ponownie składać pakiet 64k. Jeśli jakikolwiek fragment zostanie utracony, cały pakiet zostanie utracony, dlatego nie zaleca się przekraczania MTU. Komunikat o rozmiarze 20 MB wymaga protokołu wyższego poziomu przez UDP lub coś innego, jak TCP. Jeśli masz odniesienie do większych wiadomości, jestem zainteresowany, aby je przeczytać. – Joe

Powiązane problemy