UDP
UDP(User Datagram Protocol)是 TCP/IP 中与 TCP 并列的传输层协议,采用无连接、尽力交付的通信模型。
无连接与尽力交付
UDP 不建立连接,直接把数据报发往目标地址,也不保证对方是否收到、是否重复、是否有序。这使得它的开销极小,延迟低,适合对实时性要求高、能容忍少量丢包的场景。
首部结构(8 字节)
UDP 首部非常简洁,固定仅 8 字节:
| 字段 | 长度 | 含义 |
|---|---|---|
| Source Port | 2 字节 | 源端口,可选,某些响应场景可为 0 |
| Destination Port | 2 字节 | 目标端口 |
| Length | 2 字节 | 首部 + 数据的总长度 |
| Checksum | 2 字节 | 校验和,可选但建议启用 |
由于没有序号、确认、窗口等字段,UDP 协议本身的处理逻辑几乎只覆盖端口复用与校验。
与 TCP 的对比
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接,三次握手 | 无连接 |
| 可靠性 | 序号/ACK/重传 | 不保证 |
| 顺序 | 严格按序重组 | 可能乱序 |
| 流量控制 | 滑动窗口 | 无 |
| 拥塞控制 | 有 | 无 |
| 首部开销 | 20 字节起 | 8 字节 |
| 传输效率 | 相对低 | 高 |
| 适用场景 | 文件、网页、邮件 | 实时音视频、游戏、DNS |
简单来说,TCP 用 可靠性 换 延迟与复杂度,UDP 用 不确定性 换 速度与简洁。
适用场景
- DNS:查询报文小,一次往返即可,使用 UDP 53 端口;响应超过 512 字节或区域传送则改用 TCP。
- 视频流与直播:RTMP、HLS 等实时音视频应用。
- 在线游戏:需要极低延迟,偶尔丢包可由应用层补偿。
- VoIP(网络电话):语音对延迟敏感,丢包可由前向纠错掩盖。
- IoT 与监控:SNMP、syslog 等轻量协议。
QUIC 简介
QUIC(Quick UDP Internet Connections)是 Google 提出并被 IETF 标准化的传输层协议(主要实现在 HTTP/3 中)。它在 UDP 之上重新设计了可靠传输:
- 集成 TLS 1.3,握手只需 1-RTT 甚至 0-RTT。
- 多路复用消除队头阻塞(独立流)。
- 自带加密、流控、连接迁移(支持 IP 变更)。
- 通过 UDP 443 穿透,绕过中间盒对 TCP 的限制。
QUIC 把 UDP 的灵活性与 TCP 风格的有序可靠传输结合,代表了现代传输协议的发展方向。