博客主页:【夜泉_ly】
本文专栏:【泉面 TOP150】
欢迎点赞👍收藏⭐关注❤️

前言
泉面 TOP150 系列是由我的 泉面 项目收集了 1w+ 真实面经 后,
提取出了其中的 15w+ 题目,并进行聚簇、排序,得到的面试常考题。
我会对每道题进行整理,从 答题要点 ,到 3 分钟详答 ,1 分钟简答 ,再到常见追问全链路覆盖。
希望能减轻我和各位的复习压力,让我们面对基础八股题时有话可说。
啊,顺带提一句,大家回答八股题时,一定要确保自己说的每个词都理解了,
不然被追问到了是很痛苦和尴尬的。
再提一句,个人能力有限,如有错误,欢迎指正。
泉面数据总结
技术问题的 TOP1,常见问法有两种,
一种是问区别,一种是问各自使用场景,
但不管问哪个,都要把区别和场景一起答。
一、题目考察点
这道题表面上是在问协议差异,实际考得更深,主要看五件事。
第一,看基础是否扎实。面试官想确认你是不是清楚传输层最核心的职责,能不能把 TCP 和 UDP 放在同一层级、同一维度上比较,而不是零散背概念。
第二,看表达是否严谨。很多人会说 UDP 更快、TCP 不会丢包、UDP 不可靠,这些说法都太粗。面试官会观察你有没有把习惯说法换成机制层面的准确表述。
第三,看有没有工程判断力。真正有经验的候选人,不会只停留在连接和不连接,而是会继续说到报文边界、重传、有序性、流量控制、拥塞控制,以及这些机制对业务选型的影响。
第四,看能不能从原理走到场景。面试官通常想知道你不是只会背书,而是知道文件传输为什么偏 TCP,音视频和游戏为什么经常选 UDP,DNS 为什么两者都可能用。
第五,看是否存在风险点。这个题很容易暴露几个问题,比如只会背八股、概念混淆、说法绝对化、没有真实网络编程经验。答得稳的人,通常基础可靠、沟通清楚、后续可深挖。
二、答题要点
【连接方式】TCP 需要建立连接并维护状态,UDP 直接发送数据,不建立连接状态。
【可靠传输】TCP 通过确认、重传、序号等机制提升传输可靠性,UDP 不提供这一套内建保障。
【有序性】TCP 面向有序字节流,接收端按序重组数据,UDP 不保证到达顺序。
【数据边界】TCP 不保留应用层消息边界,UDP 天然按报文发送和接收。
【流量控制】TCP 会根据接收方处理能力调节发送速度,避免把对端缓冲区打满。
【拥塞控制】TCP 会根据网络拥塞情况调整发送窗口,UDP 协议本身不内建该机制。
【协议开销】TCP 需要握手、维护状态、确认与重传,协议开销通常更高,UDP 更轻量。
【适用场景】TCP 更适合正确性优先的业务,UDP 更适合时延敏感或应用自定义控制的业务。
三、3分钟详答版(展开讲讲?)
一句总论:
TCP 和 UDP 的核心区别,是在可靠性、时延、开销和控制权上的不同取舍。
四个核心点:
TCP 面向连接,UDP 无连接
TCP 可靠有序,UDP 不保证送达和顺序
TCP 是字节流,UDP 是报文
TCP 自带流控和拥塞控制,UDP 更灵活但更多要应用层处理
一句场景收尾:
正确性优先一般选 TCP,实时性优先或者应用自己掌控传输策略时更可能选 UDP。
TCP 和 UDP 都是传输层协议,但它们的设计目标不一样,所以核心区别不能只说成"一个可靠、一个不可靠",更本质地看,是它们在可靠性、顺序性、时延、协议开销以及控制权之间做了不同取舍。
先看连接方式。TCP 是面向连接的,通信前要先建立连接,通信过程中双方会维护状态;UDP 是无连接的,不需要先建连,应用把数据交给协议栈就可以直接发送。所以 UDP 协议本身更轻,首包时延通常也更低。
再看可靠性。TCP 提供确认应答、超时重传、序号这些机制,目标是让数据尽量可靠、按序到达。这里要注意,TCP 也不是说网络里绝对不会丢包,而是即使丢了,它会通过重传等机制尽量恢复。UDP 不提供这些内建能力,所以它不保证送达,也不保证顺序,应用层看到的结果可能是丢包、乱序或者重复。如果业务需要可靠性,通常要在应用层自己补。
第三个重要区别是数据形式。TCP 是面向字节流的,发送端写入的是一串字节,接收端读到的也是连续字节流,它不保留消息边界,所以应用层往往要自己定义包长、分隔符这类协议格式。UDP 是面向报文的,发出去的是一个个数据报,接收时消息边界天然保留,这对一些简单请求响应或者实时消息场景会比较方便。
第四是控制能力。TCP 自带流量控制和拥塞控制。流量控制主要是避免发送方把接收方压垮,拥塞控制主要是根据网络情况调整发送速度,避免把网络打爆。UDP 协议本身不负责这些,所以它更灵活,但也意味着很多控制责任要交给应用层自己处理。
所以落到工程实践里,TCP 更适合那些正确性优先的场景,比如网页、文件传输、邮件、数据库连接;UDP 更适合那些实时性优先的场景,比如实时音视频、在线游戏、DNS,或者一些应用层自己实现可靠传输的协议。
我的理解是,TCP 和 UDP 不是谁更高级,而是针对不同业务目标做出的不同设计取舍。
四、1分钟简答版(快答)
先一句话给总论
再说 TCP / UDP 各 1 句 (特点 + 场景)
最后一句收尾 "不能简单说 UDP 更快"
TCP 和 UDP 的核心区别在于可靠性机制的不同。
TCP 是面向连接的,发送数据前要先建立连接,并且提供确认、重传、顺序控制、流量控制和拥塞控制,所以它能保证数据可靠、有序地到达,适合网页、文件传输、数据库这类对正确性要求高的场景。
UDP 是无连接的,直接发送数据报,不保证一定送达,也不保证顺序,但它开销更小、时延通常更低,而且保留消息边界,所以更适合音视频、实时游戏、DNS 这类对实时性更敏感、能容忍少量丢包的场景。
不过也不能简单说 UDP 一定更快,更准确地说是它协议开销更低,如果应用层自己补可靠性,整体效果还要结合具体场景看。
五、常见追问
-
TCP 为什么需要三次握手,不能两次吗
作答思路:三次握手的关键是让双方都确认收发能力和初始序号可用。两次握手无法让发起方确认对方已经收到自己的连接请求并具备回包能力。
-
TCP 为什么是四次挥手
作答思路:TCP 是全双工,两个方向的关闭要分别处理。收到 FIN 只能说明对方不再发送,不代表本端已经没有数据可发。
-
TCP 是怎么保证可靠传输的
作答思路:核心机制是序号、确认应答、超时重传、校验、滑动窗口。它们共同解决丢包、乱序、重复和接收能力匹配的问题。
-
TCP 会不会丢包
作答思路:网络层面依然可能丢包,TCP 不是让网络不丢,而是发现丢了以后尽量重传恢复。面试里不要说 TCP 绝对不丢包。
-
UDP 能不能实现可靠传输
作答思路:可以,但要在应用层补确认、重传、排序、去重、流控等机制。很多实时协议都会按业务目标做定制,而不是照搬 TCP。
-
为什么音视频通话经常用 UDP
作答思路:这类业务通常更怕时延和抖动,不一定追求每一帧都补回来。过期数据即使重传成功,业务价值也可能已经不高。
-
为什么说 TCP 是字节流,UDP 是报文
作答思路:TCP 不保留消息边界,应用读到的是连续字节序列。UDP 发送和接收都以数据报为单位,边界天然存在。
-
什么是 TCP 粘包和拆包,本质原因是什么
作答思路:本质不是 TCP 出错,而是 TCP 面向字节流,不认应用消息边界。应用层必须自己定义包长或分隔规则来解包。
-
DNS 为什么常用 UDP,有时又会用 TCP
作答思路:普通查询报文小、追求快,所以常用 UDP。响应过大、区域传送或某些需要可靠会话的场景会切到 TCP。
-
UDP 没有拥塞控制会有什么风险
作答思路:如果发送方无节制发包,可能把网络打满,造成丢包和抖动加重。工程上通常要在应用层补发送速率控制和退避策略。
-
QUIC 为什么基于 UDP,而不是直接增强 TCP
作答思路:基于 UDP 更容易在用户态实现,迭代快,也能绕开部分内核和中间设备限制。它把可靠性、流控、拥塞控制放到上层重新设计。
-
什么时候明明对时延敏感,还是会选 TCP
作答思路:当业务对正确性、顺序性和开发复杂度更敏感时,仍可能选 TCP。比如很多内部系统宁可多一点时延,也不愿自己维护可靠传输逻辑。

希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!