用户数据报协议(UDP):从零开始认识它 – wiki基地

用户数据报协议 (UDP):从零开始认识它

用户数据报协议(User Datagram Protocol, UDP)是互联网协议套件(通常称为 TCP/IP 协议族)中的核心成员之一。与广为人知的传输控制协议(TCP)不同,UDP 提供了一种简单、无连接、不可靠的传输服务。它在许多网络应用中扮演着关键角色,尤其是在那些对速度和效率要求高于可靠性的场景。

1. UDP 的核心特性

UDP 的设计哲学是“尽力而为”(best-effort),这意味着它不提供以下保证:

  • 无连接 (Connectionless):在发送数据之前,UDP 不需要建立连接。每个数据报都是独立发送的,不维护任何会话状态。这使得 UDP 的开销非常低。
  • 不可靠 (Unreliable):UDP 不保证数据报的到达顺序、不保证数据报的完整性(可能丢失、重复或乱序),也不提供重传机制。数据报一旦发送,UDP 就不再关心它是否到达目的地。
  • 无序性 (No Ordering):UDP 数据报可能以与发送顺序不同的顺序到达接收端。
  • 无拥塞控制 (No Congestion Control):UDP 不提供任何拥塞控制机制。这意味着如果网络拥塞,UDP 会继续发送数据,可能加剧拥塞。
  • 数据报边界保持 (Datagram Preservation):UDP 在发送和接收时都会保留消息的边界。发送方发送一个数据报,接收方就接收一个数据报,而不会将其分割或合并。

2. UDP 报头结构

UDP 报头非常简单,只有四个字段,每个字段占 2 字节(16 位),总共 8 字节。

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源端口号 | 目的端口号 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 长度 | 校验和 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据 (Data) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  • 源端口号 (Source Port):发送进程的端口号。这是一个可选字段,当它不使用时,值为 0。
  • 目的端口号 (Destination Port):接收进程的端口号。这是必填字段,用于标识接收数据报的应用程序。
  • 长度 (Length):UDP 报头和数据部分的字节总长度。最小值为 8 字节(仅报头)。
  • 校验和 (Checksum):用于检测数据在传输过程中是否发生错误。这是一个可选字段,但通常会被使用。如果未使用,则值为 0。

3. UDP 的使用场景

尽管 UDP 不提供可靠性,但其低延迟和高效率的特性使其在特定应用中不可替代:

  • 实时应用 (Real-time Applications)
    • 在线游戏 (Online Gaming):游戏数据包需要快速传输,即使少量丢包也可以通过客户端预测或快速更新来弥补,而不是等待重传导致延迟。
    • 实时音视频通话 (Voice and Video Chat):如 VoIP、视频会议。偶尔的丢包可能导致瞬间的音质或画质下降,但重传旧数据会导致更大的延迟,影响实时体验。
    • 流媒体 (Streaming Media):与实时音视频类似,追求流畅播放而非严格的数据完整性。
  • DNS (Domain Name System):域名解析请求通常很小且需要快速响应。UDP 的无连接特性减少了握手延迟。如果 DNS 请求失败,客户端通常会简单地重试。
  • SNMP (Simple Network Management Protocol):用于网络设备的管理和监控。SNMP 消息通常很小,即使丢失,管理站也可以重新发送请求。
  • DHCP (Dynamic Host Configuration Protocol):用于为网络设备分配 IP 地址。
  • RPC (Remote Procedure Call):某些 RPC 实现会选择在 UDP 上运行以获得更高性能。
  • 基于 UDP 的新协议:例如 QUIC(Quick UDP Internet Connections),Google 开发的旨在提供比 TCP 更快的连接建立和更好的拥塞控制的传输协议,它运行在 UDP 之上。

4. UDP 与 TCP 的对比

理解 UDP 最好是将其与 TCP 进行比较:

特性 UDP TCP
连接性 无连接 面向连接(需要三次握手建立连接)
可靠性 不可靠(无确认、重传、乱序问题) 可靠(有确认、重传、序号保证顺序)
效率/速度 高(报头小,无额外机制) 相对低(报头大,有大量额外机制)
传输方式 数据报 字节流
拥塞控制 有(流量控制、拥塞控制)
首部大小 8 字节 20-60 字节
应用场景 实时应用、DNS、流媒体、在线游戏 网页浏览、文件传输、电子邮件、SSH

总结

UDP 因其简洁、高效和低延迟的特点,在当今的网络世界中占据着不可或缺的地位。尽管它牺牲了可靠性,但对于那些能够自行处理可靠性或本身对可靠性要求不高的应用来说,UDP 提供了一个高性能的传输层选择。了解 UDP 的工作原理和适用场景,是深入理解网络通信的关键一步。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部