| HowItWorksLab · Systems
简体中文

TCP vs UDP

在互联网上传输数据的两种方式。TCP 建起一条可靠、有序的数据流,丢了就重传;UDP 只管把数据报发出去,也接受其中一些永远到不了。下面把两者的区别并排摆出来。

TCP vs UDP · 并排对比 左侧:可靠、有序的数据流 · 右侧:快速、各自独立的数据报 TCP 可靠 · 有序 · 面向连接 连接:先握手 投递与顺序:有保证 丢失的数据:自动重传 客户端 服务器 1 2 3 数据包按序到达 → ← 每一个都被确认 UDP 快速 · 无连接 · 尽力而为 连接:无——直接发 投递与顺序:不保证 丢失的数据:就此消失 客户端 服务器 d1 d2 d3 丢失 数据报各自独立发出,没有回复 TCP 用速度换可靠 · UDP 用可靠换速度 左侧:一条有序、被确认的流 · 右侧:彼此独立的数据报
两种模型,逐一对照 建立 → 发送 → 确认 → 重传 → 送达或丢弃
显示模式

详细说明

TCP 与 UDP 有什么区别?

TCP 与 UDP 是互联网的两大传输协议。它们都在应用之间搬运数据,却做出截然相反的承诺。TCP 承诺数据完整、按序到达;UDP 什么也不承诺——它只管发。

其它一切差异都由这个选择衍生出来。为了守住承诺,TCP 必须建立连接、给每个字节编号并确认、把丢失的重传;为了保持轻量,UDP 把这一切全省掉,所以仍有一些应用偏爱它。

为什么要并排比较?

用两块面板并排看最清楚:一边是带序号、被确认的数据流,另一边是没有回复、彼此独立的数据报。摆在一起后,可靠与速度之间的取舍就一目了然。

部件及其作用

1. TCP 先建立连接

传输任何数据之前,TCP 先握手,让双方商定起始序号。这一步要多花一个往返,但正因如此,两端才能把数据当作一条连续的流来跟踪。

2. TCP 编号、排序并确认

TCP 把数据切成数据段,并给每个字节编号。接收方靠这些编号把数据段重新排好、发现缺口,并回送确认,让发送方知道哪些已经到了。

3. TCP 重传丢失的内容

如果迟迟收不到确认,发送方就认为该数据段丢失并重传。对应用来说,这看起来就是一条干净、有序的数据流——重传与重排都藏在底下。

4. UDP 直接发数据报

UDP 没有握手,也不保存状态。发送方只是给每个数据报写上地址就发出。没有任何需要建立的东西,所以第一条消息可以立刻出发,协议本身也又小又快。

5. UDP 丢了就没了

由于 UDP 从不确认任何内容,途中被丢掉的数据报就此消失,双方都收不到通知。数据报还可能乱序到达或被重复,所以需要可靠性时,只能由应用自己加。

6. 如何在两者间选择

需要正确性时用 TCP——网页、文件、邮件,凡是每个字节都必须到达的场合。需要及时性时用 UDP——实时音视频、游戏,或像 DNS 这样的一次性查询。到底选哪个,取决于迟到的包和丢失的包哪种更让人难受。

什么时候该用 UDP?

当速度比完美更重要、而且应用能容忍或自己弥补丢包时:实时音视频、在线游戏、流媒体,以及像 DNS 这样的短问答查询。迟到的数据包往往比丢失的还糟。

UDP 不可靠吗?

UDP 本身不提供任何保证:数据报可能丢失、重复或乱序,而且它不会告诉你。这并不代表它不好——只是说一旦需要可靠性,就得由应用自己加上去。

DNS 为什么用 UDP?

一次 DNS 查询通常就是一个小问题加一个小答案。先建立连接会白白多一个往返,所以常见情形就是一个数据报。若答案太大或回复丢失,DNS 可以回退到 TCP。

在 UDP 上也能获得可靠性吗?

可以,在它之上再加一层即可。像 QUIC 这样的协议就在 UDP 上补上连接建立、确认与重传,既得到可靠性,又避开 TCP 的队头阻塞,这正是现代 HTTP/3 采用它的原因。

TCP 和 UDP 哪个更快?

UDP 的开销通常更小,因为它省掉了连接建立与逐段确认。但“更快”取决于任务:在干净可靠的链路上 TCP 的额外工作并不贵,而当 TCP 需要重传时,UDP 反而会显得占优。

常见误区

UDP 会丢数据,所以它有毛病。 丢包听起来像是缺陷或设计失误。
丢数据是一种特性,不是故障。 UDP 面向的正是“迟到的包比丢失的包更糟”的场景;可靠性可以在它之上再加。
TCP 可靠,所以永远更好。 既然 TCP 保证送达,为什么还要用别的?
可靠性是用时间换来的。 对实时语音或游戏来说,等一个被重传的包只会更糟,此时 UDP 反而更合适。
两种协议都会保持数据顺序。 不管用哪个,数据似乎都按顺序到达。
只有 TCP 承诺顺序。 UDP 对顺序不作任何承诺,所以数据报可能以任意次序到达,应用必须自己处理。
免责声明:本图解为教学目的做了大幅简化,真实系统变量与复杂度远超此处。不可用于工程生产用途,也不构成金融、政治或专业建议。