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,校验失败,发生位错误