loading

什么是TCP,什么是UDP两者在直播行业的优缺点

  • Home
  • Blog
  • 什么是TCP,什么是UDP两者在直播行业的优缺点

什么是TCP,什么是UDP两者在直播行业的优缺点

UDP 和 TCP 都是传输层协议,核心区别一句话:TCP 可靠、慢、有连接;UDP 不可靠、快、无连接。

通俗理解TCP 像打电话先拨号接通,说话对方必须回应,没听清会让你重说,保证一句不漏按顺序传。UDP 像寄信 / 广播直接把信扔出去,不管对方收没收到、顺序乱没乱,只管快。

对比项TCPUDP连接面向连接(先握手再传输)无连接,发完就走可靠性可靠传输,不丢不错不乱序不可靠,可能丢包、乱序速度慢,开销大快,开销小流量控制有(拥塞控制、滑动窗口)无数据形式字节流数据报(报文)重传机制丢包自动重传不重传应用场景TCP 用在必须可靠的地方网页(HTTP/HTTPS)文件传输(FTP)邮件(SMTP/POP3)远程登录(SSH)UDP 用在要快、能容忍丢包的地方直播、视频通话游戏(王者荣耀、吃鸡等)DNS 查询实时音视频TCP 直播必须保证每个包都收到,丢包就重传数据不乱序、不丢失结果:延迟高(几秒甚至十几秒)网络一差就一直缓冲、转圈加载画面不会花,但会卡住不动

UDP 直播不保证必达,丢包就丢了,不重传只管拼命发最新画面结果:延迟极低(几百毫秒)网络差时会花屏、马赛克、短暂卡顿但不会一直转圈,恢复很快

为什么直播几乎都用 UDP?直播最看重三件事:低延迟(观众不想比别人慢几十秒)实时性(主播说话观众立刻听到)流畅优先于完美偶尔花一点没事,不能卡半天。所以:游戏直播、秀场直播、视频连麦 → 全部 UDP点播、回放、短视频 → TCP(HTTP-FLV/HTTPS)

网络差时:TCP vs UDP 的真实表现

TCP 在差网下:会 “卡死、延迟爆炸、越等越慢”TCP 是必须保证可靠的,所以遇到丢包、延迟、乱序时:丢一个包 → 立刻停传,等待重传网络抖动大 → 滑动窗口收缩,速度骤降链路来回切换 → 连接直接断开,必须重连延迟会越积越高,从几百毫秒涨到几秒甚至十几秒表现:转圈加载、画面卡住不动、声音断、延迟越来越大,直到网络恢复才继续。

UDP 在差网下:会 “花屏、卡顿,但不积累延迟”UDP 不重传、不排队、不纠错,只做一件事:继续发最新的数据,旧的丢了就丢了。丢包 → 直接跳过,不等待延迟抖动 → 不受影响,继续推流网络波动 → 画面短暂马赛克、卡顿一下,但延迟不会越来越高表现:偶尔花屏、卡顿、掉帧,但不会卡死转圈,恢复极快。

在MPTCP中这两者也有很大的差别

上文我们讲过,TCP流量走代理,UDP流量走VPN

经测试表明,如果一个RTMP流在MPTCP中建立后,如果中途有条链路退出,虽然不会影响到当前RTMP流的正常推送,但如果这条链路稍后回来,虽然能再次回到MPTCP中,但眼前这条RTMP流是无法再使用这条链路。如果是UDP则没有这种问题。因此,UDP在聚合路由器具有更强的抗风险能力。

当你在一个不太稳定的环境下使用时,TCP会断一条链路就少一条,直到最后一条断开,服务重新连接。因此,你会获得更多的卡顿。

UDP则断开一条,还有其它的,一会又满血了。中间可能会有轻微的花屏或卡顿,但不会有长时间卡顿,甚至重连的情况。

如果我只能推RTMP地址,该如何破局

其实现在很多平台都是多地址可以推流,比如微赞就有SRT地址。如果真没有的话,可以使用曲线救国的办法,我们找一个推拉流平台,也可以自己搭建zlmMediakit。先推SRT流出去,再由平台转发到RTMP地址。