UDP — 用户数据报协议
无连接、不可靠、保留消息边界的轻量传输层协议 / 传输层 / IP 协议号 17 / RFC 768
Table of Contents
1. 协议定位
| 项目 | 信息 |
|---|---|
| 所属层 | 传输层 |
| 英文全称 | User Datagram Protocol |
| 主要 RFC | RFC 768(STD 6,1980) |
| 端口 | 用端口号标识会话(IP 协议号 17) |
| 封装于 | IP(协议号 17) |
| 典型应用 | DNS、DHCP、SNMP、TFTP、视频/语音、QUIC(HTTP/3)、游戏 |
2. 一句话理解
UDP 是"写好地址就丢出去的信封":不握手、不确认、不重传,发出去就不管是否到达。它只做两件事——加端口号把数据交给正确应用、保留消息边界让接收方一次收一整条。低开销、低延迟,代价是不可靠。
生活化类比
如果说 TCP 是打电话(要接通、要应答、要道别),那 UDP 就是往邮筒里塞明信片:写上地址一投就走,不打招呼、不等回执,也不知道对方收没收到。
但它有个 TCP 没有的好处:一张明信片就是完整的一条消息,不会出现"上半句在这张、下半句在那张"的情况——收信人拿到一张就是完整一张。快、简单、边界清楚,代价就是丢了也没人告诉你。
3. 它解决什么问题
为什么没有它,网络就"缺了一块":
- 极简低延迟:无建连/拆连/确认开销,单请求-单响应(如 DNS)最快。
- 保留消息边界:每 datagram 独立,应用一次 recv 正好一条,天然"不粘包"。
- 适合容忍丢包的场景:实时音视频丢一帧不影响整体,重传反而添乱。
- 广播/组播友好:无连接使其天然支持一对多。
4. 核心特征
- 【头部极小】固定 8 字节头部:源端口/目的端口各 2 字节、长度 2 字节、校验和 2 字节,极致精简。
- 【无连接不可靠】无连接、不可靠:不保证到达、有序、不重复;无流量/拥塞控制。
- 【有边界】消息边界:与 TCP 字节流相反,datagram 是最小交付单位。
- 【校验可选】校验和可选:IPv4 下校验和可置 0(不计算);IPv6 下必填。
- 【尺寸上限】最大载荷:理论 65507 字节(65535−20IP−8UDP),超 MTU 由 IP 层分片(推荐应用层自切片)。
5. 与其他协议的关系
| 相关协议 | 关系 |
|---|---|
| TCP | 同层替代:可靠有序但重;UDP 不可靠但轻快 |
| QUIC | 在 UDP 之上自建可靠+拥塞控制+加密,即 HTTP/3 传输 |
| IP | UDP 的承载(协议号 17) |
| DNS/DHCP | 典型 UDP 应用,靠自身重试保证关键交互 |
6. 本目录学习路线
- 01-原理与报文 — UDP 头部逐字段、伪首部校验和、无连接交互时序、MTU 分片与最大载荷、知识框架。
- 02-实战与排错 — Wireshark
udp抓包、应用层重传/超时设计、udp丢包与截断排查、与 TCP 对比与面试速查。
初学者最常踩的坑:以为"最大载荷 65507,那我一次发 60KB 就行"。超过链路 MTU 的 datagram 会由 IP 层分片,任意一片丢失整条 datagram 都失败,实际可靠性会断崖式下跌——所以推荐应用层自己把单包切小。另一个坑是反过来担心 UDP"粘包":UDP 天生保留消息边界,一次 recv 正好一条,真出现拼接那是应用自己拼的。