Appearance
UDP 协议简介
小刘,我们从工程视角来聊一聊 UDP(User Datagram Protocol),它在网络世界里是一个简单、直接、速度优先的角色。
UDP 位于 OSI 第四层(传输层),与 TCP 同级,但设计哲学几乎相反:
TCP 追求“可靠、完整、有序”,UDP 追求“快、轻、少约束”。

一、UDP 是什么
UDP 是一种无连接的传输层协议。
“无连接”不是说不能通信,而是通信前不建立连接、不维护状态。
换句话说,UDP 更像是“寄信”:
- 写好内容
- 塞进信封
- 投递出去
- 至于对方是否收到、什么时候收到、顺序是否正确 —— 不关心
二、UDP 的核心特征
1. 无连接
UDP 不需要三次握手,也没有连接建立和释放过程。
只要知道对方 IP 和端口,就可以直接发送数据。
这意味着:
- 启动快
- 延迟低
- 协议状态极少
2. 不保证可靠性
UDP 不保证:
- 数据一定到达
- 数据只到达一次
- 数据按顺序到达
协议本身:
- 不重传
- 不确认(ACK)
- 不做流量控制
- 不做拥塞控制
可靠性完全交给上层应用处理。
3. 面向报文
UDP 是**面向报文(message-oriented)**的协议。
发送端发一个 datagram:
- 接收端要么完整收到
- 要么直接丢弃
- 不存在 TCP 那种“半包 / 粘包”语义
这点在工程上非常重要。
4. 协议头部极小
UDP 头部只有 8 个字节:
| 字段 | 长度 |
|---|---|
| 源端口 | 2 字节 |
| 目的端口 | 2 字节 |
| 长度 | 2 字节 |
| 校验和 | 2 字节 |
对比 TCP 至少 20 字节起步,UDP 的“轻量”非常明显。
三、UDP 的优势
从系统和性能角度看,UDP 的优势集中在三点:
低延迟
- 无连接
- 无确认
- 无重传等待
低开销
- 协议头小
- 状态管理少
- 内核负担轻
可控性强
- 应用层可以自定义:
- 重传策略
- 顺序控制
- 拥塞控制
- 加密与校验
- 应用层可以自定义:
这也是很多高性能系统选择 UDP 的原因。
四、UDP 的劣势
当然,代价也很明显:
- 丢包是常态
- 乱序是可能的
- 重复包也存在
- 网络拥塞时不“自我约束”
如果上层什么都不做,UDP 就只是“尽力而为”。
所以 UDP 不适合:
- 文件传输(直接用)
- 强一致性数据同步
- 对可靠性极端敏感的场景
五、典型应用场景
UDP 特别适合“可以容忍少量丢失,但不能接受高延迟”的场景:
- DNS 查询
- 实时音视频(RTP / WebRTC)
- 在线游戏
- 日志、监控、埋点上报
- 内网高性能通信
- 自定义传输协议(如 QUIC)
值得一提的是:
QUIC = UDP + 用户态实现的可靠传输,这本身就是对 UDP 能力的最好背书。
六、UDP 与 TCP 的对比简述
| 对比项 | UDP | TCP |
|---|---|---|
| 是否连接 | 否 | 是 |
| 是否可靠 | 否 | 是 |
| 顺序保证 | 否 | 是 |
| 拥塞控制 | 否 | 是 |
| 延迟 | 低 | 相对较高 |
| 复杂度 | 低 | 高 |
UDP 和 TCP 并不是“谁更高级”,而是设计目标不同。
七、工程实践中的一句话总结
小刘,如果用一句工程化的话来总结 UDP:
UDP 提供的是“传输能力”,而不是“传输保证”。
是否可靠、是否有序、是否安全,
完全取决于你在应用层愿意付出多少设计成本。
当你追求极致性能、低延迟、强可控性时,
UDP 往往是那个值得认真对待的底座协议。