TCP 与 UDP 有什么区别,如何根据场景选择?

考查重点:传输语义与业务时效。TCP 提供可靠有序字节流,UDP 保留数据报但不承诺送达;文件传输重完整性,实时媒体更关注时效和上层恢复

本题目录

参考答案

核心回答

TCP 提供面向连接、可靠有序的字节流;UDP 提供无连接的数据报传输,保留报文边界,但自身不保证送达、顺序和去重。 选择时主要看应用需要完整有序的数据,还是需要按时处理独立消息,以及上层已经采用什么协议。

  • **TCP**通过序号、确认、重传等机制处理丢包和乱序,并提供流量控制与拥塞控制。适合文件传输、数据库连接、常见业务请求等需要可靠传输的场景;应用仍要定义消息边界、超时和业务响应。
  • **UDP**没有 TCP 那样的连接建立与重传机制,报文可以独立发送。适合需要自行决定丢弃、补偿和重传策略的实时交互,以及使用 UDP 的查询或媒体协议;需要的可靠性、速率控制和安全能力由上层补足。

协议开销和等待策略会影响时延,但不能仅凭 TCP/UDP 名称判断实际性能。QUIC 就是在 UDP 之上实现可靠传输、连接管理和拥塞控制的协议,HTTP/3 使用 QUIC,不能因此被归为“不可靠 HTTP”。

字节流与数据报,对应用有什么影响?

TCP 交付的是连续字节,不保留每次应用写入的消息边界。比如先写入“ABC”,再写入“DEF”,接收方可能分两次读到“AB”和“CDEF”,也可能一次读到全部内容。接收方要通过长度字段、分隔符或既有协议格式识别一条完整消息,这就是常说的处理“粘包、拆包”。

UDP 则按数据报交付,一次发送的报文和下一次发送的报文有边界。但报文仍可能丢失、重复或乱序,太大的报文还会增加 IP 分片等问题的风险。因此,报文边界只解决消息怎样划分,不等于消息一定成功到达。

TCP 的可靠,保证到哪一层?

TCP 给字节编号,接收方确认已收到的数据,发送方根据超时和反馈重传;接收方重排、去重后向应用交付有序字节流。接收窗口限制对端接收缓冲区能够承受的量,拥塞控制则根据网络状况约束发送,二者关注的对象不同。

这些机制也有代价:连接需要维护状态;当一段字节丢失时,后续已到达的数据可能等待缺失部分恢复后才能按序交付。应用需要在完整性和等待时间之间作出选择。

传输可靠不代表业务成功。连接中断、持续网络故障时,TCP 也可能最终报错;即使数据已到对端,发送方也不能仅凭传输层确认认定对方完成了落库或扣款。业务仍需要响应、超时与必要的幂等处理,避免重试重复执行。

怎样按场景选择?

需要完整有序地接收内容,且没有特殊传输要求时,通常优先使用基于 TCP 的成熟协议与库。例如数据库访问、文件传输和已有的业务 RPC,能复用其可靠流传输能力,减少自行实现的工作。

消息有很强时效、过期后价值很低时,可以考虑基于 UDP 的成熟实时协议。例如互动音视频或游戏状态同步,应用可能宁愿跳过已经过时的内容,继续处理新消息。但仍要控制发送速率,处理抖动、乱序和必要的补偿;UDP 自身不提供拥塞控制,并不意味着应用可以不考虑网络容量。

需要可靠传输,又希望使用 UDP 上层的新传输能力时,可以选择 QUIC 等已有协议。QUIC 为应用提供有序的流,并实现丢包恢复与流量、拥塞控制。它是在 UDP 之上补足这些能力,工程上还要考虑客户端支持和网络可达性,而不是只把 Socket 类型改成 UDP。

常见追问

UDP 能实现可靠传输吗? 能在上层实现序号、确认、重传、去重等机制,但还需处理拥塞控制、超时和资源限制。QUIC 是成熟例子;可靠性来自上层协议,并非 UDP 自身增加了承诺。

使用 TCP 就不需要应用层校验和重试了吗? 仍需按业务设计。TCP 负责字节传输,不能确认业务处理结果,也不提供加密认证;敏感通信通常还要结合 TLS 等安全协议,业务重试则要考虑幂等。

音视频或直播一定选 UDP 吗? 要看低时延互动还是允许缓冲播放,以及实际采用的媒体协议。不能仅凭业务名称决定传输协议,也不能把“UDP 无重传”直接当成完整的低时延方案。

参考资料

  • 国内:JavaGuide:为什么 TCP 是面向字节流,UDP 是面向报文?:应用写入与读取边界的例子说明为什么 TCP 需要消息分帧,以及 UDP 的报文边界为什么不等于可靠交付。
  • 国内:JavaGuide:TCP 如何保证可靠传输?:参考序号、确认、重传、流量控制与拥塞控制的讲解,展开正文中 TCP 可靠传输的具体机制及各自职责。
  • 国内:小林 coding:TCP 三次握手与四次挥手面试题:借鉴 TCP 基本认识中的 TCP/UDP 比较,按连接、可靠性、流控和消息边界组织正文的核心对比。
  • 国内:小林 coding:HTTP/3 强势来袭:依据 QUIC 与 HTTP/3 的说明,补充正文中 UDP 上层可以提供可靠流传输的例子,区分 UDP 本身和 HTTP/3 的能力。
  • 国外:IETF RFC 9293:TCP:依据 §2.2 与 §3.7 的标准定义,说明正文中 TCP 的连接、可靠有序字节流与分段边界,并交代拥塞控制的职责。
  • 国外:IETF RFC 768:UDP:依据 Introduction 与 User Interface 对数据报服务的定义,说明正文中 UDP 保留报文边界但不保证送达与去重的特点。
  • 国外:IETF RFC 9000:QUIC:§1、§2 说明 UDP 承载的 QUIC 连接、可靠有序流和拥塞控制,提供“UDP 上层可以可靠传输”的标准依据。

相关面经

22 篇

网易

游戏测试开发工程师
秋招一面
查看原面经 →
## 9.游戏引擎为什么一般使用 udp 而不是 tcp?udp 怎么实现可靠传输?

字节跳动

AI 应用客户端开发实习生
实习一面
查看原面经 →
tcp和udp区别
Tcp和udp适应场景

波克、比亚迪、客路、CVTE、石犀科技

面经合集
查看原面经 →
TCP和UDP有什么区别?
既然UDP不可靠,为什么很多实时场景还要使用UDP?

深信服

技术研发工程师 AI潜力
一面
查看原面经 →
UDP 有什么特点?
追问
TCP 和 UDP 分别适用于什么场景?
追问
如果让你设计一个网络应用,你会如何选择 TCP 或 UDP?

麒麟软件

后端研发工程师
一面
查看原面经 →
TCP 和 UDP 有什么区别?
展开剩余 17 篇面经

快手

客户端 Infra 开发工程师
校招一面、二面、三面、四面
查看原面经 →
4\. http和https 和 tcp, udp

优博讯

软件开发工程师
一面、二面
查看原面经 →
讲一下 TCP 跟 UDP 的差别

字节跳动

Agent 开发
校招秋招一面
查看原面经 →
● 说明 TCP 和 UDP 的区别,如果想用 UDP 实现可靠传输怎么处理(提醒了解 HTTP 3)

去哪儿

AI 应用开发
查看原面经 →
TCP和UDP核心区别和适用场景

智元机器人、字节跳动

面经合集
查看原面经 →
TCP和UDP区别,TCP粘包,应用场景

美团

AI Agent 开发工程师
一面
查看原面经 →
tcp握手挥手 udp

靖安科技

后端工程师(RAG/Agent 项目)
秋招一面
查看原面经 →
TCP 和 UDP 的区别

字节跳动

前端开发工程师
一面
查看原面经 →
TCP、UDP区别

百度

面经合集
查看原面经 →
TCP 和 UDP 有什么区别,哪些上层协议使用 UDP?

水滴

质量保障工程师(AI)
校招秋招一面
查看原面经 →
网络协议里面tcp为什么比udp更可靠

BIGO

客户端开发工程师
秋招二面
查看原面经 →
TCP和UDP该如何选择?

去哪儿

AI 应用开发工程师
查看原面经 →
TCP/UDP的区别,使用场景,直播场景下为什么使用UDP

字节跳动

Agent 开发工程师(评测方向)
一面
查看原面经 →
TCP和UDP协议区别

哔哩哔哩(B站)

Agent 开发
社招二面
查看原面经 →
UDP特点?适用场景?

百度

Agent 开发工程师
一面
查看原面经 →
TCP UDP

腾讯

AI 应用开发工程师
暑期三面
查看原面经 →
请阐述TCP与UDP的主要区别,并深入解释TCP滑动窗口机制的原理,包括窗口大小的动态调整方式以及通信双方如何交换窗口信息。

字节跳动

AI 应用开发工程师
日常实习一面
查看原面经 →
TCP 和 UDP 有什么区别?

收录题集

2 个来源,共4 份题集

系统设计与后端基础

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

腾讯问答汇编

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

C和C++实战及经典考点

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

计算机网络高频知识点

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

相关题目

4 题