Skip to content

UDP 协议简介

小刘,我们从工程视角来聊一聊 UDP(User Datagram Protocol),它在网络世界里是一个简单、直接、速度优先的角色。

UDP 位于 OSI 第四层(传输层),与 TCP 同级,但设计哲学几乎相反:
TCP 追求“可靠、完整、有序”,UDP 追求“快、轻、少约束”。

alt text


一、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 的优势集中在三点:

  1. 低延迟

    • 无连接
    • 无确认
    • 无重传等待
  2. 低开销

    • 协议头小
    • 状态管理少
    • 内核负担轻
  3. 可控性强

    • 应用层可以自定义:
      • 重传策略
      • 顺序控制
      • 拥塞控制
      • 加密与校验

这也是很多高性能系统选择 UDP 的原因。


四、UDP 的劣势

当然,代价也很明显:

  • 丢包是常态
  • 乱序是可能的
  • 重复包也存在
  • 网络拥塞时不“自我约束”

如果上层什么都不做,UDP 就只是“尽力而为”。

所以 UDP 不适合

  • 文件传输(直接用)
  • 强一致性数据同步
  • 对可靠性极端敏感的场景

五、典型应用场景

UDP 特别适合“可以容忍少量丢失,但不能接受高延迟”的场景:

  • DNS 查询
  • 实时音视频(RTP / WebRTC)
  • 在线游戏
  • 日志、监控、埋点上报
  • 内网高性能通信
  • 自定义传输协议(如 QUIC)

值得一提的是:
QUIC = UDP + 用户态实现的可靠传输,这本身就是对 UDP 能力的最好背书。


六、UDP 与 TCP 的对比简述

对比项UDPTCP
是否连接
是否可靠
顺序保证
拥塞控制
延迟相对较高
复杂度

UDP 和 TCP 并不是“谁更高级”,而是设计目标不同


七、工程实践中的一句话总结

小刘,如果用一句工程化的话来总结 UDP:

UDP 提供的是“传输能力”,而不是“传输保证”。

是否可靠、是否有序、是否安全,
完全取决于你在应用层愿意付出多少设计成本。

当你追求极致性能、低延迟、强可控性时,
UDP 往往是那个值得认真对待的底座协议。

最近更新