UDP协议概述

UDP协议简介

UDP全称用户数据报协议,是一种不可靠的、无连接的、面向报文的服务。UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及查错检测的功能。其中数据报指的就是应用层所传输过来的一个完整的数据,UDP不会对这个完整的数据进行处理,不会进行拆分,也不会进行合并了再传输。从数据报的定义可以看出,UDP协议的数据长度,主要由应用层传输的数据长度所决定的,应用层传的数据越长,UDP数据报文就越长。
UDP协议 - 图1

UDP协议的特点

  • UDP 是无连接的,即发送数据之前不需要建立连接,减少了开销和发送数据之前的时延
  • UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表
  • UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层,UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界
  • UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要的
  • UDP 支持一对一、一对多、多对一和多对多的交互通信
  • UDP 的首部开销小,只有8个字节,比 TCP 的20个字节的首部要短

UDP协议同样也会存在一些问题:

  • 某些实时应用需要使用没有拥塞控制的 UDP,但很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,导致大家都无法正常接收。
  • 还有一些使用 UDP 的实时应用,需要对 UDP 的不可靠传输进行适当的改进,以减少数据的丢失。应用进程可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文

    UDP报文

    UDP协议 - 图2
    UDP报文的构成比较简单,主要由源端口号+目的端口号+UDP数据长度+UDP校验和这四个部分构成报文首部,而其中的UDP数据就是应用层传递给UDP的数据了。其报文字段的含义如下:

  • 源端口号:发送该报文的应用程序所占用的端口号

  • 目的端口号:目的端口号就是接收该UDP报文的主机上面的端口
  • UDP长度:指的就是该UDP数据报的长度(该长度包括UDP数据)
  • UDP校验和:检测UDP的用户数据报在传输中是否出错
  • UDP数据:实际要发的数据,是用户的应用层数据

UDP协议 - 图3
当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的应用进程,也就是前面的多路分解:
image.png

注意: 如果接受方 UDP 发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用程序),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方。