一、UDP 是什么
UDP(User Datagram Protocol,用户数据报协议),属于传输层协议,基于IP协议。
无连接、不可靠传输、面向报文。
一句话概括:发完就不管,不握手,不重传,不等待确认。
端口:和TCP一样,使用端口号区分主机上不同应用进程。
二、UDP 核心特点
- 无连接
通信前不需要像TCP一样三次握手建立连接;发送方直接把数据报丢给IP层发送,不需要预先协商。 - 不可靠
没有ACK确认应答、没有超时重传。数据包丢了就丢了,UDP不会重试。 - 面向报文
应用层交给UDP多大的报文,UDP就原样打包发送,不会拆包粘包。接收方一次读取一个完整报文。
对比TCP:TCP面向字节流,存在粘包拆包。
- 没有流量控制、没有拥塞控制
发送方想发多快就发多快,网络拥塞、接收缓冲区满时,报文直接丢弃。 - 头部开销极小
UDP头部固定仅8字节,相比TCP最小20字节,开销很小。
三、UDP报文头部结构
UDP头部只有4个字段,总共8字节:
- 源端口:发送进程端口
- 目标端口:接收进程端口
- 长度:UDP头部 + 数据的总字节长度
- 校验和:校验头部+数据,检测传输错误;校验失败直接丢弃报文,不重传
没有序列号、ACK、窗口等复杂字段。
四、适用场景(重点考点)
适合允许少量丢包,但要求低延迟的场景:
- DNS:域名解析,默认UDP 53端口;单次查询报文短,丢包可以上层重试
- DHCP:动态获取IP
- 音视频通话、直播(RTP):视频音频丢一点点包,人眼感知不明显,但不能卡顿等待重传
- 游戏实时对战:FPS、MOBA类,优先低延迟
- TFTP:简单文件传输协议
一句话记忆:对实时性要求高,可以丢少量数据,选用UDP;要求数据完整不丢失,选用TCP。
五、UDP 和 TCP 对比
| 对比项 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠传输(ACK、重传、有序) | 不可靠,丢包不重传 |
| 传输单位 | 字节流,有粘包拆包 | 数据报,无粘包拆包 |
| 头部大小 | 最小20字节 | 固定8字节 |
| 控制机制 | 流量控制、拥塞控制 | 无 |
| 适用场景 | 文件传输、网页、SSH、邮件 | DNS、音视频、直播、游戏 |
六、UDP的优缺点
✅ 优点
- 无需握手,通信延迟低;
- 头部极小,网络开销小;
- 无拥塞、流量控制,发送效率高;
- 支持一对多广播、多播。
❌ 缺点
- 不保证送达,报文可能丢失;
- 不保证顺序,报文可能乱序到达;
- 没有重传机制;
- 容易造成网络拥塞(应用层疯狂发包)。
七、补充:UDP如何实现可靠传输?
UDP本身不可靠,如果业务需要可靠,必须在应用层自己实现:
- 自定义序列号、ACK确认
- 超时重传
- 丢包检测、乱序重组
典型例子:QUIC协议(HTTP/3底层),在UDP之上实现了类似TCP的可靠传输,同时保留UDP低延迟优势。
八、小结
- UDP传输层协议,无连接、不可靠、面向报文;头部固定8字节;
- 没有握手、ACK、重传、流量/拥塞控制;
- 适合低延迟优先、少量丢包可接受场景:DNS、音视频、游戏;
- 面向报文,不存在TCP那种粘包拆包;
- 想要可靠,需要应用层自己实现(QUIC)。
思考题:DNS查询为什么优先选择UDP而不是TCP?
0 条笔记