2013-07-03 8 views
16

TCP jest zorientowany strumieniowo, co oznacza, że ​​dane są przesyłane w postaci ciągłego strumienia bajtów. Ale co mnie myli to to, że TCP tworzy segmenty i przekazuje je do IP. IP tworzy pakiety hermetyzuje segmenty i przenosi je. Gdzie dokładnie tutaj ciągły strumień?Strumień TCP vs komunikat UDP

UDP z drugiej strony jest zorientowany na wiadomości. Odbiera wiadomości z warstwy aplikacji, tworzy datagramy i przesyła je do IP. Do tej pory jest taki sam jak TCP, zamiast tego utworzony i zrzucony datagram. Co sprawia, że ​​ten protokół jest zorientowany na wiadomości?

Odpowiedz

16

Interfejs/API przedstawiane użytkownikowi użytkownika (programista) tych protokołów są:

UDP

zorientowany, masz API wiadomości (wysyłanie/recv i podobne), które dostarczy Ci możliwość wysłania jednego datagramu i otrzymania jednego datagramu. 1 wywołanie send() powoduje wysłanie 1 datagramu, a 1 wywołanie recv() otrzyma dokładnie 1 datagram.

TCP

zorientowany, masz API Stream (wysyłanie/recv i podobne), który daje możliwość wysyłania lub odbierania strumienia bajtów. Nie ma zachowywania granic wiadomości, TCP może grupować dane z wielu wywołań send() w jeden segment lub może rozkładać dane z jednego wywołania send() na wiele segmentów - ale jest to niewidoczne dla aplikacji znajdujących się nad TCP, a recv() po prostu przekazuje ci dane, bez względu na to, ile wywołań send() wygenerowało dane, które otrzymasz.

+0

Czy ta płynna natura TCP jest powiązana z jego niezawodnością? –

+2

@LuisVasconcellos Niezupełnie. Jest protokół oparty na wiadomości/datagramie, który zapewnia taką samą niezawodność jak TCP. – nos

+0

Dobra odpowiedź! Załóżmy, że mamy dane jako "Cześć". Jeśli przyjmiemy tu każde słowo, to UDP wysyła je tylko jako "Cześć" i "tam" razem jako oddzielne datagramy, ale w dowolnej kolejności. Natomiast w TCP "HiThe" i "re" mogą być wykonane jako dwa oddzielne segmenty, ale zapewnia to, że oba te segmenty przybywają we właściwej kolejności. Czy moje zrozumienie jest poprawne? – Zephyr

1

TCP jest zorientowany strumieniowo, ponieważ jest w stanie zebrać dane w sąsiadującym formacie. Na przykład. miałeś dane od 1 do 4000 bajtów. Teraz będzie on podzielony na segmenty tcp, gdzie każdy segment będzie miał numer sekwencji, na przykład pierwszy to 1-1200 bajtów, drugi to 1201 - 2400 i tak dalej.

Może zostać dostarczony poza kolejnością podczas wysyłania przez datagramy ip, ale jest łączony w sąsiadujące z nim dane, wyświetlając się jako strumień. Numer sekwencyjny pomaga zmienić kolejność pakietów.

głębiej wyjaśnieniu jest:

Strumień bajt składa się z jednej dużej porcji danych bez segmentów lub innymi nieprawidłowościami. Z datagramami (mniejszymi) fragmentami danych są wysyłane i odbierane od razu jako całość. W praktyce oznacza to, że z datagramami każdego wysłania/zapisu wysyła jeden pakiet, a każde wywołanie odczytu/odebrania otrzymuje jeden pakiet, podczas gdy w protokole strumieniowym dane mogą być wysyłane i odbierane w dowolny sposób. Na przykład. Nadawca może zadzwonić do send() dziesięć razy, , podczas gdy odbiorca otrzymuje wszystkie te dane za pomocą jednego połączenia recv. Z datagramów dziesięć połączeń wysyłać oznacza dziesięć pakietów i dziesięć odbierać połączenia

Datagrams and streams

Byte streams

1

Specjalnością o TCP jest to, że takie zachowanie jest przezroczysty dla użytkownika wzgl. Aplikacja.

Jedyne, co musi zrobić aplikacja, to zadzwonić pod numer send() i recv(), aby wysłać i pobrać dane.

Poniższe warstwy zapewniają, że dane są odbierane w dokładnie takiej kolejności, w jakiej zostały wysłane, a brakujące dane zostaną przesłane ponownie, jeśli "nie zostaną".

UDP, OTOH, przechowuje dane jednego połączenia send(), nawet jeśli jest podzielony na kilka pakietów IP. W ten sposób dane te można postrzegać jako jeden datagram.

4

TCP jest protokołem zorientowanym na połączenie, co oznacza, że ​​najpierw nawiązuje połączenie z odbiornikiem, a następnie przesyła dane w segmentach (PDU dla warstwy transportowej) przenoszonych przez pakiety IP. W ten sposób nazywa się strumień, ponieważ utrzymuje przepływ danych między końcami podczas przesyłania.

UDP jest protokołem transportowym bez połączenia (podobnie jak IP) z jednostką danych o nazwie datagram. W przeciwieństwie do TCP, UDP przesyła dane bez konieczności konfigurowania połączenia, wysyłając tylko komunikaty datagramowe do warstwy IP w celu przesłania.