自学教程 从零学编程

UDP 协议

一、UDP 是什么

UDP(User Datagram Protocol,用户数据报协议),属于传输层协议,基于IP协议。
无连接、不可靠传输、面向报文。

一句话概括:发完就不管,不握手,不重传,不等待确认。
端口:和TCP一样,使用端口号区分主机上不同应用进程。

二、UDP 核心特点

  1. 无连接
    通信前不需要像TCP一样三次握手建立连接;发送方直接把数据报丢给IP层发送,不需要预先协商。
  2. 不可靠
    没有ACK确认应答、没有超时重传。数据包丢了就丢了,UDP不会重试。
  3. 面向报文
    应用层交给UDP多大的报文,UDP就原样打包发送,不会拆包粘包。接收方一次读取一个完整报文。

对比TCP:TCP面向字节流,存在粘包拆包。

  1. 没有流量控制、没有拥塞控制
    发送方想发多快就发多快,网络拥塞、接收缓冲区满时,报文直接丢弃。
  2. 头部开销极小
    UDP头部固定仅8字节,相比TCP最小20字节,开销很小。

三、UDP报文头部结构

UDP头部只有4个字段,总共8字节:

  • 源端口:发送进程端口
  • 目标端口:接收进程端口
  • 长度:UDP头部 + 数据的总字节长度
  • 校验和:校验头部+数据,检测传输错误;校验失败直接丢弃报文,不重传

没有序列号、ACK、窗口等复杂字段。

四、适用场景(重点考点)

适合允许少量丢包,但要求低延迟的场景:

  1. DNS:域名解析,默认UDP 53端口;单次查询报文短,丢包可以上层重试
  2. DHCP:动态获取IP
  3. 音视频通话、直播(RTP):视频音频丢一点点包,人眼感知不明显,但不能卡顿等待重传
  4. 游戏实时对战:FPS、MOBA类,优先低延迟
  5. TFTP:简单文件传输协议

一句话记忆:对实时性要求高,可以丢少量数据,选用UDP;要求数据完整不丢失,选用TCP。

五、UDP 和 TCP 对比

对比项TCPUDP
连接面向连接(三次握手)无连接
可靠性可靠传输(ACK、重传、有序)不可靠,丢包不重传
传输单位字节流,有粘包拆包数据报,无粘包拆包
头部大小最小20字节固定8字节
控制机制流量控制、拥塞控制无
适用场景文件传输、网页、SSH、邮件DNS、音视频、直播、游戏

六、UDP的优缺点

✅ 优点

  1. 无需握手,通信延迟低;
  2. 头部极小,网络开销小;
  3. 无拥塞、流量控制,发送效率高;
  4. 支持一对多广播、多播。

❌ 缺点

  1. 不保证送达,报文可能丢失;
  2. 不保证顺序,报文可能乱序到达;
  3. 没有重传机制;
  4. 容易造成网络拥塞(应用层疯狂发包)。

七、补充:UDP如何实现可靠传输?

UDP本身不可靠,如果业务需要可靠,必须在应用层自己实现:

  • 自定义序列号、ACK确认
  • 超时重传
  • 丢包检测、乱序重组

典型例子:QUIC协议(HTTP/3底层),在UDP之上实现了类似TCP的可靠传输,同时保留UDP低延迟优势。

八、小结

  1. UDP传输层协议,无连接、不可靠、面向报文;头部固定8字节;
  2. 没有握手、ACK、重传、流量/拥塞控制;
  3. 适合低延迟优先、少量丢包可接受场景:DNS、音视频、游戏;
  4. 面向报文,不存在TCP那种粘包拆包;
  5. 想要可靠,需要应用层自己实现(QUIC)。

思考题:DNS查询为什么优先选择UDP而不是TCP?

标签:

0 条笔记