UDP 和 TCP 的区别,为什么游戏可以使用 UDP?
1 个回答
有些东西不需要答案,态度就是答案。千道流## 一、UDP 和 TCP 的核心区别 | 对比项 | TCP | UDP | | ---------- | ------------------------ | ------------------------ | | **是否面向连接** | 面向连接(需三次握手) | 无连接(直接发数据) | | **可靠性** | 可靠传输(序列号、ACK、重传、流量/拥塞控制) | 不可靠传输(可能丢包、乱序、重复) | | **传输顺序** | 保证顺序 | 不保证顺序 | | **传输方式** | 面向字节流(无边界,应用层需自己分包) | 面向报文(有边界,一次发送一次接收) | | **开销** | 大(TCP 头 20 字节 + 控制机制) | 小(UDP 头 8 字节) | | **速度** | 相对较慢(握手、确认、重传) | 快(无握手、无确认) | | **适用场景** | 对可靠性要求高的,如文件传输、邮件、网页 | 对实时性要求高的,如视频会议、语音通话、网络游戏 | ## 二、为什么游戏可以使用 UDP ### 1. **实时性优先于可靠性** * 游戏(尤其是 FPS、MOBA 等实时互动类)需要 **低延迟**(几十毫秒级响应)。 * TCP 虽可靠,但: * 丢一个包会触发重传 → 延迟明显增加 * 流量控制/拥塞控制会限制发送速度 * UDP 不管丢包,能立即发送下一帧数据,延迟低。 ### 2. **部分数据丢失不影响游戏体验** * 游戏数据包很多是**状态更新**(如角色位置、动作),不是必须 100% 到达。 * 丢了 1\~2 帧位置包,下一个包会带最新状态,画面可能会“瞬移”一下,但不会卡死。 ### 3. **可自定义可靠性机制** * 虽然 UDP 本身不可靠,但游戏协议可以**在应用层自己实现需要的可靠性**: * 对关键操作包(如“发射子弹”事件) → 加序列号 + ACK 重发 * 对普通状态包(如位置同步) → 丢了就算了 * 这样既保留了 UDP 的低延迟,又能保证关键数据不丢。 ### 4. **更小的协议开销** * UDP 头部仅 8 字节,比 TCP 少很多字段。 * 减少带宽占用,在大规模并发游戏中更节省资源。 ## 三、总结一句话回答(面试速答版) > UDP 无连接、不可靠但延迟低、开销小,适合实时性高的场景;游戏中大部分数据是实时状态更新,丢一部分不会影响整体体验,同时可在应用层补充关键数据的可靠传输,所以很多实时游戏使用 UDP 而不是 TCP。发布于 2025-08-10 22:44 •IP属地 西藏举报评论收藏
公众号进入网站体验更佳

