Skip to content

TCP 和 UDP 怎么选? ​

TCP 先建立连接,保证字节流按序、可靠地到达,有拥塞控制。UDP 不建立连接,不保证到达、顺序和只到达一次,头部更小,延迟更可控。网页文档和接口用 TCP(以及跑在 UDP 上、自己做可靠传输的 QUIC)。实时音视频、游戏状态常用 UDP。

原理 ​

TCP 是面向连接的字节流。丢了会重传,接收方按序号重组。这带来队头阻塞:同一个连接里前面的包没到,后面的数据即使到了也不能交给应用。HTTP/2 的多路复用仍跑在一条 TCP 上,所以还有这个限制。HTTP/3 用 QUIC,把流分开,一条流丢包不挡住别的流。

UDP 把数据报直接交给应用。应用要自己处理丢包、乱序和拥塞,或者接受偶尔丢掉一帧。DNS 查询、直播的媒体包是典型场景。

浏览器脚本不能随意收发原始 TCP 或 UDP。页面能用的是 HTTP、WebSocket、WebRTC。WebRTC 的媒体通道基于 UDP。

追问 ​

为什么 HTTP 历史上放在 TCP 上?

网页不能缺一段 HTML 或脚本。TCP 的可靠字节流刚好符合。只有在延迟比「每个字节都到」更重要时,才改用 UDP,并在上面另做需要的可靠性。

三次握手属于哪一个?

属于 TCP。UDP 没有这套连接建立。见 三次握手。

易错点 ​

  • 说 UDP 一定更快。它少了握手和重传,不保证体验更好;丢包严重时应用可能更差。
  • 把 HTTP/3 说成「还是 TCP」。QUIC 跑在 UDP 上。
  • 浏览器里不能用 TCP 和 UDP 当通用套接字 API。

相关 ​