UDP — 用户数据报协议

无连接、不可靠、保留消息边界的轻量传输层协议 / 传输层 / IP 协议号 17 / RFC 768

1. 协议定位

项目信息
所属层传输层
英文全称User Datagram Protocol
主要 RFCRFC 768(STD 6,1980)
端口用端口号标识会话(IP 协议号 17)
封装于IP(协议号 17)
典型应用DNS、DHCP、SNMP、TFTP、视频/语音、QUIC(HTTP/3)、游戏

2. 一句话理解

UDP 是"写好地址就丢出去的信封":不握手、不确认、不重传,发出去就不管是否到达。它只做两件事——加端口号把数据交给正确应用、保留消息边界让接收方一次收一整条。低开销、低延迟,代价是不可靠。

生活化类比

如果说 TCP 是打电话(要接通、要应答、要道别),那 UDP 就是往邮筒里塞明信片:写上地址一投就走,不打招呼、不等回执,也不知道对方收没收到。

但它有个 TCP 没有的好处:一张明信片就是完整的一条消息,不会出现"上半句在这张、下半句在那张"的情况——收信人拿到一张就是完整一张。快、简单、边界清楚,代价就是丢了也没人告诉你。

3. 它解决什么问题

为什么没有它,网络就"缺了一块":

  1. 极简低延迟:无建连/拆连/确认开销,单请求-单响应(如 DNS)最快。
  2. 保留消息边界:每 datagram 独立,应用一次 recv 正好一条,天然"不粘包"。
  3. 适合容忍丢包的场景:实时音视频丢一帧不影响整体,重传反而添乱。
  4. 广播/组播友好:无连接使其天然支持一对多。

4. 核心特征

  • 【头部极小】固定 8 字节头部:源端口/目的端口各 2 字节、长度 2 字节、校验和 2 字节,极致精简。
  • 【无连接不可靠】无连接、不可靠:不保证到达、有序、不重复;无流量/拥塞控制。
  • 【有边界】消息边界:与 TCP 字节流相反,datagram 是最小交付单位。
  • 【校验可选】校验和可选:IPv4 下校验和可置 0(不计算);IPv6 下必填。
  • 【尺寸上限】最大载荷:理论 65507 字节(65535−20IP−8UDP),超 MTU 由 IP 层分片(推荐应用层自切片)。

5. 与其他协议的关系

相关协议关系
TCP同层替代:可靠有序但重;UDP 不可靠但轻快
QUIC在 UDP 之上自建可靠+拥塞控制+加密,即 HTTP/3 传输
IPUDP 的承载(协议号 17)
DNS/DHCP典型 UDP 应用,靠自身重试保证关键交互

6. 本目录学习路线

  1. 01-原理与报文 — UDP 头部逐字段、伪首部校验和、无连接交互时序、MTU 分片与最大载荷、知识框架。
  2. 02-实战与排错 — Wireshark udp 抓包、应用层重传/超时设计、udp 丢包与截断排查、与 TCP 对比与面试速查。

初学者最常踩的坑:以为"最大载荷 65507,那我一次发 60KB 就行"。超过链路 MTU 的 datagram 会由 IP 层分片,任意一片丢失整条 datagram 都失败,实际可靠性会断崖式下跌——所以推荐应用层自己把单包切小。另一个坑是反过来担心 UDP"粘包":UDP 天生保留消息边界,一次 recv 正好一条,真出现拼接那是应用自己拼的。