TCP vs UDP 核心差异

network 📚 learning tcp-udp-comparison · network · tcp · udp · transport-layer · protocol · http2 · quic

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 承载

关键结论

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

完整讲解(费曼四步)

STEP 1 · 概念

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

STEP 2 · 大白话

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

STEP 3 · 底层(6 大维度对比)

维度TCPUDP
连接性有连接(3 握手 + 4 挥手)无连接(直接发)
可靠性序列号+ACK+超时重传+校验仅校验(可选)
首部开销20~60B(可变字段)固定 8B
有序性序号保证有序到达保持发送顺序,到达无序
流控/拥塞控制滑动窗口 + 慢启动 + 拥塞避免 + 快重传快恢复全无
数据模型字节流(丢消息边界)数据报(保边界)
TCP 可靠性 4 大机制:
  • 序号(Sequence Number)+ ACK(确认号)
  • 超时重传(RTO 动态计算)
  • 拥塞控制:慢启动(指数增长)→ 拥塞避免(线性增长)→ 快重传(3 个重复 ACK)→ 快恢复
  • 流量控制:接收方通告窗口大小,发送方不超窗口
UDP 的典型场景:
  • DNS 短查询(单包 < 512B,可靠收益 < 开销)
  • 视频直播/视频会议(丢几帧不重要,等重传会来不及)
  • 实时游戏(延迟优先,服务器端补偿)
  • NTP 时间同步(丢包不重要,下次继续)

STEP 4 · 简化

一句话:TCP 是"打长途电话",UDP 是"发短信";QUIC 是"用短信通道模拟打电话",为了绕开内核 TCP 的限制。

常见误区

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

延伸追问

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

速查表

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

Anki 候选卡片

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

关联题目

  • [x] 《TCP和UDP的区别是什么?》—— 2026-09-27 Round 1 Q1, 评分 ⭐⭐⭐
  • 关联知识

  • TCP 三次握手与四次挥手
  • 6 大维度差异,QUIC 演进;本质是可靠性 vs 性能权衡
    ✦ 记 忆 口 诀 ✦
    可靠性 vs 性能 / TCP 20B vs UDP 8B / QUIC 用户态可靠
    关键可视化
    暂无可视化
    知识关系

    ⬆️ 前置(Prerequisite)

    暂无

    🔄 延伸(Extends)

    暂无

    ⚡ 对比(Contrast)

    暂无
    🎯 概念 📏 规则 ⚠️ 误区 🔍 追问 ✨ 口诀 共 0 张卡,点击翻面