HTTP是否使用UDP?


103

这可能是一个愚蠢的问题:

  • HTTP是否曾经使用过用户数据报协议?

例如:

如果使用HTTP流式传输MP3或视频,它内部是否使用UDP进行传输?


您是什么意思:“网络”?您是说使用浏览器?还是通过公共互联网?
benc

我的意思是说,URL上托管了一个mp3,例如someserver / somemusic.mp3。如果将其流式传输到任何客户端(浏览器,设备等),http将如何传输它。如果我正确理解以下答案,则将其委派给RTP。
Sesh

端口80 UDP也是为HTTP保留的,因为我从未见过使用它,所以我发现它很有趣,我也无法想象它的很好用处。
约书亚

1
之所以保留,是因为IANA委员会拥有您更灵活的想象力。;-)他们认为可能会有很好的用途。此外,不预留端口80的UDP / HTTP会离开它打开一些其他的UDP协议,这将谈论端口80时,只是造成混乱
杰西·奇泽姆

Answers:


42

通常没有。

流很少在HTTP本身上使用,HTTP很少在UDP上运行。但是,请参阅RTP

对于某些示例(在注释中),您没有显示该资源的协议。如果该协议是HTTP,那么我就不会将访问称为“流”。即使从某种意义上说它是因为它是通过网络串行发送(可能是很大的)资源。通常,资源将在播放之前保存到本地磁盘,因此网络传输通常不是“流式传输”的意思。

但是,正如评论者所指出的那样,确实有可能真正通过HTTP进行流传输,这是由某些人完成的。


16
显然是错误的,HTTP中没有什么可以阻止流传输,它的效率不如专用协议高。HTTP Dyanmic流使用组块:adobe.com/products/httpdynamicstreaming HTTP伪流:longtailvideo.com/support/jw-player/jw-player-for-flash-v5/...
史蒂夫邻

14
youtube通过http流。

6
@ snowcrash09我自己什至无法删除它,因为它已被接受。那真是怪了。我重新编写了它,希望它现在不那么冒犯了。
2012年

1
仅仅是对HTTP和流媒体的痴迷-可以追溯到QuickTime视频的黑暗时代,server pushHTTP连接将MJPEG(多个JPEG图像)发送为对HTTP请求的MIME多重响应的单独部分。每个JPEG图像都会到达并替换显示中的前一个图像。但是您是正确的@unwind,由于RTP / RTSP的效果更好,因此今天很少这样做。
Jesse Chisholm

3
@nos Youtube没有流媒体。浏览器将文件下载到缓存中,并在文件完全下载之前开始从文件播放。尽管这模拟流,但事实并非如此。
SimonStiph

113

RFC 2616

HTTP通信通常通过TCP / IP连接进行。默认端口是TCP 80,但可以使用其他端口。这并不排除可以在Internet或其他网络上的任何其他协议之上实施HTTP。HTTP仅假定可靠的传输。可以使用提供此类保证的任何协议;HTTP / 1.1请求和响应结构到所讨论协议的传输数据单元上的映射超出了本规范的范围。

因此,尽管没有明确说明,但由于它不是“可靠的传输”,因此未使用UDP。

编辑 -最近,QUIC协议(严格来说是伪传输或会话层协议)确实使用UDP来承载HTTP / 2.0通信,而Google的许多通信已经使用了该协议。目前,它正朝着HTTP / 3标准化迈进。


是否可以将任何Web服务器配置为接受非TCP连接?
Spidey

1
此处的pel.cis.udel.edu对Apache进行了修改,以使用SCTP协议而不是TCP。

@nos是的,Google也有SPDY。不过,两者都是可靠的传输机制。
Alnitak

5
@Alnitak SPDY是应用程序层协议,而不是传输层协议。
维基

@WalkingWiki当然是正确的-在这种情况下,SPDY取代了HTTP,而不是TCP。
Alnitak 2012年

36

也许只是一些琐事,但是UPnP将通过UDP使用HTTP格式的消息进行设备发现。


4
更具体地说,使用UDP和HTTP类消息的UPnP部分称为SSDP(简单服务发现协议)。消息结构相同,但METHOD集合不同。之后,UPnP将其他协议(通常是TCP)用于其余的工作。
杰西·奇斯霍尔姆

20

是的,HTTP作为一种应用程序协议,可以通过UDP传输协议进行传输。以下是一些使用UDP和基础协议来传输HTTP数据并将其流式传输到最终用户的服务:

  • XMPP的Jingle Raw UDP传输方法
  • 使用UDT的服务的编号---基于UDP的数据传输协议,它是UDP协议的超集。
  • 封装HTTP的传输层安全(TLS)协议以及上述XMPP和其他应用程序协议确实具有在其传输层中使用UDP的实现。此实现称为数据报传输层安全性(DTLS)。
  • GNUTella中的推送通知是通过UDP传输发送的HTTP请求。

本文包含有关通过UDP及其可靠的超集RUDP进行流传输的更多详细信息:RUDP:可靠的UDP(RUDP):下一个大型流传输协议?


1
另一个问题:主要的网络浏览器是否支持UDP上的HTTP页面?
user2284570

是,因为HTTP在应用程序层中,而UDP在传输层中。浏览器不会写入TCP或UDP数据包。他们也不写IP数据包。这些由操作系统和驱动程序处理。以太网层是如此之低,以至于此时它可以位于靠近MAC的芯片中。
yan bellavance 2016年

@yanbellavance完全不正确。尽管浏览器和Web服务器确实不会生成原始 TCP帧(对此也不会生成UDP帧),但它们确实必须选择要使用的传输方式,并且对于通常为TCP的普通HTTP而言。但是,较新的QUIC伪协议确实使用UDP。
Alnitak

18

当然,它不一定必须通过TCP传输。我在UDP之上实现了HTTP,用于卫星电视广播行业。


6

可能会在QUIC上对此主题进行一些更改

QUIC(快速UDP Internet连接,发音为quick)是Google开发的实验性传输层网络协议,于2013年实施。QUIC支持通过用户数据报协议(UDP)在两个端点之间建立一组多路复用连接,并旨在提供安全保护等同于TLS / SSL,并减少了连接和传输延迟,并在每个方向上进行了带宽估计以避免拥塞。QUIC的主要目标是优化当前使用TCP的面向连接的Web应用程序。


4

如果您流式传输的mp3或视频不一定是通过HTTP传输的,那么实际上我会感到惊讶。这可能是基于TCP的另一种协议,但我认为没有理由不能通过UDP流式传输。

如果这样做,则必须考虑到不确定数据是否会到达另一端,但是我可以认为您对UDP有所了解。

为了回答您的问题,不,HTTP不使用UDP。对于您所谈论的内容,mp3 /视频流可以通过UDP发生,而我认为绝不应该通过HTTP发生。


1
通过HTTP进行“流式传输”通常被称为(我认为最准确的)“伪流式传输”,即通过HTTP进行控制的数据比特率。就像我们这个世界一样,营销类型滥用了术语,使像我们这样注重细节的人抓紧了细节。
斯图·汤普森

4

从理论上讲,可以将UDP用于http,但这可能会出现问题。例如,在您的示例中,正在流传输mp3或视频时,将出现排序问题,并且由于UDP不是面向连接的,因此没有重传机制,因此某些位可能会丢失。


1
提及得好:UDP is not connection oriented there is no retransmit mechanism
ivanleoncz

4

我认为某些答案缺少重点。UDP和TCP之间的选择不应基于数据的类型(例如,音频或视频),也不应基于应用程序是否在传输完成之前开始播放(“流”),而是基于实时的。实时数据(按定义)对延迟敏感,因此通常最好通过RTP / UDP(UDP实时协议)发送。

即使文件是音频和/或视频,延迟也不是文件中存储数据的问题,因此延迟最好通过TCP发送,以便可以纠正任何数据包丢失。发送方可以提前阅读并保持网络管道畅通,而接收方也可以使用大量播出缓冲,因此不会因偶尔的TCP重传或瞬时网络变慢而中断。极限情况是在回放开始之前传输整个记录。这消除了播放停顿的任何风险,但是通常是不切实际的。

TCP用于实时数据的问题不在于重传,而在于过多的缓冲,因为TCP试图在不考虑延迟的情况下尽可能高效地使用管道。UDP保留了应用程序数据包的边界,并且没有内部存储,因此它不会引入任何延迟。


3

答案:是的

原因:请参见OSI模型。

说明:

HTTP是一种应用程序层协议,可以与使用UDP的协议一起封装,可以提供比TCP更快的可靠通信。服务器守护程序和客户端显然需要支持此新协议。Quake 2协议证明UDP可以在TCP上使用,从而为确保流量控制(例如,块ID)的结构化通信系统提供基础。


1
没有比该级别应有的更多信息,您无法手动击败TCP。
约书亚

1
“可以通过TCP使用UDP”。它们都是传输层协议,因此是两者之一。
opyate




1

UDP是流式传输的最佳协议,因为它不需要丢失像TCP这样的包。而且,如果不提出要求,流程会更快得多,并且没有任何缓冲。

即使是流延迟也小于TCP。这是因为TCP(作为一种更为安全的协议)要求丢失包,从而覆盖现有包。

因此,TCP是一种过于先进的协议,无法用于流式传输。


3
这不能回答问题,但是可能是给出答案的理由。
霍肯2012年

2
re:“最佳流传输协议”,考虑到“单个数据块的速度”比“所有数据通过”更为重要。如果您的流无法轻松地从丢失的块中恢复,那么最好使用TCP。为此,许多安全视频协议选择TCP-可靠性比原始速度更重要。
杰西·奇斯霍尔姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.