极高 基础
TCP与UDP区别#
一句话答案#
TCP 面向连接可靠有序(三次握手/重传/流控),UDP 无连接不可靠但快速轻量,适合实时音视频/DNS。
核心要点
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手建立,四次挥手释放) | 无连接(直接发送) |
| 可靠性 | 可靠(ACK 确认、重传、有序交付) | 不可靠(尽力而为,不保证到达/顺序) |
| 传输方式 | 字节流(无消息边界) | 数据报(有消息边界,保留边界) |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有(慢启动、拥塞避免等) | 无 |
| 头部大小 | 20~60 字节(较大) | 8 字节(固定,极小) |
| 速度 | 慢(建立连接 + 各种控制机制) | 快(无连接、无控制) |
| 适用场景 | HTTP/HTTPS、FTP、数据库连接 | DNS、视频直播、在线游戏、QUIC |
记忆要点:
- TCP = 打电话(先拨号建立连接,说完话挂断)→ 可靠但慢
- UDP = 发短信/广播(直接发,不管对方收没收到)→ 快但不可靠
UDP 适用场景的选择原因:
- 视频直播/语音通话:允许少量丢包(画面模糊比卡顿好),实时性 > 可靠性
- DNS:查询响应小且快,超时了重发一次即可,无需 TCP 的连接开销
- 游戏:网络游戏位置同步,最新数据覆盖旧数据,中间帧丢了没关系
面试回答(2分钟版)
TCP和UDP是传输层两个核心协议,最根本的区别在于TCP面向连接、可靠传输,UDP无连接、尽力而为。TCP在通信前需要三次握手建立连接,传输过程中通过ACK确认、超时重传、滑动窗口流控和拥塞控制保证数据可靠有序到达,头部20到60字节,代价是延迟较高。UDP不需要建立连接,头部只有8个字节,没有流控和拥塞控制,发完就走不管对方收没收到,所以速度快延迟低。选型上,HTTP、FTP、数据库连接这类对可靠性要求高的场景用TCP;视频直播和语音通话允许少量丢包,实时性比可靠性重要,用UDP;DNS查询报文小且快,超时重发即可,也用UDP。另外QUIC协议基于UDP实现了类似TCP的可靠传输,同时避免了TCP的队头阻塞问题,HTTP/3就是基于QUIC。所以不能说UDP没用,很多高性能场景反而首选UDP。
追问与易错
追问方向:
- “UDP 也能做到可靠传输吗?怎么做?”→ 可以在应用层实现可靠性:加序列号 + ACK 确认 + 超时重传 + 滑动窗口,QUIC 和 KCP 就是基于 UDP 的可靠传输协议
- “什么场景用 UDP?”→ 实时音视频(允许少量丢包)、DNS 查询(报文小且快)、在线游戏(最新状态覆盖旧数据)、IoT 设备(资源受限)
- “QUIC 协议了解吗?”→ Google 设计的基于 UDP 的可靠传输协议,HTTP/3 的底层,每个 Stream 独立不互相阻塞,支持 0-RTT 建连和连接迁移
易错点:
- ❌ UDP 不可靠所以没用——游戏/视频/DNS 广泛使用
- ❌ TCP 一定比 UDP 慢——延迟敏感场景 UDP 更好