Verwendet HTTP UDP?

103

Dies könnte eine dumme Frage sein:

  • Verwendet HTTP jemals das User Datagram Protocol?

Beispielsweise:

Wenn man MP3 oder Video über HTTP streamt, verwendet es intern UDP für den Transport?

Sesh
quelle
Was meinst du mit: "das Web"? Du meinst mit einem Browser? Oder über das öffentliche Internet?
Benc
Ich wollte fragen, ob es eine MP3- Datei gibt, die auf einer URL wie someserver / somemusic.mp3 gehostet wird . Wenn dies an einen Client gestreamt wird - Browser, Gerät usw., wie überträgt der http dies? Wenn ich die folgenden Antworten richtig verstehe, wird dies an RTP delegiert.
Sesh
Port 80 UDP ist auch für HTTP reserviert, was ich amüsant finde, da ich es noch nie verwendet habe und mir auch keine gute Verwendung vorstellen kann.
Joshua
1
Es ist reserviert, weil das IANA-Komitee eine flexiblere Vorstellungskraft hat als Sie. ;-) Sie stellen sich vor, dass es vielleicht eine gute Verwendung dafür gibt. Wenn Port 80 nicht für UDP / HTTP reserviert wird, bleibt es für ein anderes UDP-Protokoll offen, was nur zu Verwirrung führen würde, wenn über Port 80 gesprochen wird.
Jesse Chisholm

Antworten:

42

Normalerweise nein.

Streaming wird selten über HTTP selbst verwendet, und HTTP wird selten über UDP ausgeführt. Siehe jedoch RTP .

Für etwas als Ihr Beispiel (im Kommentar) zeigen Sie kein Protokoll für die Ressource an. Wenn dieses Protokoll HTTP wäre, würde ich den Zugriff nicht als "Streaming" bezeichnen. selbst wenn es im wahrsten Sinne des Wortes so ist, dass es eine (möglicherweise große) Ressource seriell über ein Netzwerk sendet. In der Regel wird die Ressource vor der Wiedergabe auf der lokalen Festplatte gespeichert, sodass die Netzwerkübertragung nicht mit "Streaming" gemeint ist.

Wie Kommentatoren jedoch betont haben, ist es sicherlich möglich, wirklich über HTTP zu streamen, und das wird von einigen getan.

entspannen
quelle
16
Offensichtlich falsch, es gibt nichts in HTTP, das das Streaming verhindert. Es ist einfach nicht so effizient wie ein dediziertes Protokoll. HTTP Dyanmic Streaming mit Chunks: adobe.com/products/httpdynamicstreaming HTTP Pseudo-Streaming: longtailvideo.com/support/jw-player/jw-player-for-flash-v5/…
Steve-o
14
YouTube-Streams über http.
Nr.
6
@ snowcrash09 Ich kann es nicht einmal selbst löschen, da es akzeptiert wird. Das ist komisch. Ich habe es neu geschrieben, ich hoffe, es ist jetzt weniger beleidigend.
Entspannen Sie sich
1
Nur in Bezug auf HTTP und Streaming pedantisch - schon in den dunklen Zeiten von QuickTime-Videos - gab es eine server pushHTTP-Verbindung, die MJPEG (mehrere JPEG-Bilder) als separaten Teil einer mehrteiligen MIME-Antwort auf die HTTP-Anforderung sendete. Jedes JPEG-Bild kommt an und ersetzt das vorherige in der Anzeige. Aber Sie haben Recht @unwind, dies wird heute selten gemacht, da RTP / RTSP besser funktioniert.
Jesse Chisholm
3
@nos Youtube wird nicht gestreamt. Der Browser lädt eine Datei in einen Cache herunter und beginnt mit der Wiedergabe aus der Datei, bevor sie vollständig heruntergeladen wird. Dies simuliert zwar Streaming, ist es aber nicht.
SimonStiph
113

Aus RFC 2616 :

Die HTTP-Kommunikation erfolgt normalerweise über TCP / IP-Verbindungen. Der Standardport ist TCP 80, es können jedoch auch andere Ports verwendet werden. Dies schließt nicht aus, dass HTTP über einem anderen Protokoll im Internet oder in anderen Netzwerken implementiert wird. HTTP setzt nur einen zuverlässigen Transport voraus; Jedes Protokoll, das solche Garantien bietet, kann verwendet werden. Die Zuordnung der HTTP / 1.1-Anforderungs- und Antwortstrukturen zu den Transportdateneinheiten des betreffenden Protokolls liegt außerhalb des Geltungsbereichs dieser Spezifikation.

Obwohl dies nicht ausdrücklich angegeben ist, wird UDP nicht verwendet, da es sich nicht um einen "zuverlässigen Transport" handelt.

BEARBEITEN - In jüngerer Zeit verwendet das QUIC-Protokoll (das strenger ein Pseudotransport- oder Sitzungsschichtprotokoll ist) UDP für die Übertragung von HTTP / 2.0-Verkehr, und ein Großteil des Google-Verkehrs verwendet dieses Protokoll bereits. Derzeit wird die Standardisierung als HTTP / 3 vorangetrieben .

Alnitak
quelle
Gibt es Webserver, die so konfiguriert werden können, dass sie Verbindungen akzeptieren, die nicht TCP sind?
Spidey
1
Apache wird hier geändert pel.cis.udel.edu , um das SCTP-Protokoll anstelle von TCP zu verwenden.
Nr.
@nos Yup, und Google hat auch SPDY. Beide sind jedoch zuverlässige Transportmechanismen.
Alnitak
5
@Alnitak SPDY ist ein Anwendungsschichtprotokoll, kein Transportschichtprotokoll.
Walking Wiki
@WalkingWiki Sie haben natürlich Recht - in diesem Zusammenhang ersetzt SPDY HTTP, nicht TCP.
Alnitak
36

Vielleicht nur ein bisschen Trivia, aber UPnP verwendet HTTP-formatierte Nachrichten über UDP für die Geräteerkennung.

Frank Schwieterman
quelle
4
Genauer gesagt wird der Teil von UPnP, der UDP- und HTTP-ähnliche Nachrichten verwendet, als SSDP (Simple Service Discovery Protocol) bezeichnet. Die Nachrichtenstruktur ist dieselbe, aber die METHODMenge ist unterschiedlich. Danach verwendet UPnP andere Protokolle (und normalerweise TCP) für den Rest seiner Arbeit.
Jesse Chisholm
20

Ja, HTTP als Anwendungsprotokoll kann über das UDP-Transportprotokoll übertragen werden. Hier sind einige der Dienste, die UDP und ein zugrunde liegendes Protokoll zum Übertragen und Streamen von HTTP-Daten an den Endbenutzer verwenden:

  • JMPle Raw UDP-Transportmethode von XMPP
  • Eine Nummer für Dienste, die das UDT --- UDP-basierte Datenübertragungsprotokoll verwenden, das eine Obermenge des UDP-Protokolls darstellt.
  • Das TLS-Protokoll (Transport Layer Security), das HTTP kapselt, sowie das oben erwähnte XMPP und andere Anwendungsprotokolle verfügen über eine Implementierung, die UDP in ihrer Transportschicht verwendet. Diese Implementierung wird als Datagram Transport Layer Security (DTLS) bezeichnet.
  • Push-Benachrichtigungen in GNUTella sind HTTP-Anforderungen, die über den UDP-Transport gesendet werden.

Dieser Artikel enthält weitere Details zum Streaming über UDP und seiner zuverlässigen Obermenge, dem RUDP: Reliable UDP (RUDP): Das nächste große Streaming-Protokoll?

Exotischer Hadron
quelle
1
Eine andere Frage: Unterstützen große Webbrowser Webseiten HTTP über UDP?
user2284570
Ja, da sich HTTP in der Anwendungsschicht und UDP in der Transportschicht befindet. Browser schreiben keine TCP- oder UDP-Pakete. Sie schreiben auch keine IP-Pakete. Diese werden vom Betriebssystem und den Treibern verwaltet. Die Ethernet-Schicht ist so niedrig, dass sie sich zu diesem Zeitpunkt im Chip in der Nähe des MAC befinden kann.
Yan Bellavance
@yanbellavance das ist völlig falsch. Während Browser und Webserver in der Tat keine rohen TCP-Frames (oder UDP-Frames) generieren , müssen sie den zu verwendenden Transport auswählen, und für normales HTTP ist dies immer TCP. Das neuere QUIC-Pseudoprotokoll verwendet jedoch UDP.
Alnitak
18

Natürlich muss es nicht unbedingt über TCP übertragen werden. Ich habe HTTP über UDP implementiert, um es in der Satellitenfernsehbranche zu verwenden.

jkc
quelle
6

Vielleicht einige Änderungen zu diesem Thema mit QUIC

QUIC (Quick UDP Internet Connections, ausgesprochen schnell) ist ein experimentelles Transportschicht-Netzwerkprotokoll, das von Google entwickelt und 2013 implementiert wurde. QUIC unterstützt eine Reihe von Multiplex-Verbindungen zwischen zwei Endpunkten über das User Datagram Protocol (UDP) und wurde entwickelt, um Sicherheitsschutz zu bieten Entspricht TLS / SSL, zusammen mit einer reduzierten Verbindungs- und Transportlatenz und einer Bandbreitenschätzung in jeder Richtung, um eine Überlastung zu vermeiden. Das Hauptziel von QUIC ist die Optimierung verbindungsorientierter Webanwendungen, die derzeit TCP verwenden.

Sébastien
quelle
4

Wenn Sie eine MP3- oder Video-Datei streamen, die möglicherweise nicht unbedingt über HTTP übertragen wird, wäre ich in der Tat überrascht, wenn dies der Fall wäre. Es wäre wahrscheinlich ein anderes Protokoll über TCP, aber ich sehe keinen Grund, warum Sie nicht über UDP streamen können.

Wenn Sie dies tun, müssen Sie berücksichtigen, dass es keine Gewissheit gibt, dass Ihre Daten am anderen Ende ankommen, aber ich kann davon ausgehen, dass Sie über UDP Bescheid wissen.

Um Ihre Frage zu beantworten: Nein, HTTP verwendet KEIN UDP. Für das, worüber Sie sprechen, könnte MP3 / Video-Streaming über UDP erfolgen und sollte meiner Meinung nach niemals über HTTP erfolgen.

Henry B.
quelle
1
"Streaming" über HTTP wird allgemein als "Pseudo-Streaming" bezeichnet (was ich am genauesten betrachte) - eine regulierte Bitrate von Daten über HTTP. Wie so oft in unserer Welt haben die Marketing-Typen die Nomenklatur missbraucht und detailorientierte Leute wie uns nach Einzelheiten greifen lassen.
Stu Thompson
4

Theoretisch ist es ja möglich, UDP für http zu verwenden, aber das könnte problematisch sein. Nehmen wir zum Beispiel an, in Ihrem Beispiel wird eine MP3-Datei oder ein Video gestreamt. Es besteht ein Bestellproblem, und einige Bits gehen möglicherweise verloren, da UDP nicht verbindungsorientiert ist und es keinen Mechanismus für die erneute Übertragung gibt.

HM Manya
quelle
1
Gut erwähnt : UDP is not connection oriented there is no retransmit mechanism.
ivanleoncz
4

Ich denke, einigen Antworten fehlt ein wichtiger Punkt. Die Wahl zwischen UDP und TCP sollte nicht von der Art der Daten (z. B. Audio oder Video) abhängen oder davon, ob die Anwendung sie vor Abschluss der Übertragung abspielt ("Streaming"), sondern davon, ob es sich um Echtzeit handelt . Echtzeitdaten sind (per Definition) verzögerungsempfindlich, daher werden sie häufig am besten über RTP / UDP (Real Time Protocol over UDP) gesendet.

Verzögerung ist kein Problem mit gespeicherten Daten aus einer Datei, selbst wenn es sich um Audio und / oder Video handelt. Daher wird sie wahrscheinlich am besten über TCP gesendet, damit Paketverluste korrigiert werden können. Der Absender kann vorauslesen und die Netzwerkleitung voll halten, und der Empfänger kann auch viel Playout-Puffer verwenden, damit er nicht durch gelegentliche TCP-Neuübertragung oder vorübergehende Netzwerkverlangsamung unterbrochen wird. Im Grenzfall wird die gesamte Aufnahme übertragen, bevor die Wiedergabe beginnt. Dies eliminiert das Risiko eines Wiedergabestopps, ist jedoch häufig unpraktisch.

Das Problem mit TCP für Echtzeitdaten ist nicht die erneute Übertragung, sondern die übermäßige Pufferung, da TCP versucht, die Pipe ohne Rücksicht auf die Latenz so effizient wie möglich zu nutzen. UDP behält Anwendungspaketgrenzen bei und verfügt über keinen internen Speicher, sodass keine Latenz entsteht.

Phil Karn
quelle
3

Die Antwort: Ja

Grund: Siehe OSI-Modell.

Erklärung:

HTTP ist ein Protokoll der Anwendungsschicht, das mit einem Protokoll gekapselt werden kann, das UDP verwendet und eine wahrscheinlich schnellere und zuverlässigere Kommunikation als TCP bietet. Der Server-Daemon und der Client müssten dieses neue Protokoll offensichtlich unterstützen. Das Quake 2-Protokoll beweist, dass UDP über TCP verwendet werden kann, um eine Grundlage für ein strukturiertes Kommunikationssystem bereitzustellen, das die Flusskontrolle sicherstellt (z. B. Chunk-IDs).

kapieren
quelle
1
Sie können TCP nicht von Hand schlagen, ohne mehr Informationen zu haben, als Sie auf dieser Ebene haben sollten.
Joshua
1
"UDP kann über TCP verwendet werden". Sie sind beide Transportschichtprotokolle, also ist es das eine oder andere.
Opyate
2

http over udp wird von einigen Torrent-Tracker-Implementierungen verwendet (und von allen Hauptclients unterstützt).

user2946342
quelle
4
Bitte geben Sie Referenzen an, um Ihre Aussagen zu unterstützen.
Max Leske
1
Während ich es lese, ist das Torrent UDP Tracker-Protokoll binär und NICHT wie HTTP formatiert. xbtt.sourceforge.net/udp_tracker_protocol.html
Jesse Chisholm
1

UDP ist das beste Protokoll für das Streaming, da keine Anforderungen an fehlende Pakete wie TCP gestellt werden. Und wenn es keine Anforderungen stellt, ist der Fluss viel schneller und ohne Pufferung.

Sogar die Stream-Verzögerung ist geringer als bei TCP. Dies liegt daran, dass TCP (als weitaus sichereres Protokoll) Anforderungen an fehlende Pakete stellt und die vorhandenen überschreibt.

TCP ist also ein zu fortgeschrittenes Protokoll, um für das Streaming verwendet zu werden.

Pavel
quelle
3
Dies beantwortet die Frage nicht. Es könnte jedoch ein Grund für eine Antwort sein.
Hawken
2
Betreff: "Bestes Protokoll für das Streaming" angesichts der Tatsache, dass "Geschwindigkeit einzelner Datenblöcke" wichtiger ist als "alle Daten, die durchkommen". Wenn sich Ihr Stream nicht einfach von fehlenden Blöcken erholen lässt, sollten Sie sich für TCP entscheiden. Viele Sicherheitsvideoprotokolle wählen aus diesem Grund TCP - Zuverlässigkeit ist wichtiger als rohe Geschwindigkeit.
Jesse Chisholm