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.
@ 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.
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 .
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.
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.
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.
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.
"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.
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.
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).
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.
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.
Antworten:
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.
quelle
server push
HTTP-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.Aus RFC 2616 :
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 .
quelle
Vielleicht nur ein bisschen Trivia, aber UPnP verwendet HTTP-formatierte Nachrichten über UDP für die Geräteerkennung.
quelle
METHOD
Menge ist unterschiedlich. Danach verwendet UPnP andere Protokolle (und normalerweise TCP) für den Rest seiner Arbeit.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:
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?
quelle
Natürlich muss es nicht unbedingt über TCP übertragen werden. Ich habe HTTP über UDP implementiert, um es in der Satellitenfernsehbranche zu verwenden.
quelle
Vielleicht einige Änderungen zu diesem Thema mit QUIC
quelle
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.
quelle
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.
quelle
UDP is not connection oriented there is no retransmit mechanism
.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.
quelle
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).
quelle
Versuchen Sie, HTTP über UDP mit Node-httpp auszuführen:
https://github.com/InstantWebP2P/node-httpp
quelle
http over udp wird von einigen Torrent-Tracker-Implementierungen verwendet (und von allen Hauptclients unterstützt).
quelle
(Dies ist eine alte Frage, die jedoch eine aktualisierte Antwort verdient.)
Höchstwahrscheinlich verwendet HTTP / 3 das QUIC-Protokoll , das als beschrieben wird
Unter einem bestimmten Gesichtspunkt könnte man also sagen, dass HTTP / 3 UDP verwenden wird.
quelle
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.
quelle