← 返回题目列表

TCP 和 UDP 有什么区别?各适合什么场景?

高频 简单 第 2 / 30 题 更新于 2026/07/28
TCPUDP传输层

简化版

TCP 面向连接、可靠、有序、有流量和拥塞控制,但开销大、慢一点,适合不能丢数据的场景(网页、文件传输、邮件)。UDP 无连接、不保证可靠和顺序、开销小、快,适合要实时、能容忍少量丢包的场景(音视频通话、直播、游戏、DNS)。核心取舍:TCP 换可靠、UDP 换实时。

详细版

维度TCPUDP
连接面向连接(先三次握手)无连接,直接发
可靠性可靠(确认、重传、有序)不可靠,可能丢包、乱序
传输方式字节流数据报(保留消息边界)
流量/拥塞控制
首部开销20 字节起8 字节
传输效率较低(机制多)
一对多只能一对一支持单播/多播/广播
典型应用HTTP、FTP、SMTPDNS、视频/语音、直播、游戏、QUIC
  • TCP 靠三次握手建连、序列号 + 确认 + 重传保证可靠、滑动窗口做流量控制、拥塞算法适应网络,代价是慢、开销大。
  • UDP 就是「打包即发」,不管对方在不在、收没收到,所以快、简单,但可靠性要应用层自己兜。

完整版教学

一、抓住本质:可靠 vs 实时

TCP 和 UDP 的所有差异,都源于一个根本取舍:要可靠,还是要快/实时。

  • TCP 为了「一个字节都不能错、不能乱、不能丢」,加了握手、确认、重传、排序、流控、拥塞控制一整套机制——安全但重。
  • UDP 为了「尽快把包发出去」,把这些全省了——轻快但不保证送达。

理解了这个取舍,剩下的区别都能推出来:TCP 有连接(要维护状态做可靠传输),UDP 无连接(不需要);TCP 有序(要保证顺序),UDP 无序;TCP 开销大(首部字段多),UDP 开销小。

二、为什么丢包容忍场景反而选 UDP

反直觉的一点:音视频通话、直播、游戏这些「重要」的实时应用,反而用不可靠的 UDP。原因是实时性比完整性更重要

  • 视频通话丢了一帧,你希望它直接播下一帧,而不是卡住等它重传——等重传到了,画面早过时了;
  • TCP 的重传和有序保证会导致队头阻塞:一个包丢了,后面的包即使到了也得排队等它,造成卡顿。

所以实时场景宁可丢几帧(UDP),也不要卡顿(TCP)。丢包的补偿交给应用层(如前向纠错、丢帧策略)。

三、UDP 保留消息边界,TCP 是字节流

一个容易忽略但高频的区别:

  • TCP 是字节流:它不保留「消息边界」,你发两次 send,接收方可能一次 recv 全收到,或分几次收到——这就是粘包/拆包问题的根源(详见那道题)。
  • UDP 是数据报:一个 sendto 对应一个 recvfrom,消息边界被保留,不会粘包。

所以 TCP 应用要自己定义消息边界(长度头/分隔符),UDP 不用。

四、现代趋势:QUIC —— 用 UDP 重造可靠

HTTP/3 底层用的是 QUIC,而 QUIC 建立在 UDP 之上。这看起来矛盾(可靠的 HTTP 用不可靠的 UDP?),其实是聪明的选择:TCP 的可靠机制固化在操作系统内核里,难以升级;QUIC 在 UDP 之上、于用户态重新实现了可靠、有序、多路复用,还解决了 TCP 的队头阻塞,且能更快建连(0-RTT)。所以「UDP 不可靠」不代表「基于 UDP 的协议不可靠」。

五、常见误区

  • ❌ 以为 UDP「没用」——DNS、视频、游戏、QUIC/HTTP3 都用它,实时场景它是首选。
  • ❌ 以为 TCP 一定比 UDP 好——看需求,实时场景 TCP 的重传/有序反而是负担(队头阻塞)。
  • ❌ 以为 TCP 也保留消息边界——它是字节流,会粘包,需应用层划边界。
  • ❌ 以为用了 UDP 就一定丢数据——UDP 只是不保证,网络好时照样不丢;可靠性可由应用层补。

六、常见误区与追问

考点正确口径
TCP面向连接、可靠、有序、字节流
UDP无连接、不保证可靠、保留报文边界
选择标准可靠性优先选 TCP,实时性和自定义协议可选 UDP
TCP: stream, retransmission, order
UDP: datagram, no built-in retransmission
QUIC: reliable transport built on UDP

TCP 和 UDP 不是简单的“安全 vs 不安全”,而是可靠有序和实时轻量之间的取舍。

  • 误区:UDP 一定不可靠,所以不能用于可靠业务。 UDP 本身不保证可靠,但应用层可以自己实现确认、重传和拥塞控制。
  • 误区:TCP 总是比 UDP 慢。 TCP 提供可靠性有成本,但具体性能取决于场景、网络和协议设计。
  • 误区:TCP 保留消息边界。 TCP 是字节流,应用需要自己定义消息边界;UDP 每个 datagram 有边界。
  • 追问:为什么音视频常用 UDP? 实时业务更怕延迟堆积,少量丢包可容忍或用应用层补偿。
  • 追问:DNS 为什么常用 UDP? 请求响应小、交互简单,UDP 开销低;响应过大或区域传送等场景也会用 TCP。
  • 追问:QUIC 为什么基于 UDP? 避免 TCP 队头阻塞和内核升级限制,在用户态实现可靠传输和 TLS 集成。

七、加强记忆

TCP 面向连接、可靠有序、有流控拥塞控制但重且慢,适合不能丢数据的场景;UDP 无连接、不保证可靠但轻快、保留消息边界,适合要实时、能容忍丢包的场景。本质取舍是可靠 vs 实时:网页文件用 TCP,音视频游戏 DNS 用 UDP;HTTP/3 的 QUIC 更是在 UDP 上重造了可靠传输。