UDP 和 TCP 都是传输层协议,核心区别一句话:TCP 可靠、慢、有连接;UDP 不可靠、快、无连接。
通俗理解
TCP 像打电话先拨号接通,说话对方必须回应,没听清会让你重说,保证一句不漏按顺序传。
UDP 像寄信 / 广播直接把信扔出去,不管对方收没收到、顺序乱没乱,只管快。
| 对比项 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(先握手再传输) | 无连接,发完就走 |
| 可靠性 | 可靠传输,不丢不错不乱序 | 不可靠,可能丢包、乱序 |
| 速度 | 慢,开销大 | 快,开销小 |
| 流量控制 | 有(拥塞控制、滑动窗口) | 无 |
| 数据形式 | 字节流 | 数据报(报文) |
| 重传机制 | 丢包自动重传 | 不重传 |
应用场景
- 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地址。

