概念

用户数据报协议(UDP,User Datagram Protocol)
UDP只在IP的数据报服务之上增加了很少的功能,就是复用和分用的功能以及差错检测的功能,主要特点如下:

  1. UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延
  2. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态
  3. UDP是面向报文的。即应用层下来的报文,添加首部后就向下交付IP层,对应用层下来的报文既不合并也不拆分。对于IP层上传的报文,去除首部就原封不动的上交给应用层
  4. UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用很重要,例如IP电话,视频会议等,要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。
  5. UDP支持一对一、一对多、多对一和多对多的通信
  6. UDP首部开销小,只有8字节,比TCP的20字节的首部要短

UDP帧结构

  • 源端口:源端口号。在需要对方回信时选用。不需要时可用全0。

  • 目的端口:目的端口号。这在终点交付报文时必须要使用到。

  • 长度:UDP用户数据报的长度,其最小值是8(仅有首部),发送一个带0字节数据的UDP数据报是允许的。

  • 伪首部
    在UDP伪首部中,包含32位源IP地址,32位目的IP地址,8位填充0,8位协议,16位UDP长度。伪首部并非TCP&UDP数据报中实际的有效成分。伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和

    伪头部的目的是让UDP层验证数据是否已经到达正确的目的地(即该IP没有接受地址错误的数据报,也没有给UDP一个本该其他传输协议的数据报),计算UDP校验和时包含了伪头部以及UDP头部和负载。

  • 校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃。方法如下:

    UDP计算校验和的方法和计算IP数据报首部校验和的方法相似。但不同的是:IP数据报的校验和只检验IP数据报的首部,但UDP的校验和是将首部和数据部分一起都检验。

    首先是将全零放入校验和字段。再将伪首部以及UDP用户数据报看是由许多16位的字串。若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(此字节不发送)。 然后按二进制反码计算出这些16位字的和。该结果的反码即为校验和。

    如果校验和字段值为0x0000表示发送方没有计算校验和。

    下图给出一个例子,假定UDP长度未15字节,因此要添加一个全0字节