跳到主要内容

UDP

2024年04月07日
柏拉文
越努力,越幸运

一、认识


用户数据协议 UDP(User Datagram Protocol)--提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

  • UDP 是无连接的;
  • UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
  • UDP 是面向报文的;
  • UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);
  • UDP 支持一对一、一对多、多对一和多对多的交互通信;
  • UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

UDP 在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。

二、UDP 粘包


2.1 UDP为什么不会粘包

  • 因为UDP是面向消息的协议,UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据
  • UDP具有保护消息边界,在每个UDP包中有消息头(消息来源地址,端口信息等),这样对于接收端来说容易进行分区处理。传输协议把数据当作一条独立的消息在网上传输,接收方只能接收独立的消息,如果消息内容过大,超过接收方一次所能接受的大小,就会丢失一部分数据,因为就算是丢失,它也不会分两次去接收

三、UDP 可靠性


3.1 UDP 为什么不可靠

  • 传输数据之前不需要先建立连接
  • 不保证消息交付,远程主机的传输层在接收到UDP报文后,不需要确认
  • 不保证将会顺序,不设置包序号、不重排、不会发生队首阻塞
  • 不进行拥塞控制,没有内置反馈机制,不重传、无超时