Skip to Content
面试题库Computer Network[面试题] TCP和UDP的区别是什么?

[面试题] TCP和UDP的区别是什么?

📖 版块 A:知识讲解版 (温故知新)

  • TCP (Transmission Control Protocol, 传输控制协议)

    1. 面向连接:传输数据前必须建立连接(三次握手),传输结束需释放连接(四次挥手)。
    2. 可靠交付:通过校验和、序列号、确认应答(ACK)、超时重传、流量控制(滑动窗口)及拥塞控制来保证数据无差错、不丢失、不重复且按序到达。
    3. 面向字节流:将数据看作无结构的字节流,不保留应用层报文边界。
    4. 首部开销大:标准首部 20 字节。
  • UDP (User Datagram Protocol, 用户数据报协议)

    1. 无连接:发送数据前不需要建立连接,减少了开销和延迟。
    2. 尽力而为交付:不保证可靠性,不使用拥塞控制,可能会丢包或乱序,但实时性好。
    3. 面向报文:保留了应用层报文的边界,一次发送一个完整报文。
    4. 首部开销小:首部仅 8 字节。
  • 应用场景

    • TCP:适用于对可靠性要求高的场景,如 HTTP/HTTPS(网页浏览)、文件传输(FTP)、邮件传输(SMTP)。
    • UDP:适用于对实时性要求高、能容忍少量丢包的场景,如 视频直播、即时游戏、DNS 解析、语音通话。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:TCP 和 UDP 的区别是什么?

💬 高手逐字稿

TCP 和 UDP 最本质的区别可以概括为一句话:TCP 是追求极端可靠的“有状态”连接,而 UDP 是追求极致效率的“无状态”传输。

我们可以从三个关键维度来深度对比:

第一,可靠性与连接管理。TCP 是面向连接的,它通过三次握手建立物理意义上的逻辑通道。为了保证“不丢、不重、不乱”,它内部实现了一套非常复杂的机制:比如利用序列号和确认应答来确保送达,利用超时重传应对丢包,利用滑动窗口做流量控制,以及通过拥塞算法在网络拥堵时主动降速。而 UDP 完全没有这些机制,它只负责把报文发出去,剩下的交给网络环境,所以它非常快,但不保证结果。

第二,传输形式。TCP 是面向字节流的,在传输时它会根据缓冲区大小对应用层数据进行拆分或合并,这就是为什么我们在 TCP 开发中经常要处理“粘包和拆包”的问题。而 UDP 是面向报文的,应用层给它多大,它就发多大,保留了完整的报文边界。

第三,开销与吞吐。TCP 的报文首部至少 20 字节,且因为有确认机制和重传机制,它的吞吐量在恶劣网络下会受限。UDP 首部固定只有 8 字节,没有握手延迟,在实时直播或网络游戏中,UDP 的低延迟优势是不可替代的。

这里可以深入一个细节:很多人认为 UDP 不可靠,所以现代架构中只用 TCP。其实不然。现在主流的趋势是在 UDP 之上实现可靠性。比如 Google 提出的 QUIC 协议(也就是 HTTP/3 的底层)

为什么要这么做呢?因为 TCP 协议栈实现在操作系统内核中,升级非常缓慢,且存在“首部阻塞”问题。QUIC 选择在 UDP 之上,在应用层自己实现了类似于 TCP 的可靠性机制和加密协议。这样既避开了 TCP 握手的多次往返延迟,又解决了 TCP 队头阻塞的问题,在高并发和移动互联网环境下,表现远超传统的 TCP。

所以,在做架构选型时,我们不能简单地说 TCP 好或 UDP 好,关键看业务对“可靠性”和“延迟”的容忍度。如果追求绝对数据一致,选 TCP;如果追求极速反馈且能接受少量丢包,或者想自行定制可靠性逻辑,UDP 配合应用层优化会是更好的选择。


最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册