TCP 和 UDP 有什么区别?

通俗讲解两种最基本的网络传输方式:TCP 可靠但较慢,UDP 快但不保证送达。哪些应用用 TCP、哪些用 UDP,丢包对它们的不同影响,以及基于 UDP 的新协议 QUIC 和 HTTP/3。

作者:最后更新:阅读约 2 分钟

直接答案TCP 像挂号信:先建立连接,保证数据按顺序、完整地送达,丢了会重发,适合网页、下载、聊天消息;UDP 像普通明信片:不建立连接、不保证送达,但又快又实时,适合游戏、语音和视频通话。QUIC 是在 UDP 上实现的新协议,兼顾了可靠和快速,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 的方式。