用于视频流的 TCP 与 UDP
先决条件: TCP/IP 模型,用户数据报协议 (UDP)
在这个娱乐、教育、游戏和各种生活必需品每天都在现场直播的现代互联网时代,不间断的视频流的需求非常迫切。要深入探讨哪种协议更适合视频流,必须熟悉 TCP 和 UDP 协议。
TCP 在传输数据包:
- TCP 是一种与合作伙伴协商正式会话的协议。 TCP 发送数据并接受确认。
- TCP 保证交付。
- 它还根据对网络发送数据能力的估计来调整其发送速率。它估计带宽、损失和延迟,如果这些已经恶化,它将降低流量,如果它们有所改善,它将增加流量。
- 如果数据包在传输过程中丢失,最终会重新传输。
TCP的正常传输:
TCP 逐渐增加它发送的数据量,直到链路饱和。首先,它开始缓慢并以越来越快的速度发送越来越多的数据。在拥塞避免阶段,为了避免拥塞,它逐渐增加数据。在最后阶段,它将数据调整到接收器可以轻松处理的速率,称为稳态。
TCP 对丢失数据包的反应:
当一个数据包丢失时,无论是由于网络缓冲区溢出还是接收器获得的数据超出了它的缓冲,丢失的数据包将不会被确认,因此 TCP 假设它发送数据的速度太快,因此它开始缓慢重新开始。当第二个数据包被丢弃时,流再次被切断。如果丢弃是连续的,那么速率将下降得如此之多,以至于一次只发送一个数据包。
我们可以看一个描述 TCP 对丢失数据包的反应的场景 -
在这种情况下,源 A 向接收者 B 发送了 10 个数据包 D1 到 D10,并且在传输过程中,丢失了一个数据包 D6。
- 源 A 与源 B 建立 TCP 连接。
- A向Source B发送D1数据包和D2数据包。
- B 请求数据包 D3。
- A 将 D3 连同数据包 D4、D5 和 D6 一起发送。
- 但是 D6 在传输过程中丢失了,可以说是由于 B 的缓冲区溢出。
- B然后请求数据包D6。
- A 这次只发送一个数据包,再次慢启动。
- B 再次要求 D6。
- A 继续单独发送数据包 D8 和 D9,而 B 继续请求 D6。
- 接收方没有发送 4 次确认请求 D6,TCP 现在假设数据包丢失,否则假设它在网络中被错误路由。所以,A最终重传D6。
- B 现在请求数据包 D10。
- A发送D10,然后进行连接关闭过程。
我们观察到单个丢弃的数据包导致缓慢的启动过程和拥塞避免过程,从而不允许流量增加。它一次回落到一个数据包。因此,一个单一的数据包丢失,将我们的吞吐量降低了高达 50%。
我们得出以下结论——
- TCP 对数据包丢失、延迟(延迟)和可用带宽很敏感。
- TCP 使用慢启动、拥塞避免和估计往返时间 (RTT) 的延迟来适应它。
因此,如果您的客户端要求的带宽超过了发送方所能提供的带宽并且存在数据丢失,那么延迟是不可避免的。现在,如果我们考虑直播视频流,并且由于上述一些原因,发生丢包,那么直播流的性能将严重恶化,因为协议将忙于重新传输丢失的数据包。这将导致观众落后于视频直播中实际播放的内容。
UDP:
UDP也是一种传输层协议。它不知道数据是否成功到达。它会在应用程序提供数据后立即发送,并且在操作系统说 OK 后立即发送。它基本上不知道接收或失败。 UDP 做了三件事——
- 它使用端口号标识发送和接收进程。
- 它对 UDP 标头运行错误检查。
- 它记录对 UDP 标头的检查。
因此,我们看到 UDP 没有提供任何方法来检索丢失的数据包。它不关心每个数据包是否已到达其目的地。如果您再次考虑实时视频流,数据包中的丢失不会滞后视频以检索丢失的数据包。视频质量会根据损失的多少而恶化,从屏幕角落的小方块失真到整个屏幕,但视频的节奏将与实际的直播流保持一致。
实时协议:
- UDP 本身并没有提供 TCP 提供的许多功能。但是将它与另一个协议分层,我们可以实现与 TCP 相同的一些功能。
- 在语音或视频会议中,通过插入称为实时协议 (RTP) 的协议来添加一些 TCP 功能。如果我们将 RTP 标头与 UDP 一起放入,RTP 将添加序列号、一些时间戳和音频或视频源的标识符,它还将允许称为 RTCP 的协议报告丢失。
- 在使用带有 UDP 的 RTP 时,语音数据包会根据编解码器输出以统一的间距发送。
例如,在语音中,它们每 20 毫秒(1/50 秒)发送一次。在视频中,它们是在 IP 数据包被填满时发送的。
因此,如果丢失了几个连续的数据包,UDP 可能对语音丢失非常敏感,音频暂时丢失并且我们注意到了这一点。但是,如果您丢失了一个数据包,它会发出 50 分之一秒的声音,而您的耳朵对此并不敏感。但在视频的情况下,因为绘制单个帧需要如此多的视频数据包,质量可能会降低,并且屏幕上的小方块或小切片的形式变得明显,因为数据没有变成不同的颜色' t来是为了正确地画它。在实时音频或视频传输中,网络通常不应表现出 > 0.25% 的损失。
因此,UDP 与 RTP、WebRTC 和 RTSP 等其他协议相结合,可以提供比 TCP 更好的视频流体验。