概念
用户数据报协议(英语:User Datagram Protocol,缩写:UDP;又称用户数据包协议)是一个简单的面向数据报的通信协议
UDP 协议的特点
无连接
发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延
支持一对一、一对多、多对一和多对多的交互通信
面向报文
发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界
使用尽最大努力交付
不保证可靠交付,主机不需要维持复杂的连接状态表
没有拥塞控制
网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的
首部开销小
只有8个字节,比 TCP 的20个字节的首部要短
UDP 报文格式
源端口
源端口号,在需要对方回信时。不需要时可用全0
目的端口
目的端口号,在终点交付报文时必须使用
长度
UDP 用户数据报的长度,其最小值是8(仅有首部)
校验和
校验 UDP 用户数据报在传输中是否有错。有错就丢弃
伪首部
UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和
存在问题
某些实时应用需要使用没有拥塞控制的 UDP,但很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,导致大家都无法正常接收。
还有一些使用 UDP 的实时应用,需要对 UDP 的不可靠传输进行适当的改进,以减少数据的丢失。应用进程可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文