网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

视频流传输中,TCP与UDP的对比

更新时间:2026年03月27日   作者:spoto   标签(Tag):

先决条件:TCP/IP模型,用户数据报协议(UDP)
在当今这个拥有各种娱乐、教育、游戏以及各类生活所需服务的现代互联网时代,对不间断视频流的需求显得尤为重要。在探讨哪种协议更适合视频流传输时,我们必须先了解TCP和UDP这两种协议。

在传输数据包时,TCP所使用的机制:

  • TCP是一种协议,它负责与对方建立正式的通信会话。TCP会发送数据,并等待对方的确认。
  • TCP能够确保数据的可靠传输。
  • 它还根据对网络数据传输能力的评估来调整其发送速率。它会估算网络的带宽、传输延迟等因素;如果这些指标有所恶化,那么就会降低发送速率;反之,如果这些指标有所改善,那么就会提高发送速率。
  • 如果数据包在传输过程中丢失了,那么最终会重新发送该数据包。

TCP的正常传输过程:
TCP会逐渐增加发送的数据量,直到连接变得拥塞为止。起初,传输速度较慢,但之后会以越来越快的速度继续发送数据。在避免拥塞的阶段,为了防止出现拥塞现象,TCP会逐渐增加数据传输的速率。最后,它会将数据传输到接收方能够轻松处理的速率,这就是所谓的“稳态”。

TCP对丢失数据包的反应:
当数据包丢失时,可能是由于网络缓冲区已满,或者接收方接收到的数据量超过了其能够缓冲的范围。在这种情况下,丢失的数据包不会被确认,因此TCP会认为自己发送数据的速度过快,于是又会重新开始慢启动过程。当第二个数据包也丢失时,数据流再次中断。如果这种丢失是连续发生的,那么数据传输的速度将会急剧下降,最终可能只能传输一个数据包而已。

我们可以看一下下面所描述的情景,即TCP在数据包丢失时的反应。

在这种情况下,源A向接收者B发送了10个数据包,分别是D1到D10。在传输过程中,有一个数据包D6丢失了。

  • 源A与源B之间建立了TCP连接。
  • A向源B发送了D1和D2两个数据包。
  • B请求获取数据包D3。
  • A发送了D3,同时还发送了数据包D4、D5和D6。
  • 但是,在传输过程中,D6这个数值会丢失。这种情况可能是因为B的缓冲区被过度填充所导致的。
  • 然后,B请求获取数据包D6。
  • 这次只发送了一个数据包,同样属于慢启动模式。
  • B再次请求得到D6的结果。
  • A继续分别发送数据包D8和D9,而B则持续请求接收D6数据包。
  • 接收方尚未发送4个请求确认数据包已成功传输的消息。因此,TCP系统认为该数据包已经丢失了。否则的话,TCP系统就会认为数据包在网络中发生了错误路由。所以,最终A方再次重新传输了那些请求确认数据包已成功传输的消息。
  • 现在,B请求获取数据包D10。
  • A发送了D10,之后就会执行连接的关闭过程。

我们注意到,一次丢失一个数据包就足以导致处理过程的延迟,同时还会引发拥塞现象,从而无法增加流量。每次都会只丢失一个数据包。因此,一次数据包的丢失就可能导致吞吐量下降高达50%。
我们得出了一些结论——

  • TCP对数据包丢失、延迟以及可用带宽的情况非常敏感。
  • TCP通过“慢启动”、“拥塞避免”以及估算往返时间(RTT)的方式来调整自身的行为。

因此,如果客户所要求的带宽超过了发送方能够提供的范围,从而导致数据丢失的话,那么延迟就不可避免。再比如,在实时视频流传输过程中,由于上述原因导致数据包丢失,那么实时流媒体的性能将会受到严重影响,因为协议需要不断重新传输丢失的数据包。这样一来,观众所看到的画面就会比实际播放的画面慢得多。

UDP:用户数据报协议
UDP也是一种传输层协议。它无法知道数据是否成功到达。只要应用程序发送了数据,或者操作系统发出允许接收的指令,UDP就会立即将数据发送出去。实际上,UDP根本不知道数据是否已经收到了,或者是否发生了失败。UDP主要完成以下三个功能:

  • 它通过使用端口号来标识发送和接收的过程。
  • 它会对UDP头部进行错误检查。
  • 它记录了对UDP头部进行的检查结果。

因此,我们可以看到,UDP根本无法用来恢复那些丢失的数据包。 它并不关心每个数据包是否已经到达了目的地。 如果你再次考虑一下实时视频流传输的情况,那么,即使某个数据包丢失了,也不会导致视频播放出现延迟,因为可以重新获取丢失的数据包来继续播放视频。 视频的质量会随着时间的推移而下降,具体程度取决于损失的程度。可能会出现屏幕角落出现小方块状的失真现象,或者整个屏幕都出现失真的情况。不过,视频的播放速度仍然会与实时直播保持同步。

实时协议:

  • UDP本身并不具备TCP所拥有的许多功能。但是,如果将其与另一种协议结合使用的话,我们就可以实现一些与TCP相同的功能。
  • 在语音或视频会议中,一些TCP特性是通过引入一种名为“实时协议”(RTP)的协议来实现的。如果我们把RTP头部与UDP一起使用,那么RTP就会添加序列号、时间戳,以及音频或视频源的标识符。此外,RTP还允许另一种名为RTCP的协议来报告可能出现的丢失情况。
  • 在使用RTP协议与UDP协议进行通信时,语音数据包的发送间隔是固定的,这个间隔是根据编解码器的输出特性来确定的。
    例如,在语音传输方面,数据每20毫秒就会发送一次(即每0.02秒一次)。而在视频传输方面,数据则是在一个IP数据包被完整传输后才会被发送。

因此,如果连续发送的多个数据包丢失了,那么UDP对语音的传输效果就会产生很大的影响。这种情况下,音频会瞬间中断,而我们也会立刻察觉到这个问题。 但是,如果你丢失了哪怕一个数据包,那就意味着声音信息被丢失了0.05秒。而人类的耳朵对这么短时间的声音损失并不敏感,因此无法察觉到这一点。 但是,在视频播放的情况下,因为要完成一帧画面的显示,需要传输大量的视频数据。因此,视频的质量可能会下降,屏幕上会出现一些小方块或小块状的画面。这些画面会呈现出不同的颜色,因为数据并没有按照正确的顺序传输过来,导致画面无法正常显示。 在实时音频或视频传输中,网络的丢包率通常不应超过0.25%。

因此,将UDP与其他协议(如RTP、WebRTC和RTSP)结合使用,能够提供更优质的视频流传输体验,相比TCP来说,效果更为出色。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料