694 字
3 分钟
TCP 和 UDP 有什么区别?如何选择
TCP 和 UDP 都是传输层协议,负责在主机间传递应用数据,但提供的服务不同。TCP 面向连接,提供有序字节流,并通过确认、重传、流量控制和拥塞控制实现可靠传输;UDP 面向数据报,每个报文保留边界,不保证到达、顺序或去重,协议头和状态管理更简单。
| 对比项 | TCP | UDP |
|---|---|---|
| 数据模型 | 字节流,没有应用消息边界 | 数据报,保留报文边界 |
| 可靠性 | 确认、重传、有序交付 | 不保证交付与顺序 |
| 连接 | 建立连接并维护状态 | 无连接,不等于完全无状态的应用 |
| 控制机制 | 流量控制、拥塞控制 | UDP 本身不提供这些机制 |
| 常见用途 | HTTP/1.1、HTTP/2、数据库连接 | DNS 常规查询、实时媒体、QUIC 底层 |
选择应从应用需求出发。文件传输、数据库协议通常需要完整有序的数据;实时语音视频更在意时效,过晚的数据可能没有价值。应用选择 UDP 后若需要可靠传输,必须自行实现或使用 QUIC 等协议,不能把“UDP 快”当成无条件结论。实际性能还受网络、实现和消息大小影响。
还要区分“传输层不保证可靠”和“应用容忍丢失”。实时音频可能通过编码冗余、抖动缓冲和有限重传提升体验;游戏状态更新可丢弃过期状态并发送最新状态。TCP 提供的是可靠字节流,不了解消息优先级或过期时间,应用需自行定义消息边界与业务语义。若把 UDP 上的可靠性实现不完整,可能出现重传风暴、拥塞不公平或消息重复处理等问题。
常见追问
UDP 真的比 TCP 快吗?
UDP 协议机制简单、没有握手和确认重传的固有成本,但应用可能要自行补齐这些机制。最终延迟和吞吐要看协议设计与网络条件,不能仅凭 UDP 名称判断。
DNS 为什么常用 UDP?
常规 DNS 查询小而短,使用 UDP 可减少交互开销;遇到截断响应、特定操作或策略要求时也会使用 TCP。现代 DNS 还有其他传输方式。
QUIC 为什么使用 UDP?
QUIC 在 UDP 数据报上实现可靠传输、拥塞控制和多路复用等能力,便于在用户空间演进。它不是把可靠性寄托给 UDP。
TCP 能否传输实时数据?
可以,但丢包重传可能让后续数据等待,应用要评估时效要求。实时性并不自动意味着必须选 UDP。
TCP 和 UDP 有什么区别?如何选择
https://blog.xqcherry.top/posts/interview/network/tcp-vs-udp/ 目录