UDP


UDP

设计哲学: 只做传输协议能做的最少工作。只在IP的数据报服务上增加复用和分用以及差错检测的功能
优点

  1. 无需建立连接
  2. 无连接状态
  3. 分组首部开销小,仅有8字节开销
  4. UDP没有拥塞控制。拥塞也不会影响主机的发送效率,能够容忍一些数据的丢失,但不允许有较大的延迟
  5. 适用于一次性传输比较少了的数据的网络应用。如DNS、SNMP
  6. UDP提供尽最大努力交付。不保证可靠交付
  7. 面向报文

首部格式

  1. 源端口
  2. 目的端口
  3. 长度
  4. 校验和

UDP校验

在计算校验和时,在UDP数据报前增加12字节的伪首部。
伪首部由 源IP地址 目的IP地址、0字段、协议字段(UDP为17)、UDP数据报长度
伪首部仅仅只用来做校验和,不向下传送也不向上传递。

  1. UDP校验和校验出UDP数据报是错误的时候,可以丢弃,也可以交付给上层,但需要附上错误报告
  2. 通过伪首部,可以检查源端口号、目的端口号和UDP用户数据报的数据部分。还可以检查IP数据报的源IP地址和目的地址

可靠性UDP

实现可靠传输一般有两种途径,一是基于ARQ(Automatic Repeat reQuest)的确认和重传机制,二是使用前向纠错(FEC)。

  • FEC:是纠删码在通信中的应用,一般在链路层用的比较多。可靠UDP传输主要还是依靠重传机制。

  • ARQ:
    ARQ包括停等式、回退N帧、选择重传等机制。由于停等式的效率太低,TCP和可靠UDP协议一般使用的是基于回退N帧机制和滑动窗口协议的连续式ARQ。

可靠UDP协议

  • UDT(UDP-based Data Transfer Protocol):DT的主要目的是支持高速广域网上的海量数据传输,所以除了在UDP之上实现类似TCP的协议和算法之外,UDT还对TCP的拥塞算法做了一些细节上的调整。不过UDT的重传效率较低,无效报文,实际效果并不理想。
  • KCP:KCP是一个很简单的ARQ的实现,包括选择重传和快重传等机制,对上层提供一个可靠的字节流。应用层可以使用多流复用的框架来实现对多个流的支持
  • QUIC:QUIC是Google实现的一种可靠UDP传输协议,并且已经被选择作为HTTP/3的基础。
    • 内建安全性,集成TLS
    • 连接建立过程和TLS协商过程合并,减少往返请求次数,提高连接速度
    • 集成多种拥塞算法,包括最新的BBR
    • 多流支持,每个流有独立的拥塞控制,避免单个流中的丢包阻塞其它所有流(Head-of-line Blocking问题),更好的支持类似HTTP/2中的乱序请求
    • 连接迁移:QUIC可以通过连接ID来唯一标识一个连接,当用户在有线、无线、移动网络之间切换时,可以保持上层连接的有效性,不需要再进行重连

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录