TCP 和 UDP 有什么区别?
通俗讲解两种最基本的网络传输方式:TCP 可靠但较慢,UDP 快但不保证送达。哪些应用用 TCP、哪些用 UDP,丢包对它们的不同影响,以及基于 UDP 的新协议 QUIC 和 HTTP/3。
数据在网络上传输时,需要一套「怎么送」的规则。最基本的两种就是 TCP 和 UDP。几乎所有的上网活动,都建立在它们之上。
一句话区别
| 对比项 | TCP | UDP |
|---|---|---|
| 比喻 | 挂号信:签收确认,丢了补寄 | 明信片:寄出就不管了 |
| 是否建立连接 | 先「三次握手」建立连接 | 不需要,直接发 |
| 是否保证送达 | 保证,丢了会重传 | 不保证 |
| 是否保证顺序 | 保证 | 不保证 |
| 速度与实时性 | 较慢,有等待 | 快,实时 |
| 典型应用 | 网页、下载、邮件、聊天消息 | 游戏、语音通话、视频会议、直播、DNS 查询 |
TCP:可靠的「挂号信」
TCP 在发数据前,双方先通过三次握手确认彼此都在线、都能收发。之后:
- 每段数据都有编号,接收方收到后会回复「确认」;
- 发送方没收到确认,就认为数据丢了,重新发送;
- 接收方按编号把数据排好顺序,交给应用。
这样保证了数据完整、有序,打开网页、下载文件时不会缺一块。代价是:一旦丢包,就要等待重传,速度会明显下降。在丢包多的网络上,TCP 下载会变得很慢,丢包的影响见 延迟、带宽和丢包。
TCP 还会根据网络情况自动调节发送速度(拥塞控制):网络顺畅时逐步加速,发现丢包就主动减速,避免把网络挤垮。
UDP:快速的「明信片」
UDP 没有握手、没有确认、没有重传,数据包直接发出去。它的好处是快、延迟低、开销小。
对实时应用来说,这恰恰是优点:
- 游戏:上一帧的位置数据丢了,不用补,下一帧的新数据马上就到;
- 语音和视频通话:偶尔丢一点声音比卡住等待重传要好;
- DNS 查询:一问一答,很短,用 UDP 最省事。
UDP 不负责的可靠性,如果应用需要,会自己在上层实现。
QUIC 和 HTTP/3:在 UDP 上做可靠传输
TCP 有一个老问题:同一个连接里,一个数据包丢了,后面所有数据都要等它(队头阻塞);而且建立连接、再做 TLS 加密握手,要来回好几次。
QUIC 是为了解决这些问题设计的新协议,它运行在 UDP 之上,自己实现了可靠传输和加密:
- 把连接建立和 TLS 加密握手合并,更快开始传输;
- 一个连接里的多路数据互不阻塞,一路丢包不影响其他;
- 网络切换时(比如手机从 Wi-Fi 换到 4G)连接可以不断。
HTTP/3 就是基于 QUIC 的新一代网页协议,很多大型网站已经在使用。加密握手的原理见 HTTPS 和 TLS 加密。
为什么有的网络「不支持 UDP」
部分公司、校园网络或代理环境会限制 UDP。这时:
- 网页浏览一般不受影响,浏览器会自动退回到基于 TCP 的 HTTP/2;
- 依赖 UDP 的游戏、通话可能连不上或体验变差。
代理软件里常说的「支持 UDP 转发」,指的就是能否把这类 UDP 流量也通过代理传输,代理的原理见 代理是怎么工作的。
总结
- TCP 可靠、有序,丢包会重传,适合网页和下载。
- UDP 快、实时,不保证送达,适合游戏和通话。
- QUIC 在 UDP 上实现了可靠和加密,HTTP/3 基于它。
- 丢包对 TCP 的影响是「变慢」,对 UDP 应用的影响是「卡顿」。
常见问题
为什么游戏用 UDP 而不是 TCP?
游戏需要实时性。一帧数据丢了,与其等它重传,不如直接用下一帧的新数据。TCP 的重传机制反而会让画面卡住等待。
网页是用 TCP 还是 UDP?
传统网页(HTTP/1.1、HTTP/2)基于 TCP;越来越多的网站开始使用 HTTP/3,它基于 QUIC,而 QUIC 运行在 UDP 上。
有的网络限制 UDP 会怎样?
依赖 UDP 的应用(部分游戏、通话、QUIC 网站)可能连不上或变慢;浏览器访问网站时一般会自动退回到基于 TCP 的方式。