面试记录 2026-09-27
题目:TCP和UDP的区别是什么?
难度:low
标签:computer/network, general/knowledge
评分:⭐⭐⭐☆☆(3/5)
我的回答
TCP 跟 UDP 都是网络协议,核心的区别在于可靠与非可靠,是两种不同的选择,应用于不同的场景。TCP 常用来可靠连接的保持,而 UDP 主要是用来高性能的数据传输,然后以及一些探测性作用的工作,就 DNS。TCP 通过多次握手重试,然后投信息,确保信息在网络中能够稳定、安全的有序的达到目标。而 UDP 选择另一种设计哲学,它选择更高性能的去数据传输,放弃了一些可靠性方面的验证。
点评
优点:
- 抓到了核心矛盾:可靠性 vs 性能,这是两种设计哲学的分歧点
- 提到了 DNS 作为 UDP 的典型应用场景
- 提到了 TCP 通过握手重试保障有序到达
不足:
- "TCP 通过多次握手重试"表述模糊,没有说出三次握手这个具体机制名称
- "DNS"作为"探测性工作"表述不准确,DNS 是应用协议不是探测手段,虽然 UDP 承载 DNS
- 缺少关键区别维度的显式列举(连接性、首部开销、有序性、流量控制、拥塞控制)
- 应用场景举例太少,只提到 DNS,遗漏了视频直播/语音通话/游戏等典型 UDP 场景
补充:
- TCP 首部 20 字节 vs UDP 首部 8 字节
- TCP 有流量控制(滑动窗口)和拥塞控制(拥塞避免、慢启动、快重传快恢复),UDP 无
- TCP 面向字节流,UDP 面向数据报(保留消息边界)
- TCP 全双工,UDP 是无连接的(虽然 UDP 本身也能双向通信,但没有连接概念)
- 典型 UDP 应用:DNS(请求小于 512 字节)、视频直播、实时语音/视频会议、游戏、NTP 时间同步
完整讲解
第一部分:知识重点剖析
核心考点定位:考察 TCP/UDP 两种传输层协议的核心机制差异,以及背后"可靠性 vs 性能"的设计权衡思想。
知识点拆解:
- 连接模型:TCP 是有连接的(三次握手建立、四次挥手断开),通信双方必须先握手才能传输;UDP 是无连接的,直接发数据报,没有连接建立和释放过程。
- 可靠性保障:TCP 通过序列号 + ACK 确认 + 超时重传 + 校验和实现可靠传输;UDP 仅有校验和(且可选),不保证送达、不保证顺序、不重传。
- 首部开销:TCP 首部 20~60 字节,UDP 首部固定 8 字节。对小报文 UDP 优势明显(DNS 单条请求常小于 512 字节)。
- 有序性:TCP 通过序列号保证有序到达,乱序包会缓存重排;UDP 保持发送顺序,到达顺序不保证。
- 流控与拥塞控制:TCP 有滑动窗口流量控制(接收方通告窗口大小)和拥塞控制(慢启动、拥塞避免、快重传快恢复、AIMD);UDP 都没有。
- 数据模型:TCP 面向字节流(丢失消息边界),UDP 面向数据报(保留消息边界)。
递进:从"是什么"(连接性、可靠性)→ "怎么做"(握手/重传/流控/拥塞控制)→ "为什么"(首部开销差异导致的应用场景差异)。
第二部分:考察方向与延伸递进
考察方向:
- 深度:不只是背差异表,要理解为什么可靠性需要这么多机制(握手建连接状态、序号排顺序、重传保送达、拥塞控制防堵死)
- 广度:延伸到 HTTP 为什么选 TCP、QUIC 为什么选 UDP 承载、gRPC 底层为什么是 HTTP/2 over TCP
- 应用:业务选型(RPC、消息推送、实时音视频)、协议栈调优(SO_KEEPALIVE、TCP_NODELAY)
延伸递进面试题:
- QUIC 为什么基于 UDP 而不是 TCP?
- 解答要点:TCP 的握手需要 1 RTT 建连、队头阻塞在传输层、无法自定义拥塞控制算法(内核实现改不了);QUIC 用 UDP 承载,把可靠性和拥塞控制上移到用户态,握手可以和 TLS 握手合并到 0~1 RTT,每个流独立避免队头阻塞。
- TCP 为什么会队头阻塞?QUIC 如何解决?
- 解答要点:TCP 是单一字节流有序到达,前面包丢了后面包必须缓存等待,导致后续字节全被堵住;QUIC 在 UDP 之上定义独立 stream,每个流有序,流之间互不阻塞。
- 你在生产环境遇到过 TCP 相关问题吗?如何排查?
- 解答要点:TIME_WAIT 过多(
ss -s 查看,可 sysctl 调 tw_reuse)、SYN 半连接队列满(tcp_max_syn_backlog、syncookies)、连接泄漏(netstat -an 看 CLOSE_WAIT)、丢包重传(netstat -s | grep retrans、mtr 看链路)。
第三部分:面试者参考回答(300-600 字口语化)
面试官您好,TCP 和 UDP 最本质的区别是可靠 vs 性能,这个权衡决定了一切。
第一个维度是连接性。TCP 是有连接的,先三次握手建立连接,再传数据,最后四次挥手释放。这就带来一个好处——连接建立后有一个稳定的上下文。UDP 无连接,直接发数据报,没有握手过程。
第二个维度是可靠性。TCP 通过序列号 + ACK 确认 + 超时重传 + 校验和实现可靠传输,保证数据不丢、不重复、有序到达。UDP 只有一个可选的校验和,其他什么都不做。
第三个维度是首部开销。TCP 首部 20 字节起,UDP 固定 8 字节。对小报文,比如 DNS 一条查询几十字节,UDP 的优势明显。
第四个维度是流控和拥塞控制。TCP 有滑动窗口做流量控制,接收方控制发送速度;还有慢启动、拥塞避免、快重传快恢复做拥塞控制,防止把网络打爆。UDP 都没有,应用自己负责。
第五个维度是数据模型。TCP 是字节流,会丢失消息边界;UDP 是数据报,保留消息边界,一发一收对应。
应用场景上,HTTP、SSH、数据库协议都选 TCP,因为要可靠;DNS 短查询选 UDP、视频直播、实时音视频、游戏选 UDP,因为丢了不重要、速度更重要。现在 QUIC 用 UDP 承载,把可靠性和拥塞控制上移到用户态,就是为了绕开内核 TCP 的限制,做到握手和 TLS 合并、避免队头阻塞。