To może być głupie pytanie:
- Czy HTTP używa kiedykolwiek protokołu datagramów użytkownika?
Na przykład:
Jeśli ktoś przesyła strumieniowo MP3 lub wideo za pomocą protokołu HTTP, czy wewnętrznie używa UDP do transportu?
To może być głupie pytanie:
Na przykład:
Jeśli ktoś przesyła strumieniowo MP3 lub wideo za pomocą protokołu HTTP, czy wewnętrznie używa UDP do transportu?
Odpowiedzi:
Zazwyczaj nie.
Przesyłanie strumieniowe jest rzadko używane przez sam protokół HTTP, a protokół HTTP rzadko jest obsługiwany przez UDP. Zobacz jednak RTP .
Na przykład (w komentarzu) nie pokazujesz protokołu zasobu. Gdyby tym protokołem był HTTP, nie nazywałbym dostępu „przesyłaniem strumieniowym”; nawet jeśli w jakimś sensie tego słowa dzieje się tak, ponieważ wysyła szeregowo (prawdopodobnie duży) zasób przez sieć. Zwykle zasób zostanie zapisany na dysku lokalnym przed odtworzeniem, więc transfer sieciowy nie jest tym, co zwykle rozumie się przez „przesyłanie strumieniowe”.
Jednak, jak zauważyli komentatorzy, z pewnością możliwe jest przesyłanie strumieniowe przez HTTP, a niektórzy to robią.
server push
, gdy połączenie HTTP wysyła MJPEG (wiele obrazów JPEG), każdy jako oddzielną część wieloczęściowej odpowiedzi MIME na żądanie HTTP. Każdy obraz JPEG pojawia się i zastępuje poprzedni na wyświetlaczu. Ale masz rację @unwind, dziś rzadko się to robi, ponieważ RTP / RTSP działa lepiej.
Z RFC 2616 :
Komunikacja HTTP odbywa się zwykle za pośrednictwem połączeń TCP / IP. Domyślny port to TCP 80, ale można używać innych portów. Nie wyklucza to możliwości implementacji protokołu HTTP ponad jakimkolwiek innym protokołem w Internecie lub w innych sieciach. HTTP zakłada tylko niezawodny transport; można zastosować dowolny protokół, który zapewnia takie gwarancje; odwzorowanie struktur żądań i odpowiedzi HTTP / 1.1 na jednostki danych transportowych omawianego protokołu nie wchodzi w zakres niniejszej specyfikacji.
Więc chociaż nie jest to wyraźnie powiedziane, UDP nie jest używany, ponieważ nie jest "niezawodnym transportem".
EDYCJA - ostatnio protokół QUIC (który jest ściślej pseudotransportem lub protokołem warstwy sesji) używa UDP do przenoszenia ruchu HTTP / 2.0, a większość ruchu Google już korzysta z tego protokołu. Obecnie postępuje w kierunku standaryzacji jako HTTP / 3 .
Może tylko trochę ciekawostek, ale UPnP będzie używał wiadomości sformatowanych przez HTTP przez UDP do wykrywania urządzeń.
METHOD
zestaw jest inny. Następnie UPnP używa innych protokołów (i zwykle TCP) do pozostałej części tego, co robi.
Tak, HTTP, jako protokół aplikacji, może być przesyłany przez protokół transportowy UDP. Oto niektóre usługi korzystające z protokołu UDP i bazowego protokołu do przesyłania danych HTTP i przesyłania ich strumieniowego do użytkownika końcowego:
Ten artykuł zawiera dalsze szczegóły na temat przesyłania strumieniowego przez UDP i jego niezawodnego supersetu, RUDP: Reliable UDP (RUDP): The Next Big Streaming Protocol?
Może jakaś zmiana w tym temacie z QUIC
QUIC (Quick UDP Internet Connections, wymawiane szybko) to eksperymentalny protokół sieciowy warstwy transportowej opracowany przez Google i wdrożony w 2013 roku. QUIC obsługuje zestaw multipleksowanych połączeń między dwoma punktami końcowymi za pośrednictwem protokołu User Datagram Protocol (UDP) i został zaprojektowany w celu zapewnienia ochrony bezpieczeństwa odpowiednik TLS / SSL, wraz ze zmniejszonym opóźnieniem połączenia i transportu oraz szacowaniem przepustowości w każdym kierunku, aby uniknąć przeciążenia. Głównym celem QUIC jest optymalizacja aplikacji internetowych zorientowanych na połączenia, które obecnie używają protokołu TCP.
Jeśli przesyłasz strumieniowo plik mp3 lub wideo, które niekoniecznie muszą być przesyłane przez HTTP, w rzeczywistości byłbym zaskoczony, gdyby tak było. Prawdopodobnie byłby to inny protokół przez TCP, ale nie widzę powodu, dla którego nie można przesyłać strumieniowo przez UDP.
Jeśli tak, musisz wziąć pod uwagę, że nie ma pewności, że Twoje dane dotrą na drugi koniec, ale mogę przyjąć, że wiesz o UDP.
Odpowiadając na pytanie: Nie, protokół HTTP NIE korzysta z protokołu UDP. Jednak o czym mówisz, strumieniowanie mp3 / wideo MOGŁO się odbywać przez UDP i moim zdaniem nigdy nie powinno odbywać się przez HTTP.
Teoretycznie tak, możliwe jest użycie UDP dla http, ale może to być problematyczne. Załóżmy na przykład, że w Twoim przykładzie jest przesyłane strumieniowo mp3 lub wideo, że wystąpi problem z kolejnością i niektóre bity mogą zniknąć, ponieważ UDP nie jest zorientowany na połączenie, nie ma mechanizmu retransmisji.
UDP is not connection oriented there is no retransmit mechanism
.
Myślę, że w niektórych odpowiedziach brakuje ważnego punktu. Wybór między UDP a TCP nie powinien być oparty na typie danych (np. Audio lub wideo) ani na tym, czy aplikacja zacznie je odtwarzać przed zakończeniem przesyłania („przesyłanie strumieniowe”), ale na tym, czy jest to czas rzeczywisty . Dane czasu rzeczywistego są (z definicji) wrażliwe na opóźnienia, dlatego często najlepiej je przesyłać przez RTP / UDP (protokół czasu rzeczywistego przez UDP).
Opóźnienie nie jest problemem w przypadku przechowywanych danych z pliku, nawet jeśli jest to dźwięk i / lub wideo, więc prawdopodobnie najlepiej jest przesyłać je przez TCP, aby wszelkie straty pakietów można było skorygować. Nadawca może czytać z wyprzedzeniem i utrzymywać pełny potok sieciowy, a odbiornik może również korzystać z dużej ilości buforowania odtwarzania, aby nie zostało przerwane przez sporadyczną retransmisję TCP lub chwilowe spowolnienie sieci. Ograniczeniem jest sytuacja, w której całe nagranie jest przesyłane przed rozpoczęciem odtwarzania. Eliminuje to ryzyko zatrzymania odtwarzania, ale często jest niepraktyczne.
Problem z TCP dla danych w czasie rzeczywistym nie jest tak bardzo retransmisją, jak nadmiernym buforowaniem, ponieważ TCP próbuje wykorzystać potok tak efektywnie, jak to możliwe, bez względu na opóźnienia. UDP zachowuje granice pakietów aplikacji i nie ma pamięci wewnętrznej, więc nie wprowadza żadnych opóźnień.
Odpowiedź: tak
Powód: zobacz model OSI.
Wyjaśnienie:
HTTP to protokół warstwy aplikacji, który może być hermetyzowany protokołem używającym UDP, zapewniając prawdopodobnie szybszą i niezawodną komunikację niż TCP. Demon serwera i klient musiałyby oczywiście obsługiwać ten nowy protokół. Protokół Quake 2 udowadnia, że UDP może być używany przez TCP jako podstawa dla ustrukturyzowanego systemu komunikacyjnego zapewniającego kontrolę przepływu (np. Identyfikatory fragmentów).
Spróbuj uruchomić HTTP przez UDP z węzłem-httpp:
protokół http over udp jest używany przez niektóre implementacje trackerów torrentów (i jest obsługiwany przez wszystkich głównych klientów)
(To jest stare pytanie, ale zasługuje na zaktualizowaną odpowiedź).
Najprawdopodobniej HTTP / 3 będzie używać protokołu QUIC , który jest opisany jako
multipleksowany transport przez UDP
Tak więc z pewnego punktu widzenia można powiedzieć, że HTTP / 3 będzie używać UDP.
UDP to najlepszy protokół do przesyłania strumieniowego, ponieważ nie wymaga brakujących pakietów, takich jak TCP. A jeśli nie stawia wymagań, przepływ jest znacznie szybszy i bez buforowania.
Nawet opóźnienie strumienia jest mniejsze niż TCP. Dzieje się tak, ponieważ TCP (jako znacznie bezpieczniejszy protokół) stawia żądania dotyczące brakujących pakietów, nadpisując istniejące.
Zatem TCP jest protokołem zbyt zaawansowanym, aby można go było używać do przesyłania strumieniowego.