---
title: TCP vs UDP 核心差异
type: concept
domain: network
tags: [network, tcp, udp, transport-layer, protocol, http2, quic]
status: learning
created: 2026-09-27
last_reviewed: 2026-09-27
method: feynman
related_questions:
  - "TCP和UDP的区别是什么？"
related_knowledge:
  - ./tcp-handshake-teardown.md
anki_cards: 5
interview_rounds:
  - "2026-09-27-round-1-Q1"
---

# TCP vs UDP 核心差异

> 传输层两大协议的根本分歧：**可靠 vs 性能**的设计权衡。这个权衡决定了首部开销、流控、拥塞控制、数据模型等一整套差异。

## TL;DR（30 秒扫完）

- **本质**：TCP 面向连接+可靠有序；UDP 无连接+尽力而为
- **首部**：TCP 20~60B（含可变字段）vs UDP 固定 8B
- **控制**：TCP 有滑动窗口流控 + 慢启动/拥塞避免/快重传快恢复；UDP 全无
- **数据模型**：TCP 面向字节流（丢消息边界）vs UDP 面向数据报（保边界）
- **场景**：HTTP/gRPC/DB 走 TCP；DNS 短查/视频直播/游戏/NTP 走 UDP；QUIC 基于 UDP 承载

## 关键结论

- **结论 A**：TCP/UDP 的差异不是"好坏"，是"可靠性 vs 性能"的取舍
- **结论 B**：TCP 首部 20B 起 + 拥塞控制，UDP 首部固定 8B + 极简
- **结论 C**：TCP 面向字节流会丢消息边界，UDP 面向数据报保留边界
- **结论 D**：QUIC 用 UDP 承载、把可靠性上移用户态，是为了绕开内核 TCP 限制

## 完整讲解（费曼四步）

### STEP 1 · 概念

TCP（Transmission Control Protocol）和 UDP（User Datagram Protocol）都是 **传输层** 协议，向上提供端到端通信，向下屏蔽网络层差异。

### STEP 2 · 大白话

**TCP 像打电话**：先拨号建连（握手），边讲边确认对方听没听到（ACK），说完挂断（挥手）——慢但稳。
**UDP 像发短信**：写好了直接发出去，不管对方收没收到、顺序对不对——快但不保。

### STEP 3 · 底层（6 大维度对比）

| 维度 | TCP | UDP |
|------|-----|-----|
| 连接性 | 有连接（3 握手 + 4 挥手） | 无连接（直接发） |
| 可靠性 | 序列号+ACK+超时重传+校验 | 仅校验（可选） |
| 首部开销 | 20~60B（可变字段） | 固定 8B |
| 有序性 | 序号保证有序到达 | 保持发送顺序，到达无序 |
| 流控/拥塞控制 | 滑动窗口 + 慢启动 + 拥塞避免 + 快重传快恢复 | 全无 |
| 数据模型 | 字节流（丢消息边界） | 数据报（保边界） |

**TCP 可靠性 4 大机制**：
1. 序号（Sequence Number）+ ACK（确认号）
2. 超时重传（RTO 动态计算）
3. 拥塞控制：慢启动（指数增长）→ 拥塞避免（线性增长）→ 快重传（3 个重复 ACK）→ 快恢复
4. 流量控制：接收方通告窗口大小，发送方不超窗口

**UDP 的典型场景**：
- DNS 短查询（单包 < 512B，可靠收益 < 开销）
- 视频直播/视频会议（丢几帧不重要，等重传会来不及）
- 实时游戏（延迟优先，服务器端补偿）
- NTP 时间同步（丢包不重要，下次继续）

### STEP 4 · 简化

> **一句话**：TCP 是"打长途电话"，UDP 是"发短信"；QUIC 是"用短信通道模拟打电话"，为了绕开内核 TCP 的限制。

## 常见误区（从面试记录提炼）

- **误区 1**："TCP 通过多次握手重试" → 正确：TCP 通过 **三次握手**建立连接，通过 **超时重传**保障送达，是两件独立的事
- **误区 2**："DNS 是探测性工作" → 正确：DNS 是应用层协议，只是常用 UDP 承载短查询
- **误区 3**：只列 2-3 维度 → 正确：至少 6 维度（连接性/可靠性/首部/有序性/流控拥塞/数据模型）

## 延伸追问（面试追问预演）

1. **QUIC 为什么基于 UDP 而不是 TCP？**
   - 要点：内核 TCP 握手要 1 RTT、队头阻塞在传输层、拥塞控制算法改不了；QUIC 用 UDP 承载，把可靠性和拥塞控制上移用户态，握手和 TLS 合并到 0-1 RTT，每个流独立避免队头阻塞。
2. **TCP 为什么会队头阻塞？QUIC 如何解决？**
   - 要点：TCP 是单一字节流有序到达，前面包丢了后面包必须缓存等待；QUIC 在 UDP 上定义独立 stream，流之间互不阻塞。
3. **TCP 首部 20B 里有哪些字段？**
   - 要点：源端口/目标端口/序号/确认号/数据偏移/保留/6 个标志位（URG/ACK/PSH/RST/SYN/FIN）/窗口/校验和/紧急指针/选项。

## 速查表

```
TCP   = 打电话（握手+确认+挥手，20B 首部，有序可靠，流控拥塞）
UDP   = 发短信（直接发，8B 首部，尽力而为，无序不保）
QUIC  = 用短信模拟电话（用户态可靠性，0-1 RTT，多路复用，避队头阻塞）
关键维度：连接性 / 可靠性 / 首部 / 有序性 / 流控拥塞 / 数据模型
典型场景：TCP（HTTP/gRPC/DB） / UDP（DNS/视频/游戏/NTP）
```

## 关联题目（题库）

- [x] 《TCP和UDP的区别是什么？》—— 2026-09-27 Round 1 Q1, 评分 ⭐⭐⭐

## 关联知识

- [TCP 三次握手与四次挥手](./tcp-handshake-teardown.md)

## Anki 候选卡片

1. **正**：TCP 首部固定多少字节？**反**：20 字节（+ 选项最多 40 字节，共 20-60B）
2. **正**：TCP 和 UDP 在首部开销、流控、拥塞控制上的差异？**反**：TCP 20B+滑动窗口+慢启动/拥塞避免/快重传快恢复；UDP 8B、全无
3. **正**：TCP 面向什么？UDP 面向什么？**反**：TCP 字节流（丢消息边界），UDP 数据报（保边界）
4. **正**：QUIC 为什么基于 UDP 而不是 TCP？**反**：内核 TCP 队头阻塞、拥塞算法改不了、握手要 1 RTT；QUIC 用户态可靠+TLS 握手合并+多路复用避队头
5. **正**：UDP 的 4 大典型应用？**反**：DNS 短查询、视频直播、实时游戏、NTP 时间同步

---

*最后更新：2026-09-27*
