http - 如果请求是使用 TCP 的 HTTP 请求,我们使用什么协议进行流式传输?UDP是如何实现的?
问题描述
我目前正在研究 TCP/IP 模型的传输层,特别是使用的协议 TCP 和 UDP。我不明白的是,如果我们通过 URL 使用浏览器从 Web 服务器请求资源,例如通过 HTTP 请求播放实时流,在这种情况下,使用的协议是 TCP 而不是 UDP , 正确的?但另一方面,在我正在学习的 cisco 课程以及教科书中也指出,UDP 协议用于实时流媒体、多人游戏、VOIP。
在这种情况下,我们使用的是两种协议中的哪一种?我的疑问恰恰在于,如果发出的请求是通过 URL 的 Web 请求,因此是 HTTP 请求,那么由于 HTTP 使用 TCP,UDP 是如何实现的?
我不清楚的是,当我们通过 URL(即 TCP 类型的 HTTP 请求)从 Web 服务器请求资源时,UDP 是如何实现的。如果有问题的资源是“在 Twitch 上观看直播”,那么 UDP 协议是如何实现的,因为我们已经在使用通过 TCP 建立的“逻辑连接”并且我们已经在使用可靠的通信?
解决方案
UDP 是一种不关心可靠数据传输的协议,即数据包可能会丢失、重复、重新排序等。TCP 关心的是可靠性,这会增加开销,并且如果数据包丢失并且需要被重新排序,还会带来潜在的延迟问题重发。
当考虑延迟但不考虑可靠性时,使用基于此 UDP。实时媒体就是这种情况,例如 VoIP 音频和视频电话。对于这种双向通信,此用例中的延迟过长是不可接受的。因此,这里使用的媒体编解码器可以处理数据包丢失,即优先考虑延迟并处理作为副作用的不可靠性。
不过,在 youtube 上的流式视频(非实时)中,延迟并不是那么令人担忧。这里更重要的是有效利用带宽,这意味着具有高压缩率的高效媒体编解码器。编解码器的效率越高,它处理数据丢失的能力就越小。因此,连接的可靠性在这里是一个问题,TCP 更合适。
推荐阅读
- ios - Missing / untracked files when trying to add Firebase to my project
- docker - Docker /run/secrets is not mount
- java - Java Keystore unable to add X509Certificate to Keystore
- android - Issue while handling simultaneous window.open() from Android's webview
- python - 访问方法变量
- python - Decrypt pcap RC4 encryption with pycrypto
- python - Azure Databricks - 将 Parquet 文件写入精选区域
- file - How do I load data structures containing atoms stored in a file in clojure?
- cakephp - add mediatory layer of abstraction on Cake\Orm\Table
- python - How to run a new thread process?