UDP is a no-frills, bare-bones transport protocol.

UDP

全称是用户数据报文协议(User Datagram Protocol, UDP)。

「三无产品」UDP:

  • 尽力交付(best-effort delivery)服务:直接转手丢给网络层 IP 协议,不搞花里胡哨;可能丢包,交付顺序紊乱
  • 无连接(connectionless)传输:发送与接收方间不握手;每个 UDP 数据段独立处理,互不依赖
  • 无流控制(flow control)
  • 无拥塞控制(congestion control)

UDP 的优势?

  • 应用层的精细控制(finer application-level control over what data is sent, and when):UDP 能够做到低延迟的发送,令其适用于对即时性(real-time)有要求的应用
  • 无需维护连接状态(connection states):服务器能够维护的 UDP 连接数量多于 TCP 连接数量
  • 消息头开销低(smaller header):一个 TCP 段有 20 字节的头开销;而 UDP 段仅有 8 字节
UDP 与可靠数据传输

快速 UDP 网络连接(Quick UDP Internet Connections, QUIC)协议使用 UDP,并在应用层中实现了可靠数据传输机制。这样它既能享受 UDP 的低延迟与无发送速率约束,又能保证通信的可靠。

UDP 段格式

头:四个 fields,每个占 2 字节

  • 源端口号
  • 目的端口号
  • 长度 length
  • 校验和 checksum

消息内容

注意,源主机 IP 地址与目的主机 IP 地址均包含在 IP 头中。

校验和

校验和用于检测传输过程中可能发生的位错误(bit errors)。

发送方:

  • 把整段按 16 位分成若干 words
  • 所有 words 按位相加,把溢出加到最低位(wrap around the overflow)
  • 计算得到的和取反码(1s complement)作为校验和,放入段头

接收方(校验方):

  • 把整段按 16 位分成若干 words
  • 所有 words 按位相加,把溢出加到最低位
    • 若和为全 1,校验成功,无位错误
    • 若和中出现 0,校验失败,发生位错误